@import"https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;600&family=IBM+Plex+Sans+Condensed:wght@300;500&display=swap";:root{color-scheme:light;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--font-title: "Cormorant Garamond", serif;--font-body: "IBM Plex Sans Condensed", sans-serif;--ink: #1f1c17;--ink-soft: #4a453d;--wall-base: #c9c6bf;--wall-mid: #c1bdb6;--wall-dark: #b2aea7;--frame-dark: #2f2c27;--frame-shadow: rgba(20, 18, 16, .32);--frame-matte: #f5f2ea;--plaque-bg: #e3dcc9;--plaque-border: #c7bfab;--accent: #756a59;--accent-strong: #4b4236}*{box-sizing:border-box}body{margin:0;font-family:var(--font-body);color:var(--ink);background:var(--wall-base)}img{display:block;max-width:100%}button{font-family:inherit}#root{min-height:100vh}.gallery-room{min-height:100vh;padding:0;position:relative;overflow:hidden;background-color:var(--wall-base);isolation:isolate}.gallery-room:before{content:"";position:absolute;inset:0;background-image:linear-gradient(#ffffff47,#ffffff47),url(/textures/marble.jpg);background-size:cover;background-repeat:no-repeat;background-position:center;opacity:.9;pointer-events:none;z-index:0}.gallery-room:after{content:"";position:absolute;inset:0;box-shadow:inset 0 0 140px #0000003d;pointer-events:none;z-index:0}.intro-section,.gallery-section{position:relative;z-index:1;padding:clamp(24px,5vw,64px) clamp(20px,6vw,90px)}.intro-section{min-height:100vh;display:grid;place-items:center;gap:clamp(18px,4vw,36px);text-align:center}.intro-header{max-width:680px;margin:0 auto}.intro-kicker{margin:0 0 8px;text-transform:uppercase;letter-spacing:.32em;font-size:.7rem;color:var(--ink-soft)}.intro-title{margin:0;font-family:var(--font-title);font-size:clamp(2.6rem,6vw,5rem);letter-spacing:.08em}.intro-instruction{margin:12px 0 0;font-size:.95rem;color:var(--ink-soft);letter-spacing:.12em;text-transform:uppercase}.intro-upload{width:min(440px,92vw)}.gallery-section{min-height:100vh;display:grid;gap:clamp(18px,4vw,32px);align-content:start;text-align:center;scroll-margin-top:24px}.gallery-header{position:relative;z-index:1;text-align:center;margin:0 auto;max-width:760px;padding:clamp(20px,3.5vw,32px) clamp(20px,5vw,44px);border-radius:26px;background:#f5f2eaf0;border:1px solid rgba(47,44,39,.12);box-shadow:0 18px 36px #00000029}.gallery-header:before{content:"";position:absolute;inset:-10px;border-radius:32px;background:#e3dcc9e6;box-shadow:0 22px 40px #00000024;z-index:0}.gallery-header:after{content:"";position:absolute;inset:8px;border-radius:22px;border:1px solid rgba(47,44,39,.08);z-index:0;pointer-events:none}.gallery-header>*{position:relative;z-index:1}.gallery-kicker{margin:0 0 8px;text-transform:uppercase;letter-spacing:.32em;font-size:.7rem;color:var(--ink-soft)}.gallery-title{margin:0;font-family:var(--font-title);font-size:clamp(2rem,4.8vw,3.6rem);letter-spacing:.16em}.gallery-description{margin:12px 0 0;font-size:1rem;line-height:1.5;color:var(--ink-soft)}.gallery-sources{margin:14px auto 0;display:grid;gap:8px;max-width:720px}.gallery-sources-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.18em;color:var(--ink-soft)}.gallery-sources-links{display:grid;gap:6px}.gallery-sources-links a{font-size:.82rem;color:var(--accent-strong);text-decoration:none}.gallery-sources-links a:hover{text-decoration:underline}.gallery-sources-accessed{font-size:.7rem;text-transform:uppercase;letter-spacing:.16em;color:var(--ink-soft)}.gallery-status{margin:12px 0 0;font-size:.85rem;text-transform:uppercase;letter-spacing:.2em;color:var(--accent-strong)}.gallery-error{margin:12px auto 0;max-width:520px;padding:10px 14px;border-radius:999px;background:#82483f26;color:#5c322c;font-size:.82rem;letter-spacing:.08em;text-transform:uppercase}.gallery-layout{position:relative;z-index:1;display:grid;grid-template-columns:minmax(260px,320px) 1fr;gap:clamp(24px,5vw,56px);align-items:center}.upload-panel{background:#f5f2eaeb;border:1px solid rgba(47,44,39,.15);border-radius:18px;padding:18px;box-shadow:0 18px 40px #0000002e}.upload-panel--hero{background:transparent;border:none;padding:0;box-shadow:none;width:min(440px,92vw);margin:0 auto}.upload-panel--hero .upload-drop{background:#f5f2eaeb;border-style:solid;border-color:#756a59a6;box-shadow:0 18px 36px #0000002e}.upload-panel--hero .upload-meta{justify-items:center;text-align:center}.upload-drop{border:2px dashed rgba(117,106,89,.6);border-radius:16px;padding:18px;text-align:center;cursor:pointer;transition:border .2s ease,background .2s ease}.upload-drop.is-empty{padding:clamp(22px,4vw,32px)}.upload-drop.is-empty .upload-drop-content{margin-bottom:0}.upload-drop.is-dragging{border-color:var(--accent-strong);background:#ffffffb3}.upload-input{display:none}.upload-drop-content{margin-bottom:14px}.upload-title{margin:0;font-family:var(--font-title);font-size:1.1rem;letter-spacing:.12em;text-transform:uppercase}.upload-subtitle{margin:6px 0 0;font-size:.85rem;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.18em}.upload-preview,.upload-placeholder{border-radius:12px;padding:12px;background:#fffc;border:1px solid rgba(0,0,0,.08);min-height:160px;display:flex;align-items:center;justify-content:center}.upload-preview img{max-height:170px;border-radius:8px;box-shadow:0 12px 24px #0003}.upload-placeholder-icon{font-size:2rem;color:var(--accent);margin-bottom:6px}.upload-placeholder{flex-direction:column;gap:6px}.upload-placeholder-text{font-size:.8rem;text-transform:uppercase;letter-spacing:.22em;color:var(--ink-soft)}.upload-meta{margin-top:14px;display:grid;gap:10px}.upload-filename{font-size:.8rem;text-transform:uppercase;letter-spacing:.18em;color:var(--ink-soft)}.upload-action{border:none;border-radius:999px;padding:12px 18px;background:var(--accent-strong);color:#f6f1ea;text-transform:uppercase;letter-spacing:.2em;font-size:.8rem;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease}.upload-action:disabled{opacity:.6;cursor:not-allowed}.upload-action:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 12px 18px #0003}.upload-error{margin:0;font-size:.8rem;color:#6e3a33;text-transform:uppercase;letter-spacing:.15em}.upload-hint{margin:0;font-size:.72rem;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.22em}.gallery-stage{position:relative;height:clamp(360px,55vh,580px);border-radius:26px;padding:clamp(16px,3vw,28px);background:#ffffff40;box-shadow:inset 0 0 0 1px #00000014;overflow:hidden;width:min(1100px,100%);margin:0 auto}.gallery-stage:before{content:"";position:absolute;top:14px;left:8%;right:8%;height:4px;border-radius:999px;background:#2f2c2740}.gallery-loading,.gallery-empty{height:100%;display:grid;place-items:center;text-align:center;gap:8px;font-size:.92rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft)}.gallery-loading-title,.gallery-empty-title{font-family:var(--font-title);font-size:1.4rem;letter-spacing:.18em;color:var(--ink)}.gallery-retry{border:1px solid rgba(47,44,39,.3);border-radius:999px;padding:8px 16px;background:transparent;font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;cursor:pointer;color:var(--ink)}.carousel{position:relative;width:100%;height:100%;overflow:hidden;touch-action:pan-y}.carousel-nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:999px;border:1px solid rgba(47,44,39,.18);background:#f5f2eaeb;box-shadow:0 14px 26px #00000029;color:var(--ink);display:grid;place-items:center;font-size:1.6rem;line-height:1;cursor:pointer;z-index:220;transition:transform .18s ease,box-shadow .18s ease,opacity .18s ease}.carousel-nav:disabled{opacity:.35;cursor:not-allowed}.carousel-nav:not(:disabled):hover{transform:translateY(calc(-50% - 2px));box-shadow:0 18px 30px #0000002e}.carousel-nav--prev{left:12px}.carousel-nav--next{right:12px}@media(hover:hover)and (pointer:fine){.carousel-nav{opacity:0;pointer-events:none}.carousel:hover .carousel-nav{opacity:1;pointer-events:auto}}.carousel-track{position:relative;width:100%;height:100%}.carousel-item{position:absolute;top:50%;left:50%;transition:transform .36s cubic-bezier(.2,.8,.2,1),opacity .36s ease;will-change:transform}.artwork-card{border:none;background:none;padding:0;margin:0;cursor:pointer;text-align:center;color:inherit;width:clamp(180px,22vw,290px)}.artwork-card:focus-visible{outline:2px solid var(--accent-strong);outline-offset:6px}.artwork-frame{background:var(--frame-dark);padding:10px;border-radius:4px;box-shadow:0 16px 30px var(--frame-shadow)}.artwork-card.is-center .artwork-frame{padding:14px}.artwork-matte{background:var(--frame-matte);padding:8px}.artwork-matte img{width:100%;height:auto;border-radius:2px}.artwork-plaque{margin:10px auto 0;background:var(--plaque-bg);border:1px solid var(--plaque-border);padding:8px 10px;text-transform:uppercase;letter-spacing:.14em;font-size:.62rem;color:var(--ink);display:grid;gap:4px}.plaque-title{font-weight:500}.plaque-artist{color:var(--ink-soft)}.modal-overlay{position:fixed;inset:0;background:#12100ead;display:flex;align-items:center;justify-content:center;padding:24px;z-index:40}.modal-card{position:relative;width:min(92vw,860px);max-height:92vh;overflow:auto;background:#f7f4ed;border-radius:18px;padding:20px;box-shadow:0 30px 60px #00000061}.modal-close{position:absolute;top:14px;right:14px;border:none;border-radius:999px;padding:8px 14px;background:var(--accent-strong);color:#f6f1ea;text-transform:uppercase;letter-spacing:.16em;font-size:.7rem;cursor:pointer}.modal-image{background:#e7e1d4;border-radius:14px;padding:12px}.modal-image img{width:100%;max-height:70vh;object-fit:contain;border-radius:8px}.modal-meta{text-align:center;margin-top:14px}.modal-meta h2{margin:0;font-family:var(--font-title);font-size:1.8rem;letter-spacing:.12em}.modal-meta p{margin:6px 0 0;text-transform:uppercase;letter-spacing:.18em;font-size:.8rem;color:var(--ink-soft)}.modal-style{display:inline-block;margin-top:10px;padding:6px 14px;border-radius:999px;border:1px solid rgba(47,44,39,.2);text-transform:uppercase;letter-spacing:.18em;font-size:.68rem}@media(max-width:900px){.gallery-layout{grid-template-columns:1fr}.upload-panel{order:2}.gallery-stage{order:1}}@media(max-width:600px){.intro-section,.gallery-section{padding:20px 16px 40px}.intro-title,.gallery-title{letter-spacing:.12em}.gallery-header{padding:18px 16px}.gallery-header:before{inset:-6px}.gallery-header:after{inset:6px}.artwork-card{width:clamp(160px,48vw,240px)}}
