/* ═══════════════════════════════════════════════════════════════════
   SITHIYAM · THE ISLAND — lane-b-island.css (D2 kit)
   Page-scoped, hosted as a Webflow asset + <link>. NEVER author these as Webflow styles —
   this is tokens/reset/keyframes/media + everything that lives inside JS-created or
   runtime-injected SVG/DOM (no real canvas element exists for a Designer to select).
   Mirrors home's lane-b-vN.css pattern exactly (see Website Redesign/HANDOVER.md M0 state).
   ═══════════════════════════════════════════════════════════════════ */

/* ============ TOKENS (shared v5 block, verbatim — GOVERNANCE §6.5) ============ */
:root{
  --paper:oklch(0.969 0.012 84); --paper-2:oklch(0.946 0.015 80); --paper-3:oklch(0.912 0.018 77);
  --paper-live:oklch(0.969 0.012 84);
  --ink:oklch(0.205 0.018 56);   --ink-2:oklch(0.44 0.022 58);
  --line:oklch(0.205 0.018 56 / .16); --line-2:oklch(0.205 0.018 56 / .08);
  --accent:oklch(0.70 0.115 73); --accent-ink:oklch(0.42 0.115 60);
  --terra:oklch(0.63 0.135 44);  --tea:oklch(0.52 0.072 156);
  --night:oklch(0.205 0.02 58);  --night-2:oklch(0.25 0.022 60); --bone:oklch(0.93 0.014 82);
  --pencil:oklch(0.36 0.06 58);
  --f-display:"Bricolage Grotesque",sans-serif; --f-serif:"Instrument Serif",serif;
  --f-mono:"JetBrains Mono",monospace; --f-hand:"La Belle Aurore",cursive; --f-scrawl:"Caveat",cursive;
  --f-sinh:"Noto Serif Sinhala",serif;
  --ease:cubic-bezier(.22,1,.36,1); --slow:cubic-bezier(.16,1,.3,1);
  --gutter:clamp(20px,5vw,84px);
  --lamp:0;
  /* aliases: island-cms.js accents -> v5 tokens (data file untouched, per GOVERNANCE §6.5) */
  --gold:var(--accent); --green:var(--tea);
}
*{margin:0;padding:0;box-sizing:border-box}
html body{background:var(--paper);color:var(--ink);font-family:var(--f-display);overflow-x:hidden}
::selection{background:var(--accent);color:var(--night)}
img{display:block;max-width:100%} a{color:inherit;text-decoration:none}
button{font:inherit;background:none;border:0;cursor:pointer;color:inherit}

/* ============ KEYFRAMES ============ */
@keyframes writein{0%{clip-path:inset(-20% 102% -20% -2%);opacity:1}100%{clip-path:inset(-20% -2% -20% -2%);opacity:1}}
@keyframes twinkle{20%{opacity:.9}60%{opacity:.15}}
@keyframes fade{to{opacity:1}}
@keyframes rise{to{transform:translateY(0)}}
@keyframes dash620{to{stroke-dashoffset:0}}
@keyframes rosedraw{to{stroke-dashoffset:0}}
@keyframes dockin{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
@keyframes wavebob{0%,100%{transform:translateY(0)}50%{transform:translateY(3px)}}
@keyframes pinpulse{0%{transform:scale(1);opacity:.75}100%{transform:scale(2.5);opacity:0}}
@keyframes ringdraw{to{stroke-dashoffset:0}}
@keyframes needlesway{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(6deg)}}

/* ============ DOCK MODE VISIBILITY (JS toggles .m-browse/.m-place/.m-tour on #dock;
   the 3 named children swap via id, not class — a pure state mechanism, lane-b) ============ */
.isl-dock>*{display:none}
.isl-dock.m-browse #dockBrowse{display:flex}
.isl-dock.m-place #flyout{display:block;animation:dockin .45s var(--slow)}
.isl-dock.m-tour #tourbar{display:flex;animation:dockin .45s var(--slow)}

/* ============ TYPE PILLS + CHIPS (100% JS-created into #toolTypes/#toolChips at boot —
   Object.keys(D.TYPES).forEach()/chipGroup() — no real canvas element to select) ============ */
.isl-typepill{display:inline-flex;align-items:center;gap:9px;border:1px solid var(--line);border-radius:100px;padding:9px 14px;transition:opacity .3s var(--ease),border-color .3s var(--ease)}
.isl-typepill:hover{border-color:var(--ink-2)}
.isl-typepill .sw{width:10px;height:10px;flex:none;background:var(--c);border:1px solid var(--ink);transition:background .25s}
.isl-typepill[data-glyph="circle"] .sw{border-radius:50%}
.isl-typepill[data-glyph="diamond"] .sw{transform:rotate(45deg);border-radius:2px}
.isl-typepill[data-glyph="square"] .sw{border-radius:2px}
.isl-typepill b{font-size:.78rem;font-weight:600}
.isl-typepill .n{font-family:var(--f-mono);font-size:.56rem;letter-spacing:.1em;color:var(--ink-2)}
.isl-typepill.off{opacity:.4;border-style:dashed}
.isl-typepill.off .sw{background:transparent}
.isl-chipgrp{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.isl-chipgrp .gl{font-family:var(--f-mono);font-size:.54rem;letter-spacing:.18em;color:var(--ink-2);margin-right:3px}
.isl-chip{font-family:var(--f-mono);font-size:.55rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);border:1px solid var(--line);border-radius:100px;padding:6px 10px;transition:all .25s var(--ease)}
.isl-chip:hover{border-color:var(--ink-2)}
.isl-chip.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}
/* #count's innerHTML is fully overwritten by applyFilters() from boot onward */
.isl-count b{color:var(--ink)}

/* ============ decorative hairline (post-insert pseudo at D3, kept here for reference) ============ */
.isl-nav-link::after{content:"";position:absolute;left:0;bottom:-4px;width:0;height:1px;background:var(--accent-ink);transition:width .35s var(--ease)}
.isl-nav-link:hover::after{width:100%}
.isl-nav-link.is-here::after{width:100%;background:var(--accent)}

/* ============ #starfield i (JS-created stars) ============ */
#starfield i{position:absolute;width:2px;height:2px;border-radius:50%;background:var(--bone);animation:twinkle 3.8s infinite}
body.has-cur, body.has-cur *{cursor:none!important}

/* ============ tripclock inner SVG (static, injected at runtime via isl-svg-islands.js) ============ */
.isl-tripclock .arcpath{fill:none;stroke:var(--line);stroke-width:1}
.isl-tripclock .orb{fill:var(--accent)}
body.is-night-mode .isl-tripclock .orb{fill:var(--bone)}

/* ============ hero compass rose (static, injected at runtime) ============ */
.isl-rose .rc{fill:none;stroke:var(--pencil);stroke-width:1.6;filter:url(#roughM);stroke-dasharray:660;stroke-dashoffset:660;animation:rosedraw 1.6s .5s var(--slow) forwards}
.isl-rose .rc2{stroke-width:1;opacity:.35;animation-delay:.8s}
.isl-rose .rt{stroke:var(--pencil);stroke-width:1.2;opacity:0;animation:fade .6s 1.7s var(--ease) forwards}
.isl-rose .rn{fill:var(--accent-ink);opacity:0;animation:fade .7s 1.5s var(--ease) forwards}
.isl-rose .rs{fill:none;stroke:var(--pencil);stroke-width:1.2;opacity:0;animation:fade .7s 1.6s var(--ease) forwards}
.isl-rose text{font-family:var(--f-mono);font-size:12px;letter-spacing:.1em;fill:var(--ink-2);opacity:0;animation:fade .6s 1.8s var(--ease) forwards}
.isl-fig-doodle path{fill:none;stroke:var(--pencil);stroke-width:1.4;stroke-linecap:round;opacity:.55;filter:url(#roughM)}

/* ============ THE CHART (100% JS-built into an empty <svg id="chart">) ============ */
#chart .gridl{stroke:var(--line-2);stroke-width:1;fill:none}
#chart .gridt{font-family:var(--f-mono);font-size:11px;letter-spacing:.2em;fill:var(--ink-2);opacity:.4}
#chart .isle-fill{fill:var(--paper-2);opacity:0;transition:opacity 1.2s var(--ease) .3s}
#chart.live .isle-fill{opacity:.8}
#chart .isle{fill:none;stroke:var(--pencil);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;filter:url(#roughM)}
#chart .isle2{fill:none;stroke:var(--pencil);stroke-width:1;opacity:.26;transform:translate(3px,2px);filter:url(#roughM)}
#chart .deco{opacity:0;transition:opacity 1s var(--ease) .9s}
#chart.live .deco{opacity:1}
#chart .hillmark{stroke:var(--pencil);stroke-width:1.2;fill:none;opacity:.3}
#chart .wave{stroke:var(--pencil);stroke-width:1;fill:none;opacity:.22;transform-box:fill-box;animation:wavebob 6s ease-in-out infinite}
#chart .bird{stroke:var(--pencil);stroke-width:1.3;fill:none;opacity:.45;transform-box:fill-box;animation:wavebob 4.5s ease-in-out infinite}
#chart .railln{stroke:var(--pencil);stroke-width:1.3;fill:none;opacity:.5}
#chart .railtick{stroke:var(--pencil);stroke-width:1;opacity:.45}
#chart .roadln{stroke:var(--pencil);stroke-width:1.2;fill:none;opacity:.3;stroke-dasharray:5 7}
#chart .regl{font-family:var(--f-mono);font-size:12px;letter-spacing:.34em;fill:var(--ink-2);opacity:.35;transition:opacity .5s var(--ease),fill .3s}
#chart .regl.hot{opacity:.95;fill:var(--accent-ink)}
#chart .seanote{font-family:var(--f-hand);font-size:16px;fill:var(--pencil);opacity:.55;transition:opacity .5s var(--ease)}
#chart.z-near .regl,#chart.z-near .seanote{opacity:0}
#chart .trail{fill:none;stroke:var(--accent-ink);stroke-width:2;stroke-linecap:round;filter:url(#roughM)}
#chart .trail.roadleg{stroke-dasharray:none}
#chart .trail.roadleg.done{stroke-dasharray:6 8}
#chart .trailtick{stroke:var(--accent-ink);stroke-width:1.2;opacity:0;transition:opacity .5s var(--ease)}
#chart .trailtick.on{opacity:.8}
#chart .pin{cursor:pointer}
#chart .pin .hit{fill:transparent;pointer-events:all}
#chart .pin .pop{opacity:0;transition:opacity .45s var(--ease),transform .45s var(--slow);transform:scale(0) rotate(-8deg)}
#chart .pin.in .pop{opacity:1;transform:scale(1) rotate(0deg)}
#chart .pin.dim{opacity:.13;pointer-events:none}
#chart .pin .halo{fill:var(--paper);opacity:.72}
#chart .pin .glyph{stroke:var(--ink);stroke-width:1.3;transition:transform .3s var(--slow)}
#chart .pin:hover .glyph{transform:scale(1.25)}
#chart .pin .plab{font-family:var(--f-hand);font-size:15px;fill:var(--pencil);paint-order:stroke;stroke:var(--paper);stroke-width:3px;opacity:0;transition:opacity .35s var(--ease);pointer-events:none}
#chart .pin.lbl .plab,#chart.z-near .pin .plab,#chart .pin:hover .plab,#chart .pin.sel .plab{opacity:1}
#chart .pin .pulse{fill:none;stroke:var(--accent-ink);stroke-width:1.2;opacity:0;pointer-events:none;transform-box:fill-box;transform-origin:center}
#chart .pin:hover .pulse{animation:pinpulse 1.1s ease-out infinite}
#chart .pin .ring{fill:none;stroke:var(--accent-ink);stroke-width:1.7;opacity:0;filter:url(#roughM);pointer-events:none}
#chart .pin.sel .ring{opacity:.9;stroke-dasharray:130;stroke-dashoffset:130;animation:ringdraw .7s var(--slow) forwards}

/* ============ sheet furniture SVG internals (static, injected at runtime) ============ */
.isl-stamp circle{fill:none;stroke:var(--accent-ink);stroke-width:1.4}
.isl-stamp .st-si{font-family:var(--f-sinh);font-size:16px;fill:var(--accent-ink)}
.isl-stamp .st-en{font-family:var(--f-mono);font-size:6.5px;letter-spacing:.24em;fill:var(--accent-ink)}
.isl-compass path,.isl-compass circle,.isl-compass line{stroke:var(--pencil);fill:none;stroke-width:1.1}
.isl-compass .np{fill:var(--pencil);transform-box:fill-box;transform-origin:center 65%;animation:needlesway 7s ease-in-out infinite}
.isl-compass text{font-family:var(--f-mono);font-size:9px;fill:var(--pencil)}
.isl-lm .s{width:9px;height:9px;background:var(--c);border:1px solid var(--ink)}
.isl-lm .s.circle{border-radius:50%}
.isl-lm .s.diamond{transform:rotate(45deg);border-radius:1px}

/* ============ PLACE CARD (JS templates this whole subtree into #flyout on openCard()) ============ */
.isl-fly-back{display:flex;align-items:center;gap:8px;width:100%;text-align:left;font-family:var(--f-mono);font-size:.56rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-2);padding:11px 16px;border-bottom:1px solid var(--line-2);transition:color .25s}
.isl-fly-back:hover{color:var(--ink)}
.isl-fly-img{position:relative;aspect-ratio:16/10;max-height:235px;background:var(--paper-2);overflow:hidden}
.isl-fly-img image-slot,.isl-fly-img img{position:absolute;inset:0;display:block;width:100%;height:100%}
.isl-tape{position:absolute;z-index:3;top:-7px;left:50%;width:78px;height:20px;transform:translateX(-50%) rotate(-2deg);background:oklch(0.93 0.03 84/.8);border-left:1px dashed oklch(0.205 0.018 56/.2);border-right:1px dashed oklch(0.205 0.018 56/.2)}
.isl-fly-badge{position:absolute;z-index:2;left:10px;top:10px;display:inline-flex;align-items:center;gap:6px;font-family:var(--f-mono);font-size:.54rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink);background:oklch(0.969 0.012 84/.9);padding:5px 10px;border-radius:100px}
.isl-fly-badge .d{width:8px;height:8px;background:var(--c);border:1px solid var(--ink)}
.isl-fly-badge[data-glyph="circle"] .d{border-radius:50%}
.isl-fly-badge[data-glyph="diamond"] .d{transform:rotate(45deg);border-radius:1px}
.isl-fly-close{position:absolute;z-index:3;right:10px;top:10px;width:28px;height:28px;display:grid;place-items:center;background:oklch(0.969 0.012 84/.9);border-radius:50%;color:var(--ink);transition:transform .3s var(--slow)}
.isl-fly-close:hover{transform:rotate(90deg)}
.isl-fly-kick{position:absolute;z-index:2;left:12px;bottom:10px;font-family:var(--f-scrawl);font-size:19px;color:var(--paper);text-shadow:0 1px 8px oklch(0.205 0.018 56/.6);transform:rotate(-2deg)}
.isl-fly-body{padding:13px 16px 15px}
.isl-fly-body h3{font-size:1.32rem;letter-spacing:-.02em;line-height:1.05;font-weight:700}
.isl-fly-grid{display:block;font-family:var(--f-mono);font-size:.56rem;letter-spacing:.16em;text-transform:uppercase;color:var(--accent-ink);margin-top:7px}
.isl-fly-meta{display:block;font-family:var(--f-mono);font-size:.56rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);margin-top:4px}
.isl-fly-body p{font-size:.86rem;line-height:1.55;color:var(--ink-2);margin-top:9px}
.isl-fly-themes{display:flex;flex-wrap:wrap;gap:5px;margin-top:10px}
.isl-fly-themes .t{font-family:var(--f-mono);font-size:.52rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-2);border:1px solid var(--line);border-radius:100px;padding:4px 9px}
.isl-fly-season{margin-top:11px;padding-top:10px;border-top:1px solid var(--line-2)}
.isl-fly-season .sh{display:flex;justify-content:space-between;align-items:baseline}
.isl-fly-season .sl{font-family:var(--f-mono);font-size:.54rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-2)}
.isl-fly-season .sv{font-family:var(--f-hand);font-size:15px;color:var(--pencil)}
.isl-fly-months{display:flex;gap:3px;margin-top:8px}
.isl-fly-months .mo{flex:1;text-align:center;font-family:var(--f-mono);font-size:.56rem;color:var(--ink-2);opacity:.36;padding:4px 0;border-radius:4px}
.isl-fly-months .mo.on{opacity:1;color:var(--accent-ink);background:oklch(0.70 0.115 73/.16)}
.isl-fly-near{margin-top:11px;padding-top:10px;border-top:1px solid var(--line-2)}
.isl-fly-near .sl{font-family:var(--f-mono);font-size:.54rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-2)}
.isl-fly-near .row{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.isl-near{display:inline-flex;align-items:center;gap:7px;font-size:.8rem;color:var(--ink);border:1px solid var(--line);border-radius:100px;padding:6px 12px;transition:border-color .25s}
.isl-near:hover{border-color:var(--ink-2)}
.isl-near .nd{width:8px;height:8px;background:var(--c);border:1px solid var(--ink)}
.isl-near[data-glyph="circle"] .nd{border-radius:50%}
.isl-near[data-glyph="diamond"] .nd{transform:rotate(45deg);border-radius:1px}
.isl-fly-foot{display:flex;justify-content:space-between;align-items:center;margin-top:12px;padding-top:10px;border-top:1px solid var(--line-2)}
.isl-fly-nav{display:flex;gap:6px}
.isl-fly-nav button{width:30px;height:30px;display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;color:var(--ink);transition:transform .25s var(--slow),border-color .25s}
.isl-fly-nav button:hover{transform:translateY(-2px);border-color:var(--ink-2)}

/* ============ TOUR NARRATION (JS templates this into #tourbar) ============ */
#tourbar .t-count{font-family:var(--f-mono);font-size:.54rem;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-2)}
#tourbar .t-name{font-size:1.5rem;font-weight:700;letter-spacing:-.02em;line-height:1}
#tourbar .t-line{font-family:var(--f-hand);font-size:19px;color:var(--pencil);line-height:1.35}
#tourbar .t-dots{display:flex;gap:6px}
#tourbar .td{width:8px;height:8px;border-radius:50%;border:1px solid var(--ink-2);cursor:pointer;transition:background .3s}
#tourbar .td.on{background:var(--accent-ink);border-color:var(--accent-ink)}
#tourbar .t-controls{display:flex;gap:8px}
#tourbar .t-btn{width:34px;height:34px;display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;color:var(--ink);transition:transform .25s var(--slow)}
#tourbar .t-btn:hover{transform:translateY(-2px)}
#tourbar .t-btn svg{fill:currentColor}
#tourbar .t-open{text-align:left}

/* ============ GAZETTEER CARDS — promoted to native Collection List styles (see native/
   03-gazetteer-shell.css). Only the ancestor-hover-affects-child polish (not reducible to a
   single flat Webflow class) and the onchart icon's own hover/transition stay here: ============ */
.isl-card:hover .isl-card-thumb{transform:rotate(-.6deg) translateY(-4px)}
.isl-onchart svg{transition:transform .3s var(--slow)}
.isl-onchart:hover svg{transform:translateY(-2px)}

/* ============ BREAKPOINTS (source breakpoints kept verbatim) ============ */
@media (max-width:900px){
  .isl-hero{display:block;min-height:0;padding:calc(74px + 2vh) var(--gutter) 4vh}
  .isl-hero .isl-cart-h1{width:100%}
  .isl-hero-fig{display:none}
  .isl-spread{display:block;height:auto;min-height:0;padding:2vh var(--gutter) 8vh}
  .isl-sinh{position:static;display:inline-block;transform:rotate(-2deg);margin-top:10px;text-align:left}
  .isl-dock{overflow:visible;margin-bottom:14px}
  .isl-dock #dockBrowse{display:flex}
  #flyout{display:block;position:fixed;z-index:75;inset:auto 10px 10px 10px;max-height:58svh;overflow-y:auto;scrollbar-width:thin;background:var(--paper);border:1px solid var(--line);border-radius:14px;box-shadow:0 24px 60px oklch(0.205 0.018 56/.22);opacity:0;transform:translateY(110%);pointer-events:none;transition:opacity .45s var(--ease),transform .45s var(--slow);animation:none}
  #flyout.open{opacity:1;transform:translateY(0);pointer-events:auto}
  #tourbar{display:flex;position:fixed;z-index:75;inset:auto 10px 10px 10px;background:var(--paper);border:1px solid var(--line);border-radius:14px;box-shadow:0 24px 60px oklch(0.205 0.018 56/.22);opacity:0;transform:translateY(110%);pointer-events:none;transition:opacity .45s var(--ease),transform .45s var(--slow);animation:none}
  #tourbar.show{opacity:1;transform:translateY(0);pointer-events:auto}
  .isl-sheet{height:70svh;min-height:440px}
  .isl-sheetnote{display:none}
  .isl-instr{flex-direction:column;align-items:flex-end}
  .isl-compass{display:none}
  #trail,#cur,#curRing{display:none}
  .isl-grid{grid-template-columns:1fr}
  .isl-card.feature{grid-column:auto;grid-row:auto}
  .isl-card.feature .isl-card-thumb{aspect-ratio:4/3;min-height:0}
}
@media (max-width:600px){
  .isl-nav{padding:12px var(--gutter)}
  .isl-nav-right{gap:12px}
  .isl-nav-right a{display:none}
  .isl-tc-lbl{display:none}
  .isl-cart-h1{font-size:clamp(42px,11vw,64px)}
  .isl-sechead{margin-bottom:5vh}
  #tourbar{gap:9px;padding:14px}
  #tourbar .t-line{font-size:15px}
  .isl-scale{display:none}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001s!important;transition-duration:.001s!important}
}
