:root{--ink:#17181a;--ink-soft:#6b6f76;--paper:#f4f4f5;--white:#fff;--rule:#e6e6e8;--rule-strong:#d4d5d8;--accent:#26282c;--accent-ink:#fff;--accent-bg:#eceded;--accent-soft:#c7c9cc;--go:#12946b;--go-bg:#e4f5ee;--warn:#d98c0a;--warn-bg:#fcf1dc;--bad:#e23b3b;--bad-bg:#fbeaea;--font-body:"Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, Consolas, monospace;--shadow-card:0 1px 2px #17181a0a, 0 6px 20px -8px #17181a1f;--shadow-float:0 10px 30px -8px #17181a47;font:16px/1.5 var(--font-body);color:var(--ink);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-reduced-motion:no-preference){:root{--motion:1}}@media (prefers-reduced-motion:reduce){:root{--motion:0}}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}body{background:var(--paper);overscroll-behavior-y:contain;margin:0}h1{letter-spacing:-.02em;margin:.2rem 0 .5rem;font-size:1.5rem;font-weight:800}h2.section-h{letter-spacing:-.01em;margin:1.6rem 0 .7rem;font-size:1rem;font-weight:700}.auth-screen{background:radial-gradient(120% 90% at 15% -10%, #ffffff14, transparent 55%), radial-gradient(100% 80% at 100% 110%, #ffffff0d, transparent 60%), var(--ink);justify-content:center;align-items:center;min-height:100vh;padding:1.25rem;display:flex;position:relative;overflow:hidden}.auth-map-bg{color:#fff;opacity:.32;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.auth-card{background:var(--white);width:100%;max-width:360px;box-shadow:var(--shadow-float);border-radius:24px;flex-direction:column;gap:1rem;padding:2.5rem 1.75rem 1.9rem;display:flex;position:relative}.app-map-bg{width:100%;height:100%;color:var(--ink);opacity:.045;pointer-events:none;z-index:-1;position:fixed;inset:0}.auth-brand-mark{background:var(--accent);width:52px;height:52px;color:var(--accent-ink);--logo-notch:var(--accent);border-radius:16px;justify-content:center;align-items:center;margin:0 auto;font-size:1.2rem;font-weight:800;display:flex;box-shadow:0 8px 20px -6px #17181a73}.auth-card h1{text-align:center;margin:.5rem 0 0;font-size:1.4rem;line-height:1.2}.shell{flex-direction:column;min-height:100vh;display:flex}.topbar{padding:env(safe-area-inset-top) 1rem 0;height:calc(3.25rem + env(safe-area-inset-top));background:var(--ink);z-index:5;align-items:center;gap:.75rem;display:flex;position:sticky;top:0}.brand{letter-spacing:-.01em;color:#fff;align-items:center;gap:.55rem;font-size:1.02rem;font-weight:800;display:flex}.brand-mark{background:var(--white);width:28px;height:28px;color:var(--ink);--logo-notch:var(--white);border-radius:9px;justify-content:center;align-items:center;font-size:.78rem;font-weight:800;display:flex}.spacer{flex:1}.icon-btn{color:#fff;background:#ffffff1f;border:none;border-radius:10px;justify-content:center;align-items:center;width:36px;height:36px;min-height:auto;display:flex}.icon-btn svg{width:18px;height:18px}.icon-btn:active{transform:scale(.94)}.link-btn{color:var(--ink-soft);cursor:pointer;font:600 .88rem var(--font-body);background:0 0;border:none;min-height:36px;padding:.4rem 0}.link-btn:active{opacity:.6}.install-banner{background:var(--accent-bg);border-bottom:1px solid var(--rule);color:var(--ink);align-items:center;gap:.6rem;padding:.55rem 1rem;font-size:.8rem;font-weight:600;display:flex}.install-banner-text{flex:1}.install-banner-btn{background:var(--accent);color:var(--accent-ink);border:none;border-radius:10px;min-height:auto;padding:.4rem .8rem;font-size:.78rem;font-weight:700}.install-banner-dismiss{color:var(--ink-soft);background:0 0;border:none;min-height:auto;padding:0 .2rem;font-size:1.2rem;line-height:1}main{padding-bottom:calc(4rem + env(safe-area-inset-bottom));flex:1}.page{max-width:480px;margin:0 auto;padding:.5rem 1.1rem 2rem;animation:.28s both page-in}@keyframes page-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.page{animation:none}}.bottom-nav{z-index:10;background:var(--white);border-top:1px solid var(--rule);padding-bottom:env(safe-area-inset-bottom);display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -1px #00000005,0 -8px 20px -12px #0000001f}.bottom-nav-item{color:var(--ink-faint,var(--ink-soft));letter-spacing:.01em;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:.2rem;padding:.5rem .25rem .4rem;font-size:.66rem;font-weight:700;text-decoration:none;transition:color .15s;display:flex}.bottom-nav-item svg{width:22px;height:22px}.bottom-nav-item:active{opacity:.6}.bottom-nav-item-active{color:var(--accent)}label{color:var(--ink-soft);letter-spacing:.01em;flex-direction:column;gap:.4rem;margin-bottom:1rem;font-size:.78rem;font-weight:700;display:flex}input,select,textarea{font:500 1rem var(--font-body);border:1.5px solid var(--rule-strong);background:var(--white);color:var(--ink);border-radius:14px;width:100%;padding:.8rem .9rem;transition:border-color .15s,box-shadow .15s}textarea{resize:vertical;min-height:4.5rem;font-weight:400;line-height:1.45}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-bg);outline:none}input::placeholder,textarea::placeholder{color:#9a9ea4}.password-field{position:relative}.password-field input{padding-right:2.8rem}.password-toggle{width:2.4rem;height:2.4rem;min-height:auto;color:var(--ink-soft);background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:flex;position:absolute;top:50%;right:.35rem;transform:translateY(-50%)}.password-toggle svg{width:19px;height:19px}.password-toggle:active{color:var(--ink);transform:translateY(-50%)scale(.92)}button{font:700 .95rem var(--font-body);cursor:pointer;border:none;border-radius:14px;min-height:48px;transition:transform .1s,background-color .15s,opacity .15s}button:active{transform:scale(.98)}button[type=submit],.btn-wide{background:var(--accent);color:var(--accent-ink);box-sizing:border-box;text-align:center;width:100%;margin-top:.4rem;padding:.85rem;text-decoration:none;display:block;box-shadow:0 8px 18px -8px #17181a59}button[type=submit]:disabled,.btn-wide:disabled{background:var(--rule-strong);color:var(--ink-soft);cursor:not-allowed;box-shadow:none}.error{color:var(--bad);font-size:.85rem;font-weight:600}.btn-secondary{box-sizing:border-box;text-align:center;background:var(--white);color:var(--ink);border:1.5px solid var(--rule-strong);font:700 .95rem var(--font-body);cursor:pointer;border-radius:14px;min-height:48px;margin-top:.4rem;padding:.85rem;text-decoration:none;display:block}.btn-secondary:active{background:var(--paper)}.action-row{flex-direction:column;gap:.6rem;margin:1rem 0;display:flex}.action-row button{background:var(--accent);color:var(--accent-ink);padding:.9rem}.action-row .modal-cancel{background:var(--white);border:1.5px solid var(--rule-strong);color:var(--ink-soft);box-shadow:none}.action-row .modal-cancel:hover{color:var(--ink);border-color:var(--ink-soft)}.card{background:var(--white);border:1px solid var(--rule);box-shadow:var(--shadow-card);border-radius:18px;margin:.8rem 0;padding:1.15rem}.row{border-bottom:1px solid var(--rule);justify-content:space-between;align-items:center;gap:1rem;padding:.55rem 0;font-size:.93rem;font-weight:500;display:flex}.row:last-child{border-bottom:none}.row span:first-child{color:var(--ink-soft);text-transform:uppercase;letter-spacing:.04em;font-size:.74rem;font-weight:700}.stamp{letter-spacing:.02em;text-transform:uppercase;color:var(--ink-soft);background:var(--paper);border-radius:99px;align-items:center;padding:.32rem .7rem;font-size:.7rem;font-weight:700;display:inline-flex}.stamp.stamp-go{color:var(--go);background:var(--go-bg)}.stamp.stamp-warn{color:var(--warn);background:var(--warn-bg)}.stamp.stamp-bad{color:var(--bad);background:var(--bad-bg)}.preset-row{flex-wrap:wrap;gap:.5rem;margin:-.5rem 0 1.1rem;display:flex}.preset-chip{font:600 .82rem var(--font-body);border:1.5px solid var(--rule-strong);background:var(--white);min-height:auto;color:var(--ink);border-radius:99px;padding:.48rem .9rem}.preset-chip-active{border-color:var(--accent);background:var(--accent-bg);color:var(--accent)}.card-list{flex-direction:column;gap:.65rem;display:flex}.assignment-card{background:var(--white);border:1px solid var(--rule);box-shadow:var(--shadow-card);border-radius:18px;padding:1.05rem;overflow:hidden}.ac-top{justify-content:space-between;align-items:center;gap:.4rem;display:flex}.ac-name{margin-top:.3rem;font-size:1rem;font-weight:700}.ac-meta{color:var(--ink-soft);margin-top:.3rem;font-size:.8rem;font-weight:500}.empty{text-align:center;color:var(--ink-soft);padding:2.5rem 0;font-weight:500}.scan-nav{grid-template-columns:repeat(3,1fr);gap:.6rem;margin:1.1rem 0 1.6rem;display:grid}.scan-nav-btn{background:var(--white);border:1px solid var(--rule);text-align:center;color:var(--ink);box-shadow:var(--shadow-card);border-radius:18px;flex-direction:column;align-items:center;gap:.6rem;padding:1.1rem .5rem;text-decoration:none;display:flex}.scan-nav-btn:active{transform:scale(.97)}.scan-nav-icon{background:var(--accent-bg);width:44px;height:44px;color:var(--accent);border-radius:14px;justify-content:center;align-items:center;display:flex}.scan-nav-icon svg{width:22px;height:22px}.scan-nav-btn span:last-child{font-size:.74rem;font-weight:700;line-height:1.25}.scanner-overlay{z-index:30;background:#14120eeb;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.scanner-card{background:var(--white);border-radius:20px;width:100%;max-width:420px;max-height:90vh;padding:1.3rem;overflow-y:auto}.scanner-hint{color:var(--ink-soft);margin:-.3rem 0 1rem;font-size:.84rem;font-weight:500}.scanner-video-wrap{aspect-ratio:4/3;background:#000;border-radius:16px;margin-bottom:1rem;position:relative;overflow:hidden}.torch-toggle{color:#fff;background:#00000080;border:1px solid #ffffff40;border-radius:50%;justify-content:center;align-items:center;width:2.6rem;height:2.6rem;min-height:auto;display:flex;position:absolute;top:.7rem;right:.7rem}.torch-toggle svg{width:19px;height:19px}.torch-toggle-on{background:var(--accent);border-color:var(--accent)}.torch-toggle:active{transform:scale(.92)}.scanner-video{object-fit:cover;width:100%;height:100%;display:block}.scan-feedback-ok{color:var(--go);font-size:.9rem;font-weight:700}.scan-feedback-detail{color:var(--ink-soft);margin-top:-.6rem;font-size:.82rem;font-weight:500}.pin-display{font-family:var(--font-mono);text-align:center;letter-spacing:.1em;font-variant-numeric:tabular-nums;margin:1rem 0;font-size:2rem;font-weight:600}
