:root{--bg:#fff;--fg:#3c3c3c;--muted:#777;--line:#e5e5e5;--card:#fff;
--up:#58cc02;--up-d:#58a700;--down:#ff4b4b;--down-d:#ea2b2b;--flame:#ff9600;--empty:#e5e5e5;
--accent:var(--up);--accent-d:var(--up-d)}
@media(prefers-color-scheme:dark){:root{--bg:#131f24;--fg:#f1f7fb;--muted:#9fb3bf;--line:#37464f;--card:#1b2b33;--empty:#37464f}}
body.down{--accent:var(--down);--accent-d:var(--down-d)}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--fg);font:700 16px/1.4 "Nunito","DIN Round Pro",ui-rounded,system-ui,sans-serif}
header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;max-width:760px;margin:0 auto;padding:16px}
.logo{font-weight:900;font-size:22px;color:var(--up);letter-spacing:-.5px;text-decoration:none}
main{max-width:760px;margin:0 auto;padding:8px 16px 48px}
.hero{display:flex;align-items:center;gap:20px;flex-wrap:wrap;justify-content:center;margin:8px 0 24px}
.duo{width:200px;height:200px;flex:none;animation:bob 2.4s ease-in-out infinite}
.sad .duo,body.down .duo{animation:droop 3s ease-in-out infinite}
@keyframes bob{50%{transform:translateY(-8px)}}
@keyframes droop{50%{transform:translateY(3px) rotate(-1.5deg)}}
.bubble{position:relative;flex:1;min-width:220px;max-width:340px;border:2px solid var(--line);border-radius:18px;padding:16px 18px;background:var(--card);font-size:18px}
.bubble:before{content:"";position:absolute;left:-12px;top:50%;width:20px;height:20px;background:var(--card);border-left:2px solid var(--line);border-bottom:2px solid var(--line);transform:translateY(-50%) rotate(45deg)}
@media(max-width:560px){.bubble:before{left:50%;top:-12px;transform:translateX(-50%) rotate(135deg)}}
body.down .flame{width:72px;height:90px}
body.down .card{border:2px solid var(--line);border-radius:18px;padding:18px;margin:16px 0;background:var(--card)}
.card h2{margin:0 0 14px;font-size:13px;text-transform:uppercase;letter-spacing:1px;color:var(--muted)}
.week{display:flex;justify-content:space-between;gap:4px}
.wd{display:flex;flex-direction:column;align-items:center;gap:6px;font-size:12px;color:var(--muted);text-transform:uppercase}
.dot{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--empty);color:#fff;font-size:20px;font-weight:900}
.dot.up{background:var(--up)}.dot.down{background:var(--down)}.dot.today{outline:3px solid var(--accent);outline-offset:2px}
.stats{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.stat{border:2px solid var(--line);border-radius:16px;padding:14px;text-align:center;background:var(--card)}
.stat b{display:block;font-size:30px;font-weight:900}
.stat.up b{color:var(--up-d)}.stat.down b{color:var(--down-d)}
.stat span{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px}
.cal{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,1fr);gap:4px;overflow-x:auto;padding-bottom:4px}
.cal i{width:16px;height:16px;border-radius:4px;background:var(--empty);display:block}
.cal i.up{background:var(--up)}.cal i.down{background:var(--down)}.cal i.pad{background:transparent}
.legend{display:flex;gap:14px;margin-top:10px;font-size:12px;color:var(--muted)}
.legend i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:5px;vertical-align:-1px}
ul.inc{list-style:none;margin:0;padding:0}
ul.inc li{padding:10px 0;border-top:2px solid var(--line);font-size:15px}
ul.inc li:first-child{border-top:0}
ul.inc small{color:var(--muted);display:block}
footer{text-align:center;color:var(--muted);font-size:13px;padding:0 16px 32px}
footer a{color:inherit}
.gs{color:var(--muted);text-decoration:none;font-size:14px}
.pitch{max-width:760px;margin:0 auto;padding:0 16px;text-align:center;font-size:20px;color:var(--muted)}
@media(min-width:560px){.stats{grid-template-columns:repeat(4,1fr)}}

:root{--warn:#f5b301;--part:#ff7a1a;--maint:#1cb0f6}
.banner{display:flex;align-items:center;gap:12px;padding:18px 20px;border-radius:18px;color:#fff;font-size:22px;font-weight:900;margin:12px 0}
.banner.ok{background:var(--up)}.banner.warn{background:var(--warn);color:#3c3c3c}.banner.part{background:var(--part)}.banner.bad{background:var(--down)}.banner.maint{background:var(--maint)}
.pulse{width:12px;height:12px;border-radius:50%;background:currentColor;box-shadow:0 0 0 0 currentColor;animation:pulse 1.8s infinite}
@keyframes pulse{70%{box-shadow:0 0 0 10px transparent}100%{box-shadow:0 0 0 0 transparent}}
.incident{border:2px solid var(--line);border-left-width:8px;border-radius:14px;padding:12px 16px;margin:10px 0;background:var(--card)}
.incident.warn{border-left-color:var(--warn)}.incident.part{border-left-color:var(--part)}.incident.bad{border-left-color:var(--down)}.incident.maint{border-left-color:var(--maint)}
.incident a{color:inherit;font-weight:900}.incident small{color:var(--muted);margin-left:6px}.incident p{margin:6px 0 0;font-weight:600;font-size:14px}
.comps .comp{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:11px 0;border-top:2px solid var(--line)}
.comps h2+.comp{border-top:0;padding-top:0}
.chip{font-size:12px;text-transform:uppercase;letter-spacing:.5px;padding:4px 10px;border-radius:99px;color:#fff;white-space:nowrap}
.chip.ok{background:var(--up)}.chip.warn{background:var(--warn);color:#3c3c3c}.chip.part{background:var(--part)}.chip.bad{background:var(--down)}.chip.maint{background:var(--maint)}
.streaks{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:0 0 16px}
.scard{border:2px solid var(--line);border-bottom-width:5px;border-radius:18px;padding:16px 10px;text-align:center;background:var(--card);opacity:.75}
.scard.active{opacity:1}
.scard.up.active{border-color:var(--up)}.scard.down.active{border-color:var(--down)}
.scard .lbl{font-size:12px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted)}
.scard .num{display:flex;align-items:center;justify-content:center;gap:4px;font-size:64px;font-weight:900;line-height:1.1;color:var(--flame)}
.scard.up .num{color:var(--up-d)}.scard.down .num{color:var(--down)}
.scard:not(.active) .num{color:var(--muted)}
.scard .flame{width:40px;height:50px}
.scard .unit{font-size:16px;text-transform:uppercase;font-weight:900;color:var(--muted)}
.scard .sub{font-size:12px;color:var(--muted);margin-top:6px}
.hero{margin:12px 0 20px}.duo{width:150px;height:150px}
.card{border:2px solid var(--line);border-radius:18px;padding:18px;margin:16px 0;background:var(--card)}
.stats{margin:16px 0}
summary.banner{cursor:pointer;list-style:none}
summary.banner::-webkit-details-marker{display:none}
.banner .bt{flex:1}
.banner .hint{font-size:12px;text-transform:uppercase;letter-spacing:.8px;opacity:.85;font-weight:800}
.chev{width:10px;height:10px;border-right:3px solid currentColor;border-bottom:3px solid currentColor;transform:rotate(45deg);transition:transform .2s;margin:0 4px 4px}
details[open]>summary .chev{transform:rotate(-135deg);margin-bottom:-4px}
details.status{margin:16px 0}
details.status>summary{margin:0 0 12px}

.gtop{display:flex;align-items:center;gap:14px;margin-bottom:14px}
.gduo .duo{width:70px;height:70px;animation:none}
.gq{font-size:18px}.gdate{font-size:22px;font-weight:900;color:var(--accent-d)}
.gcal i.unk{background:var(--empty)}
.gcal i.target{background:var(--flame);outline:3px solid var(--flame);outline-offset:2px;animation:blink 1s ease-in-out infinite}
@keyframes blink{50%{transform:scale(1.25)}}
.gbtns{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px}
.gbtns:has(button[data-g=reset]){grid-template-columns:1fr}
.gb{font:inherit;font-weight:900;font-size:17px;text-transform:uppercase;letter-spacing:.8px;color:#fff;border:0;border-bottom:5px solid;border-radius:14px;padding:14px;cursor:pointer}
.gb.up{background:var(--up);border-color:var(--up-d)}.gb.down{background:var(--down);border-color:var(--down-d)}
.gb:active{transform:translateY(3px);border-bottom-width:2px}
.gres{margin-top:14px;padding:12px 14px;border-radius:14px;font-weight:600;font-size:15px}
.gres.ok{background:color-mix(in srgb,var(--up) 18%,transparent)}.gres.no{background:color-mix(in srgb,var(--down) 18%,transparent)}
.gstats{display:flex;justify-content:space-between;gap:8px;margin-top:14px;font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted)}
.gstats b{color:var(--fg);font-size:16px}

.gcal.playing i.unk{background:var(--empty)}
.gcal i.pick{outline:2px solid var(--fg);outline-offset:1px}
.gstart{width:100%;margin-top:16px}
.ghint{margin-top:10px;text-align:center;font-size:13px;color:var(--muted)}
.gb.gray{background:var(--muted);border-color:#5c6970}
.glink{display:block;margin:12px auto 0;background:none;border:0;color:var(--muted);font:inherit;font-size:13px;cursor:pointer;text-decoration:underline}
.gscore{font-size:44px;font-weight:900;color:var(--accent-d);line-height:1.1}
.gq small{color:var(--muted);text-transform:uppercase;letter-spacing:.6px;font-size:12px}
.gl{margin:16px 0}.gl li{font-size:14px}.gok{color:var(--up-d);font-weight:900}.gno{color:var(--down-d);font-weight:900}
.gduo .duo{width:80px;height:80px}

.cal{padding:6px}
.stat em{display:block;font-style:normal;font-size:12px;color:var(--muted);margin-top:2px}

.playtop{display:block;width:100%;max-width:420px;margin:0 auto 20px}
.mo{position:fixed;inset:0;z-index:100;background:var(--bg);overflow-y:auto}
.mo[hidden]{display:none}
.mwrap{min-height:100%;max-width:520px;margin:0 auto;display:flex;flex-direction:column;padding:12px 16px calc(16px + env(safe-area-inset-bottom))}
.mhead{display:flex;align-items:center;gap:12px;padding:6px 0}
.mx{background:none;border:0;color:var(--muted);font-size:22px;cursor:pointer;padding:8px}
.mbar{flex:1;display:flex;gap:4px}
.mbar i{flex:1;height:10px;border-radius:5px;background:var(--empty)}
.mbar i.ok{background:var(--up)}.mbar i.no{background:var(--down)}.mbar i.now{background:var(--flame)}
.msc{font-weight:900;color:var(--up-d);min-width:24px;text-align:right}
.mbody{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:6px;padding:12px 0}
.mo .duo{width:130px;height:130px}
.mlabel{font-size:13px;text-transform:uppercase;letter-spacing:1px;color:var(--muted)}
.mq{font-size:20px}.mwd{font-size:24px;font-weight:900;color:var(--muted)}
.mdate{font-size:22px;font-weight:900}.mdate.big{font-size:38px;line-height:1.1;color:var(--accent-d)}
.mres{font-size:34px;font-weight:900}.mres.ok{color:var(--up-d)}.mres.no{color:var(--down-d)}
.mscore{font-size:64px;font-weight:900;color:var(--accent-d);line-height:1}
.mverdict{font-size:18px;margin:4px 0}.mverdict small{color:var(--muted)}
.mfoot{display:grid;gap:12px;grid-template-columns:1fr;position:sticky;bottom:0;padding-top:8px;background:var(--bg)}
.mfoot.two{grid-template-columns:1fr 1fr}
.gb.big{padding:22px 10px;font-size:22px}
.mo .gl{width:100%;text-align:left}

.mtimer{height:8px;border-radius:4px;background:var(--empty);overflow:hidden}
.mtimer i{display:block;height:100%;width:100%;background:var(--accent);transform-origin:left;animation:drain 3s linear forwards}
@keyframes drain{to{transform:scaleX(0)}}

/* result animations */
.mbody.rv{position:relative}
.mres{animation:pop .35s cubic-bezier(.2,1.6,.4,1) both}
@keyframes pop{from{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}
.mbody.ok .duo{animation:jump .5s ease-out}
@keyframes jump{0%{transform:translateY(0) scale(1)}35%{transform:translateY(-28px) scale(1.08,.94) rotate(-6deg)}70%{transform:translateY(0) scale(.96,1.05) rotate(4deg)}100%{transform:none}}
.mbody.no .duo{animation:shake .5s ease-in-out}
@keyframes shake{0%,100%{transform:translateX(0)}15%{transform:translateX(-14px) rotate(-5deg)}30%{transform:translateX(12px) rotate(4deg)}45%{transform:translateX(-10px)}60%{transform:translateX(8px)}75%{transform:translateX(-4px)}}
.cf{position:absolute;left:50%;top:38%;width:9px;height:14px;border-radius:2px;background:var(--c);opacity:0;animation:burst 1s ease-out forwards;pointer-events:none}
@keyframes burst{0%{opacity:1;transform:translate(-50%,-50%) rotate(0)}100%{opacity:0;transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy) + 40px)) rotate(var(--r))}}
.mo-ok::after,.mo-no::after{content:"";position:fixed;inset:0;pointer-events:none}
.mo-ok::after{box-shadow:inset 0 0 0 6px var(--up),inset 0 0 90px color-mix(in srgb,var(--up) 45%,transparent);animation:flash 1.5s ease-out forwards}
.mo-no::after{box-shadow:inset 0 0 0 6px var(--down),inset 0 0 90px color-mix(in srgb,var(--down) 55%,transparent);animation:flash 1.5s ease-out forwards}
@keyframes flash{0%{opacity:0}12%{opacity:1}100%{opacity:.0}}
.mo-no .mwrap{animation:nudge .45s}
@keyframes nudge{20%{transform:translateX(-8px)}40%{transform:translateX(8px)}60%{transform:translateX(-5px)}80%{transform:translateX(3px)}}
@media(prefers-reduced-motion:reduce){.mbody.ok .duo,.mbody.no .duo,.cf,.mo-no .mwrap,.mres{animation:none}.cf{display:none}}
.mjoke{font-size:20px;font-weight:900;font-style:italic;max-width:360px;margin:6px 0 4px;animation:pop .4s .1s cubic-bezier(.2,1.6,.4,1) both}
.rv.ok .mjoke{color:var(--up-d)}.rv.no .mjoke{color:var(--down-d)}
@media(prefers-reduced-motion:reduce){.mjoke{animation:none}}
.mo{-webkit-tap-highlight-color:transparent}.mbody.rv{cursor:pointer}

/* green/red are reserved for the words "up"/"down"; right/wrong use yellow + vibration */
:root{--gold:#ffc800;--gold-d:#c48a00}
.ud.up{color:var(--up-d)}.ud.down{color:var(--down-d)}
.mres.ok{color:var(--gold-d)}.mres.no{color:var(--fg)}
.rv.ok .mjoke{color:var(--gold-d)}.rv.no .mjoke{color:var(--fg)}
.msc,.mscore{color:var(--gold-d)}
.mdate.big,.gdate{color:var(--fg)}
.mbar i.ok{background:var(--gold)}.mbar i.no{background:var(--muted)}
.gok{color:var(--gold-d)}.gno{color:var(--muted)}
.gres.ok{background:color-mix(in srgb,var(--gold) 22%,transparent)}.gres.no{background:color-mix(in srgb,var(--muted) 16%,transparent)}
.mo-ok::after{box-shadow:inset 0 0 0 6px var(--gold),inset 0 0 100px color-mix(in srgb,var(--gold) 55%,transparent)}
.mo-no::after{display:none}
.mo-no .mwrap{animation:vibrate .6s}
@keyframes vibrate{0%,100%{transform:translate(0)}10%{transform:translate(-10px,2px)}20%{transform:translate(10px,-2px)}30%{transform:translate(-9px,2px)}40%{transform:translate(9px,-2px)}50%{transform:translate(-7px,1px)}60%{transform:translate(7px,-1px)}70%{transform:translate(-4px)}80%{transform:translate(4px)}90%{transform:translate(-2px)}}
.cf{--c:var(--gold)}

/* calendar-page date */
.calico{width:190px;border:2px solid var(--line);border-bottom-width:5px;border-radius:16px;overflow:hidden;background:var(--card);text-align:center;margin:8px auto;box-shadow:0 4px 0 color-mix(in srgb,var(--line) 60%,transparent);position:relative}
.calico:before,.calico:after{content:"";position:absolute;top:-8px;width:8px;height:16px;border-radius:4px;background:var(--bg);border:2px solid #0a82c4;z-index:1}
.calico:before{left:30px}.calico:after{right:30px}
.calico .cm{background:var(--maint);color:#fff;font-weight:900;font-size:12px;text-transform:uppercase;letter-spacing:1px;padding:12px 8px 6px}
.calico .cd{font-size:72px;font-weight:900;line-height:1.05;padding:6px 0 0;color:var(--fg)}
.calico .cw{font-size:16px;font-weight:800;color:var(--muted);padding:0 8px 12px;text-transform:uppercase;letter-spacing:1px}
.calico.sm{width:130px}.calico.sm .cd{font-size:48px}.calico.sm .cw{font-size:12px;padding-bottom:8px}.calico.sm .cm{font-size:10px;padding-top:10px}
.gtop .calico{margin:0 0 0 auto;flex:none}
.calico.sm:before{left:10px}.calico.sm:after{right:10px}
.calico.sm .cm{font-size:9px;letter-spacing:.5px;padding:10px 6px 5px;white-space:nowrap}
.gtop{flex-wrap:wrap;justify-content:center}
.gtop .gq{flex:1;min-width:170px}
.gtop .calico{margin:4px auto 0}

.statsnote{margin:16px 0 -8px;font-size:12px;text-transform:uppercase;letter-spacing:1px;color:var(--muted)}
@media(min-width:560px){.stats{grid-template-columns:repeat(3,1fr)}}
.stat.wd b{font-size:22px;line-height:1.5}
.gcal i[data-d]{cursor:pointer}
.gcal i[data-d]:hover{outline:2px solid var(--fg);outline-offset:1px}
.tip{position:fixed;z-index:200;max-width:260px;background:var(--fg);color:var(--bg);border-radius:12px;padding:10px 12px;font-size:13px;font-weight:700;box-shadow:0 6px 20px rgba(0,0,0,.25);pointer-events:none}
.tip[hidden]{display:none}
.tip .tdate{font-weight:900;margin-bottom:2px}
.tip ul{margin:6px 0 0;padding-left:16px;font-weight:600;font-size:12px;opacity:.9}
.tip .ud.up{color:#8ee24b}.tip .ud.down{color:#ff8a8a}

.by{display:flex;align-items:center;gap:10px}
.by img{display:block;width:36px;height:36px;border-radius:50%;object-fit:cover;border:2px solid var(--line)}
.by .home{color:var(--muted);text-decoration:none;font-size:14px;font-weight:800}
.by .home:hover,.by a:hover img{color:var(--fg);border-color:var(--up)}

h1.pitch{font-size:20px;font-weight:700;margin:0 auto 4px;line-height:1.35}
h1.pitch .q{display:block;color:var(--fg);font-size:28px;font-weight:900;margin-bottom:4px}
.topbtns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin:0 auto 20px;max-width:520px}
.topbtns .playtop{flex:1 1 220px;margin:0;max-width:none}
a.gb{display:block;text-align:center;text-decoration:none;box-sizing:border-box}
.sharex{background:#14171a;border-color:#000;color:#fff}
.topbtns .sharex{flex:0 1 auto;min-width:150px}
@media(prefers-color-scheme:dark){.sharex{background:#fff;color:#14171a;border-color:#c9d1d9}}

.gb.blue{background:var(--maint);border-color:#0a82c4}
