:root{
  --bg:#071018;--bg2:#0b1622;--surface:#0f1c29;--surface2:#132334;--line:rgba(255,255,255,.08);
  --text:#f4f8ff;--muted:#8fa4bb;--accent:#58d5ff;--accent2:#6d7cff;--good:#45d69b;--warn:#ffc15f;--bad:#ff6f78;
  --card:#f8fbff;--ink:#0b1017;--radius:22px;--shadow:0 18px 50px rgba(0,0,0,.35);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{background:var(--bg)}
body{margin:0;min-height:100dvh;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--text);background:
radial-gradient(900px 480px at 10% -10%,rgba(88,213,255,.11),transparent 60%),radial-gradient(700px 420px at 100% 0,rgba(109,124,255,.12),transparent 55%),linear-gradient(180deg,var(--bg2),var(--bg));}
button,input{font:inherit}.hidden{display:none!important}.app-shell{min-height:100dvh;padding-bottom:calc(112px + env(safe-area-inset-bottom))}
.appbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;padding:12px max(14px,env(safe-area-inset-left));padding-right:max(14px,env(safe-area-inset-right));background:rgba(7,16,24,.82);backdrop-filter:blur(18px);border-bottom:1px solid var(--line)}
.brand-btn{display:flex;gap:10px;align-items:center;border:0;background:none;color:inherit;padding:0;text-align:left}.brand-mark{width:40px;height:40px;display:grid;place-items:center;border-radius:14px;background:linear-gradient(135deg,rgba(88,213,255,.18),rgba(109,124,255,.2));border:1px solid rgba(88,213,255,.18);font-size:19px}.brand-copy{display:flex;flex-direction:column}.brand-copy strong{font-size:15px;letter-spacing:.1px}.brand-copy small{font-size:11px;color:var(--muted);margin-top:2px}.appbar-actions{display:flex;gap:8px}.icon-btn{width:42px;height:42px;border-radius:14px;border:1px solid var(--line);background:rgba(255,255,255,.05);color:var(--text);font-weight:800;font-size:18px}.icon-btn:disabled{opacity:.35}.icon-btn.small{width:38px;height:38px;font-size:22px}
main{width:min(760px,100%);margin:0 auto}.view{padding:18px 14px}.setup-view{padding-top:34px}.setup-hero{padding:12px 5px 26px}.eyebrow{display:block;font-size:10px;font-weight:800;letter-spacing:1.5px;color:var(--accent);text-transform:uppercase}.setup-hero h1,.turn-card h1{margin:8px 0 10px;letter-spacing:-1.2px}.setup-hero h1{font-size:clamp(38px,11vw,58px);line-height:.98}.setup-hero p{margin:0;color:var(--muted);font-size:15px;line-height:1.6;max-width:610px}
.surface{background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.028));border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.setup-card,.turn-card,.roster-card,.lane-card,.game-complete{padding:18px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:14px}.section-heading.compact{margin-bottom:12px}.section-heading h2{margin:4px 0 0;font-size:20px;letter-spacing:-.35px}.count-pill,.frame-badge{display:grid;place-items:center;border:1px solid var(--line);background:rgba(255,255,255,.05);font-weight:800}.count-pill{min-width:34px;height:34px;padding:0 9px;border-radius:12px}.player-entry{display:grid;grid-template-columns:1fr auto;gap:9px}.text-input{width:100%;border:1px solid var(--line);background:rgba(0,0,0,.18);color:var(--text);border-radius:15px;padding:14px 14px;outline:none}.text-input:focus{border-color:rgba(88,213,255,.45);box-shadow:0 0 0 3px rgba(88,213,255,.08)}
.btn{border:1px solid var(--line);border-radius:15px;padding:12px 15px;background:rgba(255,255,255,.06);color:var(--text);font-weight:800}.btn.primary{background:linear-gradient(135deg,#3caeea,#6472ff);border-color:transparent;box-shadow:0 10px 28px rgba(68,134,255,.24)}.btn.secondary{background:rgba(88,213,255,.11);border-color:rgba(88,213,255,.2)}.btn.ghost{background:rgba(255,255,255,.045)}.btn.danger{background:rgba(255,111,120,.13);border-color:rgba(255,111,120,.26);color:#ffd7da}.btn.xl{min-height:54px;font-size:15px}.btn.full{width:100%}.btn:disabled{opacity:.4}.setup-player-list{display:flex;flex-direction:column;gap:8px;margin:14px 0}.setup-player{display:flex;align-items:center;justify-content:space-between;padding:12px 13px;border-radius:15px;background:rgba(255,255,255,.035);border:1px solid var(--line)}.setup-player strong{font-size:14px}.remove-player{border:0;background:none;color:var(--muted);font-size:20px}.microcopy{font-size:12px;color:var(--muted);line-height:1.45;margin:12px 2px 0}
.game-view{display:flex;flex-direction:column;gap:12px}.turn-card{position:relative;overflow:hidden}.turn-card:before{content:"";position:absolute;width:220px;height:220px;border-radius:50%;background:rgba(88,213,255,.08);filter:blur(20px);right:-110px;top:-100px}.turn-topline{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;position:relative}.turn-card h1{font-size:34px;line-height:1;margin-bottom:0}.frame-badge{width:52px;height:52px;border-radius:17px;font-size:22px;color:var(--accent)}.turn-helper{position:relative;margin:10px 0 18px;color:var(--muted);font-size:13px}.hand-summary-row{position:relative;display:flex;align-items:end;justify-content:space-between;gap:12px;margin-bottom:12px}.hand-summary-row .label{display:block;font-size:9px;letter-spacing:1.4px;color:var(--muted);font-weight:800}.hand-summary-row strong{display:block;margin-top:3px;font-size:14px}.hand-count{font-size:12px;color:var(--muted);font-weight:700}.active-hand{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 4px;scrollbar-width:none}.active-hand::-webkit-scrollbar,.player-strip::-webkit-scrollbar{display:none}
.playing-card{flex:0 0 61px;width:61px;height:86px;border-radius:12px;background:linear-gradient(180deg,#fff,#eef3f8);color:var(--ink);position:relative;box-shadow:0 8px 20px rgba(0,0,0,.28);border:1px solid rgba(0,0,0,.08);user-select:none}.playing-card.large{flex-basis:68px;width:68px;height:96px}.playing-card.suggested{outline:3px solid var(--good);outline-offset:2px;transform:translateY(-2px)}.playing-card.clickable{cursor:pointer}.playing-card.dead{opacity:.58;filter:saturate(.6)}.corner{position:absolute;left:7px;top:6px;font-size:13px;font-weight:900;line-height:1}.corner.bottom{left:auto;top:auto;right:7px;bottom:6px;transform:rotate(180deg)}.center-pip{position:absolute;inset:0;display:grid;place-items:center;font-size:30px}.red{color:#d63846}.black{color:#10151b}.empty-hand{width:100%;min-height:86px;border:1px dashed rgba(255,255,255,.12);border-radius:14px;display:grid;place-items:center;color:var(--muted);font-size:12px}
.strategy-card{width:100%;display:grid;grid-template-columns:42px 1fr auto;gap:12px;align-items:center;padding:14px 15px;text-align:left;color:var(--text)}.strategy-icon{width:42px;height:42px;border-radius:14px;display:grid;place-items:center;background:rgba(69,214,155,.1);border:1px solid rgba(69,214,155,.18);color:var(--good);font-size:22px}.strategy-copy{min-width:0}.strategy-copy strong,.strategy-copy small{display:block}.strategy-copy strong{font-size:15px;margin:4px 0 3px}.strategy-copy small{color:var(--muted);font-size:11px;line-height:1.35}.strategy-chevron{color:var(--muted);font-size:26px}.text-btn{border:0;background:none;color:var(--accent);padding:8px 0;font-size:12px;font-weight:800}.player-strip{display:flex;gap:9px;overflow-x:auto;padding:1px}.player-mini{flex:0 0 142px;padding:12px;border-radius:16px;border:1px solid var(--line);background:rgba(255,255,255,.035);color:var(--text);text-align:left}.player-mini.active{border-color:rgba(88,213,255,.4);background:rgba(88,213,255,.08)}.player-mini strong,.player-mini small{display:block}.player-mini strong{font-size:13px}.player-mini small{font-size:10px;color:var(--muted);margin-top:3px}.mini-cards{display:flex;margin-top:10px}.mini-card{width:24px;height:34px;border-radius:5px;background:#f6f8fb;color:#111;display:grid;place-items:center;font-size:8px;font-weight:900;margin-right:-4px;border:1px solid rgba(0,0,0,.08)}.lane-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.lane-stats div{padding:12px 8px;border-radius:15px;background:rgba(255,255,255,.035);text-align:center}.lane-stats strong,.lane-stats span{display:block}.lane-stats strong{font-size:20px}.lane-stats span{font-size:9px;color:var(--muted);margin-top:3px}.game-complete h2{margin:6px 0 7px}.game-complete p{margin:0 0 15px;color:var(--muted);font-size:13px}
.action-dock{position:fixed;left:0;right:0;bottom:0;z-index:25;padding:10px max(12px,env(safe-area-inset-left)) calc(10px + env(safe-area-inset-bottom));background:linear-gradient(180deg,rgba(7,16,24,0),rgba(7,16,24,.97) 26%)}.dock-inner{width:min(760px,100%);margin:0 auto;display:grid;grid-template-columns:1.15fr .85fr;gap:9px}.result-btn{min-height:70px;border-radius:19px;border:1px solid var(--line);color:var(--text);display:flex;align-items:center;gap:11px;text-align:left;padding:10px 14px}.result-btn.earned{background:linear-gradient(135deg,rgba(69,214,155,.18),rgba(88,213,255,.12));border-color:rgba(69,214,155,.24)}.result-btn.skip{background:rgba(255,255,255,.055)}.result-btn:disabled{opacity:.4}.result-btn span:not(.result-icon){display:flex;flex-direction:column}.result-btn strong{font-size:14px}.result-btn small{font-size:10px;color:var(--muted);margin-top:3px}.result-icon{font-size:22px}
.sheet,.confirm{border:0;background:transparent;padding:0;margin:auto}.sheet{width:100%;max-width:none;height:100%;}.sheet::backdrop,.confirm::backdrop{background:rgba(0,0,0,.72);backdrop-filter:blur(3px)}.sheet-card{position:absolute;left:0;right:0;bottom:0;width:min(760px,100%);margin:0 auto;background:#0d1925;border:1px solid var(--line);border-bottom:0;border-radius:26px 26px 0 0;padding:10px 16px calc(18px + env(safe-area-inset-bottom));box-shadow:0 -24px 70px rgba(0,0,0,.45);max-height:88dvh;overflow:auto}.sheet-handle{width:42px;height:4px;border-radius:999px;background:rgba(255,255,255,.18);margin:0 auto 14px}.sheet-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.sheet-head h2{margin:5px 0 0;font-size:23px;letter-spacing:-.5px}.sheet-help{margin:9px 0 15px;color:var(--muted);font-size:12px;line-height:1.45}.suit-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.suit-choice{min-height:64px;border-radius:17px;border:1px solid var(--line);background:rgba(255,255,255,.045);color:var(--text);display:flex;justify-content:center;align-items:center;gap:9px;font-weight:800}.suit-choice.active{border-color:rgba(88,213,255,.45);background:rgba(88,213,255,.1)}.suit-symbol{font-size:24px}.rank-panel{margin-top:13px;padding-top:13px;border-top:1px solid var(--line)}.rank-panel-head{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;margin-bottom:9px}.rank-panel-head strong{color:var(--text)}.rank-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}.rank-btn{min-height:48px;border-radius:14px;border:1px solid var(--line);background:rgba(255,255,255,.055);color:var(--text);font-weight:900}.rank-btn.used{opacity:.34;text-decoration:line-through}.toss-recommendation{display:flex;align-items:center;gap:11px;padding:13px;border-radius:16px;background:rgba(69,214,155,.08);border:1px solid rgba(69,214,155,.16);margin:14px 0}.toss-recommendation strong,.toss-recommendation small{display:block}.toss-recommendation strong{font-size:13px}.toss-recommendation small{font-size:10px;color:var(--muted);margin-top:3px}.spinner{width:22px;height:22px;border-radius:50%;border:2px solid rgba(255,255,255,.15);border-top-color:var(--accent);animation:spin .8s linear infinite;flex:0 0 auto}@keyframes spin{to{transform:rotate(360deg)}}.toss-hand{display:flex;gap:8px;overflow-x:auto;padding:6px 3px 8px}.strategy-sheet-card{padding-bottom:calc(22px + env(safe-area-inset-bottom))}.strategy-hero{padding:15px;border-radius:18px;background:linear-gradient(135deg,rgba(69,214,155,.1),rgba(88,213,255,.07));border:1px solid rgba(69,214,155,.16);margin:14px 0}.strategy-hero h3{margin:5px 0 4px;font-size:24px}.strategy-hero p{margin:0;color:var(--muted);font-size:11px}.metric-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:13px}.metric{padding:11px 8px;border-radius:15px;border:1px solid var(--line);background:rgba(255,255,255,.035);text-align:center}.metric strong,.metric span{display:block}.metric strong{font-size:18px}.metric span{font-size:9px;color:var(--muted);margin-top:3px}.dist-list,.alternative-list{display:flex;flex-direction:column;gap:7px}.dist-row,.alternative-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 11px;border-radius:13px;background:rgba(255,255,255,.035);border:1px solid var(--line);font-size:11px}.alternative-row.best{border-color:rgba(69,214,155,.28);background:rgba(69,214,155,.06)}.section-label{font-size:10px;letter-spacing:1.2px;color:var(--muted);font-weight:800;margin:16px 0 8px}.dead-card-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-top:14px}.dead-card-grid .playing-card{width:100%;height:auto;aspect-ratio:.71}.players-sheet-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;border:1px solid var(--line);border-radius:15px;background:rgba(255,255,255,.035);margin-top:8px}.players-sheet-row strong,.players-sheet-row small{display:block}.players-sheet-row small{color:var(--muted);font-size:10px;margin-top:3px}.menu-list{display:flex;flex-direction:column;gap:8px;margin-top:12px}.menu-list button{display:flex;justify-content:space-between;align-items:center;min-height:54px;padding:0 14px;border-radius:15px;border:1px solid var(--line);background:rgba(255,255,255,.04);color:var(--text);font-weight:800;text-align:left}.menu-list .danger-row{color:#ffc7cb;border-color:rgba(255,111,120,.18)}.confirm{width:min(420px,calc(100% - 28px))}.confirm-card{background:#0d1925;border:1px solid var(--line);border-radius:22px;padding:20px;box-shadow:var(--shadow)}.confirm-card h2{margin:6px 0}.confirm-card p{margin:0 0 16px;color:var(--muted);font-size:13px;line-height:1.5}.confirm-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}.toast{position:fixed;left:50%;bottom:calc(100px + env(safe-area-inset-bottom));transform:translate(-50%,16px);z-index:80;background:#172536;color:var(--text);border:1px solid var(--line);border-radius:999px;padding:9px 14px;font-size:11px;font-weight:800;opacity:0;pointer-events:none;transition:.2s}.toast.show{opacity:1;transform:translate(-50%,0)}
@media (min-width:700px){.view{padding-left:20px;padding-right:20px}.playing-card.large{flex-basis:78px;width:78px;height:110px}.active-hand{gap:12px}.dead-card-grid{grid-template-columns:repeat(8,1fr)}}
@media (max-width:390px){.brand-copy small{max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.turn-card h1{font-size:30px}.playing-card.large{flex-basis:59px;width:59px;height:84px}.dock-inner{grid-template-columns:1fr 1fr}.result-btn{padding:9px 10px}.result-icon{font-size:19px}.result-btn strong{font-size:12px}.rank-grid{grid-template-columns:repeat(4,1fr)}}

/* ===== v3.1 contrast hardening ===== */
html{color-scheme:dark}
body,button,input,select,textarea,dialog{color:var(--text)}
button,input,select,textarea{font:inherit}
::placeholder{color:#72879e;opacity:1}
.surface,.sheet-card,.confirm-card,.strategy-card,.player-mini,.lane-stats div,.metric,.dist-row,.alternative-row,.players-sheet-row,.menu-list button{color:var(--text)}
.section-heading h2,.turn-card h1,.hand-summary-row strong,.strategy-copy strong,.player-mini strong,.lane-stats strong,.sheet-head h2,.toss-recommendation strong,.strategy-hero h3,.metric strong,.players-sheet-row strong,.dist-row,.alternative-row{color:var(--text)}
/* Keep muted copy readable rather than near-black on dark surfaces. */
.microcopy,.turn-helper,.hand-count,.strategy-copy small,.player-mini small,.lane-stats span,.sheet-help,.toss-recommendation small,.strategy-hero p,.metric span,.players-sheet-row small,.confirm-card p,.result-btn small,.section-label,.rank-panel-head{color:#a8b9ca}
/* Playing cards intentionally remain dark ink on a light card face. */
.playing-card,.mini-card{color:var(--ink)}
.playing-card .black,.mini-card .black{color:#10151b}
