:root{--bg:#0a0a0b;--surface:#141417;--border:#26262b;--text:#f4f4f5;--muted:#8b8b94;--accent:#fff;--radius:10px;--font:"Helvetica Neue", Helvetica, Inter, system-ui, -apple-system, sans-serif}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);height:100%;color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased}#app{flex-direction:column;min-height:100%;display:flex}a{color:inherit;text-decoration:none}.gallery{width:100%;max-width:1400px;margin:0 auto;padding:clamp(2rem,6vw,5rem) clamp(1.25rem,4vw,3rem)}.gallery__header{margin-bottom:clamp(2rem,5vw,4rem)}.gallery__eyebrow{letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-bottom:.75rem;font-size:.75rem}.gallery__title{letter-spacing:-.02em;font-size:clamp(1.75rem,5vw,3rem);font-weight:500;line-height:1.1}.gallery__lede{max-width:46ch;color:var(--muted);margin-top:1rem;font-size:clamp(.95rem,1.5vw,1.05rem);line-height:1.6}.grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:clamp(1rem,2vw,1.5rem);display:grid}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);transition:border-color .2s,transform .2s;display:block;overflow:hidden}.card:hover,.card:focus-visible{border-color:#4a4a55;transform:translateY(-2px)}.card__media{aspect-ratio:4/3;color:var(--muted);background:#1c1c21 50%/cover no-repeat;place-items:center;font-size:.8rem;display:grid}.card__body{padding:1rem 1.1rem 1.2rem}.card__title{letter-spacing:-.01em;font-size:1.05rem;font-weight:500}.card__meta{color:var(--muted);margin-top:.35rem;font-size:.85rem}.viewer{background:#000;position:fixed;inset:0}.viewer__canvas{touch-action:none;cursor:grab;width:100%;height:100%;display:block}.viewer__canvas:active{cursor:grabbing}.viewer__bar{pointer-events:none;background:linear-gradient(#000000b3,#0000);align-items:center;gap:1rem;padding:1rem clamp(1rem,3vw,1.75rem);display:flex;position:absolute;top:0;left:0;right:0}.viewer__bar>*{pointer-events:auto}.viewer__back{color:var(--muted);letter-spacing:.02em;font-size:.85rem;transition:color .15s}.viewer__back:hover{color:var(--text)}.viewer__title{font-size:.95rem;font-weight:500}.viewer__spacer{flex:1}.controls{bottom:max(1.25rem, env(safe-area-inset-bottom));-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--border);background:#121216cc;border-radius:999px;gap:.5rem;padding:.4rem;display:flex;position:absolute;left:50%;transform:translate(-50%)}.btn{appearance:none;color:var(--muted);font:inherit;letter-spacing:.02em;cursor:pointer;background:0 0;border:0;border-radius:999px;padding:.5rem 1rem;font-size:.82rem;transition:background .15s,color .15s}.btn:hover{color:var(--text)}.btn[aria-pressed=true]{background:var(--accent);color:#0a0a0b}.loading{background:var(--bg);place-content:center;justify-items:center;gap:1rem;transition:opacity .4s;display:grid;position:absolute;inset:0}.loading[hidden]{display:none}.loading--fading{opacity:0;pointer-events:none}.loading__track{background:#2a2a31;width:min(240px,60vw);height:2px;overflow:hidden}.loading__fill{background:var(--accent);width:0;height:100%;transition:width .15s linear}.loading__label{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.8rem}.message{text-align:center;background:var(--bg) center / cover no-repeat;place-content:center;justify-items:center;gap:1rem;padding:2rem;display:grid;position:absolute;inset:0}.message__scrim{background:#0a0a0bb8;position:absolute;inset:0}.message__content{justify-items:center;gap:.75rem;max-width:34ch;display:grid;position:relative}.message__title{font-size:1.15rem;font-weight:500}.message__text{color:var(--muted);font-size:.9rem;line-height:1.6}.message__action{border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;cursor:pointer;border-radius:999px;margin-top:.5rem;padding:.6rem 1.3rem;font-size:.85rem}.message__action:hover{border-color:#4a4a55}.footer{color:#5c5c66;flex-wrap:wrap;gap:1.25rem;margin-top:auto;padding:2rem clamp(1.25rem,4vw,3rem);font-size:.75rem;display:flex}.footer a:hover{color:var(--muted)}@media (prefers-reduced-motion:reduce){*{transition-duration:.01ms!important}}
