game4 / client / public / style.css
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
:root{
  --bg:#0d0a14; --panel:#171224ee; --line:#2c2140; --text:#e8dbc5; --dim:#8a7d99;
  --amber:#ffb347; --gold:#c9a86a; --ghost:#9fe8dc; --danger:#ff5b4d;
  --sat:env(safe-area-inset-top,0px); --sab:env(safe-area-inset-bottom,0px);
  --sal:env(safe-area-inset-left,0px); --sar:env(safe-area-inset-right,0px);
  --hud:46px;
}
*{margin:0;padding:0;box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
html,body{height:100%; overscroll-behavior:none}
body{
  position:fixed; inset:0; width:100%;
  background:var(--bg); color:var(--text); overflow:hidden;
  font-family:Georgia,'Iowan Old Style','Times New Roman',serif;
  -webkit-user-select:none; user-select:none; -webkit-touch-callout:none; touch-action:manipulation;
}
/* drifting candle-lit fog */
#fog{position:fixed; inset:-20%; pointer-events:none; z-index:0; opacity:.8;
  background:
    radial-gradient(38% 30% at 30% 72%, #ffb34712, transparent 70%),
    radial-gradient(45% 36% at 74% 24%, #9fe8dc0c, transparent 70%),
    radial-gradient(30% 26% at 60% 80%, #c9a86a10, transparent 70%);
  animation:fogdrift 26s ease-in-out infinite alternate}
@keyframes fogdrift{from{transform:translate3d(-2%,-1%,0) scale(1)}to{transform:translate3d(2%,2%,0) scale(1.06)}}
body::after{content:""; position:fixed; inset:0; pointer-events:none; z-index:1;
  background:radial-gradient(120% 90% at 50% 45%, transparent 55%, #05030a99 100%)}
/* top HUD */
#hud{position:fixed; top:0; left:0; right:0; height:calc(var(--hud) + var(--sat));
  padding:var(--sat) calc(12px + var(--sar)) 0 calc(12px + var(--sal));
  display:flex; align-items:center; gap:10px;
  background:linear-gradient(#171224,#171224cc); border-bottom:1px solid var(--line); z-index:5}
#logo{font-size:15px; letter-spacing:.34em; color:var(--amber); white-space:nowrap; padding-left:.3em;
  text-shadow:0 0 14px #ffb34766; animation:flicker 4.4s infinite}
@keyframes flicker{0%,100%{opacity:1}86%{opacity:1}88%{opacity:.72}90%{opacity:.96}93%{opacity:.8}95%{opacity:1}}
#chips{display:flex; gap:6px; flex:1; overflow-x:auto; scrollbar-width:none; -webkit-overflow-scrolling:touch}
#chips::-webkit-scrollbar{display:none}
.chip{display:flex; align-items:center; gap:5px; padding:3px 9px; border:1px solid var(--line); border-radius:20px;
  font-size:11px; white-space:nowrap; background:#0d0a14}
.chip .sg{font-size:13px}
.chip.me{border-color:#5a4a2f}
.chip.dead{opacity:.4}
.chip .sc{color:var(--gold); font-size:10px; letter-spacing:.06em}
#status{font-size:10px; color:var(--dim); white-space:nowrap; display:flex; align-items:center; gap:6px}
#statdot{width:8px; height:8px; border-radius:50%; background:#f43; box-shadow:0 0 8px #f43; flex:none}
#statdot.on{background:#ffb347; box-shadow:0 0 8px #ffb347}
button{
  font-family:inherit; font-size:13px; letter-spacing:.14em; color:var(--amber); background:#241a30;
  border:1px solid #4a3860; border-radius:8px; padding:10px 18px; cursor:pointer; text-transform:uppercase;
  -webkit-tap-highlight-color:transparent; touch-action:manipulation;
}
button:active{transform:translateY(1px)}
button:hover:not(:disabled){background:#31234a; box-shadow:0 0 16px #ffb34733}
button:disabled{opacity:.35; cursor:default}
button.big{font-size:15px; padding:14px 34px}
#copybtn{font-size:10px; padding:6px 10px}
/* stage + scenes */
#stage{position:fixed; inset:0; z-index:2;
  padding:calc(var(--hud) + var(--sat) + 10px) calc(12px + var(--sar)) calc(12px + var(--sab)) calc(12px + var(--sal));
  display:flex; align-items:stretch; justify-content:center}
.scene{width:100%; max-width:560px; display:flex; flex-direction:column; gap:12px; min-height:0}
#bellhead{display:flex; align-items:center; justify-content:space-between; gap:12px}
#belltitle{font-size:26px; letter-spacing:.3em; color:var(--gold); text-shadow:0 0 18px #c9a86a44}
#ring{width:64px; height:64px; border-radius:50%; flex:none;
  background:conic-gradient(var(--amber) 360deg, #2c2140 0deg);
  display:flex; align-items:center; justify-content:center; box-shadow:0 0 22px #ffb34722}
#ring::before{content:""; position:absolute; width:52px; height:52px; border-radius:50%; background:var(--bg)}
#ring.urgent{animation:pulse .5s infinite alternate}
@keyframes pulse{from{box-shadow:0 0 14px #ff5b4d33}to{box-shadow:0 0 30px #ff5b4d88}}
#ringnum{position:relative; font-size:22px; color:var(--text)}
.notice{background:#241a30dd; border:1px solid #4a3860; border-radius:10px; padding:11px 14px;
  font-size:13.5px; line-height:1.5; text-align:center; color:var(--ghost)}
.notice b{color:var(--amber)}
.notice.dim{color:var(--dim); border-color:var(--line); background:#171224aa; font-size:12px}
#roomcards,#revealcards{display:flex; flex-direction:column; gap:10px; flex:1; min-height:0; justify-content:center}
.room{display:flex; align-items:center; gap:14px; text-transform:none; letter-spacing:.04em;
  background:#171224; border:1px solid var(--line); border-radius:14px; padding:16px 18px;
  font-size:19px; color:var(--text); position:relative; overflow:hidden}
.room .ricon{font-size:30px; flex:none; width:40px; text-align:center}
.room .rname{flex:1; text-align:left}
.room .rpick{font-size:11px; color:var(--amber); letter-spacing:.14em; opacity:0; text-transform:uppercase}
.room.picked{border-color:var(--amber); background:#241a30; box-shadow:0 0 24px #ffb34733, inset 0 0 30px #ffb3470d}
.room.picked .rpick{opacity:1}
.room:disabled{opacity:.55}
/* reveal cards */
.room.rv{cursor:default; flex-direction:column; align-items:flex-start; gap:8px; padding:13px 16px}
.room.rv .rname{font-size:16px; color:var(--dim)}
.room.rv .ricon{position:absolute; right:12px; top:10px; width:auto}
.room.rv.haunted{border-color:var(--danger); background:#2a1220; animation:hauntflash .9s ease-out;
  box-shadow:0 0 34px #ff5b4d44, inset 0 0 40px #ff5b4d14}
@keyframes hauntflash{0%{background:#5a1a2a; box-shadow:0 0 60px #ff5b4dcc}100%{background:#2a1220}}
.occs{display:flex; flex-wrap:wrap; gap:6px}
.occ{font-size:12.5px; background:#0d0a14; border:1px solid var(--line); border-radius:16px; padding:3px 10px}
.occ.hit{border-color:var(--danger); color:#ffb4a8}
.occ.gone{opacity:.5; text-decoration:line-through}
.occ.none{color:var(--dim); border-style:dashed}
#hauntline{font-size:20px; text-align:center; color:var(--ghost); text-shadow:0 0 18px #9fe8dc44; padding-top:6px}
#hauntline b{color:var(--danger)}
/* overlays */
.overlay{position:fixed; inset:0; display:flex; align-items:center; justify-content:center; z-index:10;
  padding:calc(var(--sat) + 10px) calc(var(--sar) + 10px) calc(var(--sab) + 10px) calc(var(--sal) + 10px);
  background:#0d0a14c9; backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px)}
.overlay.soft{background:#0d0a1488; z-index:9}
.panel{background:var(--panel); border:1px solid var(--line); border-radius:14px; padding:26px 28px;
  display:flex; flex-direction:column; gap:15px; align-items:center; min-width:300px; max-width:100%;
  max-height:100%; overflow-y:auto; box-shadow:0 0 50px #ffb34714}
.title{font-size:34px; letter-spacing:.38em; color:var(--amber); padding-left:.38em;
  text-shadow:0 0 22px #ffb34788, 0 0 70px #ffb34733; animation:flicker 5.2s infinite}
.sub{font-size:11px; color:var(--dim); letter-spacing:.2em; text-transform:uppercase}
input#nick{
  font-family:inherit; font-size:16px; text-align:center; letter-spacing:.06em; color:var(--text);
  background:#0d0a14; border:1px solid #4a3860; border-radius:8px; padding:12px 14px; width:230px; outline:none;
}
input#nick:focus{border-color:var(--amber); box-shadow:0 0 14px #ffb34733}
#roster{display:flex; flex-direction:column; gap:6px; width:100%; max-height:32vh; overflow-y:auto}
.rrow{display:flex; align-items:center; gap:10px; font-size:14px; padding:8px 12px; background:#0d0a14;
  border:1px solid var(--line); border-radius:8px}
.rrow .sg{font-size:17px}
.rrow .wins{margin-left:auto; font-size:11px; color:var(--gold)}
.rrow .hostb{font-size:9px; color:var(--ghost); letter-spacing:.16em; border:1px solid #2c4a44;
  border-radius:10px; padding:2px 7px}
.legend{display:flex; gap:8px; flex-wrap:wrap; justify-content:center}
.legend span{font-size:12px; background:#0d0a14; border:1px solid var(--line); border-radius:16px; padding:5px 11px}
.hint{font-size:11px; color:var(--dim); text-align:center; line-height:1.85}
#bigmsg{font-size:min(40px,8.4vw); letter-spacing:.16em; text-shadow:0 0 30px currentColor; text-align:center}
#submsg{font-size:13.5px; color:var(--dim); letter-spacing:.08em; text-align:center; line-height:1.6}
.hidden{display:none !important}
/* boot splash: html.boot from first paint; main.ts drops it once the gate/auto-join decision lands */
html.boot #ovJoin{display:none !important}
html:not(.boot) #ovSplash{display:none !important}
html.boot .soc-joinchip{display:none !important}
#toast{position:fixed; bottom:calc(18px + var(--sab)); left:50%; transform:translateX(-50%);
  background:#241a30; border:1px solid #4a3860; max-width:90vw;
  color:var(--amber); font-size:12px; padding:9px 16px; border-radius:20px; z-index:20; letter-spacing:.04em;
  opacity:0; transition:opacity .3s; pointer-events:none; text-align:center}
@media (max-width:640px){ .title{font-size:26px} #logo{display:none} }
@media (max-height:620px){ .room{padding:10px 16px; font-size:16px} .room .ricon{font-size:22px} }

/* social-kit chrome adopts the game's palette */
:root{
  --soc-bg:#171224; --soc-fg:var(--text); --soc-dim:var(--dim);
  --soc-line:var(--line); --soc-accent:var(--amber);
}

static mirror of HEAD · about · clone: git clone https://git.ardegazu.ro/game4.git