/* From the Oozing Waters site design (v23, /mnt/project-files/site-design). Keep in step with that hand-off. */
/* Layout: a slim band and the Moonlit bar on top (they float and shrink a little as you scroll), one column of fragments below it, and a single-fragment view at #f<n>. The palette is Phosphor, dark on purpose, so the page sets every color itself instead of following the viewer's theme. Two faces only: Fraunces for display and captions, Karla for everything else. */
:root{
  --field:#0a1624; --field-2:#11223a; --ink:#dcfbea; --ink-2:#86b4a6; --rule:#1a3046;
  --mint:#2c6a5a; --emerald:#6ff0b0; --magenta:#ff4fa6; --glow:rgba(111,240,176,.75); --capglow:rgba(111,240,176,.28); --phfilter:saturate(.7) brightness(.85) hue-rotate(-8deg); --deep:#1a4842; --abyss:#050f10;
  --display:'Fraunces',Georgia,serif; --body:'Karla',system-ui,-apple-system,sans-serif; --mono:var(--body);
  color-scheme:dark;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
body{background:var(--field);color:var(--ink);font-family:var(--body);font-size:1.0625rem;line-height:1.6;padding-inline:clamp(16px,5vw,48px);padding-block:0 5rem;overflow-x:hidden;transition:background .5s,color .5s}
a{color:inherit;text-decoration-color:var(--magenta);text-underline-offset:.2em}
button:focus-visible,input:focus-visible,a:focus-visible{outline:2px solid var(--magenta);outline-offset:3px}
.col{max-width:44rem;margin-inline:auto}

/* masthead */
.mast{margin-inline:calc(50% - 50vw);width:100vw}
.mast{--bh:clamp(96px,15.5vw,164px)}
.barwrap{--p:0;background:var(--field)}
.barwrap canvas{display:block;width:100%;height:max(min(80px,var(--bh)),calc(var(--bh) * (1 - .25 * var(--p))))}
.home{display:block}
body.float .barwrap{position:fixed;inset:0 0 auto;z-index:5;box-shadow:0 12px 28px -14px rgba(0,0,0,.8)}
#bg{position:fixed;inset:0;width:100%;height:100%;z-index:-1;pointer-events:none}
.mast .under{height:calc(12px - 6px * var(--p))}  /* a slim empty band above the bar */

/* stream */
.stream{position:relative;margin-inline:calc(50% - 50vw);width:100vw;padding-inline:clamp(16px,5vw,48px)}
.cap{text-shadow:0 0 18px var(--capglow)}
.meta .n{text-shadow:0 0 8px var(--glow)}
.ph{filter:var(--phfilter)}
.stream .end{height:7px;margin-inline:calc(-1 * clamp(16px,5vw,48px));background:linear-gradient(var(--magenta),#8c0f50)}
.frag{--fg:var(--ink);--fg2:var(--ink-2);--ln:var(--rule);color:var(--fg);padding-block:2.4rem;border-bottom:1px solid var(--ln);display:grid;gap:1rem;transition:color .5s}
.frag:last-of-type{border-bottom:0}
.meta{font-family:var(--mono);font-size:.72rem;color:var(--fg2);display:flex;flex-wrap:wrap;align-items:center;gap:.4rem 1.1rem;letter-spacing:.01em}
.meta .n{color:var(--emerald);font-weight:500}
.mark{display:inline-flex;align-items:center;gap:.4rem}
.mark .w{color:var(--magenta);font-weight:500;letter-spacing:.04em}
.ph{position:relative;width:100%;max-width:100%;border:1px solid var(--ln);overflow:hidden}
.ph::after{content:attr(data-file);position:absolute;left:.6rem;bottom:.5rem;font-family:var(--mono);font-size:.66rem;letter-spacing:.02em;color:rgba(255,255,255,.85);text-shadow:0 1px 2px rgba(0,0,0,.4)}
.ph.l{aspect-ratio:4/3}.ph.p{aspect-ratio:3/4;max-width:min(100%,24rem)}.ph.s{aspect-ratio:1}
.cap{font-family:var(--display);font-weight:400;font-variation-settings:'opsz' 36;font-size:1.3rem;line-height:1.4;margin:0;max-width:34ch;text-wrap:pretty}
.frag.text .cap{font-size:clamp(1.5rem,4vw,1.9rem);line-height:1.3;max-width:28ch;font-weight:300}
.frag a.perm{font-family:var(--mono);font-size:.7rem;color:var(--fg2);text-decoration:none;letter-spacing:.01em}
.frag a.perm:hover{color:var(--magenta)}
/* Fragments alternate left and right by number (odd left, even right), and now and then one sits in the
   center; which ones is picked by a hash of the number, so a fragment never moves once it's posted. */
.frag.r>*{justify-self:end;text-align:right}
.frag.c>*{justify-self:center;text-align:center}
.frag.r .meta{justify-content:flex-end}
.frag.c .meta{justify-content:center}
@media (max-width:699px){ .frag .ph.p{max-width:min(86%,24rem)} }
@media (min-width:700px){
  .stream .col{max-width:56rem}
  .frag{grid-template-columns:7.5rem minmax(0,1fr);gap:.9rem 2rem}
  .frag .meta{flex-direction:column;align-items:flex-start;gap:.35rem;padding-top:.3rem;grid-column:1;grid-row:1 / span 3}
  .frag>*:not(.meta){grid-column:2}
  .frag.r{grid-template-columns:minmax(0,1fr) 7.5rem}
  .frag.r .meta{grid-column:2;align-items:flex-end;justify-content:flex-start}
  .frag.r>*:not(.meta){grid-column:1}
  .frag.c{grid-template-columns:minmax(0,1fr)}
  .frag.c .meta{grid-column:1;grid-row:auto;flex-direction:row;align-items:center;gap:.4rem 1.1rem;padding-top:0}
  .frag.c>*:not(.meta){grid-column:1}
}

/* single */
.one{padding-block:2.4rem 0}
.single{display:grid;gap:1.2rem}
.single .ph.p{max-width:min(100%,30rem)}
.single.r>.ph,.single.r>.cap{justify-self:end;text-align:right}
.single.c>.ph,.single.c>.cap{justify-self:center;text-align:center}
.single.r>.meta{justify-content:flex-end}
.single.c>.meta{justify-content:center}
.single .cap{font-size:clamp(1.5rem,4.4vw,2.1rem);max-width:30ch;line-height:1.3}
.single.text .cap{font-weight:300;max-width:28ch}
.nav a{text-decoration:none}
.nav a:hover{color:var(--magenta)}
.single .meta{color:var(--ink-2)}
.nav{display:grid;grid-template-columns:1fr 1fr;gap:1rem;border-block:1px solid var(--rule);padding-block:1rem;font-family:var(--mono);font-size:.74rem;color:var(--ink-2);letter-spacing:.01em}
.nav b{display:block;color:var(--ink);font-family:var(--display);font-weight:400;font-size:1rem;letter-spacing:0;margin-top:.2rem}
.nav div:last-child{text-align:right}
.letter{display:grid;gap:.4rem;padding:1.2rem 1.3rem;border:1px dashed var(--ink-2);max-width:34rem}
.one .letter{margin-top:1.2rem}
.letter h3{font-family:var(--display);font-weight:900;font-size:1.35rem;margin:0}
.letter p{margin:0;color:var(--ink-2);font-size:.97rem}
.letter code{font-family:var(--mono);font-size:.82rem;color:var(--ink)}

/* chrome toggles */
body:not(.c-marks) .mark{display:none}
body:not(.c-glow) .cap,body:not(.c-glow) .meta .n{text-shadow:none}
body.c-caustics::before{content:"";position:fixed;inset:-20%;z-index:-1;pointer-events:none;opacity:.5;
  background:radial-gradient(ellipse 30% 18% at 30% 40%,rgba(111,240,176,.07),transparent 70%),radial-gradient(ellipse 25% 15% at 70% 60%,rgba(159,233,200,.06),transparent 70%),radial-gradient(ellipse 35% 12% at 50% 85%,rgba(111,240,176,.05),transparent 70%);
  animation:caust 28s ease-in-out infinite alternate}
@keyframes caust{to{transform:translate(4%,-3%) rotate(4deg) scale(1.08)}}
body.c-duo .ph{filter:brightness(.85) contrast(1.05)}
body.c-duo .ph::before{content:"";position:absolute;inset:0;background:linear-gradient(160deg,#6ff0b0,#13283a 55%,#ff4fa6);mix-blend-mode:color;opacity:.85;transition:opacity .5s;z-index:1}
body.c-duo .ph:hover::before{opacity:0}
body.c-duo .ph::after{z-index:2}
body.c-energy .frag{border-bottom-color:transparent;background:linear-gradient(90deg,transparent,var(--emerald) 30%,var(--magenta) 70%,transparent) 50% 100%/60% 1px no-repeat;animation:energy 3.5s ease-in-out infinite}
@keyframes energy{50%{background-size:100% 1px}}
body.c-ink .cap::first-letter{color:var(--emerald);text-shadow:0 0 10px var(--glow)}
/* liquid glass: one switch (body.c-glass). Glass = a faint light fill, a bright top rim, a soft drop, and a blur of
   whatever passes underneath. The floating bar morphs from full width into an inset glass capsule as you scroll;
   its water turns slightly see-through so the page shows blurred behind it, and a soft sheen drifts across it on
   a two-tide cycle. */
body.c-glass{--gl-fill:linear-gradient(180deg,rgba(220,251,234,.11),rgba(220,251,234,.035));--gl-rim:rgba(220,251,234,.16);
  --gl-shine:inset 0 1px 0 rgba(255,255,255,.28),inset 0 -1px 0 rgba(255,79,166,.10);--gl-drop:0 10px 26px -12px rgba(0,0,0,.65);--gl-blur:blur(14px) saturate(170%)}
body.c-glass.float .barwrap{background:transparent;padding-inline:calc(10px * var(--p))}
body.c-glass .home{position:relative;border-radius:calc(22px * var(--p));overflow:hidden;
  box-shadow:0 18px 40px -18px rgba(0,0,0,calc(.85 * var(--p)));-webkit-backdrop-filter:var(--gl-blur);backdrop-filter:var(--gl-blur)}
body.c-glass.float .barwrap{box-shadow:none}
body.c-glass.float .home canvas{opacity:calc(1 - .14 * var(--p))}
body.c-glass .home::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  box-shadow:inset 0 1px 0 rgba(255,255,255,calc(.18 + .22 * var(--p))),inset 0 0 0 1px rgba(220,251,234,calc(.16 * var(--p))),inset 0 -14px 24px -16px rgba(255,79,166,.35);
  background:linear-gradient(105deg,transparent 42%,rgba(255,255,255,.09) 50%,transparent 58%) var(--sheen,50%) 0/320% 100% no-repeat,
             linear-gradient(180deg,rgba(255,255,255,.14),rgba(255,255,255,.03) 26%,transparent 52%)}
body.c-glass .mark .w,body.c-glass .frag a.perm,body.c-glass .ph::after,body.c-glass .nav>div,body.c-glass .letter{
  background:var(--gl-fill);border:1px solid var(--gl-rim);box-shadow:var(--gl-shine),var(--gl-drop);-webkit-backdrop-filter:var(--gl-blur);backdrop-filter:var(--gl-blur)}
body.c-glass .mark .w{display:inline-block;padding:.14rem .62rem .16rem;border-radius:999px}
body.c-glass .frag a.perm{width:fit-content;padding:.24rem .75rem;border-radius:999px;color:var(--ink)}
body.c-glass .ph{border-radius:20px;border-color:rgba(220,251,234,.18);box-shadow:inset 0 1px 0 rgba(255,255,255,.3),0 26px 50px -26px rgba(0,0,0,.8)}
body.c-glass .ph::after{left:.7rem;bottom:.65rem;padding:.12rem .55rem;border-radius:999px;background:rgba(10,22,36,.35)}
body.c-glass .nav{border-block:0;gap:.8rem;padding-block:0}
body.c-glass .nav>div{padding:.85rem 1.05rem;border-radius:20px}
body.c-glass .letter{border-radius:24px;padding:1.4rem 1.5rem}
body.c-glass .frag .meta,body.c-glass .frag.text .cap,body.c-glass .single>.meta{
  background:var(--gl-fill);border:1px solid var(--gl-rim);box-shadow:var(--gl-shine),var(--gl-drop);-webkit-backdrop-filter:var(--gl-blur);backdrop-filter:var(--gl-blur)}
body.c-glass .frag .meta{padding:.7rem .85rem;border-radius:18px;width:fit-content;height:fit-content}
body.c-glass .frag.text .cap{padding:1.3rem 1.6rem;border-radius:24px}
body.c-glass .single>.meta{padding:.5rem .8rem;border-radius:999px;width:fit-content}
body.c-glass .single.r>.meta{justify-self:end}
body.c-glass .single.c>.meta{justify-self:center}
@media (prefers-reduced-transparency:reduce){body.c-glass .home canvas{opacity:1}body.c-glass .mark .w,body.c-glass .frag a.perm,body.c-glass .nav>div,body.c-glass .letter{background:var(--field-2)}}
@media (prefers-reduced-motion:reduce){body.c-caustics::before,body.c-energy .frag{animation:none}}

/* hand-touched: circled numbers, paper grain */
.meta .n{position:relative}
.meta .n::after{content:"";position:absolute;inset:-7px -10px;pointer-events:none;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 30' preserveAspectRatio='none'%3E%3Cpath d='M8 17c0-8 14-13 27-12s20 6 18 12c-2 7-16 10-29 9S5 21 9 13c2-4 9-7 15-8' fill='none' stroke='%236ff0b0' stroke-width='1.3' stroke-linecap='round' opacity='.8'/%3E%3C/svg%3E") center/100% 100% no-repeat}
body::after{content:"";position:fixed;inset:0;z-index:6;pointer-events:none;opacity:.09;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .9 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E")}

/* --- hooks the live templates need beyond the mockup (real <img> in .ph, multi-paragraph captions) --- */
.ph img{display:block;width:100%;height:100%;object-fit:cover}
.cap p{margin:0}
.cap p+p{margin-top:.7em}
.letter a{text-decoration:none}
.cap a{overflow-wrap:anywhere}
