@font-face{font-family:Thmanyah Sans;font-style:normal;font-weight:300;font-display:swap;src:url(/fonts/thmanyahsans-Light.woff2)format("woff2")}@font-face{font-family:Thmanyah Sans;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/thmanyahsans-Regular.woff2)format("woff2")}@font-face{font-family:Thmanyah Sans;font-style:normal;font-weight:500 600;font-display:swap;src:url(/fonts/thmanyahsans-Medium.woff2)format("woff2")}@font-face{font-family:Thmanyah Sans;font-style:normal;font-weight:700 800;font-display:swap;src:url(/fonts/thmanyahsans-Bold.woff2)format("woff2")}@font-face{font-family:Thmanyah Sans;font-style:normal;font-weight:900;font-display:swap;src:url(/fonts/thmanyahsans-Black.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/jetbrains-mono-latin-600-normal.woff2)format("woff2");unicode-range:U+??,U+100-24F,U+1E??,U+2000-206F,U+20A0-20CF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/jetbrains-mono-latin-700-normal.woff2)format("woff2");unicode-range:U+??,U+100-24F,U+1E??,U+2000-206F,U+20A0-20CF}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--navy-950:#1b2140;--navy-900:#1f2e73;--navy-800:#2c3f8f;--blue-700:#3d5fb0;--blue-300:#8fa6e8;--blue-200:#c9cfe3;--blue-100:#d5def5;--blue-050:#eef1f8;--orange-700:#c2410c;--orange-600:#e0741a;--orange-500:#f0862a;--orange-400:#ff9a3c;--orange-300:#f0a868;--orange-200:#ffb273;--orange-150:#ffd2ae;--orange-100:#fff1e4;--orange-050:#fff7ef;--paper:#fbf8f1;--paper-raised:#fffdf8;--paper-page:#fff;--canvas:#f3efe6;--paper-muted:#f7f4ec;--line:#e2ded2;--line-soft:#ece8de;--ink:#1b2140;--ink-muted:#6b7390;--ink-faint:#9aa0b8;--gold:#c9a24a;--gold-light:#e3c778;--maroon-700:#7a1f2e;--maroon-800:#5c1522;--maroon-900:#3f0e18;--green:#3b9e5c;--green-soft:#d9ead9;--teal:#0f8b8d;--purple:#7a3e9d;--category-class:#3d5fb0;--category-support:#0f8b8d;--category-center:#7a3e9d;--category-food:#f0862a;--category-rest:#3b9e5c;--category-admin:#c2410c;--font-sans:"Thmanyah Sans", "Segoe UI", Tahoma, system-ui, sans-serif;--font-body:var(--font-sans);--font-mono:"JetBrains Mono", ui-monospace, monospace;--radius-xs:6px;--radius-sm:8px;--radius-md:12px;--radius-lg:16px;--radius-xl:20px;--radius-2xl:22px;--radius-3xl:24px;--radius-4xl:28px;--radius-sheet:30px;--radius-round:999px;--shadow-xs:0 6px 18px #1b21400a;--shadow-sm:0 8px 24px #1b21400f;--shadow-card:0 14px 34px #1b214014;--shadow-floating:0 16px 40px #1b214024;--shadow-navy:0 24px 50px #1f2e7359;--shadow-orange:0 14px 30px #f0862a59;--shadow-overlay:0 30px 80px #00000059;--shadow-sheet:0 -20px 60px #1b214033;--focus-ring:0 0 0 4px #f0862a3d;--phone-max:430px;--tabbar-height:78px;--safe-top:env(safe-area-inset-top,0px);--safe-right:env(safe-area-inset-right,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px)}@keyframes fadeUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}@keyframes popIn{0%{opacity:0;transform:scale(.7)}70%{transform:scale(1.04)}to{opacity:1;transform:scale(1)}}@keyframes slideUp{0%{transform:translateY(100%)}to{transform:none}}@keyframes float{0%,to{transform:translateY(0) rotate(var(--r,0deg))}50%{transform:translateY(-14px) rotate(var(--r,0deg))}}@keyframes drift{0%{transform:translate(0)}50%{transform:translate(24px,-16px)}to{transform:translate(0)}}@keyframes laser{0%{opacity:.2;top:6%}10%{opacity:1}50%{opacity:1;top:92%}60%{opacity:.2}to{opacity:.2;top:6%}}@keyframes bracket{0%,to{transform:scale(1)}50%{transform:scale(1.03)}}@keyframes lockOn{0%{transform:scale(1)}40%{transform:scale(.86)}70%{transform:scale(.92)}to{transform:scale(.9)}}@keyframes stampSlam{0%{transform:scale(2.6) rotate(calc(var(--r,-8deg) - 20deg));opacity:0;filter:blur(5px)}55%{transform:scale(.92) rotate(var(--r,-8deg));opacity:1;filter:blur()}75%{transform:scale(1.05) rotate(var(--r,-8deg))}to{transform:scale(1) rotate(var(--r,-8deg));opacity:1}}@keyframes inkSplat{0%{opacity:.9;transform:scale(0)}to{opacity:0;transform:scale(1)}}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-4px,2px)}40%{transform:translate(4px,-2px)}60%{transform:translate(-2px,-1px)}80%{transform:translate(2px,1px)}}@keyframes confetti{0%{opacity:1;transform:translateY(-10vh)rotate(0)}to{opacity:0;transform:translateY(110vh)rotate(720deg)}}@keyframes shine{0%{transform:translate(-160%)skew(-20deg)}to{transform:translate(260%)skew(-20deg)}}@keyframes glowPulse{0%,to{box-shadow:0 0 #f0862a80,0 10px 26px #f0862a4d}70%{box-shadow:0 0 0 16px #f0862a00,0 10px 26px #f0862a4d}}@keyframes ringPulse{0%{opacity:.9;transform:scale(.6)}to{opacity:0;transform:scale(1.6)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes wiggle{0%,to{transform:rotate(0)}25%{transform:rotate(-8deg)}75%{transform:rotate(8deg)}}@keyframes pageA{0%{opacity:0;transform:perspective(900px)rotateY(-55deg)}to{opacity:1;transform:none}}@keyframes pageB{0%{opacity:0;transform:perspective(900px)rotateY(-55deg)}to{opacity:1;transform:none}}@keyframes spinSlow{to{transform:rotate(360deg)}}*,:before,:after{box-sizing:border-box}html{background:var(--canvas);-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;min-width:320px;min-height:100%}body{min-width:320px;min-height:100vh;background-color:var(--canvas);min-height:100dvh;color:var(--ink);font-family:var(--font-body);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;background-image:radial-gradient(#2c3f8f0e 1px,#0000 1px);background-position:0 0;background-size:18px 18px;margin:0;line-height:1.5;overflow-x:hidden}button,input,select,textarea{color:inherit;font:inherit}button,[role=button]{touch-action:manipulation}button{margin:0}input,textarea,select{min-width:0}img,svg,video,canvas{max-width:100%;display:block}a{color:var(--blue-700);text-underline-offset:3px;text-decoration-thickness:1px}a:hover{color:var(--orange-500)}h1,h2,h3,p{overflow-wrap:anywhere}[hidden]{display:none!important}::selection{background:var(--orange-150);color:var(--ink)}::-webkit-scrollbar{width:0;height:0}:focus-visible{outline:3px solid var(--orange-500);outline-offset:3px}.form-field:focus-within{border-color:var(--orange-500);box-shadow:var(--focus-ring)}#app{min-height:100vh;min-height:100dvh}.sr-only{clip:rect(0, 0, 0, 0)!important;white-space:nowrap!important;border:0!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;position:absolute!important;overflow:hidden!important}.mono,[data-mono]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;direction:ltr;unicode-bidi:isolate}.paper-dots{background-color:var(--paper);background-image:radial-gradient(#2c3f8f0f 1px,#0000 1px);background-size:16px 16px}.no-scroll{overflow:hidden}@media (prefers-reduced-motion:reduce){html:focus-within{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;transition-delay:0s!important;animation-duration:.01ms!important;animation-iteration-count:1!important;animation-delay:0s!important}}@media print{.no-print{display:none!important}}.app-shell{isolation:isolate;min-height:100vh;background:var(--canvas);justify-content:center;align-items:flex-start;min-height:100dvh;display:flex;position:relative;overflow:hidden}.app-shell:before,.app-shell:after{z-index:-2;content:"";pointer-events:none;border-radius:50%;width:640px;height:640px;position:fixed}.app-shell:before{background:radial-gradient(circle,#f0862a2e,#0000 65%);animation:14s ease-in-out infinite drift;inset-block-start:-210px;inset-inline-end:3%}.app-shell:after{background:radial-gradient(circle,#3d5fb029,#0000 65%);animation:18s ease-in-out infinite reverse drift;inset-block-end:-260px;inset-inline-start:1%}.desktop-decor,.desktop-stamps{z-index:-1;pointer-events:none;position:fixed;inset:0;overflow:hidden}.decor-stamp{--decor-color:var(--blue-700);--r:-12deg;border:3px double var(--decor-color);width:84px;height:84px;color:var(--decor-color);filter:grayscale(.3);opacity:.16;transform:rotate(var(--r));animation:float var(--float-duration,7s) var(--float-delay,0s) ease-in-out infinite;border-radius:50%;justify-content:center;align-items:center;font-size:30px;display:flex;position:absolute}.decor-stamp:first-child{inset-block-start:14%;inset-inline-start:8%}.decor-stamp:nth-child(2){--decor-color:var(--orange-500);--r:10deg;--float-duration:8s;--float-delay:.7s;inset-block-start:18%;inset-inline-end:8%}.decor-stamp:nth-child(3){--decor-color:var(--orange-500);--r:8deg;--float-duration:9s;--float-delay:1.4s;inset-block-start:62%;inset-inline-start:6%}.decor-stamp:nth-child(4){--r:-8deg;--float-duration:10s;--float-delay:2.1s;inset-block-start:66%;inset-inline-end:8%}.decor-stamp:nth-child(5){--r:14deg;--float-duration:11s;--float-delay:2.8s;inset-block-start:86%;inset-inline-end:16%}.phone-shell,.student-app{width:min(100%, var(--phone-max));height:100vh;background:var(--paper);height:100dvh;min-height:620px;color:var(--ink);flex-direction:column;display:flex;position:relative;overflow:hidden}.phone-shell>[inert]{pointer-events:none;-webkit-user-select:none;user-select:none}.app-scroll,.student-scroll{overscroll-behavior:contain;scrollbar-width:none;background-color:var(--paper);-webkit-overflow-scrolling:touch;background-image:radial-gradient(#2c3f8f0f 1px,#0000 1px);background-size:16px 16px;flex:1;position:relative;overflow:hidden auto}.app-content{min-height:100%;padding-block-start:calc(58px + var(--safe-top))}.screen,.home-screen,.map-screen,.board-screen{min-height:100%;padding:calc(64px + var(--safe-top)) max(20px, var(--safe-right)) calc(120px + var(--safe-bottom)) max(20px, var(--safe-left));animation:.35s both fadeUp}.loading-screen,.empty-screen{min-height:100%;color:var(--ink-muted);text-align:center;place-items:center;padding:32px;display:grid}.loading-screen{background-color:var(--paper);background-image:radial-gradient(#2c3f8f0f 1px,#0000 1px);background-size:16px 16px;flex-direction:column;gap:12px;display:flex}.loading-screen>p{margin:0;font-size:13px;font-weight:700}.loading-passport{--r:-4deg;background:linear-gradient(155deg, var(--maroon-700), var(--maroon-900));border:1px solid #c9a24a80;border-radius:7px 10px 10px 7px;justify-content:center;align-items:center;width:78px;height:104px;animation:2.4s ease-in-out infinite float;display:flex;position:relative;box-shadow:0 16px 34px #3f0e1847}.loading-passport:after{content:"";border:1px solid #c9a24aa6;border-radius:5px;position:absolute;inset:6px}.loading-passport img{z-index:1;object-fit:contain;filter:grayscale()brightness(1.9)sepia()saturate(2.6)hue-rotate(-8deg);mix-blend-mode:screen;width:27px;height:38px;position:relative}.loading-dots{align-items:center;gap:5px;display:flex}.loading-dots i{background:var(--orange-500);border-radius:50%;width:6px;height:6px;animation:1s ease-in-out infinite float}.loading-dots i:nth-child(2){animation-delay:.14s}.loading-dots i:nth-child(3){animation-delay:.28s}.loading-spinner{border:3px solid var(--line);border-top-color:var(--orange-500);border-radius:50%;width:34px;height:34px;animation:.75s linear infinite spin}.demo-pill{border:1px solid var(--orange-150);border-radius:var(--radius-round);background:var(--orange-100);min-height:20px;color:var(--orange-700);font-family:var(--font-mono);letter-spacing:.08em;justify-content:center;align-items:center;padding:4px 8px;font-size:9px;font-weight:700;line-height:1;display:inline-flex}.global-demo-pill{z-index:24;border:1px solid var(--orange-150);border-radius:var(--radius-round);background:var(--orange-100);min-height:20px;box-shadow:var(--shadow-xs);color:var(--orange-700);font-family:var(--font-mono);letter-spacing:.08em;justify-content:center;align-items:center;padding:4px 8px;font-size:9px;font-weight:700;line-height:1;display:inline-flex;position:absolute;inset-block-start:calc(17px + var(--safe-top));inset-inline-end:max(20px, var(--safe-right))}.login-screen{width:100%;min-height:100%;padding:calc(66px + var(--safe-top)) max(26px, var(--safe-right)) calc(36px + var(--safe-bottom)) max(26px, var(--safe-left));background-color:var(--paper);scrollbar-width:none;background-image:radial-gradient(#2c3f8f12 1px,#0000 1px);background-size:16px 16px;flex-direction:column;flex:1;display:flex;position:relative;overflow:hidden auto}.login-topline{justify-content:space-between;align-items:center;gap:12px;display:flex}.login-logo{align-self:flex-start;width:200px;max-width:62vw;animation:.6s both fadeUp;position:relative}.login-demo{animation:.6s .1s both fadeUp}.passport-illustration{flex:0 0 280px;width:200px;height:280px;margin:22px auto 0;animation:.7s cubic-bezier(.2,.9,.3,1.2) .15s both popIn;position:relative}.passport-cover,.passport-cover-bg{background-color:var(--maroon-800);background-image:radial-gradient(#ffffff0a 1px, transparent 1px), linear-gradient(160deg, var(--maroon-700) 0%, var(--maroon-800) 55%, var(--maroon-900) 100%);background-size:5px 5px,100% 100%;border-radius:14px 18px 18px 14px;position:absolute;inset:0;transform:rotate(-4deg);box-shadow:0 30px 60px #3c0e1866,inset 0 0 0 1px #c9a24a59,inset 2px 0 #ffffff14}.passport-cover:after,.passport-frame{border:1.5px solid var(--gold);content:"";border-radius:9px;position:absolute;inset:11px;box-shadow:inset 0 0 0 3px #0000,inset 0 0 0 4px #c9a24a59}.passport-frame{transform:rotate(-4deg)}.passport-cover-copy,.passport-copy{color:var(--gold-light);text-align:center;flex-direction:column;justify-content:space-between;align-items:center;padding:26px 18px 24px;display:flex;position:absolute;inset:0;transform:rotate(-4deg)}.cover-country-ar{letter-spacing:.5px;font-size:14px;font-weight:900}.passport-country{flex-direction:column;gap:2px;display:flex}.passport-country strong{letter-spacing:.5px;font-size:14px;font-weight:900}.passport-country span,.cover-country-en,.cover-title-en{letter-spacing:2.5px;opacity:.9;direction:ltr;font-size:8px;font-weight:800}.passport-seal,.cover-seal{border:2px solid var(--gold);background:radial-gradient(circle,#c9a24a38,#c9a24a0a 70%);border-radius:50%;justify-content:center;align-items:center;width:82px;height:82px;display:flex;box-shadow:inset 0 0 0 5px #c9a24a1f}.passport-seal img,.cover-seal img{object-fit:contain;filter:grayscale()brightness(1.9)sepia()saturate(2.6)hue-rotate(-8deg)contrast(1.1);mix-blend-mode:screen;opacity:.95;width:54px;height:54px}.cover-title-ar{font-size:15px;font-weight:900}.cover-university{opacity:.8;max-width:150px;margin-top:6px;font-size:8px;font-weight:800;line-height:1.4}.passport-title-lockup{flex-direction:column;gap:3px;display:flex}.passport-title-lockup strong{font-size:15px;font-weight:900}.passport-title-lockup span{letter-spacing:3px;opacity:.9;direction:ltr;font-size:8px;font-weight:800}.passport-title-lockup small{opacity:.8;max-width:150px;margin-top:3px;font-size:8px;font-weight:800;line-height:1.4}.cover-chip{border:1.5px solid var(--gold);opacity:.9;border-radius:4px;justify-content:center;align-items:center;width:26px;height:18px;display:flex}.cover-chip:after{border:1px solid var(--gold);content:"";border-radius:2px;width:12px;height:8px}.passport-chip{border:1.5px solid var(--gold);opacity:.9;border-radius:4px;justify-content:center;align-items:center;width:26px;height:18px;display:flex}.passport-chip span{border:1px solid var(--gold);border-radius:2px;width:12px;height:8px}.cover-stamp{--stamp-color:var(--orange-500);--r:14deg;border:3px double var(--stamp-color);width:78px;height:78px;color:var(--stamp-color);transform:rotate(var(--r));background:#fbf8f1e6;border-radius:50%;flex-direction:column;justify-content:center;align-items:center;font-size:9px;font-weight:900;animation:.6s cubic-bezier(.2,.9,.3,1.2) 1s both stampSlam;display:flex;position:absolute}.cover-stamp:first-of-type,.cover-stamp.is-orientation,.cover-stamp--orientation{inset-block-start:-16px;inset-inline-end:-26px}.cover-stamp:last-of-type,.cover-stamp.is-library,.cover-stamp--library{--stamp-color:var(--blue-700);--r:-12deg;width:66px;height:66px;font-size:8px;animation-delay:1.5s;inset-block-end:-10px;inset-inline-start:-30px}.cover-stamp-icon{font-size:18px;line-height:1.15}.cover-stamp.is-library .cover-stamp-icon{font-size:16px}.cover-stamp>span{font-size:18px;line-height:1.15}.cover-stamp--library>span{font-size:16px}.login-copy{margin-top:auto;position:relative}.login-title,.login-copy>h1{letter-spacing:-.3px;margin:0 0 6px;font-size:30px;font-weight:900;line-height:1.15;animation:.6s .3s both fadeUp}.login-subtitle,.login-sub,.login-copy>p:not(.login-note){color:var(--ink-muted);margin:0 0 18px;font-size:14px;line-height:1.6;animation:.6s .4s both fadeUp}.deep-link-notice,.login-notice{border:1px solid var(--orange-150);border-radius:var(--radius-md);background:var(--orange-100);color:var(--orange-700);margin:0 0 12px;padding:9px 12px;font-size:12px;font-weight:700;line-height:1.55;animation:.4s both fadeUp}.notice-banner{border:1px solid var(--orange-150);border-radius:var(--radius-md);background:var(--orange-100);color:var(--orange-700);align-items:flex-start;gap:8px;margin:0 0 12px;padding:9px 12px;font-size:12px;font-weight:700;line-height:1.55;animation:.4s both fadeUp;display:flex}.login-form{flex-direction:column;gap:8px;animation:.6s .5s both fadeUp;display:flex}.form-field{border:1.5px solid var(--line);border-radius:var(--radius-lg);background:var(--paper-page);align-items:center;gap:10px;min-height:52px;padding:6px;padding-inline-start:14px;transition:border-color .2s,box-shadow .2s;display:flex}.field-icon{background:var(--blue-050);border-radius:10px;flex:0 0 30px;justify-content:center;align-items:center;width:30px;height:30px;font-size:15px;display:flex}.form-field:nth-of-type(2) .field-icon,.field-icon.is-id,.field-icon--dob{background:#fbebea}.field-body{flex:1;min-width:0}.field-label{color:var(--ink-faint);font-size:10px;font-weight:800;line-height:1.25}.field-input{width:100%;color:var(--ink);font-family:var(--font-mono);letter-spacing:2px;text-align:start;direction:ltr;background:0 0;border:0;outline:0;padding:0;font-size:16px;font-weight:700;line-height:1.4}.field-input--mono{font-family:var(--font-mono)}.field-input--date{min-height:22px;font-family:var(--font-mono);letter-spacing:.5px}.field-helper{color:var(--ink-faint);margin-top:1px;font-size:9px;font-weight:700;line-height:1.35;display:block}.field-input::placeholder{color:#b5b9c8;opacity:1}.primary-button,.scan-button,.success-next-button{border-radius:var(--radius-lg);background:linear-gradient(135deg, var(--orange-400), var(--orange-500));min-height:50px;box-shadow:var(--shadow-orange);color:#fff;cursor:pointer;border:0;justify-content:center;align-items:center;gap:10px;padding:14px 20px;font-size:15px;font-weight:900;transition:transform .15s,box-shadow .2s,filter .2s;display:inline-flex}.primary-button:hover,.scan-button:hover,.success-next-button:hover{filter:saturate(1.05)brightness(1.03);transform:translateY(-2px)}.primary-button:active,.scan-button:active,.success-next-button:active{transform:scale(.97)}.primary-button:disabled,.scan-button:disabled,.success-next-button:disabled{cursor:not-allowed;filter:grayscale(.35);opacity:.62;transform:none}.login-form .primary-button{width:100%;margin-top:2px}.form-error,.error-message{color:var(--orange-700);margin:2px 4px 0;font-size:11px;font-weight:700;line-height:1.45}.login-note{color:var(--ink-faint);text-align:center;margin:12px 0 0;font-size:11px}.button-spinner{border:2px solid;border-top-color:#0000;border-radius:50%;flex:0 0 14px;width:14px;height:14px;animation:.7s linear infinite spin}.screen-title{letter-spacing:-.2px;margin:0;font-size:24px;font-weight:900;line-height:1.3}.screen-heading{display:block}.screen-subtitle{color:var(--ink-muted);margin:4px 0 14px;font-size:13px}.screen-header{justify-content:space-between;align-items:center;gap:10px;min-height:34px;display:flex;position:relative}.screen-header-title{font-size:16px;font-weight:900}.screen-header>h1{margin:0;font-size:16px;font-weight:900}.screen-header-count,.screen-progress{width:70px;color:var(--ink-muted);text-align:end;font-size:12px;font-weight:800}.back-button,.ghost-button,.map-button,.secondary-button{border:1px solid var(--line);border-radius:var(--radius-round);color:var(--ink);cursor:pointer;white-space:nowrap;background:#fff;justify-content:center;align-items:center;gap:6px;padding:6px 14px;font-size:13px;font-weight:700;transition:border-color .2s,background .2s,transform .15s;display:inline-flex}.back-button:hover,.ghost-button:hover,.map-button:hover,.secondary-button:hover{border-color:var(--orange-300);background:var(--orange-050)}.home-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.home-header-actions{align-items:center;gap:8px;display:flex}.student-summary{flex:none;align-items:center;gap:8px;display:flex}.welcome-copy{color:var(--ink-muted);font-size:13px;font-weight:600}.student-name{max-width:210px;color:var(--ink);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:22px;font-weight:900;line-height:1.2;overflow:hidden}.level-chip{border:1px solid var(--orange-150);border-radius:var(--radius-round);background:var(--orange-100);color:var(--orange-700);white-space:nowrap;flex:none;padding:4px 10px;font-size:11px;font-weight:800}.avatar,.student-avatar,.row-avatar{background:linear-gradient(135deg, var(--blue-700), var(--navy-800));color:#fff;width:44px;height:44px;font-family:var(--font-mono);border-radius:50%;flex:0 0 44px;justify-content:center;align-items:center;font-size:13px;font-weight:900;display:flex;box-shadow:0 6px 16px #2c3f8f4d}.passport-card{border-radius:var(--radius-3xl);background:linear-gradient(150deg, #34489f 0%, var(--navy-800) 55%, var(--navy-900) 100%);box-shadow:var(--shadow-navy);color:#fff;margin-top:18px;padding:20px;animation:.6s cubic-bezier(.2,.9,.3,1.2) both popIn;position:relative;overflow:hidden}.passport-card:after,.passport-card-frame{z-index:0;border-radius:var(--radius-lg);content:"";pointer-events:none;border:1px solid #f0862a80;position:absolute;inset:10px}.passport-card:before,.passport-card-shine{z-index:0;content:"";pointer-events:none;background:linear-gradient(90deg,#0000 30%,#ffffff29 50%,#0000 70%);animation:5s ease-in-out infinite shine;position:absolute;inset:0}.passport-shine{display:none}.passport-meta,.passport-main{z-index:1;position:relative}.passport-meta{letter-spacing:3px;opacity:.85;justify-content:space-between;align-items:center;gap:12px;font-size:10px;font-weight:800;display:flex}.passport-number{font-family:var(--font-mono);letter-spacing:0;direction:ltr;unicode-bidi:isolate;font-size:11px}.passport-main{align-items:center;gap:18px;margin-top:14px;display:flex}.progress-ring{flex:0 0 98px;width:98px;height:98px;position:relative}.progress-ring svg{width:98px;height:98px;overflow:visible;transform:rotate(-90deg)}.progress-ring-track,.ring-track{fill:none;stroke:#ffffff2e;stroke-width:9px}.progress-ring-value{fill:none;filter:drop-shadow(0 0 6px #f0862ab3);stroke:var(--orange-500);stroke-dasharray:263.9;stroke-dashoffset:var(--ring-offset,263.9);stroke-linecap:round;stroke-width:9px;transition:stroke-dashoffset 1s cubic-bezier(.2,.9,.3,1)}.ring-value{fill:none;filter:drop-shadow(0 0 6px #f0862ab3);stroke:var(--orange-500);stroke-dasharray:263.9;stroke-linecap:round;stroke-width:9px;transition:stroke-dashoffset 1s cubic-bezier(.2,.9,.3,1)}.progress-copy{flex-direction:column;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.progress-count,.progress-copy>strong{letter-spacing:-1px;font-size:26px;font-weight:900;line-height:1}.progress-total,.progress-copy>span{opacity:.8;font-size:10px;font-weight:700}.passport-stats{flex:1;grid-template-columns:1fr 1fr;gap:10px;min-width:0;display:grid}.stat-card{background:#ffffff1f;border-radius:14px;padding:10px 12px}.stat-label{opacity:.75;font-size:10px;font-weight:700}.stat-value{font-variant-numeric:tabular-nums;font-size:20px;font-weight:900;line-height:1.1}.stat-card>span,.time-card>span{opacity:.75;font-size:10px;font-weight:700;display:block}.stat-card>strong{font-variant-numeric:tabular-nums;font-size:20px;font-weight:900;line-height:1.1;display:block}.time-card{background:#0003;border-radius:14px;grid-column:1/-1;justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.time-card .stat-value{font-family:var(--font-mono);direction:ltr;unicode-bidi:isolate;font-size:15px}.time-card>strong{font-family:var(--font-mono);direction:ltr;unicode-bidi:isolate;font-size:15px;font-weight:900}.next-card{border:1.5px dashed var(--orange-300);border-radius:var(--radius-xl);width:100%;color:inherit;cursor:pointer;text-align:start;background:#fff;align-items:center;gap:14px;margin-top:14px;padding:12px 14px;transition:transform .15s,box-shadow .2s;animation:.5s .15s both fadeUp;display:flex;box-shadow:0 8px 24px #1b21400d}.next-card:hover{transform:translateY(-2px);box-shadow:0 14px 30px #f0862a2e}.next-icon{background:linear-gradient(135deg, var(--orange-400), var(--orange-500));border-radius:14px;flex:0 0 46px;justify-content:center;align-items:center;width:46px;height:46px;font-size:22px;animation:3s ease-in-out infinite wiggle;display:flex;box-shadow:0 8px 18px #f0862a59}.next-copy{flex:1;min-width:0}.next-eyebrow{color:var(--orange-700);font-size:11px;font-weight:800}.next-copy>small{color:var(--orange-700);font-size:11px;font-weight:800;display:block}.next-name{text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-weight:900;overflow:hidden}.next-copy>strong{text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-weight:900;display:block;overflow:hidden}.next-meta{color:var(--ink-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.next-copy>span{color:var(--ink-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;display:block;overflow:hidden}.next-arrow{color:var(--orange-500);font-size:20px}.completion-banner{border-radius:var(--radius-xl);background:linear-gradient(135deg, var(--orange-400), var(--orange-500));color:#fff;text-align:center;margin-top:14px;padding:18px;font-size:17px;font-weight:900;animation:.6s cubic-bezier(.2,.9,.3,1.2) both popIn;box-shadow:0 14px 34px #f0862a59}.section-heading{justify-content:space-between;align-items:baseline;gap:12px;margin-top:22px;display:flex}.section-heading h2,.section-title{margin:0;font-size:18px;font-weight:900}.section-count,.section-heading>span{color:var(--ink-muted);font-size:12px;font-weight:700}.page-tabs{scrollbar-width:none;gap:6px;margin:10px -20px 0;padding:0 20px 6px;display:flex;overflow-x:auto}.page-tab{border:1px solid var(--line-soft);border-radius:var(--radius-md);min-height:34px;color:var(--ink);cursor:pointer;font-family:var(--font-mono);background:#fff;flex:none;align-items:center;gap:6px;padding:7px 12px;font-size:11px;font-weight:900;transition:all .2s;display:flex}.page-tab.is-active,.page-tab[aria-current=page]{border-color:var(--navy-950);background:var(--navy-950);color:#fff;box-shadow:0 8px 18px #1b214033}.status-dot,.page-tab-dot{border:1.5px solid var(--blue-200);background:0 0;border-radius:50%;width:8px;height:8px}.page-tab.is-active .status-dot,.page-tab.is-active .page-tab-dot{border-color:#ffffff80}.page-tab.is-progress .status-dot,.page-tab.is-progress .page-tab-dot,.page-tab[data-status=progress] .status-dot,.status-dot.is-progress{border-color:var(--blue-700);background:var(--blue-700)}.page-tab.is-done .status-dot,.page-tab.is-done .page-tab-dot,.page-tab[data-status=done] .status-dot,.status-dot.is-done{border-color:var(--orange-500);background:var(--orange-500)}.stamp-page-wrap,.page-perspective{perspective:900px}.stamp-page-panel{border-radius:var(--radius-2xl)}.stamp-page{border:1px solid var(--line-soft);border-radius:var(--radius-2xl);background-color:var(--paper-raised);box-shadow:var(--shadow-card), inset 0 0 0 1px #fff9;transform-origin:100%;background-image:radial-gradient(#2c3f8f0d 1px,#0000 1px);background-size:14px 14px;margin-top:10px;animation:.55s cubic-bezier(.2,.9,.3,1) both pageA;position:relative;overflow:hidden}.stamp-page[data-flip=odd],.stamp-page.flip-b,.stamp-page.page-flip-1{animation-name:pageB}.stamp-page.page-flip-0{animation-name:pageA}[dir=ltr] .stamp-page{transform-origin:0}.page-binding,.stamp-page:before,.success-binding{content:"";background:repeating-linear-gradient(#0000 0 10px,#1b214014 10px 12px);border-inline-end:1px dashed #1b214026;width:14px;position:absolute;inset-block:0;inset-inline-start:0}.page-inner{padding:16px 18px;padding-inline-start:28px}.page-header{justify-content:space-between;align-items:center;gap:10px;display:flex}.page-heading-copy,.page-header>div{min-width:0}.page-kicker{color:var(--ink-faint);letter-spacing:2px;font-size:10px;font-weight:800}.page-header small{color:var(--ink-faint);letter-spacing:2px;font-size:10px;font-weight:800;display:block}.page-name{text-overflow:ellipsis;white-space:nowrap;font-size:18px;font-weight:900;line-height:1.2;overflow:hidden}.page-header h2{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:18px;font-weight:900;line-height:1.2;overflow:hidden}.page-meta{color:var(--ink-muted);font-size:12px}.page-header p{color:var(--ink-muted);margin:0;font-size:12px}.page-header p strong,.page-bonus{color:var(--orange-700);font-weight:800}.map-button{color:var(--blue-700);flex:none;padding:5px 12px;font-size:11px;font-weight:800}.stamp-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 10px;margin-top:14px;display:grid}.stamp-slot-button,.stamp-slot-wrap{min-width:0;color:inherit;cursor:pointer;background:0 0;border:0;flex-direction:column;align-items:center;padding:0;display:flex}.stamp-slot{border:2px dashed var(--blue-200);width:86px;max-width:100%;height:86px;animation:popIn .5s var(--delay,0s) cubic-bezier(.2, .9, .3, 1.2) both;background:#fff9;border-radius:50%;justify-content:center;align-items:center;transition:border-color .2s,background .2s,transform .2s;display:flex}.stamp-slot-button:hover .stamp-slot{border-color:var(--orange-300);transform:translateY(-2px)}.stamp-slot.is-done,.stamp-slot[data-stamped=true],.stamp-slot-button.is-done .stamp-slot,.stamp-slot-wrap.is-done .stamp-slot{background:0 0;border-color:#0000}.stamp-placeholder,.pending-icon{filter:grayscale();opacity:.35;font-size:22px}.pending-icon--large{font-size:26px}.stamp-mark,.stamp-mark-large,.success-stamp{--stamp-ink:var(--ink,var(--navy-800));--r:var(--stamp-rotation,-4deg);border:3px double var(--stamp-ink);width:86px;height:86px;box-shadow:inset 0 0 0 5px transparent, inset 0 0 0 6px color-mix(in srgb, var(--stamp-ink) 13%, transparent);color:var(--stamp-ink);mix-blend-mode:multiply;opacity:.92;transform:rotate(var(--r));animation:stampSlam .55s var(--stamp-delay,var(--delay,0s)) cubic-bezier(.2, .9, .3, 1.2) both;background:#ffffff8c;border-radius:50%;flex-direction:column;justify-content:center;align-items:center;gap:1px;display:flex}.stamp-mark--sheet{width:96px;height:96px;animation-delay:.1s}.stamp-mark--sheet .stamp-code,.stamp-mark--sheet .stamp-date{letter-spacing:2px;font-size:8px}.stamp-mark--sheet .stamp-emoji{font-size:24px}.stamp-mark--success{width:136px;height:136px;animation:.65s cubic-bezier(.2,.9,.3,1.2) .5s both stampSlam;position:relative}.stamp-mark--success .stamp-code,.stamp-mark--success .stamp-date{letter-spacing:2px;font-size:9px}.stamp-mark--success .stamp-emoji{font-size:34px}.stamp-mark--success .stamp-word{letter-spacing:2px;opacity:.85;font-size:8px}.stamp-code,.stamp-date,.stamp-word{font-family:var(--font-body);letter-spacing:1.5px;direction:ltr;unicode-bidi:isolate;font-size:7px;font-weight:900;line-height:1.15}.stamp-date{letter-spacing:1px}.stamp-emoji{font-size:18px;line-height:1.1}.stamp-label{width:100%;color:var(--ink-muted);text-align:center;text-overflow:ellipsis;white-space:nowrap;margin-top:6px;font-size:11px;font-weight:800;line-height:1.25;overflow:hidden}.stamp-slot-button.is-done .stamp-label,.stamp-slot-wrap.is-done .stamp-label{color:var(--ink)}.page-complete,.bonus-ribbon{border:3px double var(--orange-500);border-radius:var(--radius-sm);color:var(--orange-500);letter-spacing:2px;--r:-4deg;background:#ffffffb3;justify-content:center;align-items:center;padding:6px 16px;font-size:13px;font-weight:900;animation:.6s cubic-bezier(.2,.9,.3,1.2) .5s both stampSlam;display:inline-flex;transform:rotate(-4deg)}.page-inner>.page-complete{width:max-content;margin:14px auto 0;display:flex}.page-complete-wrap{justify-content:center;margin-top:14px;display:flex}.badges-heading,.badges-title{margin:24px 0 10px;font-size:18px;font-weight:900}.badges-rail{scrollbar-width:none;gap:10px;margin-inline:-20px;padding:0 20px 6px;display:flex;overflow-x:auto}.badges-rail:focus-visible{border-radius:var(--radius-lg)}.badge-card{border:1px solid var(--line-soft);box-shadow:var(--shadow-xs);opacity:.6;text-align:center;animation:popIn .5s var(--delay,0s) cubic-bezier(.2, .9, .3, 1.2) both;background:#fff;border-radius:18px;flex:0 0 110px;padding:12px}.badge-card.is-earned,.badge-card[data-earned=true]{border-color:var(--orange-300);opacity:1}.badge-icon{border:3px double var(--blue-200);background:var(--paper-muted);filter:grayscale();border-radius:50%;justify-content:center;align-items:center;width:50px;height:50px;margin:0 auto;font-size:22px;display:flex}.badge-card.is-earned .badge-icon,.badge-card[data-earned=true] .badge-icon{border-color:var(--orange-500);background:var(--orange-100);filter:none;transform:rotate(-8deg)}.badge-label{margin-top:8px;font-size:12px;font-weight:800;line-height:1.3}.badge-card>strong{margin-top:8px;font-size:12px;font-weight:800;line-height:1.3;display:block}.badge-sub{color:var(--ink-faint);font-size:10px}.badge-card>span{color:var(--ink-faint);font-size:10px;display:block}.empty-state{border:1px dashed var(--line);border-radius:var(--radius-lg);color:var(--ink-muted);text-align:center;background:#fff9;margin:16px 0 0;padding:16px;font-size:12px}.board-empty{margin-top:18px}.scan-screen{min-height:100%;padding:calc(64px + var(--safe-top)) max(20px, var(--safe-right)) calc(120px + var(--safe-bottom)) max(20px, var(--safe-left));flex-direction:column;display:flex;position:relative;overflow:hidden}.scan-screen:before{content:"";pointer-events:none;background:radial-gradient(circle at 50% 36%,#3d5fb024,#0000 55%);position:absolute;inset:0}.scanner-particle,.scan-particle{width:var(--particle-size,6px);height:var(--particle-size,6px);background:var(--particle-color,#3d5fb059);animation:float var(--particle-duration,8s) var(--particle-delay,0s) ease-in-out infinite;pointer-events:none;border-radius:50%;position:absolute;inset-block-start:var(--particle-top,var(--particle-y,20%));inset-inline-start:var(--particle-left,var(--particle-x,20%))}.scan-particle--0{--particle-color:#f0862a80}.scan-particle--1,.scan-particle--2{--particle-color:#3d5fb059}.viewfinder-wrap{flex:0 0 250px;width:250px;height:250px;margin:30px auto 0;position:relative}.viewfinder{color:var(--blue-700);background:#fff;border-radius:26px;transition:border-color .3s,box-shadow .3s;animation:2.6s ease-in-out infinite bracket;position:absolute;inset:0;overflow:hidden;box-shadow:0 20px 50px #3d5fb026}.viewfinder:after,.scanner-lines{z-index:2;border-radius:inherit;content:"";pointer-events:none;background:repeating-linear-gradient(0deg,#1b214006 0 2px,#0000 2px 6px);position:absolute;inset:0}.viewfinder.is-found,.viewfinder[data-state=found]{color:var(--orange-500);animation:.5s cubic-bezier(.2,.9,.3,1) both lockOn;box-shadow:0 20px 60px #f0862a40}.scanner-video{z-index:1;border-radius:inherit;background:var(--navy-950);object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.scanner-camera-off{z-index:1;color:var(--ink-muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:24px;font-size:12px;font-weight:700;display:flex;position:absolute;inset:0}.scanner-camera-off-icon{font-size:34px}.vf-corner,.viewfinder-corner{z-index:4;pointer-events:none;border-color:currentColor;width:46px;height:46px;position:absolute}.vf-corner.top-start,.viewfinder-corner.is-top-start,.vf-corner--top-start,.corner-tl{border-block-start:4px solid;border-inline-start:4px solid;border-start-start-radius:26px;inset-block-start:-2px;inset-inline-start:-2px}.vf-corner.top-end,.viewfinder-corner.is-top-end,.vf-corner--top-end,.corner-tr{border-block-start:4px solid;border-inline-end:4px solid;border-start-end-radius:26px;inset-block-start:-2px;inset-inline-end:-2px}.vf-corner.bottom-start,.viewfinder-corner.is-bottom-start,.vf-corner--bottom-start,.corner-bl{border-block-end:4px solid;border-inline-start:4px solid;border-end-start-radius:26px;inset-block-end:-2px;inset-inline-start:-2px}.vf-corner.bottom-end,.viewfinder-corner.is-bottom-end,.vf-corner--bottom-end,.corner-br{border-block-end:4px solid;border-inline-end:4px solid;border-end-end-radius:26px;inset-block-end:-2px;inset-inline-end:-2px}.laser,.scanner-laser{z-index:5;background:linear-gradient(90deg, transparent, var(--orange-500), transparent);height:3px;box-shadow:0 0 16px var(--orange-500);pointer-events:none;border-radius:2px;animation:2.6s ease-in-out infinite laser;position:absolute;left:8%;right:8%}.detected-qr{z-index:3;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.scan-qr{z-index:3;border-radius:var(--radius-lg);background:#fff;grid-template-columns:repeat(21,1fr);width:130px;height:130px;padding:10px;animation:.4s cubic-bezier(.2,.9,.3,1.2) both popIn;display:grid;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 10px 30px #1b214026}.scan-qr>i,.mini-qr>i{background:#fff;min-width:0;min-height:0;display:block}.scan-qr>i.is-on,.mini-qr>i.is-on{background:var(--navy-950)}.scan-qr:before,.scan-lock-ring{border:3px solid var(--orange-500);content:"";border-radius:50%;width:120px;height:120px;animation:1s ease-out infinite ringPulse;position:absolute}.scan-qr:before{z-index:-1;top:50%;left:50%;transform:translate(-50%,-50%)}.scan-qr-grid{border-radius:var(--radius-lg);background:#fff;grid-template-columns:repeat(21,1fr);width:130px;height:130px;padding:10px;animation:.4s cubic-bezier(.2,.9,.3,1.2) both popIn;display:grid;position:relative;box-shadow:0 10px 30px #1b214026}.qr-cell.is-dark,.qr-cell[data-on=true]{background:var(--navy-950)}.scan-lock,.detected-pill{z-index:7;inset-block-end:-18px;border-radius:var(--radius-round);background:var(--orange-500);color:#fff;white-space:nowrap;align-items:center;gap:8px;padding:6px 14px;font-size:12px;font-weight:900;animation:.35s cubic-bezier(.2,.9,.3,1.2) both popIn;display:flex;position:absolute;left:50%;transform:translate(-50%);box-shadow:0 8px 20px #f0862a66}.scan-lock-spinner{border:2px solid #fff;border-top-color:#0000;border-radius:50%;width:12px;height:12px;animation:.7s linear infinite spin}.scan-caption{color:var(--ink-muted);text-align:center;margin:34px 0 0;font-size:14px;font-weight:600;position:relative}.scanner-state,.scanner-error,.camera-error{border:1px solid var(--line-soft);border-radius:var(--radius-xl);box-shadow:var(--shadow-sm);text-align:center;background:#fff;margin-top:18px;padding:14px;position:relative}.scanner-error-title{color:var(--orange-700);font-size:14px;font-weight:900}.scanner-error-icon{font-size:28px;display:block}.scanner-error>h2{color:var(--orange-700);margin:4px 0 2px;font-size:14px;font-weight:900}.scanner-error>p{color:var(--ink-muted);margin:0;font-size:12px;line-height:1.6}.scanner-error-actions{justify-content:center;align-items:center;gap:8px;margin-top:12px;display:flex}.scanner-error-actions .secondary-button{border-radius:var(--radius-md);min-height:38px;padding:8px 14px;font-size:12px}.text-button{color:var(--blue-700);cursor:pointer;text-underline-offset:3px;background:0 0;border:0;padding:8px;font-size:12px;font-weight:800;text-decoration:underline}.scanner-error-copy{color:var(--ink-muted);margin:4px 0 12px;font-size:12px;line-height:1.6}.retry-button{border-radius:var(--radius-md);background:var(--navy-800);color:#fff;cursor:pointer;border:0;min-height:38px;padding:8px 16px;font-size:12px;font-weight:800}.manual-fallback{border-top:1px dashed var(--line);text-align:start;gap:8px;margin-top:12px;padding-top:12px;display:grid}.manual-fallback label{color:var(--ink-muted);font-size:11px;font-weight:800}.manual-fallback>input{border:1px solid var(--line);background:var(--paper);width:100%;font-family:var(--font-mono);text-align:left;direction:ltr;border-radius:10px;padding:9px 10px;font-size:11px}.manual-fallback>button{background:var(--orange-500);color:#fff;cursor:pointer;border:0;border-radius:10px;min-height:38px;padding:8px 12px;font-size:12px;font-weight:800}.manual-row{gap:6px;display:flex}.manual-input{border:1px solid var(--line);background:var(--paper);min-width:0;font-family:var(--font-mono);text-align:left;direction:ltr;border-radius:10px;flex:1;padding:9px 10px;font-size:11px}.manual-submit{background:var(--orange-500);color:#fff;cursor:pointer;border:0;border-radius:10px;padding:8px 12px;font-size:12px;font-weight:800}.demo-panel{border:1px solid var(--line-soft);border-radius:var(--radius-2xl);background:#fff;margin-top:22px;padding:14px;position:relative;box-shadow:0 10px 30px #1b21400f}.demo-panel-header,.demo-panel>header{justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;display:flex}.demo-panel>header h2{color:var(--ink-muted);margin:0;font-size:12px;font-weight:800}.demo-panel-title{color:var(--ink-muted);font-size:12px;font-weight:800}.demo-list{flex-direction:column;gap:8px;display:flex}.demo-code-row{border:1px solid var(--line-soft);background:var(--paper);color:var(--ink);cursor:pointer;text-align:start;animation:fadeUp .4s var(--delay,0s) ease both;border-radius:14px;align-items:center;gap:10px;padding:10px 12px;transition:background .2s,border-color .2s;display:flex}.demo-code-row:hover{border-color:var(--orange-500);background:var(--orange-050)}.mini-qr{border:1px solid var(--line-soft);background:#fff;border-radius:10px;flex:0 0 38px;grid-template-columns:repeat(5,1fr);gap:1px;width:38px;height:38px;padding:5px;display:grid}.demo-code-copy{flex:1;min-width:0}.demo-code-name{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:800;overflow:hidden}.demo-code-copy>strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:800;display:block;overflow:hidden}.demo-code-meta{color:var(--ink-muted);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.demo-code-copy>small{color:var(--ink-muted);text-overflow:ellipsis;white-space:nowrap;font-size:11px;display:block;overflow:hidden}.demo-code-points,.demo-points{color:var(--orange-700);font-size:12px;font-weight:900}.map-card,.campus-map{aspect-ratio:1/1.08;width:100%;box-shadow:var(--shadow-card);background-color:#eef3f4;background-image:linear-gradient(#2c3f8f12 1px,#0000 1px),linear-gradient(90deg,#2c3f8f12 1px,#0000 1px);background-size:26px 26px;border-radius:26px;position:relative;overflow:hidden}.map-card{border:1px solid var(--line)}.campus-map{outline:1px solid var(--line);outline-offset:-1px}.campus-map-image,.map-image{width:100%;height:100%;position:absolute;inset:0}.campus-map-image{object-fit:contain}.map-image{object-fit:cover}.map-credit{border-radius:var(--radius-xs);color:var(--ink-muted);font-family:var(--font-mono);background:#ffffffd1;padding:2px 6px;font-size:9px;position:absolute;inset-block-end:10px;inset-inline-start:12px}.map-pin{z-index:2;border:2px solid var(--blue-200);min-width:50px;color:var(--blue-700);cursor:pointer;text-align:center;animation:popIn .5s var(--delay,0s) cubic-bezier(.2, .9, .3, 1.2) both;background:#fff;border-radius:14px;padding:6px 8px;font-size:12px;font-weight:900;transition:transform .15s;position:absolute;translate:-50% -50%;box-shadow:0 6px 16px #1b21402e}.map-pin:hover{transform:scale(1.08)}.map-pin.is-progress,.map-pin[data-status=progress]{background:var(--blue-700);color:#fff;border-color:#fff}.map-pin.is-done,.map-pin[data-status=done]{border-color:var(--orange-150);background:var(--orange-500);color:#fff;animation:.5s both popIn,2.6s 1s infinite glowPulse;box-shadow:0 10px 24px #f0862a73}.map-pin-code{font-family:var(--font-mono);direction:ltr;unicode-bidi:isolate}.map-pin-progress{opacity:.85;white-space:nowrap;font-size:9px;font-weight:700;line-height:1.1}.map-legend{color:var(--ink-muted);flex-wrap:wrap;gap:14px;margin-top:12px;font-size:12px;font-weight:700;display:flex}.legend-item{align-items:center;gap:6px;display:flex}.legend-swatch{border:2px solid var(--blue-200);background:#fff;border-radius:4px;width:12px;height:12px}.legend-swatch.is-progress,.legend-swatch[data-status=progress]{border-color:var(--blue-700);background:var(--blue-700)}.legend-swatch.is-done,.legend-swatch[data-status=done]{border-color:var(--orange-500);background:var(--orange-500)}.building-list{flex-direction:column;gap:8px;margin-top:16px;display:flex}.building-row{border:1px solid var(--line-soft);border-radius:var(--radius-lg);box-shadow:var(--shadow-xs);color:var(--ink);cursor:pointer;text-align:start;animation:fadeUp .4s var(--delay,0s) ease both;background:#fff;padding:0;transition:border-color .2s;display:block}.building-row-main{border-radius:inherit;width:100%;color:inherit;cursor:pointer;text-align:start;background:0 0;border:0;align-items:center;gap:12px;padding:10px 12px;display:flex}.building-row:hover,.building-row.is-done{border-color:var(--orange-300)}.building-code{background:var(--blue-050);width:36px;height:36px;color:var(--blue-700);font-family:var(--font-mono);border-radius:11px;flex:0 0 36px;justify-content:center;align-items:center;font-size:10px;font-weight:900;display:flex}.building-row.is-progress .building-code,.building-row[data-status=progress] .building-code{background:var(--blue-700);color:#fff}.building-row.is-done .building-code,.building-row[data-status=done] .building-code{background:var(--orange-500);color:#fff}.building-copy{flex:1;min-width:0}.building-name{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:700;overflow:hidden}.building-sub{color:var(--ink-muted);font-size:10px}.building-dots{flex-wrap:wrap;justify-content:flex-end;gap:3px;max-width:55px;display:flex}.place-dot{border:1.5px solid var(--blue-200);background:0 0;border-radius:50%;width:9px;height:9px}.place-dot.is-done,.place-dot[data-stamped=true]{border-color:var(--stamp-ink,var(--navy-800));background:var(--stamp-ink,var(--navy-800))}.place-dot.is-done.is-orange{border-color:var(--orange-500);background:var(--orange-500)}.place-dot.is-done.is-navy{border-color:var(--navy-800);background:var(--navy-800)}.maps-link{color:var(--blue-700);align-items:center;gap:5px;margin:0 12px 10px;font-size:11px;font-weight:800;text-decoration:none;display:inline-flex}.maps-link:hover{color:var(--orange-700)}.podium{justify-content:center;align-items:flex-end;gap:10px;padding:10px 0 0;display:flex}.podium-item{min-width:0;animation:popIn .5s var(--delay,0s) cubic-bezier(.2, .9, .3, 1.2) both;flex-direction:column;flex:1;align-items:center;display:flex}.podium-avatar{background:linear-gradient(135deg, var(--blue-700), var(--navy-800));color:#fff;width:50px;height:50px;font-family:var(--font-mono);border:3px solid #fff;border-radius:50%;justify-content:center;align-items:center;font-size:12px;font-weight:900;display:flex;box-shadow:0 8px 20px #2c3f8f40}.podium-item[data-rank="1"] .podium-avatar,.podium-item.is-first .podium-avatar{background:linear-gradient(135deg, var(--orange-400), var(--orange-500));width:62px;height:62px;font-size:15px;box-shadow:0 10px 26px #f0862a66}.podium-name{text-align:center;text-overflow:ellipsis;white-space:nowrap;max-width:100px;margin-top:6px;font-size:11px;font-weight:800;overflow:hidden}.podium-time{color:var(--orange-700);font-family:var(--font-mono);direction:ltr;unicode-bidi:isolate;font-size:10px;font-weight:800}.podium-block{background:linear-gradient(180deg, var(--blue-100), var(--blue-050));width:100%;height:52px;color:var(--blue-700);border-radius:14px 14px 0 0;justify-content:center;align-items:flex-start;margin-top:8px;padding-top:8px;font-size:18px;font-weight:900;display:flex}.podium-item[data-rank="1"] .podium-block,.podium-item.is-first .podium-block{background:linear-gradient(180deg, var(--orange-150), var(--orange-100));height:70px;color:var(--orange-700)}.podium-item[data-rank="3"] .podium-block,.podium-item.is-third .podium-block{height:40px}.my-rank-card{border-radius:var(--radius-2xl);background:linear-gradient(135deg, var(--orange-400), var(--orange-500));color:#fff;align-items:center;gap:14px;margin-top:16px;padding:16px 18px;animation:2.6s infinite glowPulse;display:flex;position:relative;overflow:hidden}.my-rank-card:after{content:"";pointer-events:none;background:linear-gradient(90deg,#0000 30%,#ffffff40 50%,#0000 70%);animation:3.5s ease-in-out infinite shine;position:absolute;inset:0}.my-rank-shine{display:none}.my-rank-card>*{z-index:1;position:relative}.rank-number{letter-spacing:-1px;direction:ltr;unicode-bidi:isolate;font-size:36px;font-weight:900;line-height:1}.rank-copy{flex-direction:column;flex:1;min-width:0;display:flex}.rank-title{font-weight:900}.rank-hint{opacity:.92;font-size:12px;line-height:1.45}.rank-time{text-align:center;direction:ltr;unicode-bidi:isolate;flex-direction:column;display:flex}.rank-time-label{opacity:.85;font-size:10px;font-weight:700}.rank-time-value{font-family:var(--font-mono);font-size:15px;font-weight:900}.board-list{flex-direction:column;gap:6px;margin-top:14px;margin-bottom:0;padding:0;list-style:none;display:flex}.board-row{border:1px solid var(--line-soft);border-radius:var(--radius-lg);animation:fadeUp .4s var(--delay,0s) ease both;background:#fff;align-items:center;gap:10px;padding:10px 12px;display:flex}.board-row.is-me,.board-row[data-me=true]{border-color:var(--orange-300);background:var(--orange-100)}.row-rank{width:26px;color:var(--ink-faint);text-align:center;flex:0 0 26px;font-size:14px;font-weight:900}.board-row:nth-child(-n+3) .row-rank,.board-row[data-rank="1"] .row-rank,.board-row[data-rank="2"] .row-rank,.board-row[data-rank="3"] .row-rank,.row-rank.is-top-three{color:var(--orange-700)}.row-avatar{width:36px;height:36px;box-shadow:none;flex-basis:36px;font-size:11px}.row-copy{flex:1;min-width:0}.row-name{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:800;display:block;overflow:hidden}.row-meta{color:var(--ink-muted);text-overflow:ellipsis;white-space:nowrap;font-size:11px;display:block;overflow:hidden}.row-time{color:var(--blue-700);font-family:var(--font-mono);direction:ltr;unicode-bidi:isolate;font-size:12px;font-weight:900}.prize-medal{font-size:15px}.sheet-backdrop,.overlay-backdrop{z-index:30;cursor:default;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#1b214073;border:0;animation:.2s both fadeUp;position:absolute;inset:0}.place-sheet{z-index:31;background:var(--paper);max-height:calc(100% - 28px);box-shadow:var(--shadow-sheet);padding:14px 22px calc(40px + var(--safe-bottom));overscroll-behavior:contain;border-radius:30px 30px 0 0;animation:.4s cubic-bezier(.2,.9,.3,1) both slideUp;position:absolute;bottom:0;left:0;right:0;overflow-y:auto}.place-sheet:focus{outline:none}.sheet-handle{border-radius:var(--radius-round);background:var(--line);width:44px;height:5px;margin:0 auto 16px}.sheet-head{align-items:center;gap:14px;display:flex}.sheet-slot{border:2px dashed var(--blue-200);background:#fff;border-radius:50%;flex:0 0 96px;justify-content:center;align-items:center;width:96px;height:96px;display:flex}.sheet-slot.is-done{background:0 0;border-color:#0000}.stamp-mark-large{width:96px;height:96px;animation-delay:.1s}.stamp-mark-large .stamp-code,.stamp-mark-large .stamp-date{letter-spacing:2px;font-size:8px}.stamp-mark-large .stamp-emoji{font-size:24px}.sheet-copy,.sheet-title-block{flex:1;min-width:0}.sheet-title{margin:0;font-size:20px;font-weight:900;line-height:1.2}.sheet-meta{color:var(--ink-muted);margin:0;font-size:12px}.place-info{border:1px solid var(--line-soft);border-radius:var(--radius-lg);color:var(--ink);background:#fff;margin-top:16px;padding:12px 14px;font-size:13px;line-height:1.65}.place-facts{gap:8px;margin-top:10px;display:flex}.fact{border:1px solid var(--line-soft);text-align:center;background:#fff;border-radius:14px;flex:1;padding:10px}.fact-label{color:var(--ink-faint);font-size:10px;font-weight:700}.fact>span{color:var(--ink-faint);font-size:10px;font-weight:700;display:block}.fact-value{font-weight:900}.fact>strong{font-weight:900;display:block}.fact:first-child .fact-value,.fact.is-reward .fact-value,.fact:first-child>strong{color:var(--orange-700)}.place-sheet .scan-button{width:100%;margin-top:16px;padding:16px;font-size:16px}.already-stamped{color:var(--ink-muted);text-align:center;margin-top:16px;font-size:13px;font-weight:700}.success-backdrop{z-index:40;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#1b21408c;justify-content:center;align-items:center;padding:22px;display:flex;position:absolute;inset:0;overflow:hidden}.confetti-piece{z-index:0;width:var(--confetti-size,var(--size,8px));height:calc(var(--confetti-size,var(--size,8px)) * 1.4);border-radius:var(--confetti-radius,2px);background:var(--confetti-color,var(--orange-500));animation:confetti var(--confetti-duration,var(--duration,2.8s)) var(--confetti-delay,var(--delay,.4s)) cubic-bezier(.2, .6, .4, 1) both;pointer-events:none;position:absolute;inset-block-start:0;inset-inline-start:var(--confetti-left,var(--x,50%))}.success-card{z-index:1;border-radius:var(--radius-4xl);background-color:var(--paper);width:100%;max-height:100%;box-shadow:var(--shadow-overlay);text-align:center;overscroll-behavior:contain;scrollbar-width:none;background-image:radial-gradient(#2c3f8f0f 1px,#0000 1px);background-size:16px 16px;padding:26px 22px 20px;animation:.5s cubic-bezier(.2,.9,.3,1.2) both popIn,.5s .55s shake;position:relative;overflow:hidden auto}.success-card:focus{outline:none}.success-kicker{color:var(--ink-faint);letter-spacing:2px;margin:0;font-size:10px;font-weight:800}.success-stamp-wrap{justify-content:center;align-items:center;width:150px;height:150px;margin:16px auto 0;display:flex;position:relative}.success-stamp-wrap:before{border:2px dashed var(--blue-200);content:"";border-radius:50%;position:absolute;inset:0}.success-stamp-guide{border:2px dashed var(--blue-200);border-radius:50%;position:absolute;inset:0}.ink-splat{left:calc(50% + var(--splat-x,var(--ink-x,0px)) - var(--splat-size,var(--ink-size,8px)) / 2);top:calc(50% + var(--splat-y,var(--ink-y,0px)) - var(--splat-size,var(--ink-size,8px)) / 2);width:var(--splat-size,var(--ink-size,8px));height:var(--splat-size,var(--ink-size,8px));background:var(--stamp-ink,var(--orange-500));pointer-events:none;border-radius:50%;animation:.7s ease-out .55s both inkSplat;position:absolute}.success-stamp{width:136px;height:136px;animation:.65s cubic-bezier(.2,.9,.3,1.2) .5s both stampSlam;position:relative}.success-stamp .stamp-code,.success-stamp .stamp-date{letter-spacing:2px;font-size:9px}.success-stamp .stamp-emoji{font-size:34px}.success-stamp .stamp-word{letter-spacing:2px;opacity:.85;font-size:8px}.success-title{margin-top:16px;margin-bottom:0;font-size:22px;font-weight:900;line-height:1.2;animation:.4s .8s both fadeUp}.success-subtitle{color:var(--ink-muted);margin:0;font-size:13px;animation:.4s .85s both fadeUp}.success-stats{justify-content:center;gap:8px;margin-top:16px;animation:.4s .95s both fadeUp;display:flex}.success-stat{border:1px solid var(--line-soft);background:#fff;border-radius:14px;min-width:92px;padding:8px 16px}.success-stat.is-points,.success-stat--points{border-color:var(--orange-150);background:var(--orange-100);color:var(--orange-700)}.success-stat-label{color:var(--ink-faint);font-size:10px;font-weight:800}.success-stat>span{color:var(--ink-faint);font-size:10px;font-weight:800;display:block}.success-stat--points>span,.success-stat.is-points .success-stat-label{color:var(--orange-700)}.success-stat-value{font-variant-numeric:tabular-nums;font-size:26px;font-weight:900;line-height:1.1}.success-stat>strong{font-variant-numeric:tabular-nums;font-size:26px;font-weight:900;line-height:1.1;display:block}.success-stat>strong small,.success-stat-total{color:var(--ink-faint);font-size:14px}.success-progress{border-radius:var(--radius-round);background:var(--line-soft);height:8px;margin-top:14px;overflow:hidden}.success-progress-fill{width:var(--progress,0%);border-radius:inherit;background:linear-gradient(90deg, var(--orange-500), var(--orange-200));height:100%;transition:width 1.2s cubic-bezier(.2,.9,.3,1) .7s}.success-card .bonus-ribbon{background:0 0;margin-top:14px;animation-delay:1.2s;transform:none}.new-badge-card{border:1px solid var(--orange-150);border-radius:var(--radius-lg);text-align:start;background:#fff;align-items:center;gap:12px;margin-top:12px;padding:10px 14px;animation:.5s cubic-bezier(.2,.9,.3,1.2) 1.4s both popIn;display:flex}.new-badge-icon{background:var(--orange-100);border-radius:50%;flex:0 0 40px;justify-content:center;align-items:center;width:40px;height:40px;font-size:20px;animation:1s ease-in-out 1.8s 2 wiggle;display:flex}.new-badge-copy{flex:1;min-width:0}.new-badge-card>span:nth-child(2){flex-direction:column;flex:1;min-width:0;display:flex}.new-badge-card>span:nth-child(2) small{color:var(--orange-700);font-size:10px;font-weight:800}.new-badge-card>span:nth-child(2) strong{font-size:14px;font-weight:900}.new-badge-card>b{color:var(--orange-700);font-size:13px;font-weight:900}.new-badge-kicker{color:var(--orange-700);font-size:10px;font-weight:800}.new-badge-name{font-size:14px;font-weight:900}.new-badge-points{color:var(--orange-700);font-size:13px;font-weight:900}.success-next-button,.success-next{width:100%;margin-top:18px;animation:.4s 1.3s both fadeUp}.success-card .secondary-button{border-radius:var(--radius-lg);width:100%;min-height:46px;margin-top:10px;padding:12px;font-size:14px;font-weight:800;animation:.4s 1.4s both fadeUp}.tab-bar{z-index:20;right:max(18px, var(--safe-right));bottom:calc(22px + var(--safe-bottom));left:max(18px, var(--safe-left));border:1px solid var(--line-soft);border-radius:var(--radius-4xl);box-shadow:var(--shadow-floating);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#ffffffe0;justify-content:space-around;padding:8px;display:flex;position:absolute}.tab-button{border-radius:var(--radius-xl);min-width:0;min-height:52px;color:var(--ink-muted);cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:3px;padding:8px 4px;transition:all .25s;display:flex}.tab-button.is-active,.tab-button[aria-current=page]{background:linear-gradient(135deg, var(--orange-400), var(--orange-500));color:#fff;box-shadow:0 8px 20px #f0862a59}.tab-icon{font-size:19px;line-height:1}.tab-label,.tab-button>span:last-child{text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:10px;font-weight:800;line-height:1.35;overflow:hidden}.toast-region{z-index:50;top:calc(14px + var(--safe-top));pointer-events:none;gap:8px;display:grid;position:absolute;left:14px;right:14px}.toast{border-radius:var(--radius-md);max-width:100%;box-shadow:var(--shadow-floating);color:#fff;pointer-events:auto;text-align:center;background:#1b2140f0;border:1px solid #ffffff40;justify-self:center;padding:9px 14px;font-size:12px;font-weight:700;line-height:1.5;animation:.3s both fadeUp}.toast.is-error{background:#c2410cf5}.app-toast{z-index:50;top:calc(14px + var(--safe-top));border-radius:var(--radius-md);width:max-content;max-width:calc(100% - 28px);box-shadow:var(--shadow-floating);color:#fff;text-align:center;background:#1b2140f0;border:1px solid #ffffff40;padding:9px 14px;font-size:12px;font-weight:700;line-height:1.5;animation:.3s both fadeUp;position:absolute;left:50%;transform:translate(-50%)}.deep-link-actions{z-index:4;right:26px;bottom:calc(36px + var(--safe-bottom));gap:8px;display:grid;position:absolute;left:26px}.deep-link-actions .primary-button,.deep-link-actions .secondary-button{width:100%}.not-found-screen{background-color:var(--paper);text-align:center;background-image:radial-gradient(#2c3f8f0f 1px,#0000 1px);background-size:16px 16px;flex-direction:column;justify-content:center;align-items:center;gap:14px;min-height:100%;padding:32px;display:flex}.not-found-screen>span{font-size:56px;animation:2.2s ease-in-out infinite wiggle}.not-found-screen h1{margin:0;font-size:24px;font-weight:900}.admin-placeholder{min-height:100vh;background-color:var(--paper);min-height:100dvh;color:var(--ink);text-align:center;background-image:radial-gradient(#2c3f8f0f 1px,#0000 1px);background-size:16px 16px;flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:32px;display:flex}.admin-placeholder img{width:min(240px,70vw)}.admin-placeholder h1,.admin-placeholder p{margin:0}.admin-placeholder h1{font-size:28px;font-weight:900}.admin-placeholder p{color:var(--ink-muted);font-size:14px}.offline-pill{z-index:25;top:calc(12px + var(--safe-top));border-radius:var(--radius-round);background:var(--navy-950);box-shadow:var(--shadow-sm);color:#fff;padding:5px 10px;font-size:10px;font-weight:800;position:absolute;left:50%;transform:translate(-50%)}@media (min-width:700px){.app-shell{padding-block:24px}.phone-shell,.student-app{height:calc(100vh - 48px);border:1px solid #1b214014;border-radius:34px;height:calc(100dvh - 48px);min-height:620px;box-shadow:0 40px 100px #1b21404d}.login-screen,.app-scroll{border-radius:inherit}}@media (max-width:699px){.desktop-decor,.desktop-stamps,.decor-stamp{display:none}.app-shell{background:var(--paper)}}@media (max-width:370px){.login-screen{padding-inline:20px}.passport-illustration{flex-basis:258px;width:184px;height:258px}.login-title{font-size:27px}.student-name{max-width:165px;font-size:20px}.passport-card{padding:18px}.passport-main{gap:12px}.progress-ring,.progress-ring svg{flex-basis:88px;width:88px;height:88px}.passport-stats{gap:7px}.stat-card{padding:8px 9px}.stamp-grid{gap-inline:5px}.stamp-slot,.stamp-mark{width:78px;height:78px}.my-rank-card{gap:10px;padding-inline:14px}.rank-number{font-size:31px}.row-time{font-size:10px}}@media (max-height:760px){.login-screen{padding-block-start:calc(28px + var(--safe-top))}.passport-illustration{flex-basis:224px;width:160px;height:224px;margin-top:12px}.passport-seal,.cover-seal{width:68px;height:68px}.passport-seal img,.cover-seal img{width:44px;height:44px}.cover-stamp{width:66px;height:66px}}
