:root{--navy:#344861;--blue:#2f6ad9;--ink:#325aaf;--line:#cdd4de;--sel:#cfe4ff;--peer:#eef3f8;--same:#cfe0f2;--errbg:#f7d3ce;--err:#dd4a3a;--heart:#e0483f;--gold:#d19a2e;--muted:#6b7785;--boardsize:min(92vw,58vh,440px);}
*{box-sizing:border-box;}
html,body{margin:0;height:100%;}
body{background:#eef1f5;color:#344861;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;color-scheme:light;-webkit-text-size-adjust:100%;}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);}
.app{max-width:460px;margin:0 auto;min-height:100dvh;background:#fff;display:flex;flex-direction:column;padding:16px 16px calc(16px + env(safe-area-inset-bottom));}
[hidden]{display:none!important;}
button{font-family:inherit;}
.selwrap{position:relative;display:inline-flex;align-items:center;}
.selwrap::after{content:"";position:absolute;right:7px;top:50%;transform:translateY(-25%);border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid var(--muted);pointer-events:none;}
.langsel{display:flex;align-items:center;gap:5px;color:var(--muted);}
.langsel svg{width:16px;height:16px;flex:0 0 auto;}
.langsel select{appearance:none;-webkit-appearance:none;border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 24px 6px 9px;font:inherit;font-size:13px;color:var(--navy);cursor:pointer;}
/* home */
#home{flex:1;display:flex;flex-direction:column;}
.hometop{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;}
.brand{font-size:28px;font-weight:600;letter-spacing:-.02em;color:var(--navy);}
.brand span{color:var(--blue);}
.tag{font-size:15px;color:var(--muted);margin:0 0 22px;}
.games{display:flex;flex-direction:column;gap:12px;}
.gamecard{display:flex;align-items:center;gap:14px;text-align:left;width:100%;border:1px solid var(--line);background:#fff;border-radius:14px;padding:16px;cursor:pointer;color:var(--navy);}
.gamecard:hover{border-color:var(--blue);background:#fbfcfe;}
.gicon{width:42px;height:42px;flex:0 0 auto;color:var(--blue);}
.gtext{flex:1 1 auto;display:flex;flex-direction:column;gap:2px;}
.gname{font-size:17px;font-weight:600;color:var(--navy);}
.gdesc{font-size:13px;color:var(--muted);}
.arr{color:var(--muted);font-size:22px;}
.homefoot{margin-top:auto;padding-top:20px;font-size:12px;color:var(--muted);text-align:center;}
/* play */
#play{flex:1;display:flex;flex-direction:column;min-height:0;}
.util{display:flex;align-items:center;gap:8px;margin-bottom:10px;}
.backbtn{border:0;background:transparent;cursor:pointer;color:var(--navy);font-size:24px;line-height:1;padding:0 4px 0 0;display:flex;align-items:center;}
.path{font-family:ui-monospace,Menlo,monospace;font-size:11px;color:var(--muted);white-space:nowrap;margin-left:auto;}
.path b{color:var(--blue);font-weight:600;}
.head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.diff select{appearance:none;-webkit-appearance:none;border:0;background:transparent;cursor:pointer;font:inherit;font-size:20px;font-weight:600;color:var(--navy);padding-right:20px;}
.hgroup{display:flex;align-items:center;gap:12px;}
.iconbtn{border:0;background:transparent;cursor:pointer;color:var(--muted);padding:0;display:flex;align-items:center;}
.iconbtn svg{width:21px;height:21px;}
.hstat{display:flex;align-items:center;gap:6px;font-size:18px;font-weight:600;color:var(--navy);}
.hstat svg{width:22px;height:22px;}
.trophy svg{color:var(--gold);}
.lives svg{color:var(--heart);}
.stage{flex:1 1 auto;min-height:0;position:relative;display:flex;align-items:center;justify-content:center;}
#body{display:flex;align-items:center;justify-content:center;}
/* boards */
.grid{width:var(--boardsize);height:var(--boardsize);display:grid;grid-template-columns:repeat(9,1fr);grid-template-rows:repeat(9,1fr);border:2.5px solid var(--navy);border-radius:5px;overflow:hidden;background:#fff;}
.cell{display:flex;align-items:center;justify-content:center;border-right:1px solid var(--line);border-bottom:1px solid var(--line);font-size:clamp(16px,5.6vw,26px);color:var(--ink);cursor:pointer;position:relative;user-select:none;background:#fff;}
.cell.given{color:var(--navy);font-weight:600;}
.cell.wrong{color:var(--err);font-weight:600;}
.cell.tr{border-right:2.5px solid var(--navy);}
.cell.bb{border-bottom:2.5px solid var(--navy);}
.cell.peer{background:var(--peer);}
.cell.same{background:var(--same);}
.cell.sel{background:var(--sel);}
.cell.errbg{background:var(--errbg);}
.notes{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);width:100%;height:100%;}
.notes span{font-size:clamp(8px,2.4vw,11px);color:var(--muted);display:flex;align-items:center;justify-content:center;line-height:1;}
.nboard{width:var(--boardsize);height:var(--boardsize);display:grid;background:#fff;border:1px solid var(--line);border-radius:5px;overflow:hidden;}
.cnr{background:#fff;}
.cclue{display:flex;flex-direction:column;justify-content:flex-end;align-items:center;padding-bottom:2px;overflow:hidden;background:#f6f8fa;}
.rclue{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;gap:3px;padding-right:4px;overflow:hidden;background:#f6f8fa;}
.cclue span,.rclue span{font-size:var(--cf,11px);line-height:1.06;color:var(--navy);font-weight:600;}
.ncell{background:#fff;border-right:1px solid var(--line);border-bottom:1px solid var(--line);cursor:pointer;position:relative;}
.ncell.nt{border-top:2px solid var(--navy);}
.ncell.nl{border-left:2px solid var(--navy);}
.ncell.nb{border-bottom:2px solid var(--navy);}
.ncell.nr{border-right:2px solid var(--navy);}
.ncell.gl{border-left:2px solid #aeb8c6;}
.ncell.gt{border-top:2px solid #aeb8c6;}
.ncell.nf{background:var(--navy);}
.ncell.nx::after{content:"\00d7";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:clamp(10px,3.6vw,16px);}
.ncell.nxl{background:var(--errbg);}
.ncell.nxl::after{content:"\00d7";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--err);font-size:clamp(10px,3.6vw,16px);}
.kboard{width:var(--boardsize);height:var(--boardsize);display:grid;border:2.5px solid var(--navy);border-radius:5px;overflow:hidden;background:#fff;}
.kcorner{background:var(--navy);}
.kclue{background:var(--navy);position:relative;border-right:1px solid #46586a;border-bottom:1px solid #46586a;}
.kclue::after{content:"";position:absolute;inset:0;background:linear-gradient(to bottom right,transparent calc(50% - .6px),rgba(255,255,255,.45) calc(50% - .6px),rgba(255,255,255,.45) calc(50% + .6px),transparent calc(50% + .6px));}
.kdown{position:absolute;left:3px;bottom:1px;font-size:clamp(9px,3.2vw,13px);color:#fff;font-weight:600;z-index:1;}
.kacross{position:absolute;right:3px;top:1px;font-size:clamp(9px,3.2vw,13px);color:#fff;font-weight:600;z-index:1;}
.kkboard{width:var(--boardsize);height:var(--boardsize);display:grid;border:2.5px solid var(--navy);border-radius:5px;overflow:hidden;background:#fff;}
.kkcell{position:relative;display:flex;align-items:center;justify-content:center;border-right:1px solid var(--line);border-bottom:1px solid var(--line);font-size:clamp(18px,6vw,28px);color:var(--ink);cursor:pointer;user-select:none;background:#fff;}
.kkcell.wrong{color:var(--err);font-weight:600;}
.kkcell.peer{background:var(--peer);}
.kkcell.same{background:var(--same);}
.kkcell.sel{background:var(--sel);}
.kkcell.errbg{background:var(--errbg);}
.kkcell.ct{border-top:2.5px solid var(--navy);}
.kkcell.cr{border-right:2.5px solid var(--navy);}
.kkcell.cb{border-bottom:2.5px solid var(--navy);}
.kkcell.cl{border-left:2.5px solid var(--navy);}
.kklabel{position:absolute;top:1px;left:3px;font-size:clamp(9px,2.9vw,12px);font-weight:600;color:var(--navy);line-height:1;}
.fboard{width:var(--boardsize);height:var(--boardsize);display:grid;}
.fcell{display:flex;align-items:center;justify-content:center;border:1.5px solid var(--navy);border-radius:4px;font-size:clamp(16px,6vw,26px);color:var(--ink);cursor:pointer;position:relative;user-select:none;background:#fff;}
.fcell.given{color:var(--navy);font-weight:600;background:#f2f5f9;}
.fcell.wrong{color:var(--err);border-color:var(--err);}
.fcell.sel{background:var(--sel);}
.fcell.same{background:var(--same);}
.fcell.peer{background:var(--peer);}
.fcell.errbg{background:var(--errbg);}
.fsign{display:flex;align-items:center;justify-content:center;color:var(--navy);font-weight:600;font-size:clamp(11px,3.6vw,18px);line-height:1;}
.fgap{}
.bboard{width:var(--boardsize);height:var(--boardsize);display:grid;border:2.5px solid var(--navy);border-radius:5px;overflow:hidden;background:#fff;}
.bcell{display:flex;align-items:center;justify-content:center;border-right:1px solid var(--line);border-bottom:1px solid var(--line);cursor:pointer;position:relative;background:#fff;}
.bcell.bgiven{background:#eef1f5;}
.bcell.sel{background:var(--sel);}
.bcell.errbg{background:var(--errbg);}
.disc{width:62%;height:62%;max-width:30px;max-height:30px;border-radius:50%;}
.d1{background:var(--navy);}
.d2{background:#4f8bf0;}
.binpad{display:flex;gap:10px;margin-top:12px;}
.binpad button{flex:1;aspect-ratio:2.4;background:#fff;border:1px solid #d7dde6;border-radius:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.binpad button:hover{background:#f2f6fc;}
.binpad .disc{width:28px;height:28px;max-width:28px;max-height:28px;}
.trackseg{display:flex;gap:6px;margin-bottom:12px;}
.trackseg button{flex:1;border:1px solid var(--line);background:#fff;border-radius:10px;padding:9px 4px;cursor:pointer;font:inherit;font-size:13px;font-weight:600;color:var(--muted);}
.trackseg button.on{background:var(--navy);border-color:var(--navy);color:#fff;}
.modelabel{font-size:20px;font-weight:600;color:var(--navy);}
.streakbar{display:flex;align-items:center;gap:8px;background:#f2f6fc;border:1px solid #dbe4f2;border-radius:12px;padding:11px 14px;margin:0 0 18px;font-size:14px;color:var(--navy);font-weight:600;}
.streakbar em{font-style:normal;color:var(--muted);font-weight:400;}
.gamecard.donetoday .gname::after{content:" \2713";color:#2e9e6e;}
#shareBtn{background:#fff;color:var(--navy);border:1px solid var(--line);margin-bottom:8px;}
/* footer controls */
.progress{text-align:center;color:var(--muted);font-size:13px;font-weight:500;margin:9px 0;display:flex;align-items:center;justify-content:center;gap:6px;}
.progress i{width:8px;height:8px;border-radius:50%;background:var(--navy);display:inline-block;}
.controls{width:var(--boardsize);margin:0 auto;}
.tools{display:flex;justify-content:space-around;}
.tool{display:flex;flex-direction:column;align-items:center;gap:4px;border:0;background:transparent;cursor:pointer;font:inherit;font-size:12px;color:var(--muted);position:relative;padding:2px 8px;}
.tool:disabled{opacity:.38;cursor:default;}
.tool svg{width:26px;height:26px;color:var(--muted);}
.tool.on{color:var(--blue);}
.tool.on svg{color:var(--blue);}
.badge{position:absolute;top:-4px;right:2px;min-width:17px;height:17px;padding:0 5px;border-radius:9px;background:var(--blue);color:#fff;font-size:11px;font-weight:600;display:flex;align-items:center;justify-content:center;}
.pill{position:absolute;top:-4px;right:-6px;padding:1px 5px;border-radius:9px;background:#c9d0da;color:#fff;font-size:10px;font-weight:600;}
.pill.act{background:var(--blue);}
.pad{display:flex;gap:5px;margin-top:10px;}
.num{flex:1;aspect-ratio:.92;background:#fff;border:1px solid #d7dde6;border-radius:9px;cursor:pointer;font:inherit;font-size:clamp(18px,5.6vw,24px);font-weight:600;color:var(--blue);}
.num:hover:not(.spent){background:#f2f6fc;}
.num:active{background:#e6eef9;}
.num.spent{visibility:hidden;}
.modeseg{display:flex;gap:6px;margin-top:10px;}
.modeseg button{flex:1;border:1px solid var(--line);background:#fff;border-radius:9px;padding:11px;cursor:pointer;font:inherit;font-size:14px;font-weight:600;color:var(--muted);}
.modeseg button.on{background:var(--blue);border-color:var(--blue);color:#fff;}
.newbtn{margin-top:12px;border:0;background:var(--navy);color:#fff;border-radius:12px;padding:13px;cursor:pointer;font:inherit;font-size:15px;font-weight:600;width:100%;}
.newbtn:active{background:#2a3a4e;}
.sechead{font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;text-align:left;margin:4px 0 8px;}
.goals{display:flex;flex-direction:column;gap:9px;margin-bottom:10px;}
.goal{display:grid;grid-template-columns:1fr auto;gap:4px 8px;text-align:left;font-size:13px;color:var(--navy);}
.goal .gp{font-variant-numeric:tabular-nums;color:var(--muted);font-weight:600;}
.goal .gbar{grid-column:1/3;height:5px;background:#e6ebf2;border-radius:3px;overflow:hidden;}
.goal .gbar i{display:block;height:100%;background:var(--blue);border-radius:3px;}
.goal.gdone .gl{color:#2e9e6e;font-weight:600;}
.goal.gdone .gbar i{background:#2e9e6e;}
.bankline{font-size:13px;color:var(--muted);text-align:left;border-top:1px solid var(--line);padding-top:10px;margin-bottom:14px;}
.bankline b{color:var(--navy);}
.badges{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px;}
.bg{font-size:12px;padding:5px 9px;border-radius:20px;border:1px solid var(--line);color:#9aa4b1;background:#fff;}
.bg.got{background:var(--navy);border-color:var(--navy);color:#fff;font-weight:600;}
/* overlays */
.overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.9);z-index:5;}
.card{background:#fff;border-radius:16px;padding:24px;max-height:82vh;overflow:auto;text-align:center;border:1px solid var(--line);max-width:92%;min-width:240px;box-shadow:0 8px 30px rgba(52,72,97,.12);}
.card h3{font-size:22px;font-weight:600;margin:0 0 10px;color:var(--navy);}
.card h3.lose{color:var(--err);}
.card p{font-size:14px;color:var(--muted);margin:0 0 18px;line-height:1.7;}
.card p b{color:var(--navy);font-weight:600;}
.card .newbtn{margin-top:0;}
.stbl{display:flex;flex-direction:column;gap:8px;margin:2px 0 14px;}
.srow{display:flex;justify-content:space-between;gap:10px;font-size:13px;align-items:baseline;}
.srow .d{font-weight:600;color:var(--navy);}
.srow .b{font-variant-numeric:tabular-nums;color:var(--ink);font-weight:600;}
.srow .s{color:var(--muted);}
.sfoot{font-size:13px;color:var(--muted);border-top:1px solid var(--line);padding-top:12px;margin-bottom:18px;}
.sfoot b{color:var(--navy);}