Files
drinking-game/style.css
gongch 6d1dd5d56c Initial commit: 酒桌派对 / 大话骰 multiplayer drinking-game hub
- server.py: zero-dependency stdlib backend (HTTP + WebSocket /ws), 大话骰 rule engine, server-driven bots
- live.html: real MVP frontend wired to the backend over WebSocket
- index.html/app.js/style.css: older static prototype
- deploy/: systemd unit + Nginx reverse proxy + Let's Encrypt setup.sh
- test_*.py: standalone HTTP / in-process test scripts

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 10:05:10 +08:00

1 line
7.8 KiB
CSS

:root{color-scheme:dark;--bg:#090711;--panel:rgba(255,255,255,.08);--panel2:rgba(255,255,255,.13);--text:#fff7ed;--muted:rgba(255,247,237,.66);--line:rgba(255,255,255,.13);--orange:#ff8a2a;--gold:#ffd166;--rose:#ff4d6d;--green:#43e97b;--blue:#38bdf8}*{box-sizing:border-box}body{margin:0;min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","Segoe UI",sans-serif;background:radial-gradient(circle at 18% 0%,rgba(255,138,42,.35),transparent 34%),radial-gradient(circle at 100% 12%,rgba(255,77,109,.28),transparent 30%),linear-gradient(180deg,#120b20 0%,#090711 48%,#050409 100%);color:var(--text)}button,input,select{font:inherit}.app-shell{width:min(100%,460px);margin:0 auto;padding:14px 14px 92px}.app-top,.brand,.input-row,.quick-actions,.section-head,.room-card,.bottom-nav,.room-actions,.game-actions{display:flex;align-items:center}.app-top{position:sticky;top:0;z-index:5;justify-content:space-between;padding:8px 0 14px;background:linear-gradient(180deg,rgba(18,11,32,.94),rgba(18,11,32,.72),transparent);backdrop-filter:blur(12px)}.brand{gap:10px}.logo{width:42px;height:42px;display:grid;place-items:center;border-radius:16px;background:rgba(255,255,255,.13);font-size:23px}.brand strong{display:block}.brand small,.eyebrow,.lead,.game-card p,.room-card p{color:var(--muted)}.screen{display:none;opacity:1}.screen.active{display:block;opacity:1}@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.hero-card,.room-section,.panel,.room-hero,.result-card{border:1px solid var(--line);background:linear-gradient(145deg,rgba(255,255,255,.14),rgba(255,255,255,.05));border-radius:30px;box-shadow:0 24px 80px rgba(0,0,0,.35);backdrop-filter:blur(18px)}.hero-card{min-height:390px;padding:22px;display:flex;flex-direction:column;justify-content:flex-end;overflow:hidden;position:relative}.hero-card:before{content:"";position:absolute;inset:-70px -100px auto auto;width:260px;height:260px;border-radius:50%;background:radial-gradient(circle,rgba(255,209,102,.35),transparent 68%)}.hero-card>*{position:relative}.eyebrow{margin:0 0 8px;text-transform:uppercase;letter-spacing:.12em;font-size:11px;font-weight:900}h1,h2,h3,p{margin-top:0}h1{margin-bottom:14px;font-size:43px;line-height:1.02;letter-spacing:-.06em}h2{margin-bottom:0;font-size:24px;letter-spacing:-.04em}h3{margin-bottom:6px}.lead{line-height:1.7}.join-panel{padding:14px;border:1px solid var(--line);border-radius:24px;background:rgba(0,0,0,.25)}.join-panel label{display:block;margin:0 0 8px 4px;color:var(--muted);font-size:13px}.input-row{gap:10px}input,select{min-width:0;width:100%;height:48px;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.08);padding:0 15px;color:var(--text);outline:none}select{appearance:none}.settings{display:grid;gap:12px}.settings label{display:grid;gap:8px;color:var(--muted);font-size:13px}button{border:0;color:#1b1005;font-weight:900;border-radius:999px;background:linear-gradient(135deg,var(--gold),var(--orange));padding:12px 16px;box-shadow:0 10px 24px rgba(255,138,42,.22)}.ghost-btn,.icon-btn{background:rgba(255,255,255,.11);color:var(--text);box-shadow:none;border:1px solid var(--line)}.small{padding:10px 13px}.icon-btn{width:42px;height:42px;padding:0;font-size:30px}.wide{width:100%;margin-top:12px}.quick-actions{gap:10px;padding:14px 0 8px;overflow:auto}.quick-actions button{white-space:nowrap;background:var(--panel);color:var(--text);box-shadow:none;border:1px solid var(--line)}.quick-actions .primary-action,.primary-action{background:linear-gradient(135deg,var(--gold),var(--orange));color:#1b1005}.section-head{justify-content:space-between;gap:12px;padding:18px 2px 12px}.compact{padding:0 0 14px}.online-pill{padding:8px 12px;border-radius:999px;color:#07120c;background:linear-gradient(135deg,#a7f3d0,var(--green));font-size:12px;font-weight:900}.game-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.game-card{min-height:210px;padding:16px;border:1px solid var(--line);border-radius:26px;background:var(--panel);display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}.game-card:after{content:"";position:absolute;width:110px;height:110px;right:-30px;top:-30px;border-radius:50%;opacity:.36;background:var(--accent)}.game-icon{font-size:36px}.game-card p{font-size:13px;line-height:1.55}.meta{display:flex;gap:6px;flex-wrap:wrap}.meta span{padding:6px 8px;border-radius:999px;background:rgba(255,255,255,.1);font-size:11px;color:rgba(255,255,255,.76);font-weight:800}.room-section,.panel,.room-hero{margin-top:16px;padding:16px}.room-hero{padding:22px}.room-list,.players{display:grid;gap:10px}.room-card{justify-content:space-between;gap:10px;padding:14px;border-radius:20px;background:rgba(0,0,0,.22);border:1px solid var(--line)}.room-card h3{font-size:15px}.room-card p{margin:0;font-size:12px}.room-card button{padding:10px 14px}.players{grid-template-columns:1fr 1fr}.player{padding:13px;border:1px solid var(--line);border-radius:20px;background:rgba(0,0,0,.2)}.avatar{font-size:24px}.player strong{display:block;margin-top:8px}.player span{font-size:12px;color:var(--muted)}.game-header{padding:18px 4px}.board{padding:18px;border:1px solid var(--line);border-radius:30px;background:linear-gradient(145deg,rgba(255,255,255,.14),rgba(255,255,255,.05))}.dice-row,.card-row{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin:20px 0}.die,.play-card{display:grid;place-items:center;width:58px;height:58px;border-radius:18px;background:rgba(255,255,255,.12);border:1px solid var(--line);font-size:30px}.play-card{width:64px;height:92px;border-radius:14px;background:#fff;color:#111;font-weight:900}.play-card.red{color:#d11}.call-box{padding:16px;border-radius:22px;background:rgba(0,0,0,.24);text-align:center}.call-box strong{font-size:34px}.action-dock{position:fixed;left:50%;bottom:86px;transform:translateX(-50%);width:min(calc(100% - 28px),432px);display:grid;grid-template-columns:1fr 1fr;gap:10px}.result-card{text-align:center;margin-top:28px;padding:28px 18px}.trophy{font-size:72px}.punish{margin:18px 0;padding:16px;border-radius:24px;background:rgba(255,138,42,.16);border:1px solid rgba(255,209,102,.24)}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.stats div{text-align:center;padding:18px;border-radius:22px;background:rgba(0,0,0,.22)}.stats strong{display:block;font-size:32px}.stats span{color:var(--muted);font-size:12px}.bottom-nav{position:fixed;left:50%;bottom:14px;transform:translateX(-50%);width:min(calc(100% - 28px),432px);padding:8px;justify-content:space-around;border:1px solid var(--line);border-radius:24px;background:rgba(18,11,32,.86);backdrop-filter:blur(18px);box-shadow:0 14px 40px rgba(0,0,0,.45);z-index:10}.bottom-nav a{flex:1;text-align:center;padding:11px 0;border-radius:18px;color:var(--muted);font-size:13px;font-weight:900}.bottom-nav a.active{background:rgba(255,255,255,.12);color:var(--text)}.modal{position:fixed;inset:0;display:none;place-items:end center;background:rgba(0,0,0,.48);z-index:20;padding:14px}.modal.show{display:grid}.modal-card{width:min(100%,432px);border:1px solid var(--line);border-radius:30px;padding:20px;background:#151020;box-shadow:0 24px 80px rgba(0,0,0,.6);position:relative}.close{position:absolute;right:14px;top:14px;width:36px;height:36px;padding:0;background:rgba(255,255,255,.1);color:var(--text);box-shadow:none}.modal-actions{display:grid;gap:10px;margin-top:14px}.toast{position:fixed;top:78px;left:50%;transform:translateX(-50%) translateY(-16px);opacity:0;z-index:30;padding:10px 14px;border-radius:999px;background:#fff;color:#111;font-weight:900;transition:.2s}.toast.show{opacity:1;transform:translateX(-50%)}@media(min-width:860px){.app-shell{width:min(100%,1040px)}h1{font-size:58px}.game-grid{grid-template-columns:repeat(4,1fr)}.room-list{grid-template-columns:repeat(3,1fr)}.bottom-nav{display:none}.action-dock{position:static;transform:none;width:100%;margin-top:14px;grid-template-columns:repeat(4,1fr)}}