html,body{margin:0;width:100%;overflow-x:hidden}:root{--ink: #f7eee6;--ink-dim: rgba(247, 238, 230, .62);--accent: #ffb37e;--accent-deep: #e0885a;--glass: rgba(17, 15, 42, .55);--glass-strong: rgba(17, 15, 42, .72);--glass-border: rgba(255, 200, 160, .16);--display: "Fraunces", Georgia, serif;--body: "Outfit", "Segoe UI", sans-serif}*{margin:0;padding:0;box-sizing:border-box}html,body{overflow-x:hidden;background:#14122e;color:var(--ink);font-family:var(--body)}.app{position:relative}.canvas-wrap{position:fixed;inset:0}.scroll-track{height:620vh;pointer-events:none}.canvas-wrap canvas{touch-action:pan-y!important}.masthead{position:fixed;top:28px;left:32px;z-index:10;pointer-events:none;opacity:0}.app.is-ready .masthead{animation:settle 1.2s .15s cubic-bezier(.2,.7,.2,1) both}.masthead h1{font-family:var(--display);font-weight:500;font-size:1.35rem;letter-spacing:.01em}.masthead p{margin-top:2px;font-size:.78rem;font-weight:300;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-dim)}.hint{position:fixed;bottom:30px;left:50%;transform:translate(-50%);z-index:10;pointer-events:none;padding:10px 20px;border-radius:999px;background:var(--glass);border:1px solid var(--glass-border);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);font-size:.8rem;font-weight:300;letter-spacing:.08em;color:var(--ink-dim);white-space:nowrap;opacity:0}.app.is-ready .hint{animation:settleX 1.2s .4s cubic-bezier(.2,.7,.2,1) both}.hint b{color:var(--ink);font-weight:500}.app.is-ready .hint.is-hidden,.hint.is-hidden{animation:none;opacity:0;transition:opacity .4s ease}.card{position:fixed;top:50%;right:36px;transform:translateY(-50%);z-index:10;width:min(340px,calc(100vw - 48px));padding:26px 26px 22px;border-radius:18px;background:var(--glass-strong);border:1px solid var(--glass-border);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);box-shadow:0 24px 60px #08061873;animation:cardIn .5s cubic-bezier(.2,.7,.2,1) both}.card .eyebrow{font-size:.68rem;font-weight:500;letter-spacing:.24em;text-transform:uppercase;color:var(--accent)}.card h2{margin-top:8px;font-family:var(--display);font-weight:500;font-size:1.6rem;line-height:1.15}.card .blurb{margin-top:6px;font-size:.85rem;font-weight:300;font-style:italic;color:var(--ink-dim)}.card .desc{margin-top:14px;font-size:.88rem;font-weight:300;line-height:1.55;color:#f7eee6d9}.card .tech{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px}.card .tech span{padding:4px 10px;border-radius:999px;border:1px solid var(--glass-border);font-size:.68rem;letter-spacing:.06em;color:var(--ink-dim)}.card .actions{display:flex;align-items:center;gap:14px;margin-top:20px}.card .visit{padding:9px 18px;border-radius:999px;background:var(--accent);color:#2a1a10;font-family:var(--body);font-size:.8rem;font-weight:600;letter-spacing:.04em;text-decoration:none;transition:background .2s}.card .visit:hover{background:#ffc79d}.card .back{border:none;background:none;color:var(--ink-dim);font-family:var(--body);font-size:.8rem;font-weight:400;letter-spacing:.04em;cursor:pointer;text-decoration:underline;text-underline-offset:3px;transition:color .2s}.card .back:hover{color:var(--ink)}:is(.card .visit,.card .back):focus-visible{outline:2px solid var(--accent);outline-offset:3px}.depth-veil{position:fixed;inset:0;z-index:8;pointer-events:none;background:radial-gradient(ellipse at 50% 42%,#261e4680,#16112c 72%)}.contact-stage{position:fixed;inset:0;z-index:12;display:grid;place-items:center;padding:24px;opacity:0;visibility:hidden;transform:translateY(20px);transition:opacity .55s ease,transform .55s ease,visibility .55s}.contact-stage.is-open{opacity:1;visibility:visible;transform:none}.contact{width:min(440px,100%);max-height:calc(100vh - 48px);overflow-y:auto;padding:30px 30px 26px;border-radius:20px;background:var(--glass-strong);border:1px solid var(--glass-border);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);box-shadow:0 30px 70px #08061880}.contact h2{margin-top:8px;font-family:var(--display);font-weight:500;font-size:1.7rem;line-height:1.15}.contact .desc{margin-top:8px}.field{display:block;margin-top:15px}.field span{display:block;margin-bottom:6px;font-size:.7rem;font-weight:500;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-dim)}.field input,.field textarea{width:100%;padding:10px 12px;border-radius:10px;border:1px solid var(--glass-border);background:#0a081a80;color:var(--ink);font-family:var(--body);font-size:.9rem;font-weight:300;resize:vertical}.field input:focus,.field textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #ffb37e29}.trap{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}.form-error{margin-top:12px;font-size:.82rem;color:#ff9f8a}.contact .send{display:inline-block;margin-top:20px;padding:10px 20px;border:none;border-radius:999px;background:var(--accent);color:#2a1a10;font-family:var(--body);font-size:.82rem;font-weight:600;letter-spacing:.04em;cursor:pointer;transition:background .2s}.contact .send:hover:not(:disabled){background:#ffc79d}.contact .send:disabled{opacity:.6;cursor:default}.contact .back{margin-top:20px;border:none;background:none;color:var(--ink-dim);font-family:var(--body);font-size:.82rem;letter-spacing:.04em;cursor:pointer;text-decoration:underline;text-underline-offset:3px;transition:color .2s}.contact .back:hover{color:var(--ink)}:is(.contact .send,.contact .back):focus-visible{outline:2px solid var(--accent);outline-offset:3px}.app.is-descending .island-label{opacity:0!important;transition:opacity .35s ease}.island-label{pointer-events:none;user-select:none;padding:6px 14px;border-radius:999px;background:#110f2a80;border:1px solid rgba(255,200,160,.2);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);font-family:var(--display);font-size:13px;font-weight:500;letter-spacing:.03em;color:var(--ink);white-space:nowrap;transform:translateY(-4px);transition:opacity .3s}.island-label.is-category{padding:7px 18px;font-size:15px;letter-spacing:.14em;text-transform:uppercase}.island-label.is-district{padding:5px 12px;font-size:12px;background:#110f2a9e}.project-list{list-style:none;margin-top:16px;display:grid;gap:8px}.project-list button{display:block;width:100%;padding:10px 14px;border-radius:12px;border:1px solid var(--glass-border);background:#ffffff0a;color:var(--ink);font-family:var(--body);text-align:left;cursor:pointer;transition:background .2s,border-color .2s}.project-list button:hover{background:#ffffff17;border-color:#ffc8a066}.project-list b{display:block;font-size:.92rem;font-weight:500}.project-list span{display:block;margin-top:2px;font-size:.76rem;font-weight:300;color:var(--ink-dim)}.arrival{position:fixed;inset:0;z-index:30;overflow:hidden}.arrival-sky{position:absolute;inset:0;background:radial-gradient(135% 78% at 50% 112%,#e0885a,#e0885a00 58%),radial-gradient(110% 66% at 50% 96%,#c98083,#c9808300 62%),#14122e;transition:opacity 1.25s ease-in}.fogbank{position:absolute;transition:transform 1.7s cubic-bezier(.32,0,.16,1),opacity 1.4s ease-out;will-change:transform,opacity}.fogbank:before{content:"";position:absolute;inset:0;border-radius:50%}.fog-a{left:-30%;top:-6%;width:92%;height:78%}.fog-a:before{background:radial-gradient(50% 50% at 50% 50%,#e7d6d885,#e7d6d83d 44%,#e7d6d800 71%);animation:fogDriftA 15s ease-in-out infinite alternate}.fog-b{right:-34%;top:4%;width:96%;height:82%}.fog-b:before{background:radial-gradient(50% 50% at 50% 50%,#e7d6d875,#d6bec433 46%,#d6bec400 72%);animation:fogDriftB 18s ease-in-out infinite alternate}.fog-c{left:8%;bottom:-30%;width:84%;height:70%}.fog-c:before{background:radial-gradient(50% 50% at 50% 50%,#e0a89666,#c980832e 48%,#c9808300 74%);animation:fogDriftA 21s ease-in-out infinite alternate-reverse}.fog-d{left:18%;top:22%;width:68%;height:50%}.fog-d:before{background:radial-gradient(50% 50% at 50% 50%,#f7eee64d,#f7eee61f 45%,#f7eee600 70%);animation:fogDriftB 13s ease-in-out infinite alternate}@keyframes fogDriftA{0%{transform:translate3d(-3%,2%,0) scale(1)}to{transform:translate3d(5%,-3%,0) scale(1.09)}}@keyframes fogDriftB{0%{transform:translate3d(3%,-2%,0) scale(1.06)}to{transform:translate3d(-4%,3%,0) scale(1)}}.arrival.is-clearing{pointer-events:none}.arrival.is-clearing .arrival-sky,.arrival.is-clearing .fogbank{opacity:0}.arrival.is-clearing .fog-a{transform:translate3d(-46%,-12%,0) scale(1.45)}.arrival.is-clearing .fog-b{transform:translate3d(46%,-10%,0) scale(1.45)}.arrival.is-clearing .fog-c{transform:translate3d(-6%,52%,0) scale(1.5)}.arrival.is-clearing .fog-d{transform:translate3d(0,-30%,0) scale(1.7)}.arrival-mark{position:absolute;left:50%;top:50%;display:grid;justify-items:center;gap:16px;transform:translate(-50%,-50%);animation:markIn 1.1s .2s both}.arrival.is-clearing .arrival-mark{animation:none;opacity:0;transform:translate(-50%,calc(-50% - 12px));transition:opacity .65s ease-out,transform 1.1s cubic-bezier(.32,0,.16,1)}@keyframes markIn{0%{opacity:0}to{opacity:1}}.arrival-name{font-family:var(--display);font-weight:500;font-size:clamp(1rem,3.2vw,1.55rem);text-transform:uppercase;letter-spacing:.36em;text-indent:.36em;color:var(--ink)}.arrival-rule{display:block;width:clamp(112px,20vw,184px);height:1px;overflow:hidden;background:#f7eee626}.arrival-rule i{display:block;width:38%;height:100%;background:linear-gradient(90deg,transparent,var(--accent),transparent);animation:sweep 1.75s cubic-bezier(.5,0,.5,1) infinite}@keyframes sweep{0%{transform:translate(-105%)}to{transform:translate(370%)}}@keyframes settle{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes settleX{0%{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%)}}@keyframes cardIn{0%{opacity:0;transform:translateY(calc(-50% + 14px))}to{opacity:1;transform:translateY(-50%)}}@media(max-width:640px){.masthead{top:20px;left:20px}.card{top:auto;bottom:20px;right:50%;transform:translate(50%);animation:none}.hint{bottom:22px;white-space:normal;text-align:center;line-height:1.5;width:calc(100vw - 32px);padding:10px 16px;font-size:.75rem}}@media(prefers-reduced-motion:reduce){.masthead,.hint,.card{animation-duration:.01s;animation-delay:0s}.fogbank:before,.arrival-rule i{animation:none}.arrival-sky,.fogbank,.arrival-mark{transition-duration:.25s}.arrival.is-clearing .fogbank{transform:none}}
