@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/assets/archivo-vietnamese-wdth-normal-rJmnGBSt.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/assets/archivo-latin-ext-wdth-normal-7khWdh9v.woff2)format("woff2-variations");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}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/assets/archivo-latin-wdth-normal-DY7AcnAa.woff2)format("woff2-variations");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}:root{--rubber:#171b21;--mat:#20262e;--rail:#2c333d;--rail-strong:#3a434f;--field:#717a86;--chalk:#ede9e2;--dust:#9ba4af;--plate-red:#d64541;--plate-blue:#2f6fdb;--plate-yellow:#e9b82e;--plate-green:#3e9e57;--good:#5cbf75;--warn:#e9b82e;--bad:#f06a62;--info:#8fb2f2;--radius-sm:6px;--radius:12px;--gutter:16px;--tab-h:64px;--f-body:"Archivo Variable", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:light){:root{--rubber:#f3f1ec;--mat:#fff;--rail:#e4e0d8;--rail-strong:#cfcac0;--field:#7a7f87;--chalk:#171b21;--dust:#5a626d;--good:#1d7a3a;--warn:#8a6200;--bad:#b3261e;--info:#2a59b5;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}*{box-sizing:border-box}html,body{margin:0;padding:0}html{scroll-padding-top:calc(84px + env(safe-area-inset-top));scroll-padding-bottom:calc(110px + env(safe-area-inset-bottom))}body{background:var(--rubber);color:var(--chalk);font-family:var(--f-body);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;font-size:1rem;line-height:1.5}.display,h1,h2,h3,.num{letter-spacing:.005em;font-stretch:72%;line-height:1.05}h1{margin:0 0 4px;font-size:2.25rem;font-weight:800}h2{margin:0 0 8px;font-size:1.5rem;font-weight:750}h3{margin:0;font-size:1.25rem;font-weight:700}.num{font-weight:800}.big{font-size:3rem;font-weight:850;font-stretch:66%;line-height:1}.muted{color:var(--dust)}.small{font-size:.875rem}.tiny{font-size:.8125rem}p{max-width:65ch;margin:0 0 12px}a{color:var(--chalk);text-underline-offset:3px}.good{color:var(--good)}.warn{color:var(--warn)}.bad{color:var(--bad)}.info{color:var(--info)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}:focus{outline:none}:focus-visible{outline:2px solid var(--chalk);outline-offset:2px;border-radius:var(--radius-sm)}h1[tabindex="-1"]:focus-visible{outline:none}.app{min-height:100dvh}.page{max-width:560px;padding:calc(20px + env(safe-area-inset-top)) var(--gutter) calc(var(--tab-h) + 32px + env(safe-area-inset-bottom));margin:0 auto}.page.no-tabs{padding-bottom:calc(120px + env(safe-area-inset-bottom))}.has-netbar .page{padding-top:16px}.netbar{max-width:560px;padding:calc(10px + env(safe-area-inset-top)) var(--gutter) 10px;background:var(--mat);border-bottom:1px solid var(--rail);align-items:center;gap:12px;margin:0 auto;font-size:.9375rem;font-weight:600;display:flex}.netbar.offline{color:var(--warn)}.stack>*+*{margin-top:12px}.stack-lg>*+*{margin-top:28px}.row{align-items:center;gap:12px;display:flex}.row.between{justify-content:space-between}.row.wrap{flex-wrap:wrap}.grow{flex:1;min-width:0}.section-head{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px;display:flex}.panel{background:var(--mat);border-radius:var(--radius);padding:16px}.panel.flat{border:1px solid var(--rail);background:0 0}.divider{background:var(--rail);border:0;height:1px;margin:12px 0}button,.btn{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0}.btn{border-radius:var(--radius-sm);background:var(--rail);min-height:44px;color:var(--chalk);justify-content:center;align-items:center;gap:8px;padding:10px 16px;font-weight:650;text-decoration:none;transition:background-color .12s;display:inline-flex}.btn:hover{background:var(--rail-strong)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--chalk);color:var(--rubber)}.btn.primary:hover{background:color-mix(in srgb, var(--chalk) 88%, var(--mat))}.btn.ghost{background:0 0;padding-inline:10px}.btn.ghost:hover{background:var(--rail)}.btn.danger{color:var(--bad);border:1px solid color-mix(in srgb, var(--bad) 55%, transparent);background:0 0}.btn.block{width:100%}.btn.lg{min-height:56px;font-size:1.0625rem;font-weight:750}.btn.sm{min-height:44px;padding:6px 12px;font-size:.875rem}.icon-btn{border-radius:var(--radius-sm);justify-content:center;align-items:center;width:44px;height:44px;display:inline-flex}.icon-btn:hover{background:var(--rail)}svg.i{flex:none;width:20px;height:20px}label.field{display:block}label.field>span{color:var(--dust);margin-bottom:6px;font-size:.875rem;display:block}input,textarea,select{font:inherit;color:var(--chalk);background:var(--rubber);border:1px solid var(--field);border-radius:var(--radius-sm);width:100%;min-height:44px;padding:10px 12px}input[aria-invalid=true]{border-color:var(--bad)}input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--chalk);outline-offset:0}textarea{resize:vertical;min-height:88px}.error-text{color:var(--bad);font-size:.9375rem}fieldset.checks{border:0;min-width:0;margin:0;padding:0}fieldset.checks legend{margin-bottom:6px;padding:0}.check-grid{gap:4px 12px;display:grid}.check-grid label.check{align-items:center;min-height:44px}.check-grid label.check input{margin-top:0}textarea.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.8125rem;line-height:1.4}label.check{align-items:flex-start;gap:12px;font-size:.9375rem;display:flex}label.check input{width:24px;height:24px;min-height:0;accent-color:var(--chalk);flex:none;margin:2px 0 0}.form-grid{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.seg{background:var(--rubber);border:1px solid var(--field);border-radius:var(--radius-sm);gap:2px;padding:2px;display:inline-flex}.seg button{min-width:48px;min-height:44px;color:var(--dust);border-radius:4px;padding:6px 14px;font-weight:600}.seg button[aria-pressed=true],.seg button[aria-checked=true]{background:var(--chalk);color:var(--rubber)}.seg.seg-block{width:100%;display:flex}.seg.seg-block button{flex:1;padding-inline:6px}.chip{background:var(--rail);color:var(--chalk);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 9px;font-size:.8125rem;font-weight:600;display:inline-flex}.chip.good{background:color-mix(in srgb, var(--good) 14%, transparent);color:var(--good)}.chip.warn{background:color-mix(in srgb, var(--warn) 14%, transparent);color:var(--warn)}.chip.info{background:color-mix(in srgb, var(--info) 14%, transparent);color:var(--info)}.chip.muted{background:var(--rail);color:var(--dust)}.dot{border-radius:50%;flex:none;width:10px;height:10px}.tabbar{z-index:20;background:color-mix(in srgb, var(--rubber) 96%, transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-top:1px solid var(--rail);padding-bottom:env(safe-area-inset-bottom);position:fixed;bottom:0;left:0;right:0}.tabbar nav{grid-template-columns:repeat(4,1fr);max-width:560px;margin:0 auto;display:grid}.tabbar a{height:var(--tab-h);color:var(--dust);flex-direction:column;justify-content:center;align-items:center;gap:3px;font-size:.75rem;font-weight:600;text-decoration:none;display:flex}.tabbar a.active{color:var(--chalk)}.tabbar a.active svg{stroke-width:2.4px}.week{grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.week .d{border-radius:var(--radius-sm);color:var(--dust);flex-direction:column;align-items:center;gap:6px;padding:10px 0;font-size:.75rem;font-weight:600;text-decoration:none;display:flex}.week .d.today{background:var(--mat);color:var(--chalk)}.week .d .slot{border:2px solid var(--rail-strong);width:30px;height:30px;color:var(--dust);border-radius:50%;place-items:center;font-size:.875rem;font-weight:800;font-stretch:72%;display:grid}.week .d .slot.planned{border-color:var(--c);color:var(--chalk)}.week .d .slot.light{border-style:dashed}.week .d .slot.done{background:var(--c);border-color:var(--c);color:#171b21}.week .d .slot.done[data-code=A]{color:#fff}.week .d .d-inner{display:contents}.day-card{position:relative;overflow:hidden}.day-card:before{content:"";background:var(--c,var(--dust));width:5px;position:absolute;top:0;bottom:0;left:0}.ex-list{margin:0;padding:0;list-style:none}.ex-list li{border-top:1px solid var(--rail);justify-content:space-between;gap:12px;padding:10px 0;display:flex}.ex-list li:first-child{border-top:0}.ex-list .target{white-space:nowrap;color:var(--dust);font-size:.9375rem}.session-head{z-index:10;background:color-mix(in srgb, var(--rubber) 96%, transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);margin:0 calc(-1 * var(--gutter));padding:calc(10px + env(safe-area-inset-top)) var(--gutter) 10px;border-bottom:1px solid var(--rail);position:sticky;top:0}.block{border-radius:var(--radius);background:var(--mat);overflow:hidden}.block+.block{margin-top:10px}.block-title{font:inherit;line-height:inherit;margin:0}.block-head{text-align:left;align-items:center;gap:12px;width:100%;min-height:60px;padding:14px 16px;display:flex}.block-head .name{font-size:1.125rem;font-weight:700;font-stretch:72%;line-height:1.15;display:block}.block-head:focus-visible{outline-offset:-3px}.block-head .idx{border:2px solid var(--c);width:28px;height:28px;color:var(--chalk);border-radius:50%;flex:none;place-items:center;font-size:.9375rem;font-weight:800;font-stretch:72%;display:grid}.block.done .block-head .idx{background:var(--c);color:#171b21}.block-body{padding:0 16px 16px}.target-line{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.target-line .x{color:var(--dust);font-size:1.75rem;font-weight:600}.target-line .u{color:var(--dust);font-size:1.125rem;font-weight:600;font-stretch:100%}.sets-table{border-collapse:collapse;width:100%;margin:6px 0 12px}.sets-table td{border-top:1px solid var(--rail);padding:8px 0}.sets-table td:last-child{text-align:right;width:44px}.sets-table .pending{color:var(--warn);font-size:.8125rem}.logger{grid-template-columns:1fr 1fr;gap:10px;display:grid}.stepper{background:var(--rubber);border:1px solid var(--field);border-radius:var(--radius-sm);align-items:stretch;display:flex}.stepper button{width:44px;min-height:52px;color:var(--dust);place-items:center;display:grid}.stepper button:hover{color:var(--chalk)}.stepper input{text-align:center;background:0 0;border:0;min-height:52px;padding:0;font-size:1.375rem;font-weight:800;font-stretch:72%}.stepper input:focus-visible{outline-offset:-2px}.logger .cap{color:var(--dust);margin-bottom:4px;font-size:.8125rem;display:block}.rir{gap:6px;display:flex}.rir button{border-radius:var(--radius-sm);border:1px solid var(--field);min-height:44px;color:var(--dust);flex:1;font-weight:700}.rir button[aria-checked=true]{background:var(--chalk);color:var(--rubber);border-color:var(--chalk)}.alt-list{margin:8px 0 0;padding:0;list-style:none}.alt-list li+li{margin-top:6px}.rest{z-index:30;padding:12px var(--gutter) calc(12px + env(safe-area-inset-bottom));background:var(--chalk);color:var(--rubber);position:fixed;bottom:0;left:0;right:0}.rest .inner{align-items:center;gap:12px;max-width:560px;margin:0 auto;display:flex}.rest .time{min-width:4ch;font-size:2rem;font-weight:850;font-stretch:66%}.rest .bar{background:color-mix(in srgb, currentColor 18%, transparent);border-radius:2px;height:4px;overflow:hidden}.rest .bar>i{transform-origin:0;background:currentColor;height:100%;display:block}.rest .btn{background:color-mix(in srgb, currentColor 12%, transparent);color:inherit}.rest .btn:hover{background:color-mix(in srgb, currentColor 20%, transparent)}.rest :focus-visible{outline-color:currentColor}.rest.over{background:var(--plate-green);color:#0e1a12}.plates{align-items:center;gap:14px;margin:8px 0 4px;display:flex}.plates svg{flex:none}.insight{border-top:1px solid var(--rail);gap:12px;padding:14px 0;display:flex}.insight:first-child{border-top:0;padding-top:0}.insight .mark{flex:none;width:22px;height:22px;margin-top:1px}.insight h4{margin:0 0 2px;font-size:1rem;font-weight:700}.insight p{color:var(--dust);margin:0;font-size:.9375rem}.vol{grid-template-columns:96px 1fr 36px;align-items:center;gap:10px;padding:5px 0;font-size:.9375rem;display:grid}.vol .track{background:var(--rubber);border-radius:3px;height:12px;position:relative}.vol .band{background:color-mix(in srgb, var(--chalk) 9%, transparent);border-left:1px dashed var(--field);border-right:1px dashed var(--field);position:absolute;top:0;bottom:0}.vol .fill{background:var(--chalk);border-radius:0 4px 4px 0;position:absolute;top:2px;bottom:2px;left:0}.vol .fill.focus{background:var(--plate-blue)}.vol .v{text-align:right;color:var(--dust)}.focus-mark{color:var(--info)}.chart{touch-action:pan-y;width:100%;height:auto;display:block}.chart text{fill:var(--dust);font-size:11px;font-family:var(--f-body)}.chart .grid{stroke:var(--rail);stroke-width:1px}.chart .line{fill:none;stroke:var(--chalk);stroke-width:2px;stroke-linejoin:round;stroke-linecap:round}.chart .pt{fill:var(--chalk);stroke:var(--mat);stroke-width:2px}.chart .cross{stroke:var(--dust);stroke-width:1px;stroke-dasharray:3 3}.chart .tip-bg{fill:var(--rubber);stroke:var(--rail-strong)}.chart .tip{fill:var(--chalk);font-size:12px;font-weight:700}.photo-grid{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.photo-cell{aspect-ratio:3/4;border-radius:var(--radius-sm);background:var(--rubber);border:1px solid var(--rail);place-items:center;display:grid;position:relative;overflow:hidden}.photo-cell img{object-fit:cover;width:100%;height:100%}.photo-cell .cap{background:color-mix(in srgb, var(--rubber) 85%, transparent);color:var(--chalk);border-radius:4px;padding:2px 6px;font-size:.75rem;position:absolute;bottom:6px;left:6px}.photo-large{border-radius:var(--radius-sm);background:var(--rubber);place-items:center;min-height:200px;display:grid;overflow:hidden}.photo-large img{object-fit:contain;width:100%;max-height:65dvh;display:block}.hist-item{border-top:1px solid var(--rail);color:inherit;align-items:center;gap:12px;padding:12px 0;text-decoration:none;display:flex}.hist-item:first-child{border-top:0}.login{max-width:400px;min-height:100dvh;padding:var(--gutter);align-content:center;margin:0 auto;display:grid}.wordmark{margin-bottom:8px;font-size:4rem;font-weight:900;font-stretch:62%;line-height:.9}.toast{left:50%;bottom:calc(var(--tab-h) + 16px + env(safe-area-inset-bottom));z-index:40;background:var(--chalk);color:var(--rubber);border-radius:var(--radius-sm);align-items:center;gap:8px;width:max-content;max-width:min(528px,100% - 32px);min-height:44px;padding:6px 6px 6px 16px;font-weight:650;display:flex;position:fixed;transform:translate(-50%)}.toast .btn{background:color-mix(in srgb, currentColor 12%, transparent);color:inherit}.toast :focus-visible{outline-color:currentColor}.toast.error{background:var(--mat);color:var(--bad);border:1px solid var(--bad)}dialog{background:var(--mat);color:var(--chalk);border:1px solid var(--rail-strong);border-radius:var(--radius);width:min(480px,100% - 32px);padding:20px}dialog::backdrop{background:#0009}details>summary{cursor:pointer;min-height:44px;color:var(--dust);align-items:center;gap:8px;font-weight:600;list-style:none;display:flex}details>summary::-webkit-details-marker{display:none}details[open]>summary svg{transform:rotate(90deg)}ol.refs{color:var(--dust);padding-left:20px;font-size:.875rem}.legal h2{margin-top:24px;font-size:1.25rem}.legal ul{padding-left:20px}.legal li{max-width:65ch;margin-bottom:8px}ol.refs li+li{margin-top:6px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}@media (forced-colors:active){.btn.primary,.rir button[aria-checked=true],.seg button[aria-pressed=true],.seg button[aria-checked=true]{border:2px solid canvastext}.vol .fill,.chart .line{forced-color-adjust:none}}.block-head>svg:last-child{color:var(--dust);transition:transform .15s}.block-head[aria-expanded=true]>svg:last-child{transform:rotate(90deg)}
