@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/bricolage-800-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:800;font-display:swap;src:url(/fonts/bricolage-800-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/inter-latin.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/inter-latin-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}:root{--bg:#f5f4ef;--text:#121417;--muted:#5b5f66;--border:#d9d7cf;--border-soft:#e8e6df;--accent:#ff8a3d;--ok:#157f43;--ko:#b42318;--font-title:"Bricolage Grotesque", system-ui, sans-serif;--font-body:"Inter", system-ui, sans-serif}*,:before,:after{box-sizing:border-box}body{background:var(--bg);color:var(--text);font-family:var(--font-body);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.5}strong,b{font-weight:600}h2{margin:28px 0 6px;font-size:15px;font-weight:600}.icon{flex:none;width:24px;height:24px}h1{font-family:var(--font-title);letter-spacing:-.01em;margin:0 0 8px;font-size:34px;font-weight:800;line-height:1.1}.muted{color:var(--muted)}.eyebrow{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 6px;font-size:13px;font-weight:600}.btn-primary,.btn-secondary{width:100%;min-height:56px;font:600 17px var(--font-body);cursor:pointer;border-radius:16px;justify-content:center;align-items:center;gap:8px;padding:0 20px;text-decoration:none;display:flex}.btn-primary{background:var(--text);color:#fff;border:0}.btn-primary:disabled{opacity:.6;cursor:default}.btn-secondary{border:1px solid var(--border);color:var(--text);background:#fff}:is(a,button,input):focus-visible{outline:3px solid var(--accent);outline-offset:2px}:root{--tabbar-h:calc(64px + env(safe-area-inset-bottom))}.page{max-width:480px;padding:calc(env(safe-area-inset-top) + 32px) 20px calc(env(safe-area-inset-bottom) + 32px);margin:0 auto}.screen .page{padding-bottom:calc(var(--tabbar-h) + 32px)}.login{min-height:calc(100dvh - 64px - env(safe-area-inset-top) - env(safe-area-inset-bottom));flex-direction:column;display:flex}.brand{align-items:center;gap:10px;margin-bottom:40px;display:flex}.logo{width:44px;height:44px}.wordmark{font-family:var(--font-title);font-size:26px;font-weight:800}.form{flex-direction:column;gap:16px;margin-top:24px;display:flex}.field{flex-direction:column;gap:6px;font-size:14px;font-weight:600;display:flex}.field input{border:1px solid var(--border);min-height:52px;color:var(--text);font:400 17px var(--font-body);background:#fff;border-radius:14px;padding:0 16px}.field input[name=code]{letter-spacing:.18em;text-transform:uppercase;font-weight:600}.form-error{color:var(--ko);margin:0;font-weight:600}.form .btn-primary{margin-top:8px}.login-help{text-align:center;color:var(--muted);margin:auto 0 0;padding-top:32px;font-size:14px}.login-privacy{text-align:center;margin:4px 0 0;font-size:14px}.login-privacy a{min-height:44px;color:var(--muted);padding:12px;display:inline-block}.install .steps{flex-direction:column;gap:12px;margin:28px 0 32px;padding:0;list-style:none;display:flex}.install .steps li{border:1px solid var(--border-soft);background:#fff;border-radius:20px;align-items:center;gap:14px;padding:14px 16px;display:flex}.step-icon{background:var(--bg);border-radius:12px;flex:none;place-items:center;width:44px;height:44px;display:grid}.step-icon .logo{width:36px;height:36px}.tabbar{z-index:1000;height:var(--tabbar-h);padding-bottom:env(safe-area-inset-bottom);border-top:1px solid var(--border-soft);background:#fff;display:flex;position:fixed;bottom:0;left:0;right:0}.tab{min-height:44px;color:var(--muted);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;font-size:12px;font-weight:600;text-decoration:none;display:flex}.tab .icon{border-radius:999px;width:52px;height:30px;padding:4px 14px}.tab[aria-current=page]{color:var(--text)}.tab[aria-current=page] .icon{background:var(--accent)}.screen-head{margin-bottom:20px}.chips{scrollbar-width:none;gap:8px;margin:0 -20px 16px;padding:0 20px 4px;display:flex;overflow-x:auto}.chip{border:1px solid var(--border);min-height:44px;color:var(--text);font:600 15px var(--font-body);cursor:pointer;background:#fff;border-radius:999px;flex:none;padding:0 18px}.chip[aria-pressed=true]{border-color:var(--text);background:var(--text);color:#fff}.cards{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.card{border:1px solid var(--border-soft);color:inherit;background:#fff;border-radius:20px;gap:14px;padding:16px;text-decoration:none;display:flex}.initial{width:52px;height:52px;color:var(--text);font:800 24px var(--font-title);border-radius:14px;flex:none;place-items:center;display:grid}.card-body{flex-direction:column;align-items:flex-start;min-width:0;display:flex}.card-cat{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-size:12px;font-weight:600}.card-name{font-size:17px;line-height:1.3}.card-addr{color:var(--muted);font-size:14px}.deal-label{background:var(--text);color:#fff;border-radius:8px;margin-top:10px;padding:4px 10px;font-size:14px;font-weight:600;display:inline-block}.deal-label-lg{border-radius:12px;margin:20px 0 0;padding:8px 14px;font-size:20px}.empty{border:1px dashed var(--border);text-align:center;color:var(--muted);border-radius:20px;flex-direction:column;align-items:center;gap:12px;padding:48px 16px;display:flex}.empty p{margin:0;font-weight:600}.empty .icon{width:32px;height:32px}.back{min-height:44px;color:var(--text);align-items:center;gap:4px;margin:-8px 0 16px -6px;font-weight:600;text-decoration:none;display:inline-flex}.detail-head .initial{width:64px;height:64px;margin-bottom:16px;font-size:30px}.detail-head h1{margin-top:2px}.detail-head p,.detail h2+p{margin:0}.detail .btn-primary{margin-top:32px}.badge-page{padding-top:calc(env(safe-area-inset-top) + 20px)}.badge-card{background:var(--text);color:#fff;text-align:center;border-radius:24px;flex-direction:column;align-items:center;padding:22px 20px 20px;display:flex}.badge-top{letter-spacing:.06em;text-transform:uppercase;text-align:left;justify-content:space-between;gap:12px;width:100%;margin-bottom:20px;font-size:12px;font-weight:600;display:flex}.badge-year{color:#b4b8bf;flex:none}.badge-name{font:800 30px/1.1 var(--font-title);margin:0}.badge-class{color:#b4b8bf;margin:4px 0 20px;font-weight:600}.badge-qr{aspect-ratio:1;background:#fff;border-radius:20px;place-items:center;width:100%;max-width:260px;padding:18px;display:grid}.badge-qr svg{width:100%;height:100%}.qr-placeholder{background:var(--border-soft);border-radius:8px;width:100%;height:100%}.badge-qr.offline p{color:var(--ko);margin:0;font-weight:600}.badge-renew{width:100%;max-width:260px;margin-top:16px}.badge-bar{background:#2d3036;border-radius:999px;height:6px;overflow:hidden}.badge-bar span{border-radius:inherit;background:var(--accent);width:100%;height:100%;transition:width .25s linear;display:block}.badge-renew-text{color:#b4b8bf;margin:8px 0 0;font-size:14px}.badge-renew-text strong{color:#fff;font-variant-numeric:tabular-nums}.badge-clock{font:800 40px/1 var(--font-title);font-variant-numeric:tabular-nums;letter-spacing:.02em;margin:14px 0 0}.badge-hint{text-align:center;margin:16px 0 0;font-weight:600}.logout{margin-top:32px}.map-screen{inset:0 0 var(--tabbar-h) 0;position:fixed}.map{background:var(--border-soft);position:absolute;inset:0}.map-top{z-index:500;top:calc(env(safe-area-inset-top) + 12px);position:absolute;left:12px;right:12px}.map-search{border:1px solid var(--border);height:52px;color:var(--muted);background:#fff;border-radius:14px;align-items:center;gap:8px;padding:0 16px;display:flex;box-shadow:0 4px 16px #1214171a}.map-search input{min-width:0;height:100%;color:var(--text);font:400 17px var(--font-body);background:0 0;border:0;outline:none;flex:1}.search-results{border:1px solid var(--border);background:#fff;border-radius:14px;margin:6px 0 0;padding:6px;list-style:none;box-shadow:0 4px 16px #1214171a}.search-results button{width:100%;min-height:44px;color:var(--text);font:400 16px var(--font-body);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:10px;justify-content:space-between;gap:12px;padding:8px 10px;display:flex}.search-results button:hover{background:var(--bg)}.search-results span{color:var(--muted)}.no-results{color:var(--muted);padding:10px}.map-locate{z-index:400;top:calc(env(safe-area-inset-top) + 76px);border:1px solid var(--border);width:52px;height:52px;color:var(--text);cursor:pointer;background:#fff;border-radius:16px;place-items:center;display:grid;position:absolute;right:12px;box-shadow:0 4px 16px #1214171f}.map-toast{z-index:600;left:50%;top:calc(env(safe-area-inset-top) + 140px);background:var(--text);color:#fff;white-space:nowrap;border-radius:12px;margin:0;padding:10px 16px;font-size:14px;font-weight:600;position:absolute;transform:translate(-50%)}.map-sheet{z-index:550;background:#fff;border-radius:20px;flex-direction:column;align-items:flex-start;padding:18px;display:flex;position:absolute;bottom:12px;left:12px;right:12px;box-shadow:0 8px 28px #1214172e}.map-sheet[hidden],.map-toast[hidden],.search-results[hidden]{display:none}.sheet-close{width:44px;height:44px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:12px;place-items:center;display:grid;position:absolute;top:8px;right:8px}.sheet-actions{gap:8px;width:100%;margin-top:16px;display:flex}.sheet-actions .btn-primary{flex:2}.sheet-actions .btn-secondary{flex:1}.map-empty{z-index:500;text-align:center;color:var(--muted);background:#fff;border-radius:20px;flex-direction:column;align-items:center;gap:12px;padding:32px 20px;display:flex;position:absolute;top:50%;left:20px;right:20px;transform:translateY(-50%);box-shadow:0 8px 28px #1214172e}.map-empty p{margin:0;font-weight:600}.map-empty .icon{width:32px;height:32px}.pin{background:0 0;border:0}.leaflet-container{font-family:var(--font-body)}
