:root{--pink-500:#e88da6;--pink-600:#d97490;--pink-300:#f2aec1;--pink-100:#fbe2ea;--pink-50:#fdf3f6;--purple-900:#3d2470;--purple-700:#55379e;--purple-500:#7a5bc7;--purple-100:#e9e2f7;--purple-50:#f5f1fb;--blue-600:#3e5cc7;--blue-100:#e2e9fa;--mint-600:#2e8a63;--mint-500:#3fa97c;--mint-100:#ddf3e8;--peach-600:#c7622a;--peach-500:#e07a3f;--peach-100:#ffe8d9;--rose-600:#d9486b;--rose-100:#fadde4;--butter-500:#c9a227;--butter-100:#fff3c9;--cream:#fff9f4;--card:#fff;--ink:#2b2140;--ink-60:#6b6280;--ink-30:#b9b3c6;--line:#eee9f2;--scrim:#2b214073;--av-1-bg:#fbe2ea;--av-1-fg:#c2547a;--av-2-bg:#e9e2f7;--av-2-fg:#55379e;--av-3-bg:#ddf3e8;--av-3-fg:#2e8a63;--av-4-bg:#ffe8d9;--av-4-fg:#c7622a;--av-5-bg:#e2e9fa;--av-5-fg:#3e5cc7;--av-6-bg:#fff3c9;--av-6-fg:#9a7b1c;--font:"Nunito", "Segoe UI", system-ui, -apple-system, sans-serif;--fs-caption:12px;--fs-body-sm:14px;--fs-body:16px;--fs-title-sm:18px;--fs-title:22px;--fs-display:28px;--lh-body:1.5;--lh-title:1.25;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-7:32px;--sp-8:40px;--r-sm:10px;--r-md:16px;--r-lg:24px;--r-pill:999px;--shadow-1:0 2px 8px #3d247012;--shadow-2:0 6px 20px #3d24701a;--shadow-3:0 12px 40px #3d247029;--ease-pop:cubic-bezier(.34, 1.56, .64, 1);--ease-out:cubic-bezier(.2, .8, .2, 1);--dur-fast:.15s;--dur-med:.25s;--dur-slow:.4s;--device-w:390px;--device-h:844px;--sidebar-w:248px;--tabbar-h:64px;--appbar-h:56px}@font-face{font-family:Nunito;font-style:normal;font-weight:400 800;font-display:swap;src:url(/fonts/nunito-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-weight:400 800;font-display:swap;src:url(/fonts/nunito-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@keyframes pt-rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}.anim-rise,.stagger>*{animation:pt-rise var(--dur-slow) var(--ease-out) both}.stagger>:first-child{animation-delay:40ms}.stagger>:nth-child(2){animation-delay:90ms}.stagger>:nth-child(3){animation-delay:.14s}.stagger>:nth-child(4){animation-delay:.19s}.stagger>:nth-child(5){animation-delay:.24s}.stagger>:nth-child(6){animation-delay:.29s}.stagger>:nth-child(7){animation-delay:.34s}.stagger>:nth-child(8){animation-delay:.39s}.stagger>:nth-child(9){animation-delay:.44s}.stagger>:nth-child(10){animation-delay:.49s}.stagger>:nth-child(n+11){animation-delay:.54s}@keyframes pt-pop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.anim-pop{animation:pt-pop var(--dur-med) var(--ease-pop) both}@keyframes pt-draw{0%{stroke-dashoffset:var(--draw-len,60)}to{stroke-dashoffset:0}}.anim-draw path,.anim-draw polyline,.anim-draw circle{stroke-dasharray:var(--draw-len,60);stroke-dashoffset:var(--draw-len,60);animation:pt-draw .6s var(--ease-out) .15s forwards}@keyframes pt-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.18)}}.anim-pulse{animation:pt-pulse 1.6s var(--ease-out) 2}@keyframes pt-float{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.anim-float{animation:4s ease-in-out infinite pt-float}@keyframes pt-bounce{0%{transform:scale(1)}35%{transform:scale(1.25)}to{transform:scale(1)}}.anim-bounce{animation:pt-bounce .35s var(--ease-pop)}@keyframes pt-wave{0%{transform:scale(1)}40%{box-shadow:0 0 0 6px var(--mint-100);transform:scale(1.12)}to{transform:scale(1)}}.anim-wave{animation:pt-wave .5s var(--ease-pop) both}@keyframes pt-stamp{0%{opacity:0;transform:rotate(-18deg)scale(1.8)}60%{opacity:1;transform:rotate(-8deg)scale(.95)}to{opacity:1;transform:rotate(-8deg)scale(1)}}.anim-stamp{animation:pt-stamp .5s var(--ease-out) both}@keyframes pt-slide-out{0%{opacity:1;max-height:400px;transform:translate(0)}60%{opacity:0;max-height:400px;transform:translate(60px)}to{opacity:0;max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;transform:translate(60px)}}.anim-slide-out{animation:pt-slide-out .5s var(--ease-out) forwards;overflow:hidden}@keyframes pt-grow-x{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.anim-grow-x{transform-origin:0;animation:pt-grow-x .8s var(--ease-out) both}@keyframes pt-grow-y{0%{transform:scaleY(0)}to{transform:scaleY(1)}}.anim-grow-y{transform-origin:bottom;animation:pt-grow-y .7s var(--ease-out) both}@keyframes pt-shimmer{0%{background-position:-200px 0}to{background-position:200px 0}}.anim-shimmer{background-image:linear-gradient(90deg, transparent 0%, var(--purple-50) 50%, transparent 100%);background-repeat:no-repeat;background-size:200px 100%;animation:1.2s ease-in-out infinite pt-shimmer}@keyframes pt-toast-in{0%{opacity:0;transform:translate(-50%,16px)}to{opacity:1;transform:translate(-50%)}}@keyframes pt-toast-out{0%{opacity:1;transform:translate(-50%)}to{opacity:0;transform:translate(-50%,8px)}}@keyframes pt-fade-in{0%{opacity:0}to{opacity:1}}@keyframes pt-sheet-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes pt-modal-in{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}@keyframes pt-confetti{0%{opacity:1;transform:translate(0)rotate(0)}to{opacity:0;transform:translate(var(--cx,0px), var(--cy,-120px)) rotate(var(--cr,360deg))}}.confetti-bit{pointer-events:none;width:8px;height:12px;animation:pt-confetti 1.1s var(--ease-out) forwards;border-radius:2px;position:absolute}.count-up{font-variant-numeric:tabular-nums}@keyframes pt-fly{0%{opacity:1;transform:translate(0)rotate(0)}to{opacity:0;transform:translate(80px,-60px)rotate(-20deg)}}.anim-fly{animation:pt-fly .6s var(--ease-out) forwards}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}*,:before,:after{box-sizing:border-box}html,body,#root{min-height:100dvh;margin:0;padding:0}body{font-family:var(--font);font-size:var(--fs-body);color:var(--ink);background:var(--cream);line-height:1.5}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0}input,select,textarea{font:inherit;color:inherit}a{color:var(--purple-700);text-decoration:none}h1,h2,h3,p{margin:0}.screen{flex-direction:column;max-width:560px;min-height:100dvh;margin:0 auto;display:flex}.content{padding:var(--sp-4);padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + var(--sp-6));flex:1}.content.centered{flex-direction:column;justify-content:center;display:flex}.t-display{font-size:var(--fs-display);color:var(--purple-900);font-weight:800;line-height:1.25}.t-title{font-size:var(--fs-title);color:var(--purple-900);font-weight:800;line-height:1.25}.t-title-sm{font-size:var(--fs-title-sm);font-weight:700}.t-caption{font-size:var(--fs-caption);color:var(--ink-60)}.t-body-sm{font-size:var(--fs-body-sm)}.t-strong{font-weight:700}.t-center{text-align:center}.muted{color:var(--ink-60)}.row{align-items:center;gap:var(--sp-3);display:flex}.row.between{justify-content:space-between}.row.wrap{flex-wrap:wrap}.col{gap:var(--sp-3);flex-direction:column;display:flex}.grow{flex:1;min-width:0}.mt-2{margin-top:var(--sp-2)}.mt-3{margin-top:var(--sp-3)}.mt-4{margin-top:var(--sp-4)}.mt-5{margin-top:var(--sp-5)}.mb-3{margin-bottom:var(--sp-3)}.mb-4{margin-bottom:var(--sp-4)}.card{background:var(--card);border-radius:var(--r-md);box-shadow:var(--shadow-1);padding:var(--sp-4)}.card.pad-lg{padding:var(--sp-5)}.card.tint-mint{background:var(--mint-100);box-shadow:none}.card.tint-peach{background:var(--peach-100);box-shadow:none}.card.tint-rose{background:var(--rose-100);box-shadow:none}.card.tint-blue{background:var(--blue-100);box-shadow:none}.card.tint-purple{background:var(--purple-50);box-shadow:none}.card.tint-butter{background:var(--butter-100);box-shadow:none}.card.tint-pink{background:var(--pink-100);box-shadow:none}a.card{color:inherit}.card.clickable{transition:transform var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);cursor:pointer}.card.clickable:hover{box-shadow:var(--shadow-2);transform:translateY(-2px)}.card.clickable:active{transform:scale(.99)}.section-label{font-size:var(--fs-caption);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-60);margin:var(--sp-5) 0 var(--sp-3);align-items:center;gap:6px;font-weight:800;display:flex}.section-label svg{width:16px;height:16px}.ico-tile{border-radius:var(--r-pill);background:var(--card);flex:0 0 40px;justify-content:center;align-items:center;width:40px;height:40px;display:flex}.ico-tile svg{width:20px;height:20px}.ico-tile.tint-mint{background:var(--mint-100);color:var(--mint-600)}.ico-tile.tint-peach{background:var(--peach-100);color:var(--peach-600)}.ico-tile.tint-rose{background:var(--rose-100);color:var(--rose-600)}.ico-tile.tint-blue{background:var(--blue-100);color:var(--blue-600)}.ico-tile.tint-purple{background:var(--purple-100);color:var(--purple-700)}.ico-tile.tint-pink{background:var(--pink-100);color:var(--pink-600)}.ico-tile.tint-butter{background:var(--butter-100);color:var(--peach-600)}p>svg,span>svg,.choice-chip>svg{vertical-align:-.15em}.btn{justify-content:center;align-items:center;gap:var(--sp-2);border-radius:var(--r-pill);font-weight:800;font-size:var(--fs-body-sm);transition:transform .15s var(--ease-out), background .15s var(--ease-out), box-shadow .15s var(--ease-out), opacity .15s;-webkit-user-select:none;user-select:none;padding:12px 22px;display:inline-flex}.btn:active{transform:scale(.96)}.btn:disabled{opacity:.45;pointer-events:none}.btn-primary{background:var(--pink-500);color:var(--card);box-shadow:var(--shadow-1)}.btn-primary:hover{background:var(--pink-600);box-shadow:var(--shadow-2)}.btn-secondary{color:var(--purple-700);border:2px solid var(--purple-100);background:0 0}.btn-secondary:hover{background:var(--purple-50);border-color:var(--purple-500)}.btn-mint{background:var(--mint-500);color:var(--card)}.btn-mint:hover{background:var(--mint-600)}.btn-danger{background:var(--rose-100);color:var(--rose-600)}.btn-danger:hover{background:var(--rose-600);color:var(--card)}.btn-ghost{color:var(--purple-700);background:0 0}.btn-ghost:hover{background:var(--purple-50)}.btn-block{width:100%;font-size:var(--fs-body);padding:15px 22px;display:flex}.btn-sm{font-size:var(--fs-caption);padding:8px 14px}.chip{border-radius:var(--r-pill);font-size:var(--fs-caption);white-space:nowrap;align-items:center;gap:5px;padding:4px 12px;font-weight:800;display:inline-flex}.chip-mint{background:var(--mint-100);color:var(--mint-600)}.chip-peach{background:var(--peach-100);color:var(--peach-600)}.chip-rose{background:var(--rose-100);color:var(--rose-600)}.chip-blue{background:var(--blue-100);color:var(--blue-600)}.chip-purple{background:var(--purple-100);color:var(--purple-700)}.chip-pink{background:var(--pink-100);color:var(--pink-600)}.chip-ink{background:var(--line);color:var(--ink-60)}.field{gap:var(--sp-2);margin-bottom:var(--sp-4);flex-direction:column;display:flex}.field label{font-size:var(--fs-body-sm);font-weight:800}.input,.select,.textarea{border-radius:var(--r-sm);border:2px solid var(--line);background:var(--card);width:100%;font-size:var(--fs-body-sm);padding:13px 16px;font-weight:600}.input:focus,.select:focus,.textarea:focus{border-color:var(--pink-500);outline:none}.textarea{resize:vertical;min-height:90px;font-family:var(--font)}@media (pointer:coarse){.input,.select,.textarea{font-size:var(--fs-body)}}.choice-chips{gap:var(--sp-2);flex-wrap:wrap;display:flex}.choice-chip{border-radius:var(--r-pill);border:2px solid var(--line);background:var(--card);font-size:var(--fs-body-sm);color:var(--ink-60);transition:all .15s var(--ease-out);align-items:center;gap:6px;padding:9px 16px;font-weight:700;display:inline-flex}.choice-chip:hover{border-color:var(--purple-100)}.choice-chip.selected{border-color:var(--pink-500);background:var(--pink-100);color:var(--pink-600)}.list{gap:var(--sp-2);flex-direction:column;display:flex}.list-row{align-items:center;gap:var(--sp-3);background:var(--card);border-radius:var(--r-md);box-shadow:var(--shadow-1);padding:var(--sp-3) var(--sp-4);color:inherit;text-align:left;width:100%;transition:transform var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);display:flex}a.list-row,.list-row.clickable{cursor:pointer}a.list-row:hover,.list-row.clickable:hover{box-shadow:var(--shadow-2);transform:translateY(-1px)}.avatar{border-radius:var(--r-pill);width:44px;height:44px;font-weight:800;font-size:var(--fs-body-sm);background:var(--purple-100);color:var(--purple-700);flex:none;justify-content:center;align-items:center;display:inline-flex}.avatar.a1{background:var(--pink-100);color:var(--pink-600)}.avatar.a2{background:var(--mint-100);color:var(--mint-600)}.avatar.a3{background:var(--blue-100);color:var(--blue-600)}.avatar.a4{background:var(--peach-100);color:var(--peach-600)}.att-grid{gap:var(--sp-3);grid-template-columns:repeat(3,1fr);display:grid}.att-tile{background:var(--card);border-radius:var(--r-md);box-shadow:var(--shadow-1);padding:var(--sp-3) var(--sp-2);align-items:center;gap:var(--sp-2);text-align:center;transition:all .15s var(--ease-out);font-size:var(--fs-caption);-webkit-tap-highlight-color:transparent;border:2px solid #0000;flex-direction:column;font-weight:700;display:flex}.att-tile[data-state=present]{border-color:var(--mint-500);background:var(--mint-100)}.att-tile[data-state=absent]{border-color:var(--rose-600);background:var(--rose-100)}.att-tile[data-state=late]{border-color:var(--peach-500);background:var(--peach-100)}.att-tile[data-state=leave]{border-color:var(--blue-600);background:var(--blue-100);opacity:.85}.att-state{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-60);font-size:10px;font-weight:800}.tabbar{max-width:560px;height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));background:var(--card);border-top:1px solid var(--line);z-index:50;padding-bottom:env(safe-area-inset-bottom);margin:0 auto;display:flex;position:fixed;bottom:0;left:0;right:0}.tab{color:var(--ink-60);transition:color var(--dur-fast) var(--ease-out);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;font-size:11px;font-weight:700;display:flex;position:relative}.tab span{white-space:nowrap;text-overflow:ellipsis;max-width:100%;overflow:hidden}.tab .tab-ico{border-radius:var(--r-pill);transition:background .25s var(--ease-out);padding:3px 14px;display:inline-flex}.tab .tab-ico svg{width:24px;height:24px}.tab.active{color:var(--purple-700)}.tab.active .tab-ico{background:var(--purple-100)}.tab .badge{border-radius:var(--r-pill);background:var(--rose-600);min-width:17px;height:17px;color:var(--card);justify-content:center;align-items:center;padding:0 4px;font-size:10px;font-weight:800;display:flex;position:absolute;top:6px;right:calc(50% - 24px)}.pbar{background:var(--line);border-radius:var(--r-pill);height:8px;overflow:hidden}.pbar .pbar-fill{border-radius:var(--r-pill);background:var(--mint-500);height:100%;transition:width .8s var(--ease-out)}.pbar.thin{height:5px}.banner{align-items:center;gap:var(--sp-3);border-radius:var(--r-md);padding:var(--sp-4);display:flex}.banner .bn-ico{border-radius:var(--r-pill);background:var(--card);flex:none;justify-content:center;align-items:center;width:42px;height:42px;display:flex}.banner .bn-ico svg{width:20px;height:20px}.empty-state{text-align:center;padding:var(--sp-7) var(--sp-5);align-items:center;gap:var(--sp-3);flex-direction:column;display:flex}.empty-state .es-title{color:var(--purple-900);font-weight:800;font-size:var(--fs-body)}.empty-state .es-sub{font-size:var(--fs-body-sm);color:var(--ink-60);max-width:260px}.timeline{padding-left:28px;position:relative}.timeline:before{content:"";border-radius:var(--r-pill);background:var(--line);width:2px;position:absolute;top:8px;bottom:8px;left:9px}.tl-item{margin-bottom:var(--sp-4);position:relative}.tl-item:before{content:"";border-radius:var(--r-pill);background:var(--pink-300);width:12px;height:12px;box-shadow:0 0 0 3px var(--pink-100);position:absolute;top:14px;left:-25px}.tl-item.mint:before{background:var(--mint-500);box-shadow:0 0 0 3px var(--mint-100)}.tl-item.blue:before{background:var(--blue-600);box-shadow:0 0 0 3px var(--blue-100)}.tl-item.peach:before{background:var(--peach-500);box-shadow:0 0 0 3px var(--peach-100)}.seg{background:var(--purple-50);border-radius:var(--r-pill);gap:2px;padding:4px;display:flex}.seg-item{text-align:center;border-radius:var(--r-pill);font-size:var(--fs-body-sm);color:var(--ink-60);transition:all .25s var(--ease-out);cursor:pointer;white-space:nowrap;flex:1;padding:8px 12px;font-weight:800}.seg-item.active{background:var(--card);color:var(--purple-700);box-shadow:var(--shadow-1)}.stat-tile{flex-direction:column;gap:2px;display:flex}.stat-tile .st-ico{border-radius:var(--r-sm);width:42px;height:42px;margin-bottom:var(--sp-2);justify-content:center;align-items:center;display:flex}.stat-tile .st-ico svg{width:22px;height:22px}.stat-tile .st-value{font-size:var(--fs-title);color:var(--purple-900);font-weight:800;line-height:1.1}.stat-tile .st-label{font-size:var(--fs-body-sm);color:var(--ink-60);font-weight:700}.att-tile{position:relative}.att-mark{border-radius:var(--r-pill);width:22px;height:22px;color:var(--card);opacity:0;transition:all .15s var(--ease-pop);justify-content:center;align-items:center;display:flex;position:absolute;top:6px;right:6px;transform:scale(.5)}.att-mark svg{width:13px;height:13px}.att-tile[data-state=present] .att-mark{background:var(--mint-500);opacity:1;transform:scale(1)}.att-tile[data-state=absent] .att-mark{background:var(--rose-600);opacity:1;transform:scale(1)}.att-tile[data-state=late] .att-mark{background:var(--peach-500);opacity:1;transform:scale(1)}.att-tile[data-state=leave] .att-mark{background:var(--blue-600);opacity:1;transform:scale(1)}.overlay{z-index:150;max-width:560px;animation:pt-fade-in var(--dur-med) var(--ease-out) both;background:#2b214073;align-items:flex-end;margin:0 auto;display:flex;position:fixed;inset:0}.sheet{background:var(--card);border-radius:var(--r-lg) var(--r-lg) 0 0;padding:var(--sp-5);padding-bottom:var(--sp-7);width:100%;max-height:80%;animation:pt-sheet-up .4s var(--ease-out) both;overflow-y:auto}.sheet .handle{background:var(--line);width:44px;height:5px;margin:0 auto var(--sp-4);border-radius:999px}.icon-btn{border-radius:var(--r-pill);background:var(--card);width:40px;height:40px;box-shadow:var(--shadow-1);color:var(--purple-900);transition:transform var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);flex:none;justify-content:center;align-items:center;display:inline-flex}a.icon-btn:hover,button.icon-btn:hover{box-shadow:var(--shadow-2);transform:translateY(-1px)}a.icon-btn:active,button.icon-btn:active{transform:scale(.94)}.icon-btn svg{width:20px;height:20px}.toast{left:50%;bottom:calc(var(--tabbar-h) + 20px);background:var(--ink);color:var(--card);border-radius:var(--r-pill);font-size:var(--fs-body-sm);box-shadow:var(--shadow-3);z-index:200;max-width:min(90vw,420px);animation:pt-toast-in .25s var(--ease-pop) both;padding:12px 20px;font-weight:700;position:fixed;transform:translate(-50%)}.toast.leaving{animation:pt-toast-out .25s var(--ease-out) forwards}.paid-stamp{border:3px solid var(--mint-500);color:var(--mint-600);border-radius:var(--r-sm);font-weight:800;font-size:var(--fs-title-sm);letter-spacing:.2em;text-transform:uppercase;padding:4px 14px;display:inline-block;transform:rotate(-8deg)}.spinner{border:3px solid var(--purple-100);border-top-color:var(--pink-500);border-radius:var(--r-pill);width:28px;height:28px;margin:var(--sp-7) auto;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.otp-input{text-align:center;letter-spacing:.4em;font-size:var(--fs-title);font-weight:800}.search{align-items:center;gap:var(--sp-2);background:var(--card);border-radius:var(--r-pill);border:2px solid var(--line);padding:10px 16px;display:flex}.search svg{width:18px;height:18px;color:var(--ink-30);flex:none}.search input{min-width:0;font-size:var(--fs-body-sm);background:0 0;border:0;outline:none;flex:1;font-weight:600}.search:focus-within{border-color:var(--pink-500)}.cal{background:var(--card);border-radius:var(--r-md);box-shadow:var(--shadow-1);padding:var(--sp-4)}.cal-head{margin-bottom:var(--sp-3);justify-content:space-between;align-items:center;display:flex}.cal-grid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.cal-dow{text-align:center;font-size:var(--fs-caption);color:var(--ink-30);padding:var(--sp-1) 0;font-weight:800}.cal-day{aspect-ratio:1;border-radius:var(--r-sm);font-size:var(--fs-body-sm);color:var(--ink);cursor:pointer;transition:background var(--dur-fast) var(--ease-out);background:0 0;border:0;flex-direction:column;justify-content:center;align-items:center;gap:2px;font-weight:700;display:flex}.cal-day:hover{background:var(--purple-50)}.cal-day.other{color:var(--ink-30);cursor:default}.cal-day.weekend{color:var(--ink-60)}.cal-day.today{box-shadow:inset 0 0 0 2px var(--pink-500)}.cal-day.selected{background:var(--pink-500);color:var(--card)}.cal-day .dots{gap:3px;height:5px;display:flex}.cal-day .dot-ev{border-radius:var(--r-pill);width:5px;height:5px}.dot-ev{border-radius:var(--r-pill);width:8px;height:8px;display:inline-block}.dot-ev.ev-birthday{background:var(--butter-500)}.dot-ev.ev-holiday{background:var(--peach-500)}.dot-ev.ev-event{background:var(--blue-600)}.cal-day.selected .dot-ev{background:var(--card)}.masked-field{align-items:center;gap:var(--sp-3);background:var(--purple-50);border:1px dashed var(--purple-100);border-radius:var(--r-sm);padding:var(--sp-3) var(--sp-4);display:flex}.masked-field .mf-label{font-size:var(--fs-caption);color:var(--ink-60);font-weight:800}.masked-field .mf-value{letter-spacing:.12em;color:var(--purple-900);font-variant-numeric:tabular-nums;font-weight:800}.masked-field .mf-note{font-size:var(--fs-caption);color:var(--ink-60)}.masked-field .mf-lock{border-radius:var(--r-pill);background:var(--card);width:36px;height:36px;color:var(--purple-700);box-shadow:var(--shadow-1);cursor:pointer;border:0;flex:none;justify-content:center;align-items:center;margin-left:auto;display:flex}.masked-field .mf-lock svg{width:17px;height:17px}.masked-field.revealed{background:var(--card);border-style:solid}.masked-field.revealed .mf-value{letter-spacing:.03em}.chat-list{gap:var(--sp-3);flex-direction:column;display:flex}.bubble{max-width:78%;padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);font-size:var(--fs-body-sm);position:relative}.bubble .b-time{color:var(--ink-30);text-align:right;margin-top:3px;font-size:10px}.bubble.in{background:var(--card);box-shadow:var(--shadow-1);border-bottom-left-radius:4px;align-self:flex-start}.bubble.out{background:var(--purple-100);border-bottom-right-radius:4px;align-self:flex-end}.bubble.out .b-time{color:var(--purple-500)}.chat-day{font-size:var(--fs-caption);color:var(--ink-30);padding:var(--sp-2) 0;align-self:center;font-weight:800}.bubble.structured{background:var(--card);box-shadow:var(--shadow-1);border-left:4px solid var(--peach-500);max-width:88%}.chat-composer{align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);background:var(--card);border-top:1px solid var(--line);display:flex}.chat-composer input{font-size:var(--fs-body-sm);background:0 0;border:0;outline:none;flex:1;font-weight:600}.chat-composer .send-btn{border-radius:var(--r-pill);background:var(--pink-500);width:40px;height:40px;color:var(--card);cursor:pointer;border:0;flex:none;justify-content:center;align-items:center;display:flex}.chat-composer .send-btn svg{width:18px;height:18px}.thread-head{align-items:center;gap:var(--sp-3);padding-bottom:var(--sp-3);border-bottom:1px solid var(--line);margin-bottom:var(--sp-3);display:flex}.table-wrap{background:var(--card);border-radius:var(--r-md);box-shadow:var(--shadow-1);overflow-x:auto}table.pt-table{border-collapse:collapse;width:100%;font-size:var(--fs-body-sm)}.pt-table th{text-align:left;font-size:var(--fs-caption);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-60);padding:var(--sp-3) var(--sp-4);border-bottom:2px solid var(--line);white-space:nowrap;font-weight:800}.pt-table td{padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--line);vertical-align:middle}.pt-table tr:last-child td{border-bottom:0}.pt-table tbody tr{transition:background var(--dur-fast) var(--ease-out)}.pt-table tbody tr:hover{background:var(--purple-50)}.pt-table td.num,.pt-table th.num{text-align:right;font-variant-numeric:tabular-nums}.drow{justify-content:space-between;align-items:center;gap:var(--sp-3);padding:var(--sp-3) 0;border-bottom:1px solid var(--line);display:flex}.drow:last-child{border-bottom:0}.dot-grid{grid-template-columns:repeat(10,1fr);gap:6px;display:grid}.dot-grid .dg-cell{aspect-ratio:1;border-radius:var(--r-pill);background:var(--line)}.dot-grid .dg-cell.present{background:var(--mint-500)}.dot-grid .dg-cell.late{background:var(--peach-500)}.dot-grid .dg-cell.absent{background:var(--rose-600)}.dot-grid .dg-cell.leave{background:var(--blue-600)}.toggle{cursor:pointer;flex:none;width:48px;height:28px;position:relative}.toggle input{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}.toggle .track{background:var(--line);border-radius:var(--r-pill);transition:background var(--dur-med) var(--ease-out);position:absolute;inset:0}.toggle .track:after{content:"";background:var(--card);border-radius:var(--r-pill);width:22px;height:22px;box-shadow:var(--shadow-1);transition:transform var(--dur-med) var(--ease-pop);position:absolute;top:3px;left:3px}.toggle input:checked+.track{background:var(--mint-500)}.toggle input:checked+.track:after{transform:translate(20px)}.stepper{margin-bottom:var(--sp-5);align-items:center;display:flex}.stepper .step{flex:1;align-items:center;display:flex}.stepper .step:last-child{flex:0}.stepper .dot{border-radius:var(--r-pill);background:var(--purple-50);width:32px;height:32px;color:var(--ink-30);font-weight:800;font-size:var(--fs-body-sm);border:2px solid var(--line);transition:all var(--dur-med) var(--ease-out);flex:none;justify-content:center;align-items:center;display:flex}.stepper .dot svg{width:16px;height:16px}.stepper .bar{background:var(--line);border-radius:var(--r-pill);height:4px;margin:0 var(--sp-2);flex:1;position:relative;overflow:hidden}.stepper .bar:after{content:"";background:var(--pink-500);border-radius:var(--r-pill);transform-origin:0;transition:transform var(--dur-slow) var(--ease-out);position:absolute;inset:0;transform:scaleX(0)}.stepper .step.done .dot{background:var(--pink-500);border-color:var(--pink-500);color:var(--card)}.stepper .step.done .bar:after{transform:scaleX(1)}.stepper .step.active .dot{border-color:var(--pink-500);color:var(--pink-600);background:var(--pink-100)}.ring{justify-content:center;align-items:center;display:inline-flex;position:relative}.ring svg{transform:rotate(-90deg)}.ring .ring-track{fill:none;stroke:var(--line)}.ring .ring-fill{fill:none;stroke-linecap:round;transition:stroke-dashoffset .9s var(--ease-out)}.ring .ring-label{text-align:center;color:var(--purple-900);font-weight:800;position:absolute}.ring .ring-label small{font-size:var(--fs-caption);color:var(--ink-60);font-weight:700;display:block}.overlay.center{padding:var(--sp-5);justify-content:center;align-items:center}.pt-modal{background:var(--card);border-radius:var(--r-lg);padding:var(--sp-6);width:100%;max-width:420px;max-height:85%;box-shadow:var(--shadow-3);animation:pt-modal-in var(--dur-med) var(--ease-pop) both;overflow-y:auto}.tl-item.butter:before{background:var(--butter-500);box-shadow:0 0 0 3px var(--butter-100)}.tl-item.purple:before{background:var(--purple-500);box-shadow:0 0 0 3px var(--purple-100)}
