html, body { margin:0; padding:0; overflow:hidden; height:100%; background:#0d1b3d; }
  #scene { position:fixed; inset:0; display:block; }
  #trail { position:fixed; inset:0; pointer-events:none; z-index:5; }
  #ui { position:fixed; inset:0; pointer-events:none;
        font-family:'Outfit','Segoe UI','Helvetica Neue',Arial,sans-serif; }

  #title {
    position:absolute; top:42px; left:50%; transform:translateX(-50%);
    text-align:center; color:#f3ead2; opacity:0; transition:opacity 2.2s ease;
  }
  #title.show { opacity:1; }
  #title.dim, #title.show.dim { opacity:0; }
  @media (max-width:1150px) { #title { top:104px; } }
  #title h1 { margin:0; font:400 50px/1.06 'Fraunces', Georgia, 'Times New Roman', serif;
              font-size:clamp(30px, 3.8vw, 50px); letter-spacing:0.015em;
              text-shadow:0 2px 20px rgba(10,16,40,0.75); }
  #title h1 b { font-weight:600; }
  #title p  { margin:11px 0 0; font:300 13.5px/1.6 'Outfit', 'Segoe UI', Arial, sans-serif;
              font-size:clamp(10.5px, 1.3vw, 13.5px); letter-spacing:0.14em; opacity:0.85; }
  #title p .sep { opacity:0.45; padding:0 7px; font-weight:300; }

  #presets {
    position:absolute; bottom:26px; right:28px; display:flex; gap:8px;
    pointer-events:auto; opacity:0; transition:opacity 1.5s ease 0.5s;
  }
  #presets.show { opacity:1; }
  #presets button {
    padding:8px 14px; border-radius:10px; cursor:pointer;
    background:rgba(255,255,255,0.10); color:#e8e2d0;
    border:1px solid rgba(255,255,255,0.25);
    backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
    font-size:11px; letter-spacing:1.2px;
    transition:background 0.3s;
  }
  #presets button:hover, #presets button.active { background:rgba(255,214,140,0.30); }

  #hint {
    position:absolute; bottom:30px; left:50%; transform:translateX(-50%);
    color:rgba(240,232,210,0.5); font-size:11px; letter-spacing:3px;
    opacity:0; transition:opacity 2s ease 1s;
  }
  #hint.show { opacity:1; }

  #backdrops {
    position:absolute; bottom:60px; left:50%; transform:translateX(-50%);
    display:flex; gap:8px; pointer-events:auto;
    opacity:0; transition:opacity 1.5s ease 0.5s;
  }
  #backdrops.show { opacity:1; }
  #backdrops button {
    padding:7px 12px; border-radius:10px; cursor:pointer;
    background:rgba(255,255,255,0.10); color:#e8e2d0;
    border:1px solid rgba(255,255,255,0.25);
    backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
    font-size:10px; letter-spacing:1.2px;
    transition:background 0.3s;
  }
  #backdrops button:hover, #backdrops button.active { background:rgba(255,214,140,0.30); }

  #curtain {
    position:fixed; inset:-2% 0; background:#05070f; z-index:10;
    transform:translateY(0);
    transition:transform 1.9s cubic-bezier(0.65, 0, 0.35, 1);
    pointer-events:none;
  }
  #curtain.lift { transform:translateY(-103%); }

  /* --- dev tools: all control UI hidden unless body.dev (press D) --- */
  body:not(.dev) #presets, body:not(.dev) #backdrops, body:not(.dev) #hint,
  body:not(.dev) #lightsToggle, body:not(.dev) #skyToggle, body:not(.dev) #fxToggle,
  body:not(.dev) #lightPanel, body:not(.dev) #fxPanel { display:none !important; }

  /* --- post-processing panel --- */
  #fxToggle {
    position:absolute; bottom:26px; left:224px;
    padding:8px 13px; border-radius:10px; cursor:pointer;
    background:rgba(255,255,255,0.10); color:#e8e2d0;
    border:1px solid rgba(255,255,255,0.22);
    backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
    font-size:11px; letter-spacing:2px; pointer-events:auto;
    user-select:none;
  }
  #fxPanel {
    position:absolute; bottom:66px; left:224px; width:238px;
    padding:12px 14px; border-radius:14px;
    background:rgba(10,13,26,0.88); color:#ddd6c4;
    border:1px solid rgba(255,255,255,0.16);
    backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
    font-size:11px; pointer-events:auto;
  }
  #fxPanel.hidden { display:none; }
  #fxPanel .row { display:flex; align-items:center; gap:6px; margin:3px 0; }
  #fxPanel .row label { width:64px; opacity:0.75; letter-spacing:0.5px; }
  #fxPanel .row input[type=range] { flex:1; accent-color:#e8b64c; height:14px; }
  #fxPanel .row .val { width:40px; text-align:right; opacity:0.85; }
  #fxPanel .btns { display:flex; gap:6px; margin-top:9px; }
  #fxPanel .btns button {
    flex:1; padding:5px 0; border-radius:7px; cursor:pointer;
    background:rgba(255,255,255,0.12); color:#e8e2d0;
    border:1px solid rgba(255,255,255,0.22); font-size:10.5px; letter-spacing:1px;
  }
  #fxPanel .btns button:hover { background:rgba(232,182,76,0.3); }

  /* --- light tuning panel --- */
  #skyToggle {
    position:absolute; bottom:26px; left:122px;
    padding:8px 13px; border-radius:10px; cursor:pointer;
    background:rgba(255,255,255,0.10); color:#e8e2d0;
    border:1px solid rgba(255,255,255,0.22);
    backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
    font-size:11px; letter-spacing:2px; pointer-events:auto;
    user-select:none;
  }
  #lightsToggle {
    position:absolute; bottom:26px; left:24px;
    padding:8px 13px; border-radius:10px; cursor:pointer;
    background:rgba(255,255,255,0.10); color:#e8e2d0;
    border:1px solid rgba(255,255,255,0.22);
    backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
    font-size:11px; letter-spacing:2px; pointer-events:auto;
    user-select:none;
  }
  #lightPanel {
    position:absolute; bottom:66px; left:24px; width:248px;
    padding:12px 14px; border-radius:14px;
    background:rgba(10,13,26,0.88); color:#ddd6c4;
    border:1px solid rgba(255,255,255,0.16);
    backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
    font-size:11px; pointer-events:auto;
  }
  #lightPanel.hidden { display:none; }
  #lightPanel select {
    width:100%; margin-bottom:8px; background:#1c2136; color:#ddd6c4;
    border:1px solid rgba(255,255,255,0.2); border-radius:6px; padding:4px;
    font-size:11px;
  }
  #lightPanel .row { display:flex; align-items:center; gap:6px; margin:3px 0; }
  #lightPanel .row label { width:52px; opacity:0.75; letter-spacing:0.5px; }
  #lightPanel .row input[type=range] { flex:1; accent-color:#e8b64c; height:14px; }
  #lightPanel .row .val { width:36px; text-align:right; opacity:0.85; }
  #lightPanel .btns { display:flex; gap:6px; margin-top:9px; }
  #lightPanel .btns button {
    flex:1; padding:5px 0; border-radius:7px; cursor:pointer;
    background:rgba(255,255,255,0.12); color:#e8e2d0;
    border:1px solid rgba(255,255,255,0.22); font-size:10.5px; letter-spacing:1px;
  }
  #lightPanel .btns button:hover { background:rgba(232,182,76,0.3); }
  #fogVeil { position:fixed; inset:0; pointer-events:none; opacity:0;
    background:#3a2f3f; z-index:4; }
  #ui { z-index:6; }
  #introCard {
    position:fixed; left:50%; top:max(96px, 15vh); transform:translate(-50%, -22px);
    width:min(430px, 86vw); padding:24px 30px 20px; box-sizing:border-box;
    font-family:'Outfit', 'Segoe UI', Arial, sans-serif;
    background:rgba(10,14,30,0.68); border:1px solid rgba(255,169,184,0.3);
    border-radius:14px; color:#f3e9e2; z-index:6;
    opacity:0; pointer-events:none; transition:opacity .7s ease, transform .7s ease;
    backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
  }
  #introCard.show { opacity:1; transform:translate(-50%, 0); }
  #introCard h2 { margin:0 0 10px; font:600 26px/1.2 'Fraunces', Georgia, serif;
    letter-spacing:0.04em; color:#ffd4da; }
  #introCard p { margin:0 0 12px; font-size:14.5px; line-height:1.65; }
  #introHint { font-size:11px; letter-spacing:0.14em; opacity:0.55; }
  #introBarTrack {
    position:absolute; right:10px; top:14px; bottom:14px; width:3px;
    background:rgba(255,255,255,0.12); border-radius:2px; overflow:hidden;
  }
  #introBar { width:100%; height:0%; background:linear-gradient(#ffd4da, #ff9fb0); border-radius:2px; }
  #stnTag {
    position:fixed; left:50%; bottom:9%; transform:translateX(-50%);
    z-index:55; pointer-events:none; opacity:0; transition:opacity 0.7s;
    font:600 15px/1 'Outfit', 'Segoe UI', Arial, sans-serif; letter-spacing:0.45em;
    color:#eaf0ff; text-shadow:0 2px 10px #000;
    border:1px solid rgba(255,255,255,0.35); border-radius:3px;
    padding:10px 18px 10px 22px; background:rgba(10,14,30,0.45);
  }
  #jumpTrainBtn {
    position:fixed; left:110px; bottom:12px; z-index:60; cursor:pointer;
    font:11px monospace; color:#cfe8ff; background:rgba(10,12,24,0.55);
    border:1px solid rgba(255,255,255,0.2); border-radius:8px; padding:7px 12px;
  }
  #jumpTrainBtn:hover { background:rgba(30,36,60,0.75); }
  #jumpWallBtn {
    position:fixed; left:196px; bottom:12px; z-index:60; cursor:pointer;
    font:11px monospace; color:#cfe8ff; background:rgba(10,12,24,0.55);
    border:1px solid rgba(255,255,255,0.2); border-radius:8px; padding:7px 12px;
  }
  #jumpWallBtn:hover { background:rgba(30,36,60,0.75); }
  /* ================= BERLIN NACHT - the one UI system =================
     dark glass + hairline + BVG yellow. Every panel, chip and button
     draws from the same four tokens. */
  :root {
    --bxP: rgba(16, 14, 20, 0.55);          /* panel — deep minimal glass */
    --bxL: rgba(245, 235, 215, 0.12);       /* hairline */
    --bxI: #ece5d8;                          /* ink */
    --bxA: #f2c400;                          /* BVG yellow */
  }
  .bxpanel, #stopCard, #projCard, #skillPop {
    background: var(--bxP);
    border: 1px solid var(--bxL);
    backdrop-filter: blur(16px);
    -webkit-backdrop-filter: blur(16px);
    box-shadow: 0 16px 56px rgba(0, 0, 0, 0.38);
    color: var(--bxI);
  }
  /* ---- monument nav (top left, collapsible drawer) ---- */
  #navDim { position:fixed; inset:0; z-index:120; opacity:0; pointer-events:none;
    background:linear-gradient(105deg, rgba(10, 8, 14, 0.55), rgba(10, 8, 14, 0.22) 55%, rgba(10, 8, 14, 0.04));
    transition:opacity 0.4s ease; }
  #navDim.open { opacity:1; pointer-events:auto; }
  #topNav { position:fixed; left:26px; top:16px; z-index:130; display:flex;
    align-items:flex-start; gap:6px; }
  #topNav .ni, #topNav .nh { display:flex; flex-direction:column; align-items:center;
    gap:7px; background:none; border:none; border-radius:10px; cursor:pointer;
    padding:10px 12px 9px; color:rgba(245, 240, 228, 0.82);
    transition:color 0.25s ease, background 0.25s ease,
               opacity 0.3s ease, transform 0.3s ease; }
  #topNav svg { width:30px; height:30px;
    filter:drop-shadow(0 2px 6px rgba(0, 0, 0, 0.55)); }
  #topNav em { font:500 10px 'Outfit', 'Segoe UI', Arial, sans-serif; font-style:normal;
    letter-spacing:0.1em; white-space:nowrap;
    text-shadow:0 1px 5px rgba(0, 0, 0, 0.6); }
  #topNav .ni:hover, #topNav .nh:hover { color:#fff; background:rgba(245, 240, 228, 0.08); }
  #topNav .ni.cur { color:#fff; background:rgba(245, 240, 228, 0.13); }
  #topNav .ni.cur em { font-weight:700; }
  #topNav .nh { position:absolute; left:0; top:0; width:64px;
    box-sizing:border-box; padding-left:6px; padding-right:6px; }
  #topNav.open .nh { opacity:0; transform:translateX(-10px); pointer-events:none; }
  #topNav .ni { opacity:0; transform:translateX(-18px); pointer-events:none; }
  #topNav.open .ni { opacity:1; transform:none; pointer-events:auto; }
  #topNav.open .ni:nth-child(2) { transition-delay:0s; }
  #topNav.open .ni:nth-child(3) { transition-delay:0.04s; }
  #topNav.open .ni:nth-child(4) { transition-delay:0.08s; }
  #topNav.open .ni:nth-child(5) { transition-delay:0.12s; }
  #topNav.open .ni:nth-child(6) { transition-delay:0.16s; }
  #navFade { position:fixed; inset:0; z-index:220; background:#0d0b12; opacity:0;
    pointer-events:none; transition:opacity 0.45s ease; }
  #sndBtn { position:fixed; left:26px; top:94px; width:64px; box-sizing:border-box;
    z-index:129; cursor:pointer;
    display:flex; flex-direction:column; align-items:center; gap:5px;
    background:none; border:none; color:rgba(245, 240, 228, 0.75);
    transition:color 0.25s ease; }
  #sndBtn:hover { color:#fff; }
  #sndBtn .sb { display:flex; align-items:flex-end; gap:2.5px; height:13px; }
  #sndBtn .sb i { display:block; width:3px; background:currentColor;
    border-radius:1.5px; animation:sndBar 1.1s ease-in-out infinite; height:6px; }
  #sndBtn .sb i:nth-child(2) { animation-delay:0.2s; height:11px; }
  #sndBtn .sb i:nth-child(3) { animation-delay:0.45s; height:8px; }
  @keyframes sndBar { 0%,100% { transform:scaleY(0.6); } 50% { transform:scaleY(1); } }
  #sndBtn em { font:500 9px 'Outfit', 'Segoe UI', Arial, sans-serif; font-style:normal;
    letter-spacing:0.14em; text-shadow:0 1px 5px rgba(0, 0, 0, 0.6); }
  #sndBtn.off { color:rgba(245, 240, 228, 0.35); }
  #sndBtn.off .sb i { animation:none; transform:scaleY(0.45); }
  #sndBtn.idle .sb i { animation-play-state:paused; }   /* waiting for a tap */
  canvas { touch-action:none; }   /* a drag stays a gesture (not a browser pan),
                                     so its lift can unlock audio */
  /* ---- career stop card (train) ---- */
  #stopCard { position:fixed; left:50%; top:46%; z-index:48; width:min(430px, 88vw);
    box-sizing:border-box;
    transform:translate(-50%, -50%) scale(0.94);
    border-radius:14px;
    padding:22px 28px 17px; opacity:0; pointer-events:none;
    transition:opacity 0.5s ease, transform 0.5s cubic-bezier(0.2, 1.35, 0.4, 1);
    font:400 13.5px/1.65 'Outfit', 'Segoe UI', Arial, sans-serif; text-align:center; }
  #stopCard.show { opacity:1; transform:translate(-50%, -50%) scale(1); }
  #stopCard .yr { font:800 9.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.34em; color:var(--bxA); }
  #stopCard h4 { margin:8px 0 2px; font:700 26px/1.15 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.05em; color:#fff; }
  #stopCard .rl { font:600 13px 'Outfit', 'Segoe UI', Arial, sans-serif;
    color:rgba(246, 215, 107, 0.95); margin-bottom:11px; }
  #stopCard .bd { text-align:left; color:rgba(236, 229, 216, 0.88); }
  #stopCard .eh { font-size:21px; letter-spacing:0.02em; line-height:1.3; }
  #stopCard .bd.ec { text-align:center; }
  #stopCard .nx { margin-top:12px; font:700 9.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.3em; text-transform:uppercase; color:rgba(236, 229, 216, 0.45); }
  #stopCard .bd b { color:var(--bxA); font-weight:700; }
  #stopCard .stk { display:flex; flex-wrap:wrap; gap:6px; justify-content:center;
    margin-top:13px; }
  #stopCard .stk span { font:600 10.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    color:rgba(236, 229, 216, 0.8); background:rgba(245, 235, 215, 0.07);
    border:1px solid var(--bxL); border-radius:8px; padding:4px 10px; }
  #stopCard .achs { display:flex; flex-wrap:wrap; gap:7px; justify-content:center;
    margin-top:10px; }
  #stopCard .achs .ap { font:800 11px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.06em; color:#171410; background:var(--bxA);
    border-radius:8px; padding:5px 12px; }
  #stopCard .ft { margin-top:15px; font-size:9.5px; letter-spacing:0.24em;
    color:rgba(236, 229, 216, 0.45); }
  #stopCard a.gt { pointer-events:auto; cursor:pointer; color:var(--bxA);
    font-weight:700; text-decoration:underline; text-underline-offset:3px;
    transition:color 0.2s ease; }
  #stopCard a.gt:hover { color:#f6d76b; }
  /* ---- full-screen project details page (wall) ---- */
  #projPage { position:fixed; inset:0; z-index:180;   /* over every HUD button */
    display:flex; align-items:center; justify-content:center;
    background:rgba(10, 8, 14, 0.66);
    backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
    opacity:0; transition:opacity 0.32s ease; }
  #projPage[hidden] { display:none; }
  #projPage.show { opacity:1; }
  #projPage .ppi { position:relative; width:min(980px, 94vw);
    max-height:90vh; overflow-y:auto; box-sizing:border-box;
    background:var(--bxP); border:1px solid var(--bxL); border-radius:18px;
    backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
    box-shadow:0 24px 80px rgba(0, 0, 0, 0.5); color:var(--bxI);
    padding:30px 34px 30px;
    font:400 13.5px/1.65 'Outfit', 'Segoe UI', Arial, sans-serif;
    transform:translateY(14px) scale(0.98);
    transition:transform 0.36s cubic-bezier(0.22, 1.1, 0.35, 1); }
  #projPage.show .ppi { transform:translateY(0) scale(1); }
  #ppClose { position:sticky; top:0; float:right; margin:-6px -8px 0 12px;
    width:38px; height:38px; border-radius:12px; cursor:pointer;
    background:rgba(245, 235, 215, 0.07); border:1px solid var(--bxL);
    color:var(--bxI); font-size:15px; z-index:2;
    transition:background 0.2s ease, color 0.2s ease; }
  #ppClose:hover { background:rgba(242, 196, 0, 0.14); color:#fff; }
  #ppBody .pi { font:800 9px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.34em; text-transform:uppercase; color:var(--bxA); }
  #ppBody h2 { margin:8px 0 0; font:700 30px/1.1 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.02em; color:#fff; }
  #ppBody h2::after { content:''; display:block; width:30px; height:2px;
    margin:12px 0 0; background:var(--bxA); border-radius:1px; }
  #ppBody .pph { font:800 9.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.3em; text-transform:uppercase;
    color:rgba(236, 229, 216, 0.5); margin:24px 0 10px; }
  #ppBody .ppd { color:rgba(236, 229, 216, 0.9); max-width:70ch; }
  #ppBody .pstk { display:flex; flex-wrap:wrap; gap:6px; margin-top:4px; }
  #ppBody .pstk span { font:600 10.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    color:rgba(236, 229, 216, 0.9); background:rgba(245, 235, 215, 0.06);
    border:1px solid var(--bxL); border-radius:8px; padding:4px 10px; }
  #ppBody .pphl { margin:0; padding:0; list-style:none; max-width:76ch; }
  #ppBody .pphl li { position:relative; padding:0 0 9px 20px;
    color:rgba(236, 229, 216, 0.88); }
  #ppBody .pphl li::before { content:'>'; position:absolute; left:0;
    color:var(--bxA); font-weight:800; }
  #ppBody .ppmed { display:grid; gap:14px; margin-top:20px;
    grid-template-columns:repeat(auto-fit, minmax(280px, 1fr)); }
  #ppBody .ppyt { display:block; position:absolute; inset:0; }
  #ppBody .ppyt img { position:absolute; inset:0; width:100%; height:100%;
    object-fit:cover; }
  #ppBody .ppthumbs { display:flex; flex-wrap:wrap; gap:10px; margin-top:12px; }
  #ppBody .ppth { position:relative; width:132px; aspect-ratio:16/9;
    border-radius:10px; overflow:hidden; padding:0; cursor:pointer;
    background:#0b0910; border:1px solid var(--bxL);
    transition:border-color 0.2s ease, opacity 0.2s ease; opacity:0.75; }
  #ppBody .ppth:hover { opacity:1; }
  #ppBody .ppth.on { border-color:var(--bxA);
    box-shadow:0 0 0 1px var(--bxA); opacity:1; }
  #ppBody .ppth img { width:100%; height:100%; object-fit:cover; display:block; }
  #ppBody .ppth .plc { position:absolute; left:50%; top:50%;
    transform:translate(-50%, -50%); white-space:nowrap;
    font:700 10.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.08em; color:rgba(236, 229, 216, 0.85); }
  #ppBody .ppyt span { position:absolute; left:50%; top:50%;
    transform:translate(-50%, -50%); width:58px; height:58px;
    border-radius:50%; background:rgba(14, 12, 18, 0.72);
    border:1px solid rgba(255, 255, 255, 0.35); color:#fff; font-size:19px;
    display:flex; align-items:center; justify-content:center;
    padding-left:4px; box-sizing:border-box; }
  #ppBody .ppvid { position:relative; width:100%; aspect-ratio:16/9;
    border-radius:12px; overflow:hidden; background:#0b0910;
    border:1px solid var(--bxL); }
  #ppBody .ppvid iframe, #ppBody .ppvid video { position:absolute; inset:0;
    width:100%; height:100%; border:0; display:block; }
  #ppBody .pphero { width:100%; border-radius:12px; display:block;
    margin-top:20px; border:1px solid var(--bxL); }
  #ppBody .lk { display:flex; flex-wrap:wrap; gap:8px; margin-top:16px; }
  #ppBody .lk a { font:700 10.5px/1 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.08em; text-decoration:none; padding:9px 15px;
    border-radius:999px; border:1px solid rgba(242, 196, 0, 0.45);
    color:var(--bxA); transition:all 0.22s ease; }
  #ppBody .lk a:hover { background:rgba(242, 196, 0, 0.12);
    border-color:var(--bxA); }
  @media (max-width: 640px){
    #projPage .ppi { width:100vw; max-height:100vh; height:100%;
      border-radius:0; border:none; padding:20px 16px 28px; }
    #ppBody h2 { font-size:23px; }
  }
  /* ---- skill collect card (ride) ---- */
  #skillPop .yr { font:800 9.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.34em; color:var(--bxA); }
  #skillPop h4 { margin:8px 0 2px; font:700 22px/1.15 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.04em; color:#fff; }
  #skillPop .rl { font:600 12.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    color:rgba(246, 215, 107, 0.95); margin-bottom:8px; }
  #skillPop .bd9 { font:400 13px/1.6 'Outfit', 'Segoe UI', Arial, sans-serif;
    color:rgba(236, 229, 216, 0.88); }
  #skillPop .strs { margin:7px 0 3px; letter-spacing:0.12em; }
  #skillPop .st { display:inline-block; position:relative; font-size:21px;
    line-height:1; color:rgba(236, 229, 216, 0.22);
    animation:stIn 0.24s cubic-bezier(0.2, 1.5, 0.4, 1) both; }
  #skillPop .st.full { color:var(--bxA); text-shadow:0 0 12px rgba(242, 196, 0, 0.35); }
  #skillPop .st.half::before { content:'\2605'; position:absolute; left:0; top:0;
    width:52%; overflow:hidden; color:var(--bxA);
    text-shadow:0 0 12px rgba(242, 196, 0, 0.35); }
  @keyframes stIn { from { opacity:0; transform:scale(0.2); }
    60% { opacity:1; transform:scale(1.3); } to { opacity:1; transform:scale(1); } }
  #skillPop { position:fixed; left:50%; top:37%; z-index:48; width:min(340px, 84vw);
    background:rgba(16, 14, 20, 0.28);
    transform:translate(-50%, -50%) scale(0.88); text-align:center;
    border-radius:14px; padding:20px 24px 18px;
    opacity:0; pointer-events:none;
    transition:opacity 0.4s ease, transform 0.45s cubic-bezier(0.2, 1.45, 0.4, 1); }
  #skillPop.show { opacity:1; transform:translate(-50%, -50%) scale(1); }
  #skillPop .st9 { font-size:15px; color:var(--bxA);
    text-shadow:0 0 12px rgba(242, 196, 0, 0.6); }
  #skillPop .sg { margin-top:6px; font:600 22px/1.15 'Outfit', 'Segoe UI', Arial, sans-serif;
    color:#fff; letter-spacing:0.06em; }
  #skillPop .sg::after { content:''; display:block; width:26px; height:2px;
    margin:10px auto 0; background:var(--bxA); border-radius:1px; }
  #skillPop .chips { display:flex; flex-wrap:wrap; gap:8px; justify-content:center;
    margin-top:14px; }
  #skillPop .ch { font:600 11px 'Outfit', 'Segoe UI', Arial, sans-serif;
    color:rgba(236, 229, 216, 0.92);
    background:rgba(245, 235, 215, 0.06); border:1px solid var(--bxL);
    border-radius:8px; padding:5px 12px;
    opacity:0; animation:chipIn 0.32s cubic-bezier(0.2, 1.4, 0.4, 1) both; }
  @keyframes chipIn { from { opacity:0; transform:translateY(9px) scale(0.7); }
    to { opacity:1; transform:none; } }
  #skillPop .ch.tk { color:var(--bxA); border-color:rgba(242, 196, 0, 0.45);
    background:rgba(242, 196, 0, 0.08); }
  #skillPop .sc { margin-top:13px; font:700 9px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.36em; color:rgba(236, 229, 216, 0.5); }
  /* ---- on-screen skill accumulation (ride) ---- */
  #skillList { position:fixed; right:40px; top:50%; transform:translateY(-50%);
    z-index:45; pointer-events:none; }
  #skillList[hidden] { display:none; }
  #skillList .si { display:flex; align-items:center; gap:13px; margin:15px 0;
    animation:siIn 0.45s cubic-bezier(0.2, 1.2, 0.4, 1) both; }
  #skillList .si i { display:block; width:26px; height:5px; background:var(--bxA);
    border-radius:3px; flex:0 0 26px; }
  #skillList .si .sst { display:flex; gap:1px; flex:0 0 auto; }
  #skillList .si .sst span { position:relative; font-size:12.5px; line-height:1;
    color:rgba(236, 229, 216, 0.22); }
  #skillList .si .sst .full { color:var(--bxA); }
  #skillList .si .sst .half::before { content:'\2605'; position:absolute; left:0;
    top:0; width:52%; overflow:hidden; color:var(--bxA); }
  #skillList .si span { font:600 17px/1 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.08em; color:#faf4e6; white-space:nowrap;
    text-shadow:0 2px 12px rgba(0, 0, 0, 0.65); }
  @keyframes siIn { from { opacity:0; transform:translateX(26px); }
    to { opacity:1; transform:none; } }
  /* ---- on-screen career accumulation (train) ---- */
  #expList { position:fixed; right:40px; top:50%; transform:translateY(-50%);
    z-index:45; pointer-events:none; }
  #expList[hidden] { display:none; }
  #expList .ei { display:flex; align-items:center; gap:13px; margin:16px 0;
    animation:siIn 0.45s cubic-bezier(0.2, 1.2, 0.4, 1) both; }
  #expList .ei i { display:block; width:26px; height:5px; background:var(--bxA);
    border-radius:3px; flex:0 0 26px; }
  #expList .ei svg.ea { width:20px; height:15px; flex:0 0 20px;
    filter:drop-shadow(0 0 6px rgba(46, 232, 124, 0.65)); }
  #expList .ei span { font:600 15px/1.25 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.05em; color:#faf4e6; white-space:nowrap;
    text-shadow:0 2px 12px rgba(0, 0, 0, 0.65); }
  #expList .ei span b { color:var(--bxA); font-weight:700; }
  #progTag { position:fixed; left:16px; bottom:12px; z-index:44; pointer-events:none;
    font:500 10px/1 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.3em; color:rgba(236, 229, 216, 0.32); }
  /* ---- wall pagination ---- */
  #swipeHint { position:fixed; left:50%; top:70%;
    transform:translateX(-50%); z-index:46;
    pointer-events:none; text-align:center; color:rgba(236, 229, 216, 0.8);
    animation:hintPulse 2.6s ease-in-out 1.2s infinite; }
  #swipeHint[hidden] { display:none; }
  #swipeHint .sg9 { display:block; width:36px; height:22px; margin:0 auto 8px;
    position:relative; border:1.5px solid rgba(245, 240, 228, 0.5);
    border-radius:12px; }
  #swipeHint .sg9 i { position:absolute; top:50%; margin-top:-3px;
    width:6px; height:6px; border-radius:50%; background:#f2e2c4;
    animation:swLt9 1.6s ease-in-out infinite; }
  @keyframes swLt9 { 0% { left:25px; opacity:0; }
    20% { left:23px; opacity:0.95; } 60% { left:5px; opacity:0.95; }
    80%, 100% { left:5px; opacity:0; } }
  #swipeHint em { font:500 9.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    font-style:normal; letter-spacing:0.22em; text-transform:uppercase;
    text-shadow:0 1px 5px rgba(0, 0, 0, 0.65); }
  #wallNav { position:fixed; left:50%; bottom:24px; transform:translateX(-50%);
    z-index:47; display:flex; align-items:center; gap:6px; }
  #wallNav[hidden] { display:none; }
  #wallNav button { width:40px; height:40px; border-radius:50%; cursor:pointer;
    display:flex; align-items:center; justify-content:center; padding:0;
    border:1px solid rgba(236, 229, 216, 0.28); background:rgba(16, 14, 20, 0.5);
    color:rgba(236, 229, 216, 0.9);
    backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
    box-shadow:0 4px 18px rgba(0, 0, 0, 0.3);
    transition:all 0.22s ease; }
  #wallNav button svg { width:20px; height:20px; display:block; fill:none;
    stroke:currentColor; stroke-width:2.2; stroke-linecap:round;
    stroke-linejoin:round; }
  #wallNav button:hover { color:var(--bxA);
    border-color:rgba(242, 196, 0, 0.6); }
  #wallNav button:active { transform:scale(0.9); }
  #wallNav .wmid { text-align:center; margin:0 12px; }
  /* ---- project card (wall) ---- */
  #projCard { position:fixed; right:28px; top:50%; width:330px; z-index:48;
    box-sizing:border-box;
    transform:translateY(-50%) translateX(14px);
    border-radius:14px; padding:22px 24px 20px;
    opacity:0; pointer-events:none;
    transition:opacity 0.4s ease, transform 0.4s ease;
    font:400 12.5px/1.62 'Outfit', 'Segoe UI', Arial, sans-serif; }
  #projCard.show { opacity:1; transform:translateY(-50%) translateX(0);
    pointer-events:auto; }
  #projCard .pi { font:800 9px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.34em; text-transform:uppercase; color:var(--bxA); }
  #projCard h4 { margin:8px 0 0; font:700 22px/1.15 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.02em; color:#fff; }
  #projCard h4::after { content:''; display:block; width:26px; height:2px;
    margin:10px 0 0; background:var(--bxA); border-radius:1px; }
  #projCard .pr { margin-top:9px; font:600 10px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.16em; text-transform:uppercase;
    color:rgba(236, 229, 216, 0.55); }
  #projCard .pd { margin-top:9px; color:rgba(236, 229, 216, 0.88); }
  #projCard .pstk { display:flex; flex-wrap:wrap; gap:6px; margin-top:13px; }
  #projCard .pstk span { font:600 10.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    color:rgba(236, 229, 216, 0.9); background:rgba(245, 235, 215, 0.06);
    border:1px solid var(--bxL); border-radius:8px; padding:4px 10px; }
  #projCard .lk { display:flex; flex-wrap:wrap; gap:8px; margin-top:15px; }
  #projCard .lk a { font:700 10.5px/1 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.08em; text-decoration:none; padding:8px 14px;
    border-radius:999px; border:1px solid rgba(242, 196, 0, 0.45);
    color:var(--bxA); transition:all 0.22s ease; }
  #projCard .lk a:hover { background:rgba(242, 196, 0, 0.12);
    border-color:var(--bxA); }
  #projCard .lk a.solid { background:var(--bxA); color:#171410;
    border-color:var(--bxA); }
  #projCard .lk a.solid:hover { background:#f6d76b; }
  #projCard .lk a.ghost { border-color:var(--bxL);
    color:rgba(236, 229, 216, 0.7); }
  #projCard .lk a.ghost:hover { border-color:rgba(236, 229, 216, 0.5);
    background:rgba(245, 235, 215, 0.06); color:var(--bxI); }
  /* ---- retheme of the older pieces, by override ---- */
  #stnTag { background:#0e4f8f; border:2px solid rgba(255, 255, 255, 0.9);
    border-radius:6px; color:#fff;
    font:800 15px/1 'Outfit', 'Segoe UI', Arial, sans-serif; }
  #introCard { background:var(--bxP); border:1px solid var(--bxL);
    border-radius:14px;
    backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
    box-shadow:0 16px 56px rgba(0, 0, 0, 0.38); color:var(--bxI); }
  #introCard h2::after { content:''; display:block; width:26px; height:2px;
    margin-top:10px; background:var(--bxA); border-radius:1px; }
  #introCard h2 { color:#fff; letter-spacing:0.05em; }
  #introCard p { color:rgba(236, 229, 216, 0.88); }
  #introHint { color:var(--bxA); opacity:0.85; }
  #introBarTrack { background:rgba(245, 235, 215, 0.12); }
  #introBar { background:linear-gradient(#f6d76b, #f2c400); }
  @media (max-width: 640px){
    /* intro card: a bottom sheet floating clear of the joystick */
    #introCard { top:calc(132px + 10vh + env(safe-area-inset-top, 0px));
      left:auto; right:12px; transform:translate(0, -18px);
      width:min(70vw, 300px); padding:14px 18px 11px 16px;
      border-radius:14px; }
    #introCard.show { transform:translate(0, 0); }
    #introCard h2 { font-size:19px; margin-bottom:7px; }
    #introCard p { font-size:12.5px; line-height:1.55; margin-bottom:8px; }
    #introHint { font-size:9.5px; letter-spacing:0.12em; }
    #introBarTrack { right:8px; top:12px; bottom:12px; width:2.5px; }
    /* skill collect card: higher and compact, road stays visible */
    #skillPop { width:80vw; top:26%; padding:14px 14px 12px; border-radius:14px;
      box-sizing:border-box; }
    #skillPop .st9 { font-size:19px; }
    #skillPop .sg { font-size:19px; letter-spacing:0.12em; }
    #skillPop .chips { gap:6px; margin-top:10px; }
    #skillPop .ch { font-size:10.5px; padding:4px 10px; }
    #skillPop .sc { font-size:8px; letter-spacing:0.26em; margin-top:10px; }
    #stopCard { width:92vw; padding:18px 16px 13px; font-size:12px;
      box-sizing:border-box; }
    #stopCard h4 { font-size:20px; }
    #projCard { right:10px; left:auto; top:50%; bottom:auto;
      width:min(320px, 78vw); padding:15px 16px; box-sizing:border-box; }
    #projCard h4 { font-size:17px; }
    #wallNav { bottom:calc(48px + env(safe-area-inset-bottom, 0px)); gap:10px; }
    #wallNav button { width:50px; height:50px; font-size:24px; }
    #wallNav .wmid { margin:0 8px; }
      #skillList { right:12px; }
    #skillList .si { margin:9px 0; gap:9px; }
    #skillList .si i { width:18px; flex:0 0 18px; height:4px; }
    #skillList .si .sst span { font-size:9.5px; }
    #skillList .si span { font-size:11.5px; }
    #expList { right:12px; }
    #progTag { left:14px; bottom:calc(118px + env(safe-area-inset-bottom, 0px)); }
    #expList .ei { margin:10px 0; gap:9px; }
    #expList .ei i { width:18px; flex:0 0 18px; height:4px; }
    #expList .ei svg.ea { width:15px; height:11px; flex:0 0 15px; }
    #expList .ei span { font-size:11px; }
    #stnTag { font-size:12px; letter-spacing:0.3em; padding:8px 12px 8px 16px;
      bottom:12%; }
    /* chrome: safe-area aware, bigger touch labels */
    #topNav { left:calc(4px + env(safe-area-inset-left, 0px)); top:8px; gap:0; }
    #topNav .ni { padding:8px 7px 7px; }
    #topNav .ni svg { width:24px; height:24px; }
    #topNav .ni em { font-size:8px; letter-spacing:0.14em; }
    #topNav .nh { width:46px; }
    #sndBtn { left:calc(6px + env(safe-area-inset-left, 0px)); top:74px; width:46px; }
    #title { top:24px; width:94vw; }
    #title h1 { font-size:26px; }
    #title p { font-size:9px; letter-spacing:0.09em; line-height:1.7;
      padding:0 12px; }
    #title p .sep { padding:0 5px; }
    #joy { left:calc(20px + env(safe-area-inset-left, 0px));
      bottom:calc(20px + env(safe-area-inset-bottom, 8px)); }
    #fpsMeter { right:8px; font-size:10px; }
  }
  @media (max-width: 640px){
    /* the card grows out of the right-edge handle (right center origin)
       and collapses back into it */
    #projCard { transform-origin:100% 50%;
      transform:translateY(-50%) translateX(24px) scale(0.06);
      transition:opacity 0.32s ease,
        transform 0.44s cubic-bezier(0.3, 1.06, 0.35, 1); }
    #projCard.show { transform:translateY(-50%) translateX(0) scale(1); }
  }
  /* ---- loading screen: the trip begins at the depot ---- */
  #loader {
    position:fixed; inset:0; z-index:200;
    background:radial-gradient(120% 95% at 50% 18%, #172452 0%, #0d1b3d 48%, #090d1e 100%);
    display:flex; flex-direction:column; align-items:center; justify-content:center;
    transition:opacity 0.7s ease; pointer-events:none;
  }
  #ldGate { width:min(230px, 56vw); opacity:0.9;
    filter:drop-shadow(0 0 14px rgba(242, 196, 0, 0.18)); }
  #ldGate path, #ldGate circle {
    stroke-dasharray:1; stroke-dashoffset:1;
    animation:ldDraw 1.5s cubic-bezier(0.4, 0, 0.25, 1) forwards; }
  #ldGate path:nth-child(n+8), #ldGate circle { animation-delay:0.45s; }
  #ldGate path:nth-child(n+10) { animation-delay:0.8s; }
  @keyframes ldDraw { to { stroke-dashoffset:0; } }
  /* once drawn, a warm gleam keeps running along the lines: never still */
  #ldGate .gl path, #ldGate .gl circle { stroke:#fff3c4; stroke-width:2.6;
    stroke-dasharray:0.14 0.86; stroke-dashoffset:0.14; opacity:0;
    animation:ldGleam 2.4s linear 2.3s infinite; }
  #ldGate .gl path:nth-child(even) { animation-delay:2.9s; }
  @keyframes ldGleam { 0% { stroke-dashoffset:0.14; opacity:0; }
    10% { opacity:0.95; } 85% { opacity:0.95; }
    100% { stroke-dashoffset:-0.86; opacity:0; } }
  #loader .ln { margin-top:22px;
    font:400 30px/1 'Fraunces', Georgia, 'Times New Roman', serif; color:#f2e2c4;
    letter-spacing:0.08em; padding-left:0.08em; }
  #loader .ls { font:600 10px/1 'Outfit', 'Segoe UI', Arial, sans-serif; color:#8fa0c8;
    letter-spacing:0.46em; padding-left:0.46em; margin-top:13px; }
  /* the U-line: five stations of the trip, a train shuttling along it */
  #ldLine { position:relative; width:min(430px, 82vw); height:4px;
    margin-top:58px; border-radius:2px; background:rgba(236, 229, 216, 0.14); }
  #ldLine .lf { position:absolute; inset:0; border-radius:2px;
    background:linear-gradient(90deg, #f2c400, #f6d76b);
    transform-origin:0 50%; transform:scaleX(var(--p, 0)); }
  #ldLine .tr { position:absolute; top:50%; left:0; width:22px; height:11px;
    border-radius:4px; background:#f2c400; transform:translate(-50%, -50%);
    box-shadow:0 0 12px rgba(242, 196, 0, 0.55);
    left:calc(var(--p, 0) * 100%); }
  #ldLine .tr::after { content:''; position:absolute; left:4px; right:4px; top:2.5px;
    height:3px; border-radius:1.5px; background:rgba(13, 17, 34, 0.75); }
  #ldLine .st { position:absolute; top:50%; }
  #ldLine .s0 { left:0; } #ldLine .s1 { left:25%; } #ldLine .s2 { left:50%; }
  #ldLine .s3 { left:75%; } #ldLine .s4 { left:100%; }
  #ldLine .st b { position:absolute; left:0; top:0; width:9px; height:9px;
    transform:translate(-50%, -50%); border-radius:50%;
    background:#0d1b3d; border:2px solid rgba(236, 229, 216, 0.35);
    transition:background 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease; }
  #ldLine .st.on b { background:#f2c400; border-color:#f2c400;
    box-shadow:0 0 8px rgba(242, 196, 0, 0.5); }
  #ldLine .st.on em { color:rgba(242, 226, 196, 0.9); }
  #ldLine .st em { position:absolute; left:0; transform:translateX(-50%);
    white-space:nowrap; font:600 8.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    font-style:normal; letter-spacing:0.18em; text-transform:uppercase;
    color:rgba(236, 229, 216, 0.55); }
  #ldLine .st:nth-child(odd) em { top:13px; }
  #ldLine .st:nth-child(even) em { bottom:13px; }
  #loader .lh { margin-top:56px; font:500 10px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.3em; padding-left:0.3em; color:rgba(143, 160, 200, 0.75);
    animation:ldBreath 2.4s ease-in-out infinite; }
  @keyframes ldBreath { 0%, 100% { opacity:0.55; } 50% { opacity:1; } }
  @media (max-width: 640px){
    #ldLine { width:86vw; margin-top:52px; }
    #ldLine .st em { font-size:7px; letter-spacing:0.12em; }
    #ldLine .s0 em { transform:translateX(-12%); }
    #ldLine .s4 em { transform:translateX(-88%); }
  }
  #joy { position:fixed; left:calc(26px + env(safe-area-inset-left, 0px));
    bottom:calc(26px + env(safe-area-inset-bottom, 6px));
    width:75px; height:75px; border-radius:50%; z-index:150;
    border:1.5px solid rgba(255, 255, 255, 0.4);
    background:rgba(255, 255, 255, 0.09); display:none;
    backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px);
    opacity:0.45; transition:opacity 0.25s ease;
    touch-action:none; }
  #joy.on { display:block; }
  #joy.live { opacity:1; }
  #joy.joyoff { display:none !important; }
  #joyKnob { position:absolute; left:50%; top:50%; width:36px; height:36px;
    margin:-18px 0 0 -18px; border-radius:50%;
    background:rgba(255, 255, 255, 0.38); border:1.5px solid rgba(255, 255, 255, 0.55);
    transition:background 0.15s ease; }
  #joy.live #joyKnob { background:rgba(242, 196, 0, 0.55); border-color:var(--bxA); }
  .jcw-ring { background:none !important; border:none !important;
    box-shadow:none !important; }
  .jcw-knob { background:rgba(255, 255, 255, 0.38) !important;
    border:1.5px solid rgba(255, 255, 255, 0.55) !important; }
  #fpsMeter { display:none; position:fixed; right:10px; bottom:calc(6px + env(safe-area-inset-bottom, 2px)); z-index:240;
    font:600 11px/1 'SF Mono', Menlo, Consolas, monospace; color:#7dffa8;
    background:rgba(10, 10, 16, 0.55); padding:7px 9px; border-radius:7px;
    pointer-events:auto; cursor:pointer; touch-action:manipulation;
    text-shadow:0 1px 3px rgba(0,0,0,0.8); }
  #scrollHint {
    position:fixed; left:50%; bottom:30px; transform:translateX(-50%);
    z-index:40; pointer-events:none; text-align:center;
    font:500 10.5px/1.6 'Outfit', 'Segoe UI', Arial, sans-serif; color:#f2e2c4;
    letter-spacing:0.24em; padding-left:0.24em; opacity:0;
    transition:opacity 0.8s ease;
    animation:hintPulse 2.4s ease-in-out 2.5s infinite;
  }
  #scrollHint .ar { display:block; font-size:15px; letter-spacing:0;
    padding-left:0; margin-top:2px; }
  #scrollHint .dg { display:inline-block; width:16px; height:26px; margin-right:11px;
    vertical-align:-8px; position:relative;
    border:1.5px solid rgba(245, 240, 228, 0.55); border-radius:9px; }
  #scrollHint .dg i { position:absolute; left:50%; width:5px; height:5px;
    margin-left:-2.5px; border-radius:50%; background:#f2e2c4;
 }
  @keyframes dgSwipe {
    0%       { top:16px; opacity:0; }
    22%      { top:14px; opacity:0.95; }
    62%      { top:4px;  opacity:0.95; }
    82%,100% { top:4px;  opacity:0; } }
  #scrollHint .dg i { animation:dgDown 1.7s ease-in-out infinite; }
  @keyframes dgDown {
    0%       { top:16px; opacity:0; }
    22%      { top:14px; opacity:0.95; }
    62%      { top:4px;  opacity:0.95; }
    82%,100% { top:4px;  opacity:0; } }
  #scrollHint .arl { display:inline-block; margin-left:10px; font-size:13px;
    letter-spacing:0; animation:arlNudge 1.7s ease-in-out infinite; }
  @keyframes arlNudge { 0%, 100% { transform:translateX(0); }
    50% { transform:translateX(-5px); } }
  @keyframes hintPulse { 0%,100% { opacity:0.35; } 50% { opacity:0.95; } }
  #jumpEndBtn {
    position:fixed; left:12px; bottom:12px; z-index:60; cursor:pointer;
    font:11px monospace; color:#cfe8ff; background:rgba(10,12,24,0.55);
    border:1px solid rgba(255,255,255,0.2); border-radius:8px; padding:7px 12px;
  }
  #jumpEndBtn:hover { background:rgba(30,36,60,0.75); }
  #rideDebug {
    position:fixed; right:12px; top:12px; z-index:60; pointer-events:none;
    font:11px/1.6 monospace; color:#cfe8ff; white-space:pre;
    background:rgba(10,12,24,0.55); border:1px solid rgba(255,255,255,0.15);
    border-radius:8px; padding:8px 11px; text-shadow:0 1px 2px #000;
  }

  /* ==== WALL CONTROLS (consolidated b245) ====
     side arrows retired for now; last design was 150px dark quarter-circle
     bumps flush to the screen edges - restore by giving the buttons a
     display again */
  #wallNav { position:fixed; inset:0; pointer-events:none; z-index:47; }
  #wallNav[hidden], #wallNav button, #wallNav .wmid { display:none; }
  /* the More pill: dark glass, pinned under the focused mural */
  #wallCta { position:fixed; left:0; top:0; transform:translate(-50%, -50%);
    z-index:49; cursor:pointer; display:flex; align-items:center; gap:7px;
    padding:11px 17px 11px 21px; border-radius:999px;
    background:rgba(14, 12, 18, 0.15);
    border:1px solid rgba(255, 255, 255, 0.17);
    backdrop-filter:blur(20px) saturate(160%);
    -webkit-backdrop-filter:blur(20px) saturate(160%);
    color:rgba(240, 235, 226, 0.92);
    box-shadow:0 6px 20px rgba(22, 18, 28, 0.22);
    font:600 12.5px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.015em;
    transition:background 0.2s ease, border-color 0.2s ease,
      color 0.2s ease; }
  #wallCta[hidden] { display:none; }
  #wallCta svg { width:15px; height:15px; display:block;
    transition:transform 0.28s cubic-bezier(0.3, 1.2, 0.4, 1); }
  #wallCta.open svg { transform:rotate(180deg); }
  #wallCta:hover { background:rgba(14, 12, 18, 0.42);
    border-color:rgba(255, 255, 255, 0.34); color:#fff; }
  /* mobile: the More control is a handle attached to the right screen edge
     (like a drawer pull); the card expands out of that same spot */
  #wallCta.tab { left:auto; right:0; top:50%;
    transform:translate(0, -50%); padding:17px 8px 17px 11px;
    border-radius:14px 0 0 14px; gap:0;
    background:var(--bxP); border:1px solid var(--bxL); border-right:none;
    backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
    box-shadow:-6px 0 24px rgba(0, 0, 0, 0.28); }
  #wallCta.tab svg { display:none; }
  #wallCta.tab #wallCtaLb { writing-mode:vertical-rl; text-orientation:mixed;
    font:700 10px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.32em; text-transform:uppercase; color:var(--bxI); }
  /* collapse handle on the expanded card's left edge: arrow points back
     toward the right edge the card came from */
  #projCollapse { position:absolute; left:-29px; top:50%;
    transform:translateY(-50%); width:30px; height:60px;
    border-radius:12px 0 0 12px; border:1px solid var(--bxL);
    border-right:none; background:var(--bxP);
    backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
    color:var(--bxI); cursor:pointer;
    display:flex; align-items:center; justify-content:center; padding:0; }
  #projCollapse svg { width:15px; height:15px; display:block; }
  /* the Let's talk sheet: Berlin Nacht glass (same system as the skill
     popup), slides in from the bottom */
  #wallLinks { position:fixed; left:50%; bottom:0;
    transform:translate(-50%, 108%); z-index:49;
    display:flex; flex-direction:column; gap:13px; align-items:center;
    background:var(--bxP);
    border:1px solid var(--bxL); border-bottom:none;
    border-radius:18px 18px 0 0;
    padding:19px 30px calc(24px + env(safe-area-inset-bottom, 0px));
    backdrop-filter:blur(16px);
    -webkit-backdrop-filter:blur(16px);
    box-shadow:0 -16px 56px rgba(0, 0, 0, 0.38);
    color:var(--bxI);
    transition:transform 0.5s cubic-bezier(0.22, 0.9, 0.3, 1); }
  #wallLinks.up { transform:translate(-50%, 0); }
  #wallLinks .wlh { font:800 9px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.34em; padding-left:0.34em;
    color:var(--bxA); }
  #wallLinks .wlr { display:flex; gap:10px; flex-wrap:wrap;
    justify-content:center; }
  .wlb { display:flex; align-items:center; gap:9px; padding:11px 18px;
    border-radius:999px; background:rgba(245, 235, 215, 0.06);
    border:1px solid var(--bxL);
    color:var(--bxI); text-decoration:none;
    font:700 11px 'Outfit', 'Segoe UI', Arial, sans-serif;
    letter-spacing:0.07em;
    transition:color 0.2s ease, background 0.2s ease,
      border-color 0.2s ease; }
  .wlb:hover { background:rgba(242, 196, 0, 0.12);
    border-color:rgba(242, 196, 0, 0.45); color:#fff; }
  .wlb svg { width:16px; height:16px; display:block; fill:currentColor; }
  .wlb.wlcv { background:var(--bxA); border-color:var(--bxA);
    color:#171410; }
  .wlb.wlcv svg.dn { width:15px; height:15px; }
  .wlb.wlcv:hover { background:#f6d76b; color:#171410; }
  @media (max-width: 640px){
    #wallCta { padding:10px 15px 10px 18px; font-size:12px; }
    #wallLinks { width:calc(100vw - 20px); box-sizing:border-box;
      padding:16px 14px calc(18px + env(safe-area-inset-bottom, 0px)); }
    .wlb { padding:10px 14px; font-size:10.5px; }
  }
