:root{--bg:#14121f;--surface:#1e1b2e;--surface-2:#2a2640;--border:#3a3556;--text:#ece9f5;--text-dim:#a39fb8;--accent:#a78bfa;--accent-dim:rgba(167,139,250,0.4);--gold:#f5c542;--danger:#f87171;--suit-R:#ef4444;--suit-Y:#eab308;--suit-G:#22c55e;--suit-B:#3b82f6;--wizard:#c084fc;--jester:#94a3b8}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}body,html{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;overscroll-behavior:none;-webkit-text-size-adjust:100%}body,button,html{-webkit-user-select:none;-moz-user-select:none;user-select:none}button{font-family:inherit}.shell{min-height:100dvh;display:flex;flex-direction:column;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);max-width:520px;margin:0 auto}.landing{flex:1 1;display:flex;flex-direction:column;justify-content:center;gap:22px;padding:24px;text-align:center}.landing h1{font-size:34px;margin:0;letter-spacing:-.5px}.landing p{color:var(--text-dim);margin:0;line-height:1.5}.logo{font-size:56px;line-height:1}.field{display:flex;flex-direction:column;gap:10px}input[type=text]{background:var(--surface);border:1px solid var(--border);border-radius:14px;color:var(--text);font-size:17px;padding:14px 16px;outline:none;text-align:center;-webkit-user-select:text;-moz-user-select:text;user-select:text}input[type=text]:focus{border-color:var(--accent)}.btn{border:none;border-radius:14px;padding:15px 18px;font-size:17px;font-weight:600;cursor:pointer;transition:transform .05s ease,opacity .15s ease}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.45}.btn-primary{background:var(--accent);color:#1b0f3a}.btn-ghost{background:var(--surface-2);color:var(--text)}.btn-danger{background:#3a1d24;color:#f8a3a3;border:1px solid #5b2330}.error-text{color:var(--danger);font-size:14px}.room-list{display:flex;flex-direction:column;gap:10px}.room-row{display:flex;gap:8px;align-items:stretch}.room-row .room-open{flex:1 1;text-align:left;display:flex;flex-direction:column;align-items:flex-start;gap:3px}.room-names{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.room-meta{font-size:12px;font-weight:400;color:var(--text-dim)}.join-divider{text-align:center;font-size:13px;color:var(--text-dim);position:relative}.invite-box{background:var(--surface);border:1px dashed var(--border);border-radius:16px;padding:16px;display:flex;flex-direction:column;gap:10px;text-align:center}.invite-box p{margin:0;color:var(--text-dim);font-size:14px}.invite-code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace;font-size:32px;font-weight:800;letter-spacing:6px;padding:14px 10px 14px 16px;color:var(--text);background:var(--surface-2);border:1px solid var(--border);border-radius:12px;-moz-user-select:all;user-select:all;-webkit-user-select:all}.room-del{background:var(--surface);border:1px solid var(--border);color:var(--text-dim);border-radius:14px;width:48px;font-size:15px;cursor:pointer}.table{flex:1 1;display:flex;flex-direction:column;gap:10px;padding:8px 10px 16px}.roundbar{position:relative;gap:10px;flex-wrap:wrap;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:8px 76px 8px 44px;font-size:13px;color:var(--text-dim)}.roundbar,.roundbar-back{display:flex;align-items:center;justify-content:center}.roundbar-back{position:absolute;left:8px;top:50%;transform:translateY(-50%);width:30px;height:30px;border-radius:50%;border:1px solid var(--border);background:var(--surface-2);color:var(--text);font-size:22px;line-height:1;font-weight:700;text-decoration:none;padding-bottom:3px}.roundbar-back:active{transform:translateY(-50%) scale(.92)}.lobby-back{align-self:flex-start;color:var(--text-dim);text-decoration:none;font-size:15px;padding:2px 0}.lobby-section{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--text-dim);margin:8px 0 -2px;padding-left:2px}.roundbar-actions{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:flex;gap:6px}.rb-btn{width:28px;height:28px;border-radius:50%;border:1px solid var(--border);background:var(--surface-2);color:var(--text);font-size:14px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}.rb-btn.rb-info{font-family:Georgia,Times New Roman,serif;font-style:italic;font-weight:700;font-size:15px}.rb-btn:active{transform:scale(.92)}.help-card{text-align:left}.help-card h2{text-align:center}.rules{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:11px}.rules li{font-size:14px;line-height:1.45;color:var(--text-dim)}.rules b{color:var(--text)}.r-card{display:inline-flex;align-items:center;justify-content:center;width:22px;height:30px;border-radius:5px;font-size:14px;margin-right:7px;vertical-align:middle;color:#fff}.r-card.wizard{background:linear-gradient(150deg,#4c1d95,#7c3aed)}.r-card.jester{background:linear-gradient(150deg,#475569,#64748b)}.r-card.dragon{background:linear-gradient(150deg,#7f1d1d,#dc2626)}.r-card.fairy{background:linear-gradient(150deg,#9d174d,#ec4899)}.r-card.bomb{background:linear-gradient(150deg,#111827,#374151)}.r-card.shapeshifter{background:linear-gradient(150deg,#134e4a,#0d9488)}.r-card.cloud{background:linear-gradient(150deg,#64748b,#cbd5e1)}.r-card.werewolf{background:linear-gradient(150deg,#1f2937,#78716c)}.r-card.jongleur{background:linear-gradient(150deg,#4c1d95,#f59e0b)}.bot-ico{font-size:14px;width:18px;text-align:center;flex:none}.roster-del{margin-left:auto;background:none;border:none;color:var(--text-dim);font-size:15px;cursor:pointer;padding:4px 8px}.pchip .bot-mini{font-size:12px;line-height:1;flex:none}.score-chart{display:flex;flex-direction:column;gap:10px}.chart-legend{display:flex;flex-wrap:wrap;gap:6px 14px;justify-content:center;font-size:13px}.legend-item{display:inline-flex;align-items:center;gap:5px;color:var(--text-dim)}.legend-item b{color:var(--text);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.legend-item i{width:14px;height:3px;border-radius:2px;display:inline-block}.roundbar strong,.trump-chip{color:var(--text);font-weight:700}.trump-chip{display:inline-flex;align-items:center;gap:6px}.trump-swatch{width:14px;height:14px;border-radius:4px;display:inline-block}.player-strip{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}.pchip{flex:1 1;min-width:88px;max-width:160px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:7px 8px;display:flex;flex-direction:column;gap:2px;text-align:center}.pchip.on-turn{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent-dim),0 0 14px var(--accent-dim)}.pchip.is-me{background:var(--surface-2)}.pchip .pname{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;justify-content:center;gap:5px}.pchip .pname .dot{width:8px;height:8px;border-radius:50%;background:#5a5570;flex:none}.pchip .pname .dot.online{background:var(--accent);box-shadow:0 0 0 0 var(--accent-dim);animation:pulse-online 1.6s infinite}.pchip .pbid{font-size:13px;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;color:var(--text)}.pchip .pbid .made{color:var(--accent)}.pchip .pbid .missed{color:var(--danger)}.pchip .pbid .pending{color:var(--text-dim);font-weight:400}.pchip .ptotal{font-size:12px;color:var(--text-dim);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.pchip .dealer-tag{font-size:10px;color:var(--gold);font-weight:700}@keyframes pulse-online{0%{box-shadow:0 0 0 0 rgba(167,139,250,.6)}70%{box-shadow:0 0 0 6px rgba(167,139,250,0)}to{box-shadow:0 0 0 0 rgba(167,139,250,0)}}.trick-area{flex:1 1;min-height:104px;display:flex;flex-wrap:wrap;align-content:center;align-items:center;justify-content:center;gap:8px;background:radial-gradient(ellipse at center,rgba(167,139,250,.07),transparent 70%);border-radius:18px;padding:12px}.trick-empty{color:var(--text-dim);font-size:14px;text-align:center}.trick-slot{display:flex;flex-direction:column;align-items:center;gap:4px}.trick-slot .who{font-size:11px;color:var(--text-dim);max-width:60px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.trick-slot.winning .card{box-shadow:0 0 0 2px var(--gold),0 6px 16px rgba(0,0,0,.4)}.trick-slot.winning .who{color:var(--gold);font-weight:700}.trick-slot.voided .card{opacity:.5}.trick-voided{width:100%;text-align:center;font-size:14px;font-weight:700;color:var(--text-dim);margin-bottom:4px}.card{width:52px;height:74px;border-radius:9px;background:#f5f2ea;color:#1a1a22;position:relative;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 8px rgba(0,0,0,.35);border:1.5px solid rgba(0,0,0,.15);font-weight:800;flex:none;overflow:hidden}.card .rank{font-size:24px;line-height:1;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.card .corner{position:absolute;font-size:11px;font-weight:800;line-height:1}.card .corner.tl{top:4px;left:5px}.card .corner.br{bottom:4px;right:5px;transform:rotate(180deg)}.card.suit-R{color:var(--suit-R)}.card.suit-Y{color:#b88a06}.card.suit-G{color:#1a8f43}.card.suit-B{color:var(--suit-B)}.card.suit-B .bar,.card.suit-G .bar,.card.suit-R .bar,.card.suit-Y .bar{position:absolute;left:0;right:0;top:0;height:6px}.card.suit-R .bar{background:var(--suit-R)}.card.suit-Y .bar{background:var(--suit-Y)}.card.suit-G .bar{background:var(--suit-G)}.card.suit-B .bar{background:var(--suit-B)}.card.wizard{background:linear-gradient(150deg,#4c1d95,#7c3aed 55%,#c084fc);color:#fff;border-color:rgba(255,255,255,.25)}.card.jester{background:linear-gradient(150deg,#475569,#64748b 60%,#94a3b8);color:#fff;border-color:rgba(255,255,255,.2)}.card.dragon{background:linear-gradient(150deg,#7f1d1d,#dc2626 55%,#f59e0b)}.card.dragon,.card.fairy{color:#fff;border-color:rgba(255,255,255,.3)}.card.fairy{background:linear-gradient(150deg,#9d174d,#ec4899 55%,#f9a8d4)}.card.bomb{background:linear-gradient(150deg,#111827,#374151 60%,#6b7280)}.card.bomb,.card.shapeshifter{color:#fff;border-color:rgba(255,255,255,.25)}.card.shapeshifter{background:linear-gradient(150deg,#134e4a,#0d9488 55%,#5eead4)}.card.cloud{background:linear-gradient(150deg,#64748b,#94a3b8 50%,#cbd5e1);color:#1e293b;border-color:rgba(255,255,255,.3)}.card.werewolf{background:linear-gradient(150deg,#1f2937,#4b5563 60%,#78716c)}.card.jongleur,.card.werewolf{color:#fff;border-color:rgba(255,255,255,.25)}.card.jongleur{background:linear-gradient(150deg,#4c1d95,#7c3aed 55%,#f59e0b)}.card.jongleur.j-R{background:linear-gradient(150deg,#7f1d1d,var(--suit-R) 70%)}.card.jongleur.j-Y{background:linear-gradient(150deg,#854d0e,var(--suit-Y) 70%);color:#1e293b}.card.jongleur.j-G{background:linear-gradient(150deg,#14532d,var(--suit-G) 70%)}.card.jongleur.j-B{background:linear-gradient(150deg,#1e3a8a,var(--suit-B) 70%)}.card .special-glyph{font-size:26px;line-height:1}.card .special-label{position:absolute;bottom:5px;left:0;right:0;text-align:center;font-size:8px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;opacity:.9}.card.lg{width:60px;height:84px}.card.lg .rank{font-size:28px}.card.back{background:repeating-linear-gradient(45deg,#3b2a6b,#3b2a6b 6px,#4c1d95 0,#4c1d95 12px);color:#fff;font-size:26px;font-weight:800;border-color:rgba(255,255,255,.25)}.card.placed{background:var(--surface-2);color:var(--text-dim);font-size:11px;font-weight:600}.forehead-band{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;align-items:flex-end;padding:10px 8px 6px}.fh-slot{display:flex;flex-direction:column;align-items:center;gap:4px}.fh-slot .who{font-size:11px;color:var(--text-dim);max-width:70px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hand-wrap{display:flex;flex-direction:column;gap:6px}.hand{display:flex;flex-wrap:wrap;justify-content:center;align-content:center;gap:6px 5px;padding:10px 8px 6px}.hand .card-btn{background:none;border:none;padding:0;cursor:pointer;transition:transform .12s ease;flex:none}.hand .card{width:46px;height:64px}.hand .card .rank{font-size:21px}.hand .card .special-glyph{font-size:22px}.hand .card .special-label{font-size:7px;bottom:4px}.hand .card-btn.playable{cursor:pointer}.hand .card-btn.playable:active,.hand .card-btn.playable:hover{transform:translateY(-12px);z-index:5}.hand .card-btn.dimmed{cursor:default}.hand .card-btn.dimmed .card{opacity:.4}.hand .card-btn.playable .card{box-shadow:0 0 0 2px var(--accent),0 6px 16px rgba(0,0,0,.45)}.hand .card-btn.selected{transform:translateY(-16px);z-index:6}.hand .card-btn.selected .card{box-shadow:0 0 0 3px var(--accent),0 10px 24px rgba(0,0,0,.55)}.bidpad{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;padding:4px 0 2px}.bidbtn{min-width:46px;height:46px;border-radius:12px;background:var(--surface-2);border:1px solid var(--border);color:var(--text);font-size:18px;font-weight:700;cursor:pointer}.bidbtn:active{transform:scale(.95)}.bidbtn.selected{background:var(--accent);color:#1b0f3a;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-dim)}.bidbtn:disabled{opacity:.3;cursor:default}.bidbtn .forbidden-x{font-size:12px;color:var(--danger)}.trump-chooser{display:flex;gap:10px;justify-content:center;padding:4px 0}.trump-opt{width:52px;height:52px;border-radius:12px;border:2px solid transparent;cursor:pointer;font-weight:800;color:#fff;font-size:15px}.trump-opt.R{background:var(--suit-R)}.trump-opt.Y{background:var(--suit-Y)}.trump-opt.G{background:var(--suit-G)}.trump-opt.B{background:var(--suit-B)}.trump-opt:active{transform:scale(.95)}.jug-chooser{display:flex;flex-direction:column;align-items:center;gap:6px}.jug-label{font-size:13px;font-weight:700;color:var(--text-dim)}.waiting-hint{font-size:14px}.statusbar,.waiting-hint{color:var(--text-dim);text-align:center}.statusbar{font-size:15px;min-height:22px;padding:2px 8px}.statusbar strong{color:var(--text)}.error-toast{color:var(--danger);font-size:14px;text-align:center;padding:4px 8px}.controls{flex-wrap:wrap;gap:12px}.controls,.waiting{display:flex;align-items:center;justify-content:center}.waiting{color:var(--text-dim);font-size:15px;gap:8px}.spinner{width:14px;height:14px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.lobby{flex:1 1;display:flex;flex-direction:column;gap:18px;padding:20px;justify-content:center}.lobby h1{font-size:26px}.lobby .sub,.lobby h1{margin:0;text-align:center}.lobby .sub{color:var(--text-dim);font-size:14px;line-height:1.5}.roster{display:flex;flex-direction:column;gap:8px}.roster-row{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px 14px;font-size:16px}.roster-row .seat{color:var(--text-dim);font-size:13px;width:22px}.roster-row .rname{flex:1 1;font-weight:600}.roster-row .you-tag{font-size:12px;color:var(--accent);font-weight:700}.roster-row .host-tag{font-size:11px;color:var(--gold);font-weight:700}.roster-row .dot{width:9px;height:9px;border-radius:50%;background:#5a5570}.roster-row .dot.online{background:var(--accent)}.toggle-row{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:12px 14px}.toggle-row .tlabel{font-size:14px}.toggle-row .thint{font-size:11px;color:var(--text-dim);line-height:1.4;margin-top:2px}.switch{position:relative;width:48px;height:28px;border-radius:14px;background:var(--surface-2);border:1px solid var(--border);cursor:pointer;flex:none;transition:background .15s ease}.switch.on{background:var(--accent)}.switch .knob{position:absolute;top:2px;left:2px;width:22px;height:22px;border-radius:50%;background:#fff;transition:transform .15s ease}.switch.on .knob{transform:translateX(20px)}.switch:disabled{opacity:.5;cursor:default}.share-box{background:var(--surface);border:1px dashed var(--border);border-radius:16px;padding:16px;display:flex;flex-direction:column;gap:12px;text-align:center}.share-box p{margin:0;color:var(--text-dim);font-size:14px;line-height:1.5}.overlay{position:fixed;inset:0;background:rgba(8,7,14,.8);display:flex;align-items:center;justify-content:center;z-index:50;padding:24px;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.overlay-card{background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:24px 22px;text-align:center;display:flex;flex-direction:column;gap:14px;width:100%;max-width:360px;max-height:86dvh;overflow-y:auto}.overlay-card .trophy{font-size:48px;line-height:1}.overlay-card h2{margin:0;font-size:22px}.overlay-card .detail{color:var(--text-dim);font-size:14px;margin:0;line-height:1.5}.scoretable{width:100%;border-collapse:collapse;font-size:14px}.scoretable td,.scoretable th{padding:7px 6px;text-align:center;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.scoretable td:first-child,.scoretable th:first-child{text-align:left}.scoretable thead th{font-size:13px;color:var(--text);border-bottom:1px solid var(--border)}.scoretable tbody tr:not(:last-child) td{border-bottom:1px solid rgba(255,255,255,.05)}.scoretable .pos{color:var(--accent);font-weight:700}.scoretable .neg{color:var(--danger);font-weight:700}.scoretable .leader td{color:var(--gold);font-weight:700}.chat-fab{position:fixed;right:14px;bottom:calc(env(safe-area-inset-bottom) + 14px);width:52px;height:52px;border-radius:50%;background:var(--surface-2);border:1px solid var(--border);font-size:22px;cursor:pointer;z-index:40;box-shadow:0 4px 12px rgba(0,0,0,.4)}.chat-badge{position:absolute;top:-4px;right:-4px;background:var(--danger);color:#fff;font-size:11px;font-weight:700;border-radius:10px;padding:1px 6px}.chat-overlay{align-items:flex-end;padding:0}.chat-sheet{background:var(--surface);border:1px solid var(--border);border-bottom:none;border-radius:20px 20px 0 0;width:100%;max-width:520px;margin:0 auto;height:min(70dvh,480px);display:flex;flex-direction:column;padding:12px 14px calc(env(safe-area-inset-bottom) + 10px)}.chat-head{display:flex;justify-content:space-between;align-items:center;font-weight:700;padding-bottom:8px}.chat-close{background:none;border:none;color:var(--text-dim);font-size:18px;cursor:pointer;padding:4px 8px}.chat-messages{flex:1 1;overflow-y:auto;display:flex;flex-direction:column;gap:6px;padding:4px 0}.chat-empty{color:var(--text-dim);font-size:13px;text-align:center;margin:auto;line-height:1.6}.chat-msg{max-width:80%;padding:7px 12px;border-radius:14px;font-size:15px;line-height:1.35;display:flex;flex-direction:column;gap:2px;word-break:break-word}.chat-msg.mine{align-self:flex-end;background:#3b2a6b;border-bottom-right-radius:4px}.chat-msg.theirs{align-self:flex-start;background:var(--surface-2);border-bottom-left-radius:4px}.chat-msg .chat-author{font-size:11px;color:var(--text-dim);font-weight:700}.chat-time{font-size:10px;color:var(--text-dim);align-self:flex-end}.chat-emoji-row{display:flex;gap:6px;justify-content:center;padding:8px 0 6px}.chat-emoji-row button{background:var(--surface-2);border:1px solid var(--border);border-radius:10px;font-size:18px;padding:6px 10px;cursor:pointer}.chat-inputrow{display:flex;gap:8px}.chat-inputrow input{flex:1 1;text-align:left;padding:12px 14px}.chat-send{padding:12px 18px}.text-link{background:none;border:none;color:var(--text-dim);font-size:13px;text-decoration:underline;cursor:pointer;padding:8px}.push-row{text-align:center}.push-hint{font-size:12px;color:var(--text-dim);display:inline-block;max-width:320px;line-height:1.5}