/* self-hosted fonts (SIL OFL; see fonts/LICENSE-*.txt) */
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-display:swap;font-weight:400;src:url(/fonts/ibm-plex-sans-latin-400-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-display:swap;font-weight:500;src:url(/fonts/ibm-plex-sans-latin-500-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-display:swap;font-weight:600;src:url(/fonts/ibm-plex-sans-latin-600-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-display:swap;font-weight:400;src:url(/fonts/ibm-plex-mono-latin-400-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-display:swap;font-weight:600;src:url(/fonts/ibm-plex-mono-latin-600-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Silkscreen";font-style:normal;font-display:swap;font-weight:400;src:url(/fonts/silkscreen-latin-400-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
:root{
  --bg:#0b0f15;--bg2:#121822;--fg:#e4e9ef;--muted:#8d98a6;--line:#1f2833;
  --bird:#cdd6e0;--accent:#7fd1b9;--accent2:#f2b880;--ridge:#121a24;--star:#3a4656;
  --dusk1:#0b0f15;--dusk2:#16202c;color-scheme:dark;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#0b0f15;--bg2:#121822;--fg:#e4e9ef;--muted:#8d98a6;--line:#1f2833;
  --bird:#cdd6e0;--accent:#7fd1b9;--accent2:#f2b880;--ridge:#121a24;--star:#3a4656;
  --dusk1:#0b0f15;--dusk2:#16202c;color-scheme:dark}}
@media (prefers-color-scheme: light){:root:not([data-theme="dark"]){
  --bg:#f3f1ec;--bg2:#e9e6de;--fg:#1a222c;--muted:#5d6672;--line:#d6d1c5;
  --bird:#1f2935;--accent:#1f7a66;--accent2:#b5651d;--ridge:#e2ddd1;--star:transparent;
  --dusk1:#f3f1ec;--dusk2:#ebe3d6;color-scheme:light}}
:root[data-theme="light"]{
  --bg:#f3f1ec;--bg2:#e9e6de;--fg:#1a222c;--muted:#5d6672;--line:#d6d1c5;
  --bird:#1f2935;--accent:#1f7a66;--accent2:#b5651d;--ridge:#e2ddd1;--star:transparent;
  --dusk1:#f3f1ec;--dusk2:#ebe3d6;color-scheme:light}
:root[data-theme="dark"]{
  --bg:#0b0f15;--bg2:#121822;--fg:#e4e9ef;--muted:#8d98a6;--line:#1f2833;
  --bird:#cdd6e0;--accent:#7fd1b9;--accent2:#f2b880;--ridge:#121a24;--star:#3a4656;
  --dusk1:#0b0f15;--dusk2:#16202c;color-scheme:dark}

/* themes, cycled with T. The :not(html) form lets preview swatches wear a theme too. */
:root[data-skin="dusk"],[data-skin="dusk"]:not(html){
  --bg:#0b0f15;--bg2:#121822;--fg:#e4e9ef;--muted:#8d98a6;--line:#1f2833;
  --bird:#cdd6e0;--accent:#7fd1b9;--accent2:#f2b880;--ridge:#121a24;--star:#3a4656;
  --dusk1:#0b0f15;--dusk2:#16202c;color-scheme:dark}
:root[data-skin="dawn"],[data-skin="dawn"]:not(html){
  --bg:#f3f1ec;--bg2:#e9e6de;--fg:#1a222c;--muted:#5d6672;--line:#d6d1c5;
  --bird:#1f2935;--accent:#1f7a66;--accent2:#b5651d;--ridge:#e2ddd1;--star:transparent;
  --dusk1:#f3f1ec;--dusk2:#ebe3d6;color-scheme:light}
:root[data-skin="canopy"],[data-skin="canopy"]:not(html){
  --bg:#0d1410;--bg2:#131d17;--fg:#e2eadf;--muted:#8fa394;--line:#1f2d24;
  --bird:#d7e3d2;--accent:#a3d977;--accent2:#f0c75e;--ridge:#15211a;--star:#2f4236;
  --dusk1:#0d1410;--dusk2:#1a2a20;color-scheme:dark}
:root[data-skin="starling"],[data-skin="starling"]:not(html){
  --bg:#0f0b18;--bg2:#171226;--fg:#ece6f7;--muted:#9a8fb3;--line:#261e3a;
  --bird:#d9d0ee;--accent:#6fe3c8;--accent2:#c58cff;--ridge:#19132a;--star:#3b3158;
  --dusk1:#0f0b18;--dusk2:#231a3a;color-scheme:dark}
:root[data-skin="ember"],[data-skin="ember"]:not(html){
  --bg:#140e0c;--bg2:#1d1512;--fg:#f4e6d8;--muted:#a8907c;--line:#33251d;
  --bird:#f1dccb;--accent:#ff8a4c;--accent2:#ffd166;--ridge:#1f1612;--star:#4a372b;
  --dusk1:#140e0c;--dusk2:#3a1f17;color-scheme:dark}
:root[data-skin="fog"],[data-skin="fog"]:not(html){
  --bg:#eceeef;--bg2:#e1e4e6;--fg:#1b1f23;--muted:#5f6870;--line:#cfd4d8;
  --bird:#2a3036;--accent:#3d5a73;--accent2:#b0413e;--ridge:#dde1e4;--star:transparent;
  --dusk1:#eceeef;--dusk2:#dfe4e8;color-scheme:light}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.65 "IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;overflow-x:hidden}
a{color:var(--accent)}
.px{font-family:Silkscreen,"IBM Plex Mono",ui-monospace,monospace;font-weight:400}
.mono{font-family:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.wrap{max-width:1120px;margin:0 auto;padding:0 clamp(18px,4vw,40px)}
svg.pix{shape-rendering:crispEdges;display:block}

/* header */
header{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--bg) 84%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.topbar{display:flex;align-items:center;justify-content:space-between;height:60px;gap:16px}
.brand{display:flex;align-items:center;gap:10px;color:var(--fg);text-decoration:none;font-size:20px}
.brand svg{width:22px;height:14px;color:var(--accent)}
nav{display:flex;align-items:center;gap:24px;font-size:14px}
nav a{color:var(--muted);text-decoration:none}
nav a:hover{color:var(--fg)}
nav .navcta{color:var(--bg);background:var(--accent);padding:7px 12px;font-weight:600}
nav .navcta:hover{color:var(--bg)}
@media (max-width:640px){nav a:not(.navcta){display:none}}

/* hero */
.hero{position:relative;height:min(88vh,740px);min-height:460px;background:linear-gradient(180deg,var(--dusk1) 0%,var(--dusk1) 45%,var(--dusk2) 100%);overflow:hidden}
.hero canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
#sky{cursor:crosshair;touch-action:pan-y}
.hero-copy{position:absolute;left:0;right:0;bottom:clamp(28px,7vh,64px);text-align:center;pointer-events:none;padding:0 18px}
.eyebrow{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--accent);margin:0 0 10px}
.hero-copy h1{font-size:clamp(18px,2.6vw,26px);font-weight:500;margin:0 auto 22px;max-width:34ch;line-height:1.35}
.cta{display:inline-flex;gap:14px;flex-wrap:wrap;justify-content:center;pointer-events:auto}
.btn{display:inline-block;font:600 15px/1 "IBM Plex Sans",system-ui,sans-serif;padding:13px 18px;text-decoration:none;border:2px solid var(--accent);background:var(--accent);color:var(--bg);box-shadow:4px 4px 0 var(--fg);transition:transform .12s,box-shadow .12s}
.btn:hover{transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--fg)}
.btn.ghost{background:color-mix(in srgb,var(--bg) 70%,transparent);color:var(--fg);border-color:var(--line);box-shadow:4px 4px 0 var(--line)}
.hint{position:absolute;top:16px;right:18px;font-size:11px;color:var(--muted);pointer-events:none;opacity:.8}
@media (max-width:640px){.hint{display:none}}

/* sections */
section{padding:clamp(64px,10vw,120px) 0;border-top:1px solid var(--line)}
.label{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--accent);margin:0 0 12px}
h2{font-size:clamp(26px,4.4vw,44px);line-height:1.12;margin:0 0 16px;min-height:1.12em}
.lede{color:var(--muted);max-width:60ch;margin:0 0 40px;font-size:17px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px}
.card{background:var(--bg2);border:1px solid var(--line);padding:24px;transition:border-color .2s,transform .2s}
.card:hover{border-color:var(--accent);transform:translateY(-3px)}
.card svg{width:36px;height:36px;color:var(--accent);margin-bottom:16px}
.card h3{margin:0 0 8px;font-size:18px;font-weight:600}
.card p{margin:0;color:var(--muted);font-size:15px}

.split{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:start}
@media (max-width:860px){.split{grid-template-columns:1fr;gap:28px}}
.principles{display:grid;gap:14px}
.principle{display:grid;grid-template-columns:auto 1fr;gap:16px;align-items:start;padding:18px;border:1px solid var(--line);background:var(--bg2)}
.principle .n{color:var(--accent2);font-size:14px;padding-top:2px}
.principle h3{margin:0 0 4px;font-size:16px}
.principle p{margin:0;color:var(--muted);font-size:15px}

.contact{background:var(--bg2);border:1px solid var(--line);padding:clamp(28px,5vw,56px);display:grid;grid-template-columns:1.4fr 1fr;gap:32px;align-items:center}
@media (max-width:760px){.contact{grid-template-columns:1fr}}
.contact .mail{font-size:clamp(16px,2.4vw,22px);word-break:break-all}
.note{color:var(--muted);font-size:13px;margin-top:10px}

footer{border-top:1px solid var(--line);padding:32px 0 48px;color:var(--muted);font-size:13px}
.foot{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;align-items:center}
.foot .brand{font-size:15px}

/* theme controls */
.chip{font:500 12px/1 "IBM Plex Mono",ui-monospace,monospace;background:var(--bg2);color:var(--fg);border:1px solid var(--line);padding:7px 10px;cursor:pointer;display:inline-flex;gap:8px;align-items:center}
.chip:hover{border-color:var(--accent)}
kbd{font:inherit;font-size:11px;border:1px solid var(--line);border-bottom-width:3px;padding:1px 5px;background:var(--bg)}
#fx{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:50}
.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,12px);z-index:60;background:var(--fg);color:var(--bg);padding:8px 14px;font-size:13px;opacity:0;transition:opacity .2s,transform .2s;pointer-events:none}
.toast.show{opacity:1;transform:translate(-50%,0)}
.swatches{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px}
.sw{display:inline-flex;align-items:center;gap:3px;background:var(--bg2);color:var(--fg);border:1px solid var(--line);padding:6px 10px 6px 6px;cursor:pointer;font:inherit}
.sw .dot{width:12px;height:12px}
.sw .mono{margin-left:6px;font-size:12px}
.sw:hover{border-color:var(--accent)}
.sw[aria-pressed="true"]{border-color:var(--accent);box-shadow:3px 3px 0 var(--accent)}
.lede.flush{margin-bottom:0}
.mailaddr{margin:18px 0 0}
.sw .dot.d-bg{background:var(--bg)}
.sw .dot.d-ac{background:var(--accent)}
.sw .dot.d-ac2{background:var(--accent2)}
