/* The living front door. The archive remains available, but never leads. */
:root{--world-night:#07121d;--world-deep:#10283a;--world-dawn:#d98063;--world-light:#f6d5a8;--world-ink:#fff4db;--world-faint:rgba(255,244,219,.62);--world-line:rgba(255,244,219,.22);--world-accent:#f7b45f}
body.ws-world{margin:0;background:#07121d;color:var(--world-ink);font-family:var(--ws-mono);overflow-x:hidden}
.world{isolation:isolate;position:relative;min-height:100svh;display:flex;flex-direction:column;overflow:hidden;background:linear-gradient(180deg,var(--world-night) 0%,var(--world-deep) 54%,#162e31 100%);transition:background 1.8s ease}
.world[data-climate="dawn"]{--world-night:#51233b;--world-deep:#b65258;--world-light:#ffd6a1;--world-ink:#fff7e8;--world-accent:#ffe095;background:linear-gradient(180deg,#51233b 0%,#b65258 55%,#d88358 100%)}
.world[data-climate="blue"]{--world-night:#06152f;--world-deep:#1b4f70;--world-light:#d4f2ff;--world-ink:#effbff;--world-accent:#9ee7ff;background:linear-gradient(180deg,#06152f 0%,#1b4f70 60%,#5596a0 100%)}
.world[data-climate="ember"]{--world-night:#250d0b;--world-deep:#713226;--world-light:#ffc68b;--world-ink:#fff2dd;--world-accent:#ffbd6c;background:linear-gradient(180deg,#250d0b 0%,#713226 58%,#9f6040 100%)}
.world[data-climate="moon"]{--world-night:#0f1230;--world-deep:#303461;--world-light:#d9dbff;--world-ink:#f4f3ff;--world-accent:#c6c9ff;background:linear-gradient(180deg,#0f1230 0%,#303461 56%,#3f486e 100%)}
.world-head{position:relative;z-index:4;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:23px clamp(19px,4vw,58px);border-bottom:1px solid var(--world-line)}
.world-mark{justify-self:start;color:var(--world-ink);font:500 18px/1 var(--ws-serif);letter-spacing:.11em;text-decoration:none}.world-mark em{color:var(--world-accent);font-style:italic}.world-edition{margin:0;color:var(--world-faint);font-size:9px;letter-spacing:.18em;text-transform:uppercase}.world-menu,.archive-close{justify-self:end;border:0;background:none;color:var(--world-ink);font:11px var(--ws-mono);letter-spacing:.12em;text-transform:uppercase;cursor:pointer;padding:8px 0}.world-menu span,.archive-close span{color:var(--world-accent);font-size:16px;margin-left:9px}.world-menu:hover,.archive-close:hover{color:var(--world-accent)}
.world-sky{position:absolute;inset:0;z-index:-1;overflow:hidden;pointer-events:none}.world-grain{position:absolute;inset:0;opacity:.26;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.8'/%3E%3C/svg%3E");mix-blend-mode:soft-light}.world-orb{position:absolute;top:17%;left:calc(50% - 12vmin);width:24vmin;height:24vmin;min-width:150px;min-height:150px;border-radius:50%;background:radial-gradient(circle at 35% 31%,#fff8de 0 5%,var(--world-light) 40%,var(--world-accent) 100%);box-shadow:0 0 80px 30px color-mix(in srgb,var(--world-accent) 23%,transparent);animation:orb-drift 16s ease-in-out infinite}.world-orb::after{content:"";position:absolute;inset:-28%;border:1px solid var(--world-line);border-radius:50%;transform:rotate(-18deg) scaleY(.32)}
.world-star{position:absolute;width:3px;height:3px;border-radius:50%;background:var(--world-ink);box-shadow:0 0 12px 2px var(--world-ink);opacity:.7;animation:star-pulse 4s ease-in-out infinite}.star-a{top:18%;left:18%}.star-b{top:31%;right:18%;animation-delay:-1.5s}.star-c{top:13%;right:35%;animation-delay:-3s}.world-horizon{position:absolute;left:-5%;right:-5%;bottom:13%;height:19%;border-radius:50% 50% 0 0/100% 100% 0 0;background:linear-gradient(180deg,transparent,rgba(3,12,17,.28));border-top:1px solid var(--world-line);transform:scaleX(1.35)}
.world-reed{position:absolute;bottom:0;width:1px;height:23%;background:var(--world-ink);opacity:.27;transform-origin:bottom;animation:reed 7s ease-in-out infinite}.world-reed::after{content:"";position:absolute;top:12%;left:0;width:1px;height:43%;background:inherit;transform:rotate(37deg);transform-origin:top}.reed-a{left:11%;height:31%;animation-delay:-2s}.reed-b{right:13%;height:25%;animation-delay:-4s}.reed-c{right:28%;height:18%;animation-delay:-6s}
.world-center{position:relative;z-index:2;display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:clamp(74px,12vh,134px) 24px clamp(42px,10vh,100px)}.world-eyebrow,.trace-label,.archive-kicker{margin:0;color:var(--world-faint);font-size:10px;letter-spacing:.2em;text-transform:uppercase}.world-eyebrow::before,.trace-label::before{content:"✦ ";color:var(--world-accent)}.world-center h1{margin:23px 0 18px;font:400 clamp(58px,11vw,154px)/.76 var(--ws-serif);letter-spacing:-.075em;text-wrap:balance}.world-center h1 i{color:var(--world-accent);font-style:italic}.world-message{max-width:48ch;margin:0;color:var(--world-faint);font:clamp(16px,1.8vw,22px)/1.45 var(--ws-serif);transition:opacity .25s}.world-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:11px;margin-top:33px}.world-button,.world-door{border:1px solid var(--world-line);background:rgba(5,13,17,.12);backdrop-filter:blur(7px);color:var(--world-ink);padding:13px 16px;font:10px var(--ws-mono);letter-spacing:.14em;text-transform:uppercase;text-decoration:none;cursor:pointer;transition:background .25s,color .25s,border-color .25s}.world-button:hover,.world-door:hover{background:var(--world-accent);border-color:var(--world-accent);color:#19202a}.world-button span,.world-door span{color:var(--world-accent);font-size:16px;margin-left:8px}.world-button:hover span,.world-door:hover span{color:inherit}
.world-observatory{position:relative;z-index:2;align-self:flex-end;width:min(310px,calc(100% - 48px));margin:0 clamp(19px,4vw,58px) clamp(25px,5vh,54px);border-top:1px solid var(--world-line);padding-top:10px;color:var(--world-faint);font-size:9px;letter-spacing:.14em}.world-observatory p{display:flex;justify-content:space-between;gap:10px;margin:5px 0}.world-observatory b,.world-observatory time{color:var(--world-ink);font-weight:400}.world-observatory b{color:var(--world-accent)}
.world-traces{position:relative;z-index:2;margin:0 clamp(19px,4vw,58px);padding:15px 0 20px;border-top:1px solid var(--world-line)}.trace-label{margin-bottom:11px}.trace-list{display:flex;gap:7px;flex-wrap:wrap}.trace-list a{display:inline-flex;align-items:center;gap:8px;color:var(--world-ink);font:10px var(--ws-mono);letter-spacing:.09em;text-transform:uppercase;text-decoration:none;border-bottom:1px solid transparent;padding:4px 0}.trace-list a::before{content:"◌";color:var(--world-accent);font-size:15px}.trace-list a:hover{border-color:var(--world-accent);color:var(--world-accent)}.trace-list span{color:var(--world-faint);font-size:10px}
.world-archive{background:#e7dfd0;color:#1d1a17;min-height:100svh;padding:clamp(28px,7vw,96px) clamp(20px,7vw,112px) 35px;font-family:var(--ws-mono)}.world-archive[hidden]{display:none}.archive-head{display:flex;justify-content:space-between;align-items:start;gap:24px;border-bottom:1px solid #9f9583;padding-bottom:24px}.archive-kicker{color:#776d5f}.archive-head h2{max-width:14ch;margin:15px 0 0;font:400 clamp(44px,7vw,102px)/.85 var(--ws-serif);letter-spacing:-.07em}.archive-close{color:#1d1a17;white-space:nowrap}.archive-close span{color:#a7472b}.archive-intro{max-width:48ch;margin:39px 0 28px;color:#625a50;font:clamp(17px,2vw,23px)/1.4 var(--ws-serif)}.archive-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1px;background:#9f9583;border:1px solid #9f9583}.archive-grid>a{min-height:215px;display:flex;flex-direction:column;padding:19px;background:#f3ecdf;color:#1d1a17;text-decoration:none;transition:background .2s}.archive-grid>a:hover{background:#e5c082}.archive-grid small{color:#776d5f;font-size:9px;letter-spacing:.14em;text-transform:uppercase}.archive-grid h3{margin:38px 0 10px;font:400 28px/.95 var(--ws-serif);letter-spacing:-.04em}.archive-grid p{margin:0;color:#625a50;font-size:12px;line-height:1.6}.archive-grid .archive-arrow{margin-top:auto;color:#a7472b;font-size:21px}.archive-foot{margin-top:33px;color:#776d5f;font-size:9px;letter-spacing:.16em;text-transform:uppercase}.archive-foot span{color:#a7472b}
@keyframes orb-drift{50%{transform:translate(7vmin,-2vmin) scale(1.05)}}@keyframes star-pulse{50%{opacity:.18;transform:scale(.5)}}@keyframes reed{50%{transform:rotate(4deg)}}@media(prefers-reduced-motion:reduce){.world-orb,.world-star,.world-reed{animation:none}.world{transition:none}}@media(max-width:620px){.world-head{grid-template-columns:1fr auto;padding:18px 17px}.world-edition{display:none}.world-center{justify-content:flex-start;padding-top:22vh}.world-center h1{font-size:clamp(60px,18vw,94px)}.world-orb{top:15%;left:calc(50% - 75px);width:150px;height:150px}.world-actions{max-width:300px}.world-button,.world-door{width:100%;text-align:center}.world-observatory{align-self:stretch;margin:0 17px 20px;width:auto}.world-traces{margin:0 17px 15px}.archive-head{flex-direction:column}.archive-close{align-self:flex-start}.archive-grid{grid-template-columns:1fr}.world-archive{padding:31px 19px}}

/* Ledger of alterations: the place keeps a small memory of its visitors. */
.obs-remembered{margin-top:10px;letter-spacing:.2em}
.ledger{list-style:none;margin:7px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}
.ledger li{display:flex;justify-content:space-between;gap:10px;font-size:9px;letter-spacing:.12em;color:var(--world-faint);animation:ledger-in .8s ease both}
.ledger time{color:var(--world-ink)}
@keyframes ledger-in{from{opacity:0;transform:translateY(3px)}}
.world-memory{margin:14px 0 0;color:var(--world-faint);font-size:10px;letter-spacing:.1em;font-style:italic}
@media(prefers-reduced-motion:reduce){.ledger li{animation:none}}
/* The Keeper's lamp: one small kept flame against the weather. */
.world-lamp{position:absolute;top:37%;left:72%;width:9px;height:9px;border-radius:50%;background:#3a3128;box-shadow:inset 0 0 3px rgba(0,0,0,.6);z-index:1;transition:background 1.6s ease,box-shadow 1.6s ease}
.world-lamp::after{content:"";position:absolute;left:50%;top:50%;width:min(24vmin,220px);height:min(24vmin,220px);transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,rgba(255,178,96,.13) 0%,rgba(255,178,96,.05) 40%,transparent 68%);opacity:0;transition:opacity 2.6s ease}
.world-lamp.is-lit{background:#ffd9a3;box-shadow:0 0 9px 2px rgba(255,196,120,.8),0 0 30px 12px rgba(255,164,74,.3);animation:lamp-flicker 3.4s ease-in-out infinite}
.world-lamp.is-lit::after{opacity:1}
@keyframes lamp-flicker{0%,100%{opacity:1}38%{opacity:.85}52%{opacity:.96}71%{opacity:.8}}
.world-keeper{margin-top:14px;color:#cfa15f;font-size:10px;letter-spacing:.1em;font-style:italic;opacity:0;transition:opacity 1.6s ease}
.world-keeper.is-shown{opacity:1}
.obs-keeper{margin-top:10px;letter-spacing:.2em}
.obs-keeper b{color:var(--world-faint)}
.obs-keeper b.is-present{color:var(--world-accent)}
@media(prefers-reduced-motion:reduce){.world-lamp,.world-lamp::after,.world-keeper{transition:none}.world-lamp.is-lit{animation:none}}
@media(max-width:620px){.world-lamp{top:15%;left:auto;right:13%}}

/* The Waking City: architecture that remembers its visitors. */
.world-city{position:absolute;left:-2%;right:-2%;bottom:0;height:min(36svh,320px);display:flex;align-items:flex-end;gap:.9vw;z-index:1;pointer-events:none}
.city-block{flex:1 1 auto;display:grid;grid-template-columns:repeat(var(--cols,3),1fr);grid-auto-rows:1fr;gap:max(4px,.5vw) max(6px,.7vw);padding:8% 12% 0;background:linear-gradient(180deg,rgba(3,9,15,.94) 0%,rgba(3,9,15,.82) 100%);border-top:1px solid rgba(255,244,219,.10)}
.city-win{width:100%;height:100%;min-height:3px;background:rgba(255,244,219,.06);transition:background 1.4s ease,box-shadow 1.4s ease}
.city-win.is-lit{background:var(--world-accent,#f7b45f);box-shadow:0 0 8px rgba(247,180,95,.5)}
@media (max-width:640px){.city-block{padding:10% 14% 0}}
@media (prefers-reduced-motion:reduce){.city-win{transition:none}}
/* The Crossing — one resident passes over the horizon, once per visit. */
.world { --cross-ink: #2b2540; }
.world[data-climate="moon"]  { --cross-ink: rgba(219, 213, 244, .8); }
.world[data-climate="dawn"]  { --cross-ink: #4a3320; }
.world[data-climate="blue"]  { --cross-ink: #262c40; }
.world[data-climate="ember"] { --cross-ink: #38211b; }

.world-crossing {
  position: absolute;
  top: var(--cross-top, 30%);
  left: -6%;
  width: 30px;
  height: 14px;
  color: var(--cross-ink);
  pointer-events: none;
  z-index: 2;
  animation: ws-cross var(--cross-dur, 34s) linear forwards;
}
.world-crossing.is-reverse { left: auto; right: -6%; animation-name: ws-cross-r; }

@keyframes ws-cross   { from { transform: translateX(0); } to { transform: translateX(125vw); } }
@keyframes ws-cross-r { from { transform: translateX(0); } to { transform: translateX(-125vw); } }

.world-crossing::before, .world-crossing::after {
  content: "";
  position: absolute;
  top: 6px;
  width: 15px;
  height: 3px;
  border-radius: 3px;
  background: currentColor;
}
.world-crossing::before { left: 0; transform-origin: 100% 50%; animation: ws-flap-l .8s ease-in-out infinite alternate; }
.world-crossing::after  { right: 0; transform-origin: 0% 50%; animation: ws-flap-r .8s ease-in-out infinite alternate; }

@keyframes ws-flap-l { from { transform: rotate(24deg); } to { transform: rotate(-16deg); } }
@keyframes ws-flap-r { from { transform: rotate(-24deg); } to { transform: rotate(16deg); } }

@media (prefers-reduced-motion: reduce) {
  .world-crossing, .world-crossing::before, .world-crossing::after { animation: none; }
}
/* ED.002 — The Place's Breath: the home inhales and exhales at a tempo set by its weather. */
.world-breathline { display: flex; justify-content: center; margin: 16px auto 4px; width: min(240px, 62%); height: 14px; position: relative; }
.world-breathline::before { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: 1px; background: linear-gradient(90deg, transparent, rgba(232, 214, 178, .3), transparent); }
.world-breathline span { position: absolute; top: 50%; left: 0; width: 5px; height: 5px; margin-top: -2.5px; border-radius: 50%; background: var(--ws-breath-dot, rgba(232, 214, 178, .9)); box-shadow: 0 0 10px var(--ws-breath-dot, rgba(232, 214, 178, .5)); animation: ws-breath var(--ws-breath-dur, 9s) ease-in-out infinite; }
@keyframes ws-breath { 0%, 100% { left: 0%; opacity: .45; } 50% { left: calc(100% - 5px); opacity: 1; } }
.world.is-holding .world-breathline span { animation-play-state: paused; opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  .world-breathline span { animation: none; left: calc(50% - 2.5px); opacity: .8; }
}
/* The Moon's Memory - the sky keeps its ledger in silver. */
.obs-moon { margin-top: 12px; }
.moon-plate { position: relative; width: min(64%, 132px); aspect-ratio: 1 / 1; margin: 8px auto 2px; border-radius: 50%; overflow: hidden; background: radial-gradient(circle at 37% 33%, #f2ede2 0%, #cdc7ba 40%, #8b877e 74%, #56544e 100%); box-shadow: inset 0 0 16px rgba(18, 16, 12, 0.5), 0 0 20px rgba(242, 237, 226, 0.08); }
.moon-plate svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.moon-ring { fill: none; stroke: rgba(52, 49, 43, 0.55); stroke-width: 0.9; }
@media (prefers-reduced-motion: no-preference) {
  .moon-ring.is-new { animation: moon-etch 2.8s ease-out; }
  @keyframes moon-etch {
    0% { stroke: rgba(255, 249, 234, 0.95); stroke-width: 1.7; }
    100% { stroke: rgba(52, 49, 43, 0.55); stroke-width: 0.9; }
  }
  .world-star { animation: star-drift 80s ease-in-out infinite alternate; }
  .star-b { animation-duration: 110s; animation-delay: -35s; }
  .star-c { animation-duration: 65s; animation-delay: -20s; }
  @keyframes star-drift {
    from { translate: 0 0; opacity: 0.9; }
    to { translate: 12px -9px; opacity: 0.4; }
  }
}
/* LANTERN FOG - the fifth weather, reachable only by asking (2026-08-22) */
.world-fog { position: absolute; inset: 0; pointer-events: none; opacity: 0; transition: opacity 1.8s ease; background: radial-gradient(ellipse 62% 46% at 30% 80%, rgba(216,205,184,0.34), transparent 70%), radial-gradient(ellipse 55% 40% at 72% 86%, rgba(198,188,170,0.28), transparent 72%), linear-gradient(to top, rgba(208,198,180,0.30) 0%, rgba(208,198,180,0.12) 45%, transparent 76%); }
#world.is-fog .world-fog { opacity: 1; animation: fog-drift 26s ease-in-out infinite alternate; }
@keyframes fog-drift { from { transform: translate3d(-2.5%,0,0) scale(1.02); } to { transform: translate3d(2.5%,-1.5%,0) scale(1.06); } }
#world.is-fog .world-star { opacity: 0.25; transition: opacity 1.4s ease; }
#world.is-fog .world-orb { filter: brightness(0.78) blur(1px); transition: filter 1.6s ease; }
#world.is-fog .world-city { filter: brightness(0.85); transition: filter 1.6s ease; }
#world.is-fog .world-lamp { filter: brightness(1.25); transition: filter 1.6s ease; }
@media (prefers-reduced-motion: reduce) { #world.is-fog .world-fog, #world.is-fog .world-star, #world.is-fog .world-orb, #world.is-fog .world-city, #world.is-fog .world-lamp { animation: none; transition-duration: 0.01ms; } }
/* The Walker - one resident crosses the roofline now and then, carrying a small light. */
.world-walker { position: absolute; left: -6%; bottom: 12%; width: 18px; height: 30px; z-index: 7; pointer-events: none; opacity: 0; }
.world-walker .ww-body { position: absolute; bottom: 0; left: 5px; width: 8px; height: 21px; background: #16121d; border-radius: 4px 4px 2px 2px; box-shadow: 0 0 6px rgba(0, 0, 0, 0.5); transform-origin: 50% 100%; }
.world-walker .ww-lamp { position: absolute; bottom: 7px; left: 13px; width: 5px; height: 6px; border-radius: 50% 50% 40% 40%; background: #ffb45e; box-shadow: 0 0 16px 5px rgba(255, 176, 94, 0.38), 0 0 42px 14px rgba(255, 176, 94, 0.14); }
.world-walker.is-walking { opacity: 1; }
@keyframes ww-fade { 0% { opacity: 0; } 30% { opacity: 1; } 75% { opacity: 1; } 100% { opacity: 0; } }
.world-walker.is-still { animation: ww-fade 6s ease forwards; }
@keyframes ww-sway { from { transform: rotate(-2deg); } to { transform: rotate(2.5deg); } }
.world-walker.is-walking .ww-body { animation: ww-sway 2.8s ease-in-out infinite alternate; }
.world-city { transition: filter 5s linear; }
.ws-world.is-crossing .world-city { filter: brightness(1.3) saturate(1.06); }
.world-passerby { margin-top: 14px; font-size: 0.8rem; letter-spacing: 0.04em; opacity: 0.75; font-style: italic; }

/* The Long Shadow — every alteration asked of the place casts one more segment of shadow across the ground; they persist between visits. */
.ow-shadow { position:absolute; left:-1%; bottom:14%; height:12px; width:8%; pointer-events:none; background:linear-gradient(90deg, rgba(5,8,12,.6) 0%, rgba(5,8,12,.3) 72%, rgba(5,8,12,0) 100%); border-radius:0 40px 40px 0; transition:width .9s ease; animation:ow-shadow-breathe 7s ease-in-out infinite alternate; }
.ow-shadow::after { content:""; position:absolute; inset:0; border-radius:inherit; background:repeating-linear-gradient(90deg, rgba(216,228,236,.09) 0 2px, transparent 2px 26px); }
.ow-shadow-new { filter:brightness(1.6); transition:width .9s ease, filter .5s ease; }
@keyframes ow-shadow-breathe { from { opacity:.82; } to { opacity:1; } }
.ow-shadow-note { font-style:italic; opacity:.72; margin-top:.4rem; font-size:.95em; }
.obs-shadow { letter-spacing:.06em; }
@media (max-width: 640px) { .ow-shadow { height:9px; bottom:18%; } }
@media (prefers-reduced-motion: reduce) { .ow-shadow { transition:none; animation:none; } .ow-shadow-new { filter:none; } }