*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;overflow-x:clip}
body,h1,h2,h3,h4,p,ul,ol,li,figure,table,dl,dd,form{margin:0;padding:0}
ul,ol{list-style:none}
button{font:inherit;color:inherit}
img,svg{display:block;max-width:100%}
input{font:inherit}

:root{
  --bg:#fdf8f6; --bg2:#f9eef1; --panel:#ffffff; --panel2:#fffcfb; --glass:rgba(255,252,252,.8);
  --ink:#38222e; --ink2:#5f4453; --muted:#a28793; --line:#f3e1e7; --line2:#e8cfda;
  --accent:#d9548a; --accent-ink:#b93a6f; --accent-bg:#fbe7ef; --accent-soft:#f6cfdf;
  --gold:#c2711d; --gold-bg:#fdf1e2;
  --phy:#5b6ee0; --phy-bg:#eceffc;
  --chem:#a05cd9; --chem-bg:#f4ebfc;
  --bio:#35946a; --bio-bg:#e5f4ec;
  --test:#d23d69; --test-bg:#fce7ee;
  --grad:linear-gradient(100deg,#d9548a,#a05cd9);
  --ring:rgba(217,84,138,.28);
  --shadow-s:0 1px 2px rgba(80,40,60,.06);
  --shadow:0 2px 4px rgba(80,40,60,.04),0 14px 34px -18px rgba(160,70,110,.3);
  --shadow-l:0 30px 70px -30px rgba(120,50,90,.4);
  --r:18px; --r-s:12px;
  --safe:env(safe-area-inset-bottom,0px);
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --bg:#1c1219; --bg2:#150d13; --panel:#271a23; --panel2:#2e202b; --glass:rgba(39,26,35,.82);
    --ink:#f7e9f0; --ink2:#d9bfce; --muted:#a3839a; --line:#3a2836; --line2:#4c3547;
    --accent:#f27ba6; --accent-ink:#f79ebd; --accent-bg:#3c2130; --accent-soft:#5a2f43;
    --gold:#f0b467; --gold-bg:#38281a;
    --phy:#93a3f5; --phy-bg:#232948;
    --chem:#c493f0; --chem-bg:#331f47;
    --bio:#6fce9f; --bio-bg:#1a3529;
    --test:#f886a8; --test-bg:#421c2b;
    --grad:linear-gradient(100deg,#f27ba6,#c493f0);
    --ring:rgba(242,123,166,.3);
    --shadow-s:0 1px 2px rgba(0,0,0,.5);
    --shadow:0 2px 6px rgba(0,0,0,.35),0 14px 36px -18px rgba(0,0,0,.7);
    --shadow-l:0 34px 80px -34px rgba(0,0,0,.85);
  }
}
:root[data-theme="dark"]{
  --bg:#1c1219; --bg2:#150d13; --panel:#271a23; --panel2:#2e202b; --glass:rgba(39,26,35,.82);
  --ink:#f7e9f0; --ink2:#d9bfce; --muted:#a3839a; --line:#3a2836; --line2:#4c3547;
  --accent:#f27ba6; --accent-ink:#f79ebd; --accent-bg:#3c2130; --accent-soft:#5a2f43;
  --gold:#f0b467; --gold-bg:#38281a;
  --phy:#93a3f5; --phy-bg:#232948;
  --chem:#c493f0; --chem-bg:#331f47;
  --bio:#6fce9f; --bio-bg:#1a3529;
  --test:#f886a8; --test-bg:#421c2b;
  --grad:linear-gradient(100deg,#f27ba6,#c493f0);
  --ring:rgba(242,123,166,.3);
  --shadow-s:0 1px 2px rgba(0,0,0,.5);
  --shadow:0 2px 6px rgba(0,0,0,.35),0 14px 36px -18px rgba(0,0,0,.7);
  --shadow-l:0 34px 80px -34px rgba(0,0,0,.85);
}

[data-p="0"]{--pc:#9d6bf0} [data-p="1"]{--pc:#d9548a} [data-p="2"]{--pc:#5b6ee0}
[data-p="3"]{--pc:#c2711d} [data-p="4"]{--pc:#d23d69}
:root[data-theme="dark"] [data-p="0"]{--pc:#b797f7} :root[data-theme="dark"] [data-p="1"]{--pc:#f27ba6}
:root[data-theme="dark"] [data-p="2"]{--pc:#93a3f5} :root[data-theme="dark"] [data-p="3"]{--pc:#f0b467}
:root[data-theme="dark"] [data-p="4"]{--pc:#f886a8}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) [data-p="0"]{--pc:#b797f7}
  :root:not([data-theme="light"]) [data-p="1"]{--pc:#f27ba6}
  :root:not([data-theme="light"]) [data-p="2"]{--pc:#93a3f5}
  :root:not([data-theme="light"]) [data-p="3"]{--pc:#f0b467}
  :root:not([data-theme="light"]) [data-p="4"]{--pc:#f886a8}
}

body{
  background:var(--bg);color:var(--ink);
  font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  font-size:15.5px;line-height:1.62;letter-spacing:-.005em;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
}
b,strong{font-weight:650;color:var(--ink)}
i,em{font-style:italic}
a{color:var(--accent-ink);text-underline-offset:3px}

@keyframes floatA{0%,100%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(4%,-6%,0) scale(1.12)}}
@keyframes floatB{0%,100%{transform:translate3d(0,0,0) scale(1.05)}50%{transform:translate3d(-6%,5%,0) scale(.94)}}
@keyframes pulseRing{0%{box-shadow:0 0 0 0 var(--ring)}70%{box-shadow:0 0 0 12px transparent}100%{box-shadow:0 0 0 0 transparent}}
@keyframes pop{0%{transform:scale(1)}45%{transform:scale(1.22)}100%{transform:scale(1)}}
@keyframes sheetUp{from{transform:translateY(28px);opacity:0}to{transform:none;opacity:1}}
@keyframes sheetMid{from{transform:translate(-50%,-46%);opacity:0}to{transform:translate(-50%,-50%);opacity:1}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes slideL{from{opacity:0;transform:translateX(22px)}to{opacity:1;transform:none}}
@keyframes slideR{from{opacity:0;transform:translateX(-22px)}to{opacity:1;transform:none}}
@keyframes sparkle{0%{transform:scale(.2) rotate(0);opacity:1}100%{transform:scale(1.6) rotate(150deg);opacity:0}}

.rv{opacity:0;transform:translateY(16px);transition:opacity .65s cubic-bezier(.22,.7,.28,1),transform .65s cubic-bezier(.22,.7,.28,1)}
.rv.in{opacity:1;transform:none}
.rv[data-d="1"]{transition-delay:.06s}.rv[data-d="2"]{transition-delay:.12s}
.rv[data-d="3"]{transition-delay:.18s}.rv[data-d="4"]{transition-delay:.24s}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}
  .rv{opacity:1;transform:none}
}

.wrap{max-width:1120px;margin:0 auto;padding:0 20px}
main{padding-bottom:60px}
main>section{padding:44px 0;scroll-margin-top:80px}
main>section+section{border-top:1px solid var(--line)}

.topbar{position:sticky;top:0;z-index:70;background:var(--glass);backdrop-filter:blur(16px) saturate(1.4);
  -webkit-backdrop-filter:blur(16px) saturate(1.4);border-bottom:1px solid var(--line)}
.topbar .wrap{display:flex;align-items:center;gap:18px;height:60px}
.brand{display:flex;align-items:center;gap:9px;font-family:Fraunces,Georgia,serif;font-weight:600;
  font-size:17.5px;letter-spacing:-.015em;white-space:nowrap;color:var(--ink);text-decoration:none}
.brand .bloom{width:24px;height:24px;color:var(--accent);flex:none}
.brand em{font-style:normal;color:var(--muted);font-weight:400;font-size:13.5px;font-family:Inter,sans-serif}
.mainnav{display:flex;gap:2px;flex:1;justify-content:center}
.mainnav a{padding:7px 14px;border-radius:999px;font-size:14px;font-weight:550;color:var(--ink2);
  text-decoration:none;transition:.18s;white-space:nowrap}
.mainnav a:hover{background:var(--accent-bg);color:var(--accent-ink)}
.mainnav a.on{background:var(--accent);color:#fff;font-weight:600}
:root[data-theme="dark"] .mainnav a.on{color:#2c0f1c}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .mainnav a.on{color:#2c0f1c}}
@media (max-width:900px){.mainnav{display:none}}
.tb-right{display:flex;align-items:center;gap:9px;margin-left:auto}
.iconbtn{border:1px solid var(--line2);background:var(--panel);color:var(--ink2);width:36px;height:36px;
  border-radius:11px;cursor:pointer;display:grid;place-items:center;transition:.2s;flex:none}
.iconbtn:hover{border-color:var(--accent);color:var(--accent-ink);transform:translateY(-1px)}
.iconbtn:active{transform:scale(.94)}

.authchip{display:inline-flex;align-items:center;gap:9px;text-decoration:none;border:1px solid var(--line2);
  background:var(--panel);border-radius:999px;padding:5px 14px 5px 5px;transition:.2s;max-width:190px}
.authchip:hover{border-color:var(--accent);transform:translateY(-1px)}
.authchip .av{width:28px;height:28px;border-radius:50%;background:var(--grad);color:#fff;
  display:grid;place-items:center;font-family:Fraunces,serif;font-size:13.5px;font-weight:600;flex:none;position:relative}
.authchip .av i{position:absolute;right:-1px;bottom:-1px;width:9px;height:9px;border-radius:50%;
  border:2px solid var(--panel);background:var(--muted)}
.authchip[data-s=ok] .av i{background:var(--bio)}
.authchip[data-s=busy] .av i{background:var(--gold)}
.authchip[data-s=off] .av i{background:var(--test)}
.authchip .nm{font-size:13px;font-weight:600;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.authchip.signin{padding:8px 18px;background:var(--accent);border-color:var(--accent);color:#fff;
  font-size:13.5px;font-weight:650}
:root[data-theme="dark"] .authchip.signin{color:#2c0f1c}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .authchip.signin{color:#2c0f1c}}
@media (max-width:560px){.authchip .nm{display:none} .authchip{padding:5px}}

.tabbar{display:none;position:fixed;left:0;right:0;bottom:0;z-index:80;background:var(--glass);
  backdrop-filter:blur(18px) saturate(1.5);-webkit-backdrop-filter:blur(18px) saturate(1.5);
  border-top:1px solid var(--line);padding:6px 4px calc(6px + var(--safe))}
.tabbar ul{display:grid;grid-template-columns:repeat(5,1fr)}
.tabbar a{display:grid;justify-items:center;gap:3px;padding:6px 2px;color:var(--muted);
  text-decoration:none;font-size:10.5px;font-weight:600;border-radius:10px;transition:.18s;min-height:46px}
.tabbar a.on{color:var(--accent-ink)}
.tabbar a.on svg{transform:translateY(-1px) scale(1.08)}
.tabbar svg{width:20px;height:20px;transition:.22s}
@media (max-width:900px){.tabbar{display:block} body{padding-bottom:70px}}

.hero{position:relative;padding:44px 0 10px;overflow:visible}
.blob{position:absolute;border-radius:50%;filter:blur(90px);pointer-events:none;z-index:0}
.b1{width:480px;height:480px;top:-240px;right:-160px;background:var(--accent);opacity:.15;animation:floatA 17s ease-in-out infinite}
.b2{width:420px;height:420px;top:-80px;left:-240px;background:#a05cd9;opacity:.12;animation:floatB 21s ease-in-out infinite}
.hero>*{position:relative;z-index:1}
.hero>.blob{position:absolute;z-index:0}
.greet{font-size:13px;font-weight:600;color:var(--accent-ink);display:flex;align-items:center;gap:7px}
.greet svg{width:15px;height:15px;flex:none}
h1{font-family:Fraunces,Georgia,serif;font-weight:600;font-size:clamp(29px,5.4vw,48px);line-height:1.07;
  letter-spacing:-.03em;margin:10px 0 14px}
h1 .nm{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;font-style:italic}
.lede{font-size:16.5px;color:var(--ink2);max-width:56ch}
.pagehead{padding:40px 0 6px}
.pagehead .crumb{font-size:12px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--accent-ink)}
.pagehead h1{margin-bottom:8px}

h2{font-family:Fraunces,Georgia,serif;font-weight:600;font-size:clamp(22px,3.4vw,30px);letter-spacing:-.025em;line-height:1.15}
.sub{color:var(--muted);margin-top:9px;max-width:66ch;font-size:15px}
h3{font-size:16.5px;font-weight:650;letter-spacing:-.012em}
.mt{margin-top:24px}
.eyebrow{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-ink)}

.cdown{display:flex;gap:8px;margin-top:24px;flex-wrap:wrap}
.cd{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-s);padding:9px 14px;
  min-width:72px;text-align:center;box-shadow:var(--shadow-s)}
.cd b{display:block;font-family:Fraunces,serif;font-size:26px;font-weight:600;line-height:1.15;
  letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.cd span{font-size:10px;font-weight:650;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.cd.big b{color:var(--accent-ink)}

.dash{display:grid;grid-template-columns:auto minmax(0,1fr);gap:22px;align-items:center;margin-top:24px;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:20px 22px;box-shadow:var(--shadow)}
@media (max-width:560px){.dash{grid-template-columns:1fr;gap:16px;justify-items:center;text-align:center}}
.ringwrap{position:relative;width:112px;height:112px;flex:none}
.ringwrap svg{transform:rotate(-90deg)}
.ringwrap .val{position:absolute;inset:0;display:grid;place-content:center;text-align:center}
.ringwrap .val b{font-family:Fraunces,serif;font-size:25px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums}
.ringwrap .val span{font-size:9.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
.mini{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:14px;width:100%}
.mini .k{font-size:10.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
.mini .v{font-family:Fraunces,serif;font-size:23px;font-weight:600;line-height:1.2;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.mini .s{font-size:12px;color:var(--muted)}

.cbx{position:relative;display:inline-grid;place-items:center;width:22px;height:22px;flex:none;cursor:pointer}
.cbx input{position:absolute;inset:0;opacity:0;margin:0;cursor:pointer;width:100%;height:100%;z-index:2}
.cbx .bx{width:20px;height:20px;border:1.6px solid var(--line2);border-radius:7px;background:var(--panel);
  display:grid;place-items:center;transition:background .22s,border-color .22s,transform .18s}
.cbx .bx svg{width:12px;height:12px;stroke:#fff;stroke-width:3.2;fill:none;stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:22;stroke-dashoffset:22;transition:stroke-dashoffset .3s cubic-bezier(.5,0,.2,1)}
.cbx input:hover+.bx{border-color:var(--accent)}
.cbx input:focus-visible+.bx{outline:2px solid var(--accent);outline-offset:2px}
.cbx input:checked+.bx{background:var(--accent);border-color:var(--accent);animation:pop .34s}
.cbx input:checked+.bx svg{stroke-dashoffset:0}
:root[data-theme="dark"] .cbx .bx svg{stroke:#2c0f1c}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .cbx .bx svg{stroke:#2c0f1c}}
.cbx.lg{width:26px;height:26px}.cbx.lg .bx{width:24px;height:24px;border-radius:8px}
.cbx.sm .bx{width:17px;height:17px;border-radius:6px}.cbx.sm .bx svg{width:10px;height:10px}

.today{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;
  box-shadow:var(--shadow);position:relative}
.today::before{content:"";position:absolute;inset:0 0 auto;height:3px;
  background:linear-gradient(90deg,var(--bio),var(--phy),var(--chem),var(--test))}
.today>header{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:20px 20px 16px}
.today>header .d{flex:1;min-width:180px}
.today>header .dt{font-family:Fraunces,serif;font-size:21px;font-weight:600;letter-spacing:-.02em}
.today>header .dm{font-size:12.8px;color:var(--muted);margin-top:2px}
.dayprog{display:flex;align-items:center;gap:10px}
.dayprog .bar{width:100px}
.tasks{border-top:1px solid var(--line)}
.task{display:grid;grid-template-columns:auto minmax(0,1fr);gap:13px;padding:13px 20px;
  border-bottom:1px solid var(--line);align-items:start;transition:background .2s}
.task:last-child{border-bottom:0}
.task:hover{background:var(--panel2)}
.task .lab{font-size:10.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;margin-bottom:2px}
.task .txt{font-size:14.7px;color:var(--ink2);transition:.25s}
.task.done .txt{color:var(--muted);text-decoration:line-through;text-decoration-color:var(--line2)}
.task[data-s=Biology] .lab{color:var(--bio)}.task[data-s=Physics] .lab{color:var(--phy)}
.task[data-s=Chemistry] .lab{color:var(--chem)}.task[data-s=Test] .lab{color:var(--test)}
.task[data-s=Habit] .lab{color:var(--muted)}
.task[data-s=Test]{background:color-mix(in srgb,var(--test-bg) 58%,transparent)}
.celebrate{padding:15px 20px;border-top:1px solid var(--line);background:var(--accent-bg);color:var(--accent-ink);
  font-size:14.5px;font-weight:600;display:none;align-items:center;gap:10px}
.today.alldone .celebrate{display:flex;animation:fadeIn .5s}
.spark{position:fixed;width:8px;height:8px;pointer-events:none;z-index:999;border-radius:50% 0 50% 50%;
  animation:sparkle .8s ease-out forwards}

.calbar{display:flex;align-items:center;gap:10px;margin:18px 0 14px;flex-wrap:wrap}
.calbar h3{font-family:Fraunces,serif;font-size:21px;font-weight:600;letter-spacing:-.02em;min-width:150px}
.calbar .sp{flex:1;order:9}
.calbar .nav{display:flex;gap:6px;order:10}
.calmeta{font-size:12.6px;color:var(--muted)}
@media (max-width:640px){
  .calbar{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:6px 10px}
  .calbar h3{min-width:0}
  .calbar .sp{display:none}
  .calbar .nav{grid-column:2;grid-row:1}
  .calmeta{grid-column:1/-1;grid-row:2}
}
.cal{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:12px;box-shadow:var(--shadow);overflow:hidden}
.dow{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px}
.dow span{text-align:center;font-size:10.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);padding:4px 0}
.grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.grid.anim-l{animation:slideL .34s cubic-bezier(.22,.7,.28,1)}
.grid.anim-r{animation:slideR .34s cubic-bezier(.22,.7,.28,1)}
.cell{position:relative;aspect-ratio:1/.82;border:1px solid var(--line);border-radius:12px;background:var(--panel2);
  padding:6px;display:flex;flex-direction:column;gap:3px;cursor:pointer;
  transition:transform .18s,border-color .18s,background .25s;overflow:hidden;text-align:left}
.cell:hover{border-color:var(--pc,var(--accent));transform:translateY(-2px)}
.cell:active{transform:scale(.96)}
.cell.empty,.cell.off{background:transparent;border-color:transparent;cursor:default;pointer-events:none}
.cell.off{opacity:.28}
.cell .n{font-family:"JetBrains Mono",monospace;font-size:12px;font-weight:500;color:var(--ink2);line-height:1.1}
.cell .wtag{position:absolute;top:5px;right:6px;font-size:8.5px;font-weight:700;color:var(--pc);opacity:.9}
.cell .hint{font-size:10.5px;line-height:1.3;color:var(--muted);margin-top:3px;overflow:hidden;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;word-break:break-word}
.cell.hasTest .hint{color:var(--test);font-weight:600}
.cell .dots{display:flex;gap:3px;margin-top:auto;flex-wrap:wrap}
.cell .dots i{width:5px;height:5px;border-radius:50%;display:block}
.cell .tick{position:absolute;inset:0;display:grid;place-items:center;
  background:color-mix(in srgb,var(--accent) 14%,transparent);opacity:0;transition:opacity .25s}
.cell.done{border-color:var(--accent);background:color-mix(in srgb,var(--accent-bg) 70%,var(--panel2))}
.cell.done .tick{opacity:1}
.cell.done .tick svg{width:22px;height:22px;stroke:var(--accent-ink);stroke-width:3;fill:none;stroke-linecap:round;stroke-linejoin:round}
.cell.is-today{border-color:var(--accent);border-width:2px;animation:pulseRing 2.8s infinite}
.cell.is-today .n{color:var(--accent-ink);font-weight:700}
.cell.exam{background:linear-gradient(150deg,var(--test-bg),var(--panel2));border-color:var(--test)}
.cell.exam .n{color:var(--test);font-weight:700}
.cell .ex{font-size:8px;font-weight:800;letter-spacing:.05em;color:var(--test);text-transform:uppercase}
.cell.rest{background-image:repeating-linear-gradient(135deg,transparent,transparent 5px,color-mix(in srgb,var(--line) 60%,transparent) 5px,color-mix(in srgb,var(--line) 60%,transparent) 6px)}
@media (max-width:560px){
  .cal{padding:8px}.grid,.dow{gap:4px}.cell{border-radius:9px;padding:4px;aspect-ratio:1/1}
  .cell .n{font-size:11px}.cell .dots i{width:4px;height:4px}.cell .wtag,.cell .hint{display:none}
}
.callegend{display:flex;flex-wrap:wrap;gap:14px;margin-top:14px;font-size:12.4px;color:var(--muted)}
.callegend span{display:inline-flex;align-items:center;gap:6px}
.callegend i{width:8px;height:8px;border-radius:50%;display:block}
.monthjump{display:flex;gap:6px;overflow-x:auto;padding:2px 0 6px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.monthjump::-webkit-scrollbar{display:none}
.mj{border:1px solid var(--line2);background:var(--panel);border-radius:999px;padding:5px 13px;font-size:12.5px;
  font-weight:600;cursor:pointer;white-space:nowrap;transition:.18s;color:var(--ink2)}
.mj:hover{border-color:var(--accent)}
.mj.on{background:var(--accent);border-color:var(--accent);color:#fff}
:root[data-theme="dark"] .mj.on{color:#2c0f1c}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .mj.on{color:#2c0f1c}}

.scrim{position:fixed;inset:0;z-index:90;background:rgba(40,16,30,.45);backdrop-filter:blur(3px);display:none;animation:fadeIn .22s}
.scrim.on{display:block}
.sheet{position:fixed;z-index:91;background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow-l);
  display:none;flex-direction:column;overflow:hidden}
.sheet.on{display:flex}
@media (min-width:701px){
  .sheet{top:50%;left:50%;transform:translate(-50%,-50%);width:min(560px,92vw);max-height:82vh;border-radius:var(--r)}
  .sheet.on{animation:sheetMid .28s cubic-bezier(.22,.7,.28,1)}
}
@media (max-width:700px){
  .sheet{left:0;right:0;bottom:0;max-height:86vh;border-radius:22px 22px 0 0;border-bottom:0;padding-bottom:var(--safe)}
  .sheet.on{animation:sheetUp .3s cubic-bezier(.22,.7,.28,1)}
}
.sheet>header{padding:18px 18px 14px;border-bottom:1px solid var(--line);display:flex;align-items:flex-start;gap:12px}
.sheet .grip{position:absolute;top:7px;left:50%;transform:translateX(-50%);width:38px;height:4px;border-radius:99px;background:var(--line2)}
@media (min-width:701px){.sheet .grip{display:none}}
.sheet h4{font-family:Fraunces,serif;font-size:19px;font-weight:600;letter-spacing:-.02em}
.sheet .wl{font-size:12.4px;color:var(--muted);margin-top:2px}
.sheet .body{overflow-y:auto;-webkit-overflow-scrolling:touch;flex:1;min-height:0}
.sheet .foot{padding:13px 18px;border-top:1px solid var(--line);display:flex;align-items:center;gap:12px}

.btn{border:1px solid var(--line2);background:var(--panel);border-radius:11px;padding:9px 15px;font-size:13.8px;
  font-weight:600;cursor:pointer;transition:.18s;color:var(--ink);white-space:nowrap}
.btn:hover{border-color:var(--accent);color:var(--accent-ink)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
:root[data-theme="dark"] .btn.primary{color:#2c0f1c}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .btn.primary{color:#2c0f1c}}
.btn.primary:hover{filter:brightness(1.05);color:#fff}
:root[data-theme="dark"] .btn.primary:hover{color:#2c0f1c}
.btn:disabled{opacity:.55;cursor:default}
.btn.wide{flex:1;text-align:center}

.rail{display:grid;gap:10px;margin-top:24px}
.phase{display:grid;grid-template-columns:52px minmax(0,1fr);gap:16px;background:var(--panel);border:1px solid var(--line);
  border-left:4px solid var(--pc,var(--accent));border-radius:var(--r);padding:17px 20px;transition:transform .25s,box-shadow .25s}
.phase:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.phase .no{font-family:Fraunces,serif;font-size:30px;font-weight:600;color:var(--pc);line-height:1;letter-spacing:-.03em}
.phase .no small{display:block;font-family:Inter,sans-serif;font-size:10px;font-weight:700;letter-spacing:.09em;
  text-transform:uppercase;color:var(--muted);margin-top:4px}
.phase .meta{font-size:12.6px;color:var(--muted);font-weight:550}
.phase .goal{margin-top:7px;font-size:14.8px}
.phase .det{margin-top:4px;font-size:14px;color:var(--muted)}
.phase.now{box-shadow:0 0 0 2px color-mix(in srgb,var(--pc) 32%,transparent)}
.phase.now .meta::after{content:" · you are here";color:var(--pc);font-weight:700}
.phase .pbar{margin-top:10px;height:5px;border-radius:99px;background:var(--bg2);overflow:hidden}
.phase .pbar i{display:block;height:100%;background:var(--pc);border-radius:99px;width:0;transition:width 1s cubic-bezier(.2,.7,.3,1)}

.filters{display:flex;flex-wrap:wrap;gap:7px;margin:20px 0 14px}
.fbtn{border:1px solid var(--line2);background:var(--panel);color:var(--ink2);font-size:12.8px;font-weight:600;
  padding:6px 13px;border-radius:999px;cursor:pointer;transition:.18s}
.fbtn:hover{border-color:var(--accent);transform:translateY(-1px)}
.fbtn.on{background:var(--accent);border-color:var(--accent);color:#fff}
:root[data-theme="dark"] .fbtn.on{color:#2c0f1c}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .fbtn.on{color:#2c0f1c}}

.weeks{display:grid;gap:8px}
.wk{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;transition:box-shadow .22s}
.wk:hover{box-shadow:var(--shadow-s)}
.wk.now{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-bg)}
.wk.done .whead .wt{text-decoration:line-through;color:var(--muted)}
.whead{display:grid;grid-template-columns:auto 44px minmax(0,1fr) auto;gap:13px;align-items:center;padding:13px 16px;
  cursor:pointer;user-select:none}
.whead:hover{background:var(--panel2)}
.wno{text-align:center}
.wno b{display:block;font-family:Fraunces,serif;font-size:19px;font-weight:600;line-height:1}
.wno span{font-size:9px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
.wt{font-weight:600;font-size:15px;letter-spacing:-.012em}
.wd{font-size:12.3px;color:var(--muted);margin-top:1px}
.wtag{font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;padding:3px 8px;border-radius:7px;
  background:color-mix(in srgb,var(--pc) 14%,transparent);color:var(--pc);white-space:nowrap}
.caret{color:var(--muted);transition:transform .25s cubic-bezier(.22,.7,.28,1);display:grid;place-items:center}
.wk.open .caret{transform:rotate(90deg)}
.wbody{display:grid;grid-template-rows:0fr;transition:grid-template-rows .34s cubic-bezier(.22,.7,.28,1)}
.wk.open .wbody{grid-template-rows:1fr}
.wbody>.inner{overflow:hidden;min-height:0}
.wbody .pad{padding:4px 16px 18px;border-top:1px solid var(--line)}
.subj{margin-top:15px}
.subj .sh{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:700;letter-spacing:.09em;
  text-transform:uppercase;margin-bottom:6px}
.dot{width:8px;height:8px;border-radius:50%}
.subj ul li{position:relative;padding-left:16px;margin:4px 0;font-size:14.4px;color:var(--ink2)}
.subj ul li::before{content:"";position:absolute;left:3px;top:.63em;width:5px;height:5px;border-radius:50%;background:var(--line2)}
.subj ul li b.dw{display:inline-block;min-width:30px;font-family:"JetBrains Mono",monospace;font-size:10.5px;
  font-weight:500;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin-right:5px}
.s-phy{color:var(--phy)}.s-phy .dot{background:var(--phy)}
.s-chem{color:var(--chem)}.s-chem .dot{background:var(--chem)}
.s-bio{color:var(--bio)}.s-bio .dot{background:var(--bio)}
.s-test{color:var(--test)}.s-test .dot{background:var(--test)}
.s-test+ul li{color:var(--ink)}

.trk{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;margin-top:12px;box-shadow:var(--shadow-s)}
.trkhead{display:flex;align-items:center;gap:12px;padding:15px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.trkhead h3{flex:1;min-width:110px}
.bar{height:7px;border-radius:99px;background:var(--bg2);overflow:hidden;min-width:100px;flex:0 1 190px}
.bar i{display:block;height:100%;background:var(--sc,var(--accent));border-radius:99px;width:0;
  transition:width .8s cubic-bezier(.2,.7,.3,1)}
.pct{font-family:"JetBrains Mono",monospace;font-size:12.5px;color:var(--muted);min-width:40px;text-align:right;
  font-variant-numeric:tabular-nums}
.tscroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.trk-t{border-collapse:collapse;width:100%;min-width:560px}
table.trk-t th{font-size:10.4px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);
  text-align:center;padding:9px 6px;border-bottom:1px solid var(--line);background:var(--panel2)}
table.trk-t th:first-child{text-align:left;padding-left:18px}
table.trk-t td{padding:7px 6px;border-bottom:1px solid var(--line);text-align:center;font-size:14.2px}
table.trk-t td:first-child{text-align:left;padding-left:18px}
table.trk-t tr:last-child td{border-bottom:0}
table.trk-t tbody tr{transition:background .18s}
table.trk-t tbody tr:hover td{background:var(--panel2)}
table.trk-t tbody tr.full td:first-child{color:var(--muted);text-decoration:line-through;text-decoration-color:var(--line2)}
.cl{display:inline-block;font-family:"JetBrains Mono",monospace;font-size:10.2px;color:var(--muted);
  border:1px solid var(--line2);border-radius:5px;padding:0 5px;margin-right:8px}
.qs{font-family:"JetBrains Mono",monospace;font-size:12.4px;color:var(--muted)}
.pri{display:inline-block;width:7px;height:7px;border-radius:50%;margin-left:7px;vertical-align:middle}
.pri3{background:var(--test)}.pri2{background:var(--gold)}.pri1{background:var(--line2)}
.legend{display:flex;flex-wrap:wrap;gap:15px;margin-top:12px;font-size:12.4px;color:var(--muted)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.cbxcell{display:grid;place-items:center}

.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:20px 22px;transition:box-shadow .22s}
.card:hover{box-shadow:var(--shadow-s)}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:13px}
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(235px,1fr));gap:13px}
.note{background:var(--gold-bg);border:1px solid color-mix(in srgb,var(--gold) 34%,transparent);border-radius:var(--r);padding:17px 20px}
.note .lbl{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--gold)}
.note p{margin-top:7px;color:var(--ink2);font-size:14.5px}
.tt{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;box-shadow:var(--shadow-s)}
.tt>header{padding:16px 20px;border-bottom:1px solid var(--line);background:var(--panel2)}
.tt>header p{font-size:13.2px;color:var(--muted);margin-top:4px}
.ttrow{display:grid;grid-template-columns:112px minmax(0,1fr);gap:15px;padding:11px 20px;border-bottom:1px solid var(--line);align-items:baseline}
.ttrow:last-child{border-bottom:0}
.ttrow .t{font-family:"JetBrains Mono",monospace;font-size:12.1px;color:var(--muted);white-space:nowrap}
.ttrow .a{font-size:14.5px;color:var(--ink2)}
.ttrow[data-k=bio]{background:color-mix(in srgb,var(--bio-bg) 52%,transparent)}
.ttrow[data-k=phy]{background:color-mix(in srgb,var(--phy-bg) 52%,transparent)}
.ttrow[data-k=chem]{background:color-mix(in srgb,var(--chem-bg) 52%,transparent)}
.ttrow[data-k=test]{background:color-mix(in srgb,var(--test-bg) 52%,transparent)}
.ttrow[data-k=meta] .a{color:var(--ink)}
.ttrow[data-k=reset] .a{color:var(--muted)}
@media (max-width:560px){.ttrow{grid-template-columns:1fr;gap:2px}}
.stable{width:100%;border-collapse:collapse;min-width:600px}
.stable th{font-size:10.4px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);
  text-align:left;padding:10px 12px;border-bottom:1px solid var(--line)}
.stable td{padding:12px;border-bottom:1px solid var(--line);font-size:14.2px;vertical-align:top}
.stable tr:last-child td{border-bottom:0}
.stable .tot{font-family:Fraunces,serif;font-size:20px;font-weight:600;color:var(--accent-ink)}
.stable .nm2{color:var(--muted);font-size:13.4px}
.mblock{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:20px 22px;transition:box-shadow .22s}
.mblock:hover{box-shadow:var(--shadow-s)}
.mblock h3{margin-bottom:9px}
.mblock li{position:relative;padding-left:18px;margin:8px 0;font-size:14.6px;color:var(--ink2)}
.mblock li::before{content:"";position:absolute;left:2px;top:.62em;width:6px;height:6px;border-radius:50% 0 50% 50%;
  background:var(--accent);opacity:.55;transform:rotate(45deg)}
.pgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px;margin-top:18px}
.pcard{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;transition:transform .22s,box-shadow .22s}
.pcard:hover{transform:translateY(-2px);box-shadow:var(--shadow-s)}
.pcard .k{font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
.pcard ul li{position:relative;padding-left:15px;margin:7px 0;font-size:14px;color:var(--ink2)}
.pcard ul li::before{content:"";position:absolute;left:2px;top:.63em;width:5px;height:5px;border-radius:50%;background:var(--accent);opacity:.55}
.rules{counter-reset:r;display:grid;gap:9px;margin-top:20px}
.rules li{counter-increment:r;display:grid;grid-template-columns:32px minmax(0,1fr);gap:13px;background:var(--panel);
  border:1px solid var(--line);border-radius:13px;padding:13px 17px;font-size:14.8px;color:var(--ink2);
  transition:transform .2s,border-color .2s,opacity .65s,translate .65s}
.rules li:hover{transform:translateX(3px);border-color:var(--accent-soft)}
.rules li::before{content:counter(r,decimal-leading-zero);font-family:"JetBrains Mono",monospace;font-size:12.4px;
  color:var(--accent-ink);padding-top:2px}
.quote{font-family:Fraunces,serif;font-style:italic;font-size:16px;color:var(--ink2);
  border-left:3px solid var(--accent-soft);padding-left:16px;margin-top:20px;max-width:52ch}

.subnav{display:flex;gap:7px;flex-wrap:wrap;margin-top:18px}
.subnav a{border:1px solid var(--line2);background:var(--panel);border-radius:999px;padding:6px 14px;
  font-size:12.8px;font-weight:600;color:var(--ink2);text-decoration:none;transition:.18s}
.subnav a:hover{border-color:var(--accent);color:var(--accent-ink)}

.authwrap{max-width:420px;margin:0 auto;padding:48px 0 20px}
.authcard{background:var(--panel);border:1px solid var(--line);border-radius:20px;box-shadow:var(--shadow);
  padding:26px 24px;position:relative;overflow:hidden}
.authcard::before{content:"";position:absolute;inset:0 0 auto;height:3px;background:var(--grad)}
.authcard h1{font-size:26px;margin:2px 0 4px}
.authcard .sub{margin-top:0}
.tabs{display:flex;gap:6px;margin:18px 0 4px}
.tabs button{flex:1;border:1px solid var(--line2);background:var(--panel2);border-radius:11px;padding:8px;
  font-size:13.4px;font-weight:600;cursor:pointer;color:var(--ink2);transition:.18s}
.tabs button.on{background:var(--accent);border-color:var(--accent);color:#fff}
:root[data-theme="dark"] .tabs button.on{color:#2c0f1c}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .tabs button.on{color:#2c0f1c}}
.field{display:block;margin-top:13px}
.field span{display:block;font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);margin-bottom:5px}
.field input{width:100%;font-size:15px;color:var(--ink);background:var(--panel2);
  border:1px solid var(--line2);border-radius:11px;padding:10px 12px;transition:.18s}
.field input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg)}
.formmsg{margin-top:13px;font-size:13.6px;border-radius:11px;padding:9px 12px;display:none}
.formmsg.show{display:block}
.formmsg.err{background:var(--test-bg);color:var(--test)}
.formmsg.ok{background:var(--accent-bg);color:var(--accent-ink)}
.btnrow{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap}
.hintline{font-size:13.4px;color:var(--muted);margin-top:12px}
.who{display:flex;align-items:center;gap:12px;padding:14px 16px;background:var(--panel2);
  border:1px solid var(--line);border-radius:14px;margin-top:16px}
.who .av{width:40px;height:40px;border-radius:50%;background:var(--grad);color:#fff;
  display:grid;place-items:center;font-family:Fraunces,serif;font-size:17px;font-weight:600;flex:none}
.who .em{flex:1;min-width:0;font-size:14.4px;font-weight:600;overflow:hidden;text-overflow:ellipsis}
.who .sub2{font-size:12.4px;color:var(--muted);font-weight:400}

footer.site{border-top:1px solid var(--line);padding:28px 0 46px;color:var(--muted);font-size:13px}
footer.site .wrap{display:flex;flex-wrap:wrap;gap:10px 26px;align-items:center}
footer.site .love{font-family:Fraunces,serif;font-style:italic;color:var(--accent-ink)}
footer.site .fsp{flex:1}
.reset{border:1px solid var(--line2);background:transparent;color:var(--muted);font-size:12.4px;padding:6px 13px;
  border-radius:10px;cursor:pointer;transition:.18s}
.reset:hover{border-color:var(--test);color:var(--test)}

@media print{
  :root{--bg:#fff;--panel:#fff;--panel2:#fff;--ink:#000;--ink2:#222;--muted:#555;--line:#ccc;--line2:#bbb}
  .topbar,.tabbar,.filters,.reset,.blob,.cdown,.scrim,.sheet,.monthjump,.nav,footer.site{display:none!important}
  body{padding-bottom:0;font-size:10.5pt}
  .wbody{grid-template-rows:1fr!important}.caret{display:none}
  .wk,.card,.phase,.tt,.trk,.mblock,.pcard,.cell{break-inside:avoid;box-shadow:none}
  main>section{padding:20px 0}.rv{opacity:1;transform:none}
}
