:root,[data-theme=light]{--bg:#f3f1ec;--ink:#1c1c1c;--muted:#6b6b6b;--accent:#e85d3b;--surface:#ede8e0;--card:#fffcf8;--button:#2a2a2a;--on-button:#fff;--on-accent:#fff;--divider:#e6e1d8;--auth-top:#f7f4ee;--tabbar-bg:color-mix(in srgb, var(--bg) 92%, white);--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);color:var(--ink);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-family:Manrope,system-ui,sans-serif;font-weight:450;line-height:1.45}[data-theme=dark]{--bg:#141210;--ink:#f3f1ec;--muted:#9a958c;--accent:#e85d3b;--surface:#2a2722;--card:#1e1c18;--button:#f3f1ec;--on-button:#141210;--on-accent:#141210;--divider:#3a3630;--auth-top:#1a1814;--tabbar-bg:color-mix(in srgb, var(--bg) 88%, black)}*{box-sizing:border-box}html,body,#root{background:var(--bg);min-height:100%;color:var(--ink);margin:0;transition:background-color .2s,color .2s}body{min-height:100dvh}button,input,textarea{font:inherit}a{color:inherit}.app-shell{min-height:100dvh;padding-top:var(--safe-top);flex-direction:column;display:flex}.main{padding:20px 20px calc(88px + var(--safe-bottom));flex:1;width:100%;max-width:720px;margin:0 auto}.tabbar{z-index:50;padding:10px 8px calc(10px + var(--safe-bottom));background:var(--tabbar-bg);border-top:1px solid var(--divider);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);grid-template-columns:repeat(4,1fr);gap:4px;display:grid;position:fixed;bottom:0;left:0;right:0}.tabbar.tabs-5{grid-template-columns:repeat(5,1fr)}.tabbar a{text-align:center;color:var(--muted);border-radius:12px;padding:8px 2px;font-size:11px;font-weight:600;text-decoration:none}.tabbar a.active{color:var(--accent);background:color-mix(in srgb, var(--accent) 14%, transparent)}.eyebrow{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:12px;font-weight:600}h1,.brand{letter-spacing:-.02em;color:var(--ink);margin:8px 0 0;font-family:Literata,Georgia,serif;font-weight:700}h1{font-size:2rem;line-height:1.15}.muted{color:var(--muted)}.search-status{margin:8px 0 0;font-size:13px;font-weight:600}.stack{flex-direction:column;gap:12px;display:flex}.row{align-items:center;gap:10px;display:flex}.field{border:1px solid var(--divider);background:var(--card);width:100%;color:var(--ink);border-radius:14px;padding:14px 16px}.field-with-clear{position:relative}.field-with-clear .field{padding-right:44px}.field-clear{width:32px;height:32px;color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:10px;place-items:center;font-size:22px;line-height:1;display:grid;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.field-clear:hover{color:var(--ink);background:color-mix(in srgb, var(--divider) 70%, transparent)}.linkish{color:var(--accent);font:inherit;font-size:inherit;cursor:pointer;text-underline-offset:2px;background:0 0;border:0;padding:0;font-weight:650;text-decoration:underline}.password-field{position:relative}.password-field .field{padding-right:96px}.password-toggle{color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;padding:6px 8px;font-size:13px;font-weight:600;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.field::placeholder{color:var(--muted)}.field:focus{outline:2px solid color-mix(in srgb, var(--accent) 45%, transparent);border-color:var(--accent)}.btn{cursor:pointer;background:var(--button);color:var(--on-button);border:0;border-radius:14px;padding:14px 18px;font-weight:700}.btn.accent{background:var(--accent);color:#fff}.btn.ghost{color:var(--muted);background:0 0;padding-left:0;padding-right:0}.btn:disabled{opacity:.5;cursor:default}.theme-toggle{border:1px solid var(--divider);background:var(--card);color:var(--ink);cursor:pointer;border-radius:999px;padding:8px 14px;font-size:13px;font-weight:600}.error{color:var(--accent);font-weight:600}.list-item{border-bottom:1px solid var(--divider);padding:10px 0}.list-item h3{color:var(--ink);margin:0 0 4px;font-size:1.05rem}.chips-compact{gap:6px;margin-top:8px}.thread-feed{margin-top:4px}.thread-post{border-bottom:1px solid var(--divider);padding:10px 0}.thread-meta{justify-content:space-between;align-items:baseline;gap:8px;font-size:13px;line-height:1.3;display:flex}.thread-who{min-width:0;color:var(--ink);font-weight:600}.thread-link{color:var(--ink);font:inherit;cursor:pointer;text-underline-offset:2px;background:0 0;border:0;padding:0;font-weight:600;text-decoration:underline}.thread-tag{background:color-mix(in srgb, var(--accent) 16%, transparent);color:var(--accent);letter-spacing:.02em;text-transform:lowercase;border-radius:999px;margin-left:6px;padding:1px 6px;font-size:11px;font-weight:700;display:inline-block}.thread-tag.muted-tag{background:color-mix(in srgb, var(--muted) 18%, transparent);color:var(--muted)}.thread-title{color:var(--ink);margin:4px 0 0;font-size:.95rem;font-weight:650;line-height:1.35}.thread-meeting{margin-top:2px;font-size:13px;line-height:1.35}.thread-body{color:var(--ink);white-space:pre-wrap;margin:4px 0 0;font-size:.92rem;line-height:1.45}.thread-actions{flex-wrap:wrap;gap:12px;margin-top:6px;display:flex}.thread-action{color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-size:13px;font-weight:600}.thread-action.danger{color:var(--accent)}.thread-club{text-align:left;border:0;border-bottom:1px solid var(--divider);cursor:pointer;width:100%;color:inherit;background:0 0;padding:10px 0;display:block}.thread-club-meta{margin-top:2px;font-size:13px}.thread-club-header h2{margin:0;font-size:1.15rem}.badge{background:var(--accent);color:#fff;border-radius:999px;justify-content:center;min-width:22px;padding:2px 7px;font-size:12px;font-weight:700;display:inline-flex}.badges-panel{margin-top:0}.badge-legend{flex-wrap:wrap;gap:8px 14px;margin-top:10px;margin-bottom:2px;display:flex}.badge-legend-item{color:var(--ink);align-items:center;gap:6px;font-size:12px;font-weight:650;display:inline-flex}.badge-legend-item:before{content:"";border:1.5px solid color-mix(in srgb, var(--medal) 55%, var(--ink));background:linear-gradient(160deg, color-mix(in srgb, var(--medal) 75%, white), var(--medal));width:12px;height:12px;box-shadow:inset 0 -1px 0 color-mix(in srgb, var(--ink) 15%, transparent);border-radius:50%}.badge-legend--bronze{--medal:#c4845a}.badge-legend--silver{--medal:#9e9890}.badge-legend--gold{--medal:#d4b34a}.badge-track{border-top:1px solid var(--divider);margin-top:14px;padding-top:12px}.badge-track:first-of-type{border-top:0;padding-top:8px}.badge-track-head{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.badge-current{margin-top:4px;font-size:1.05rem;font-weight:650}.badge-medals{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px 10px;margin-top:16px;display:grid}.badge-medal{text-align:center;isolation:isolate;flex-direction:column;align-items:center;gap:0;min-width:0;display:flex}.badge-medal-disc{z-index:1;border:3px solid color-mix(in srgb, var(--medal) 35%, var(--divider));background:radial-gradient(circle at 30% 26%, #ffffffb3, transparent 46%), linear-gradient(165deg, color-mix(in srgb, var(--medal) 28%, var(--surface)), var(--surface));width:56px;height:56px;box-shadow:0 2px 6px color-mix(in srgb, var(--ink) 10%, transparent), inset 0 -3px 0 color-mix(in srgb, var(--ink) 8%, transparent);border-radius:50%;flex-direction:column;justify-content:center;align-items:center;gap:0;transition:transform .2s,box-shadow .2s,border-color .2s;display:flex;position:relative}.badge-medal-ribbon{background:color-mix(in srgb, var(--medal) 45%, var(--divider));clip-path:polygon(0 0,100% 0,85% 100%,50% 72%,15% 100%);opacity:.7;width:22px;height:16px;margin-top:-4px}.badge-medal-star{color:color-mix(in srgb, var(--medal) 70%, var(--muted));font-size:11px;line-height:1}.badge-medal-num{letter-spacing:-.02em;color:var(--muted);font-size:15px;font-weight:800;line-height:1}.badge-medal-label{text-align:center;color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;max-width:100%;margin-top:8px;font-size:12px;font-weight:600;line-height:1.25;display:-webkit-box;overflow:hidden}.badge-medal-meta{letter-spacing:.02em;text-transform:uppercase;color:var(--muted);margin-top:2px;font-size:10px;font-weight:650}.badge-medal.is-unlocked .badge-medal-disc{border-color:color-mix(in srgb, var(--medal) 75%, var(--ink));background:radial-gradient(circle at 30% 24%, #ffffff8c, transparent 48%), linear-gradient(160deg, color-mix(in srgb, var(--medal) 82%, white), var(--medal) 55%, color-mix(in srgb, var(--medal) 70%, #6b4a20));box-shadow:0 3px 8px color-mix(in srgb, var(--medal) 35%, transparent), 0 1px 2px color-mix(in srgb, var(--ink) 14%, transparent), inset 0 -3px 0 color-mix(in srgb, var(--ink) 16%, transparent), inset 0 1px 0 #ffffff59}.badge-medal.is-unlocked .badge-medal-ribbon{background:color-mix(in srgb, var(--medal) 65%, var(--accent));opacity:1}.badge-medal.is-unlocked .badge-medal-star{color:color-mix(in srgb, var(--ink) 55%, #5a3d12)}.badge-medal.is-unlocked .badge-medal-num{color:color-mix(in srgb, var(--ink) 88%, black)}.badge-medal.is-unlocked .badge-medal-label{color:var(--ink);font-weight:700}.badge-medal.is-unlocked .badge-medal-meta{color:color-mix(in srgb, var(--medal) 55%, var(--accent))}.badge-medal.is-locked .badge-medal-disc{filter:grayscale(.35);border-style:dashed}.badge-medal.is-current .badge-medal-disc{box-shadow:0 0 0 4px color-mix(in srgb, var(--accent) 30%, transparent), 0 3px 8px color-mix(in srgb, var(--medal) 35%, transparent), inset 0 -3px 0 color-mix(in srgb, var(--ink) 16%, transparent);transform:scale(1.06)}.badge-medal--bronze{--medal:#c4845a}.badge-medal--silver{--medal:#9e9890}.badge-medal--gold{--medal:#d4b34a}.badge-progress{margin-top:14px}.badge-progress-meta{justify-content:space-between;gap:8px;margin-bottom:6px;font-size:13px;font-weight:600;display:flex}.badge-progress-track{background:color-mix(in srgb, var(--divider) 70%, var(--surface));border-radius:999px;height:8px;overflow:hidden}.badge-progress-bar{background:linear-gradient(90deg, color-mix(in srgb, var(--accent) 75%, #c4845a), var(--accent));border-radius:999px;max-width:100%;height:100%;transition:width .35s}.badge-progress .muted{margin-top:6px;font-size:12px}@media (width>=520px){.badge-medals{grid-template-columns:repeat(6,minmax(0,1fr))}}@media (width<=420px){.badge-medal-disc{width:50px;height:50px}.badge-medal-num{font-size:14px}.badge-medal-label{font-size:11px}}.auth-hero{min-height:100dvh;padding:calc(28px + var(--safe-top)) 24px calc(28px + var(--safe-bottom));background:radial-gradient(ellipse at top right, color-mix(in srgb, var(--accent) 18%, transparent), transparent 45%), linear-gradient(180deg, var(--auth-top) 0%, var(--bg) 55%);flex-direction:column;justify-content:center;display:flex;position:relative}.auth-hero .theme-toggle{top:calc(16px + var(--safe-top));position:absolute;right:16px}.auth-hero .brand{margin:10px 0 8px;font-size:clamp(2.4rem,10vw,3.4rem)}.auth-hero .brand em{color:var(--accent);font-style:italic;font-weight:500}.chat-wrap{height:calc(100dvh - var(--safe-top));background:var(--bg);flex-direction:column;max-width:720px;margin:0 auto;display:flex}.chat-messages{flex-direction:column;flex:1;gap:10px;padding:12px 16px;display:flex;overflow:auto}.msg{flex-direction:column;width:fit-content;max-width:min(78%,22rem);display:flex}.msg.mine{align-self:flex-end;align-items:flex-end}.msg.theirs{align-self:flex-start;align-items:flex-start}.bubble{background:var(--surface);width:fit-content;max-width:100%;color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;border-radius:16px;padding:10px 14px;display:inline-block}.bubble.mine{background:var(--button);color:var(--on-button)}.msg .tick{margin-top:2px;font-size:12px}.msg-ticks{color:var(--muted);margin-top:2px;line-height:0;display:inline-flex}.msg-ticks.read{color:var(--accent)}.chat-input{padding:12px 16px calc(12px + var(--safe-bottom));border-top:1px solid var(--divider);background:var(--bg);gap:10px;display:flex}.empty{color:var(--muted);padding:28px 0}.install-hint{background:var(--surface);color:var(--ink);border-radius:16px;margin-top:16px;padding:14px 16px;font-size:14px}.chips{flex-wrap:wrap;gap:6px;display:flex}.filters-row{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;display:grid}.filters-panel{background:var(--surface);border:1px solid var(--divider);border-radius:16px;margin-top:12px;padding:12px}.header-actions{flex-shrink:0;align-items:center;gap:4px;display:flex}.icon-btn{border:1px solid var(--divider);background:var(--card);width:42px;height:42px;color:var(--muted);cursor:pointer;border-radius:12px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}.icon-btn.on{color:var(--accent);border-color:color-mix(in srgb, var(--accent) 45%, var(--divider));background:color-mix(in srgb, var(--accent) 12%, var(--card))}.icon-dot{background:var(--accent);border-radius:50%;width:7px;height:7px;position:absolute;top:8px;right:8px}.filter-select{flex-direction:column;gap:4px;min-width:0;display:flex}.filter-select>span{color:var(--muted);font-size:12px;font-weight:600}.filter-select .field{appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--muted) 50%), linear-gradient(135deg, var(--muted) 50%, transparent 50%);background-position:calc(100% - 16px) calc(50% - 2px),calc(100% - 11px) calc(50% - 2px);background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding:10px 28px 10px 12px}@media (width<=560px){.filters-row{grid-template-columns:1fr}}.chip{border:1px solid var(--divider);background:var(--card);color:var(--ink);cursor:pointer;border-radius:999px;padding:6px 12px;font-size:13px;font-weight:600}.chip.on{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 18%, transparent);color:var(--accent)}.panel{background:var(--card);border:1px solid var(--divider);border-radius:16px;margin-top:14px;padding:14px}.thumb{object-fit:cover;background:var(--surface);border:1px solid var(--divider);box-sizing:border-box;border-radius:8px;flex-shrink:0;width:48px;height:64px}.thumb-wrap{cursor:pointer;background:0 0;border:0;border-radius:8px;padding:0;line-height:0}.book-detail{grid-template-columns:72px 1fr;align-items:start;gap:14px;margin-top:16px;display:grid}.book-cover{object-fit:cover;background:var(--surface);border:1px solid var(--divider);box-sizing:border-box;border-radius:8px;flex-shrink:0;width:72px;height:96px}.book-cover.placeholder{color:var(--muted);text-align:center;place-items:center;padding:6px;font-size:11px;display:grid}.book-description{border-top:1px solid var(--divider);margin-top:18px;padding-top:14px}.book-actions{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:20px;margin-bottom:16px;display:grid}.book-actions:has(>:nth-child(2):last-child){grid-template-columns:repeat(2,minmax(0,1fr))}.book-action{border:1px solid var(--divider);background:var(--card);min-height:72px;color:var(--ink);font:inherit;cursor:pointer;border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:12px 8px;font-size:12px;font-weight:650;transition:background .15s,border-color .15s,color .15s;display:flex}.book-action:active{transform:scale(.98)}.book-action--sell{border-color:color-mix(in srgb, var(--accent) 40%, var(--divider));background:color-mix(in srgb, var(--accent) 12%, var(--card));color:var(--accent)}.book-action--danger{border-color:color-mix(in srgb, var(--accent) 28%, var(--divider));color:var(--accent)}.book-description p{white-space:pre-wrap;margin:8px 0 0;line-height:1.5}.list-item-link{color:inherit;cursor:pointer;text-decoration:none;display:block}.list-item-link:active{opacity:.85}.avatar{object-fit:cover;border-radius:36px;width:72px;height:72px}.avatar-sm{object-fit:cover;background:var(--surface-alt,#ede8e0);border-radius:999px;flex-shrink:0}.avatar-fallback{color:var(--ink);place-items:center;font-weight:700;display:grid}.chat-row{border-bottom:1px solid var(--divider);padding:10px 0}.chat-row-main{color:inherit;align-items:flex-start;gap:12px;text-decoration:none;display:flex}.chat-row-text{flex:1;min-width:0}.chat-peer{font-size:1rem}.chat-subject{margin-top:2px;font-size:13px;line-height:1.35}.chat-preview{text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:.92rem;line-height:1.4;overflow:hidden}.chat-header-peer{align-items:center;gap:12px;margin-top:8px;display:flex}.chat-header-name{margin:0;font-size:1.25rem;line-height:1.2}.wrap{flex-wrap:wrap}.modal{z-index:40;padding:16px;padding-bottom:calc(16px + var(--safe-bottom));background:#00000073;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.modal .panel{width:min(520px,100%);max-height:85dvh;margin:0;overflow:auto}.city-wrap{z-index:5;position:relative}.city-hints{z-index:30;background:var(--card);border:1px solid var(--divider);border-radius:12px;max-height:min(240px,40dvh);position:absolute;top:calc(100% + 4px);left:0;right:0;overflow:auto}.club-compose .chips{grid-template-columns:1fr 1fr;gap:8px;display:grid}.club-compose .chips .chip{text-align:center;justify-content:center}.club-compose .field,.club-compose textarea.field{flex-shrink:0;min-height:44px}.city-hints button{text-align:left;width:100%;color:var(--ink);cursor:pointer;background:0 0;border:0;padding:10px 14px;display:block}.city-hints button:hover{background:var(--surface)}textarea.field{resize:vertical;min-height:80px}.scanner-modal{z-index:60;align-items:center}.scanner-panel{width:min(520px,100%)}.scanner-viewport{aspect-ratio:3/4;background:#000;border-radius:16px;width:100%;max-height:55dvh;position:relative;overflow:hidden}.scanner-video{object-fit:cover;width:100%;height:100%;display:block}.scanner-frame{pointer-events:none;border:2px solid color-mix(in srgb, var(--accent) 85%, white);border-radius:12px;position:absolute;inset:18% 12%;box-shadow:0 0 0 999px #00000059}
