@font-face{font-family:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(../media/plus-jakarta-sans-cyrillic-ext-wght-normal.1p5eg27ho_atv.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(../media/plus-jakarta-sans-vietnamese-wght-normal.2gl4mcd5dm2h_.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:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(../media/plus-jakarta-sans-latin-ext-wght-normal.362mv560wxbnh.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:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(../media/plus-jakarta-sans-latin-wght-normal.1nsast9qgxif8.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{--bg:#0b1a2c;--surface:#172a40;--surface-2:#1f3651;--surface-3:#284262;--line:#a9b8c924;--text:#fff;--text-2:#a9b8c9;--text-3:#6f8399;--primary:#f2c14e;--primary-ink:#1a1405;--glow:#8fd3db;--sand:#e0b66e;--green:#5fa83a;--yellow:#f2c14e;--orange:#f0973e;--red:#e5634d;--radius:16px;--radius-sm:10px;--shadow:0 8px 24px #00000059;--nav-h:64px;--safe-b:env(safe-area-inset-bottom,0px);--safe-t:env(safe-area-inset-top,0px);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none;font-family:Plus Jakarta Sans Variable,system-ui,sans-serif;font-size:16px;line-height:1.45}a{color:var(--glow);text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--glow);outline-offset:2px}h1,h2,h3{margin:0;line-height:1.2}h1{font-size:1.35rem;font-weight:750}h2{font-size:1.1rem;font-weight:700}h3{font-size:.95rem;font-weight:700}.muted{color:var(--text-2)}.small{font-size:.85rem}.tiny{font-size:.75rem}.nowrap{white-space:nowrap}.stack{flex-direction:column;gap:12px;display:flex}.row{align-items:center;gap:8px;display:flex}.row.wrap{flex-wrap:wrap}.spread{justify-content:space-between}.grow{flex:1;min-width:0}.app{max-width:560px;padding:8px 12px calc(var(--nav-h) + var(--safe-b) + 20px);margin:0 auto}.topbar{z-index:20;padding-top:var(--safe-t);background:var(--bg);border-bottom:1px solid var(--line);position:sticky;top:0}.topbar-inner{justify-content:space-between;align-items:center;max-width:560px;height:52px;margin:0 auto;padding:0 12px;display:flex}.topbar-logo{aspect-ratio:720/340;width:auto;height:34px;display:block}.icon-btn{width:42px;height:42px;color:var(--text);cursor:pointer;background:0 0;border:0;border-radius:12px;place-items:center;display:inline-grid;position:relative}.icon-btn:active{background:var(--surface)}.badge{background:var(--red);color:#fff;border-radius:9px;place-items:center;min-width:18px;height:18px;padding:0 5px;font-size:.7rem;font-weight:800;display:grid;position:absolute;top:4px;right:3px}.bottomnav{z-index:20;padding-bottom:var(--safe-b);border-top:1px solid var(--line);background:#0f2136;position:fixed;inset:auto 0 0}.bottomnav-inner{max-width:560px;height:var(--nav-h);margin:0 auto;display:flex}.navlink{color:var(--text-3);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;font-size:.72rem;font-weight:650;display:flex}.navlink[aria-current=page]{color:var(--primary)}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px}.card.flat{box-shadow:none}.list{flex-direction:column;gap:8px;display:flex}.list-item{background:var(--surface);border-radius:14px;align-items:center;gap:12px;padding:12px 14px;display:flex}.btn{cursor:pointer;background:var(--primary);min-height:46px;color:var(--primary-ink);border:0;border-radius:14px;justify-content:center;align-items:center;gap:8px;padding:0 18px;font-weight:750;transition:transform 80ms,filter .15s;display:inline-flex;box-shadow:0 4px 18px #f2c14e38}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.45;cursor:default;box-shadow:none}.btn.secondary{background:var(--surface-2);color:var(--text);box-shadow:none}.btn.ghost{color:var(--text-2);box-shadow:none;background:0 0}.btn.danger{color:#ff9c8a;box-shadow:none;background:#e5634d29}.btn.small{border-radius:10px;min-height:36px;padding:0 12px;font-size:.88rem}.btn.block{width:100%}.field{flex-direction:column;gap:6px;display:flex}.field label{color:var(--text-2);font-size:.82rem;font-weight:600}.input,select.input,textarea.input{background:var(--bg);border:1px solid var(--line);width:100%;min-height:46px;color:var(--text);border-radius:12px;padding:10px 14px}select.input,input.input[type=date]{appearance:none;text-align:left}select.input{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23A9B8C9' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-position:right 14px center;background-repeat:no-repeat;padding-right:40px}input.input[type=date]::-webkit-date-and-time-value{text-align:left}input.input[type=date]::-webkit-calendar-picker-indicator{filter:invert(.8)}.input:focus{border-color:var(--glow);outline:none;box-shadow:0 0 0 3px #8fd3db2e}.code-input{letter-spacing:.5em;text-align:center;font-size:1.8rem;font-weight:750}.error{color:#ff9c8a;font-size:.9rem}.notice{color:var(--sand);background:#e0b66e1f;border-radius:12px;padding:10px 14px;font-size:.9rem}.pill{background:var(--surface-2);color:var(--text-2);border-radius:999px;align-items:center;gap:4px;padding:2px 9px;font-size:.75rem;font-weight:700;display:inline-flex}.pill.SAFE{color:#8fd46a;background:#5fa83a2e}.pill.RESERVE{color:var(--orange);background:#f0973e2e}.pill.WAITING{color:#ff9c8a;background:#e5634d2e}.pill.glow{color:var(--glow);background:#8fd3db24}.dot{border-radius:50%;flex:none;width:9px;height:9px;display:inline-block}.dot.SAFE{background:var(--green)}.dot.RESERVE{background:var(--orange)}.dot.WAITING{background:var(--red)}.switch{cursor:pointer;background:var(--surface-3);border:0;border-radius:15px;flex:none;width:50px;height:30px;transition:background .2s;position:relative}.switch:after{content:"";background:#fff;border-radius:50%;width:24px;height:24px;transition:transform .2s;position:absolute;top:3px;left:3px}.switch[aria-checked=true]{background:var(--primary)}.switch[aria-checked=true]:after{transform:translate(20px)}.section-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-3);margin:22px 4px 10px;font-size:.8rem;font-weight:750}.cal-head{justify-content:space-between;align-items:center;gap:8px;margin:4px 0 12px;display:flex}.cal-title{text-align:center}.cal-title .kw-span{color:var(--text-2);font-size:.82rem;font-weight:600;display:block}.cal-grid{touch-action:pan-y;grid-template-columns:40px repeat(7,1fr);gap:4px;display:grid}.cal-wd{text-align:center;color:var(--text-3);padding:2px 0 4px;font-size:.72rem;font-weight:700}.cal-kw{color:var(--text-2);flex-direction:column;justify-content:center;align-items:center;gap:1px;font-size:.68rem;font-weight:700;line-height:1.1;display:flex}.cal-kw .shift{color:var(--glow);align-items:center;gap:1px;display:inline-flex}.day{aspect-ratio:1/1.12;cursor:pointer;background:var(--surface);min-width:0;color:var(--text);border:0;border-radius:12px;flex-direction:column;justify-content:flex-start;align-items:center;padding:3px 0 0;transition:transform 80ms;display:flex;position:relative;overflow:hidden}.day:active{transform:scale(.95)}.day .num{border-radius:50%;flex:none;place-items:center;width:22px;height:22px;font-size:.86rem;font-weight:700;display:grid}.day .count{align-items:center;gap:3px;margin-top:auto;margin-bottom:7px;font-size:.78rem;font-weight:800;display:flex}.day.SAFE{background:linear-gradient(180deg, var(--surface) 30%, #5fa83a4d)}.day.SAFE .count{color:#9ad977}.day.RESERVE{background:linear-gradient(180deg, var(--surface) 30%, #f0973e52)}.day.RESERVE .count{color:var(--orange)}.day.WAITING{background:linear-gradient(180deg, var(--surface) 30%, #e5634d52)}.day.WAITING .count{color:#ff9c8a}.day.off{color:var(--text-3);background:#172a4073}.day.out{opacity:.35}.day.past{color:var(--text-3);background:#172a4099}.day.today .num{background:var(--primary);color:var(--primary-ink)}.day.mine{box-shadow:inset 0 0 0 2px var(--glow), 0 0 12px #8fd3db59}.day.selected{box-shadow:inset 0 0 0 3px var(--primary)}.day.selected:before{content:"";background:#f2c14e29;position:absolute;inset:0}.day.holiday{color:var(--sand);background:#e0b66e21;box-shadow:inset 0 0 0 1px #e0b66e73}.day.holiday.mine{box-shadow:inset 0 0 0 2px var(--glow), 0 0 12px #8fd3db59}.day .hol{text-align:center;-webkit-hyphens:auto;hyphens:auto;overflow-wrap:anywhere;width:100%;color:var(--sand);-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:0 2px;font-size:.55rem;font-weight:700;line-height:1;display:-webkit-box;overflow:hidden}.day.free{outline-offset:-3px;outline:1.5px dashed #e0b66ebf}.day.free:not(.SAFE):not(.RESERVE):not(.WAITING){background:#e0b66e1a}.day.free .hol{color:var(--sand)}.day.free .count,.day.holiday .count{background:var(--surface-3);border-radius:8px;justify-content:center;min-width:15px;height:15px;margin:0;padding:0 3px;font-size:.62rem;line-height:1;position:absolute;top:3px;right:3px}.day.free.SAFE .count,.day.holiday.SAFE .count{background:var(--green);color:var(--bg)}.day.free.RESERVE .count,.day.holiday.RESERVE .count{background:var(--orange);color:var(--bg)}.day.free.WAITING .count,.day.holiday.WAITING .count{background:var(--red);color:var(--bg)}:is(.day.free:has(.count) .num,.day.holiday:has(.count) .num){margin-right:12px}.day .school{background:#e0b66e8c;height:4px;position:absolute;bottom:0;left:0;right:0}.legend{color:var(--text-2);flex-wrap:wrap;gap:6px 14px;margin:14px 4px 0;font-size:.78rem;display:flex}.legend span{align-items:center;gap:6px;display:inline-flex}.swatch{background:var(--surface);border-radius:4px;flex:none;width:14px;height:14px;display:inline-block}.swatch.mine{box-shadow:inset 0 0 0 2px var(--glow), 0 0 6px #8fd3db66}.swatch.holiday{background:#e0b66e2e;box-shadow:inset 0 0 0 1px #e0b66e99}.swatch.free{outline-offset:-2px;background:#e0b66e1a;outline:1.5px dashed #e0b66ebf}.toolbar{align-items:center;gap:8px;margin-top:14px;display:flex}.selection-bar{left:0;right:0;bottom:calc(var(--nav-h) + var(--safe-b));z-index:25;padding:10px 12px;position:fixed}.selection-bar .card{border:1px solid var(--line);flex-direction:column;gap:10px;max-width:536px;margin:0 auto;padding:12px;display:flex}.sheet-backdrop{z-index:40;background:#03091199;animation:.18s fade;position:fixed;inset:0}.sheet{z-index:41;background:var(--surface);max-width:560px;max-height:88dvh;padding:8px 16px calc(20px + var(--safe-b));border-radius:22px 22px 0 0;margin:0 auto;animation:.22s cubic-bezier(.2,.9,.3,1) slide-up;position:fixed;bottom:0;left:0;right:0;overflow-y:auto;box-shadow:0 -10px 40px #00000073}.sheet-grip{background:var(--surface-3);border-radius:3px;width:40px;height:5px;margin:4px auto 14px}.entry-row{background:var(--surface-2);touch-action:manipulation;border-radius:12px;align-items:center;gap:10px;padding:10px 12px;display:flex}.entry-row.me{box-shadow:inset 0 0 0 1.5px var(--glow)}.entry-row .place{background:var(--bg);border-radius:9px;place-items:center;width:28px;height:28px;font-size:.85rem;font-weight:800;display:grid}.entry-row .handle{color:var(--text-3);cursor:grab;touch-action:none;margin:-6px;padding:6px}.entry-row.dragging{opacity:.9;box-shadow:var(--shadow), inset 0 0 0 1.5px var(--primary);z-index:2;position:relative}.divider{background:var(--line);height:1px;margin:4px 0}.status-line{color:var(--text-3);align-items:center;gap:8px;margin:6px 2px 2px;font-size:.75rem;display:flex}.status-line:after{content:"";background:var(--line);flex:1;height:1px}.login{min-height:100dvh;padding:24px 20px calc(24px + var(--safe-b));flex-direction:column;justify-content:center;max-width:440px;margin:0 auto;display:flex}.login-logo{width:100%;max-width:320px;height:auto;margin:0 auto 32px;display:block}.sum-grid{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.sum{background:var(--surface);text-align:center;border-radius:14px;padding:12px}.sum b{font-size:1.5rem;font-weight:800;display:block}.vblock{background:var(--surface);border-radius:var(--radius);overflow:hidden}.vblock-head{align-items:center;gap:12px;padding:12px 14px;display:flex}.vblock-title{text-align:left;cursor:pointer;min-width:0;color:var(--text);background:0 0;border:0;flex:1;padding:0}.vblock .chev{font-size:1.3rem;line-height:1;transition:transform .15s}.vblock .block-day:first-of-type{border-top:1px solid var(--line)}.link-btn{color:var(--glow);cursor:pointer;margin-left:8px;font-weight:700}.back-link{background:var(--surface);min-height:40px;color:var(--text);border-radius:12px;align-items:center;gap:4px;margin-left:-4px;padding:0 14px 0 8px;font-size:.95rem;font-weight:700;display:inline-flex}.vblock .stripe{border-radius:2px;flex:none;align-self:stretch;width:4px}.stripe.SAFE{background:var(--green)}.stripe.RESERVE{background:var(--orange)}.stripe.WAITING{background:var(--red)}.block-day{align-items:center;gap:10px;padding:10px 14px;display:flex}.block-day+.block-day{border-top:1px solid var(--line)}.check{width:22px;height:22px;accent-color:var(--primary)}table.log{border-collapse:collapse;width:100%;font-size:.82rem}table.log td{border-bottom:1px solid var(--line);vertical-align:top;padding:8px 6px}@keyframes fade{0%{opacity:0}}@keyframes slide-up{0%{transform:translateY(100%)}}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}@media (max-width:360px){.cal-grid{grid-template-columns:34px repeat(7,1fr);gap:3px}.day .num{font-size:.78rem}}
