/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   Foyl Learn — Interior FX layer (tools, labs,
   scenarios, concepts, interview, reports).

   Companion to learn-fx-app.js. Deliberately lighter
   than the landing-page layer: no three.js, no orbs.
   Tools must stay snappy and readable — the motion
   here is dashboard choreography, not spectacle.
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ */

/* ── Brand signal line under the tool topbar ──
   A slow gradient sweep that ties every mock tool
   back to the foyl brand without touching the UI. */
#topbar::after{
  content:'';position:absolute;left:0;right:0;bottom:-1px;height:1px;
  pointer-events:none;opacity:.55;
  background:linear-gradient(90deg,
    transparent 0%, rgba(0,212,255,.0) 20%,
    rgba(0,212,255,.55) 35%, rgba(0,174,239,.45) 45%,
    rgba(0,137,123,.4) 55%, rgba(0,212,255,.0) 80%, transparent 100%);
  background-size:220% 100%;
  animation:fxa-sweep 9s linear infinite;
}
@keyframes fxa-sweep{
  from{background-position:220% 0}
  to{background-position:-120% 0}
}

/* ── Platform nav inside tool topbars ──
   Tools keep their own #topbar (tool functionality lives there),
   but the brand block and platform links are shared. Scoped under
   #topbar so tool sidebars (<nav id="sidebar">) are untouched.
   :where() keeps zero specificity so tools with position:fixed
   topbars keep it; static ones become the ::after/dropdown anchor. */
:where(#topbar){position:relative}
#topbar .tb-product{font-family:var(--mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--tx3);white-space:nowrap}
#topbar .nav-sep{width:1px;height:16px;background:var(--border2);margin:0 10px;flex-shrink:0}
#topbar .nav-links{display:flex;gap:2px;margin:0 auto 0 8px;flex:0 0 auto;overflow:visible}
#topbar .nav-link{font-family:var(--font);font-size:12.5px;font-weight:300;color:var(--tx3);text-decoration:none;
  padding:5px 11px;border-radius:5px;transition:color .12s,background .12s;white-space:nowrap}
#topbar .nav-link:hover{color:var(--tx2);background:var(--surf)}
#topbar .nav-link.here{color:var(--tx);background:var(--surf)}
#topbar .nav-more{position:relative}
#topbar .nav-more-btn{font-family:var(--font);font-size:12.5px;font-weight:300;color:var(--tx3);padding:5px 11px;
  border-radius:5px;transition:color .12s,background .12s;cursor:pointer;display:flex;align-items:center;gap:5px;
  user-select:none;white-space:nowrap;border:1px solid var(--border);background:var(--surf)}
#topbar .nav-more-btn:hover,#topbar .nav-more.open .nav-more-btn{color:var(--tx2);background:var(--surf)}
#topbar .nav-more-caret{font-size:10px;opacity:.5;transition:transform .15s}
#topbar .nav-more.open .nav-more-caret{transform:rotate(180deg)}
#topbar .nav-dropdown{position:absolute;top:calc(100% + 8px);left:0;min-width:200px;
  background:var(--bg2);border:1px solid var(--border2);border-radius:9px;
  padding:5px;box-shadow:0 16px 40px rgba(0,0,0,.7);
  opacity:0;pointer-events:none;transform:translateY(-6px);
  transition:opacity .15s,transform .15s;z-index:500}
#topbar .nav-more.open .nav-dropdown{opacity:1;pointer-events:all;transform:translateY(0)}
#topbar .nd-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:6px;
  text-decoration:none;color:var(--tx3);font-size:12.5px;transition:color .1s,background .1s}
#topbar .nd-item:hover{background:var(--surf);color:var(--tx2)}
#topbar .nd-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
#topbar .nd-sep{height:1px;background:var(--border);margin:4px 0}
#topbar .nd-ext{font-family:var(--mono);font-size:10px;letter-spacing:.06em;color:var(--tx4)}
#topbar .tb-right{margin-left:auto}
#topbar .tb-right:empty{display:none}
/* the instance chip absorbs the squeeze: truncate, never wrap the bar */
#topbar .tb-instance{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex-shrink:1}
/* make room progressively on narrower screens (links sized like the
   platform nav need a little more width than the old condensed set) */
@media(max-width:1360px){#topbar .tb-instance,#topbar .tb-context,#topbar .tb-ctx-chip{display:none}}
@media(max-width:1060px){#topbar .nav-links{display:none}}

/* ── Scroll progress bar (content pages, injected) ── */
.fx-progress{
  position:fixed;top:0;left:0;right:0;height:2px;z-index:900;
  pointer-events:none;
  background:linear-gradient(90deg,#00D4FF 0%,#00AEEF 35%,#00897B 65%,#005F87 100%);
  transform-origin:0 50%;transform:scaleX(0);
}

/* ── Cursor glow on tool panels / content cards ──
   learn-fx-app.js adds .fxa-glow and drives --mx/--my. */
.fxa-glow{position:relative}
.fxa-glow::after{
  content:'';position:absolute;inset:0;border-radius:inherit;
  pointer-events:none;opacity:0;transition:opacity .3s ease;
  background:radial-gradient(300px circle at var(--mx,50%) var(--my,50%),
    rgba(0,212,255,.06), rgba(0,174,239,.025) 40%, transparent 65%);
  z-index:1;
}
.fxa-glow:hover::after{opacity:1}

/* ── Guards: projector mode — no decoration, no motion ── */
[data-theme="projector"] #topbar::after{display:none}
[data-theme="projector"] .fx-progress{display:none}
[data-theme="projector"] .fxa-glow::after{display:none}

/* ── Guards: reduced motion ── */
@media (prefers-reduced-motion: reduce){
  #topbar::after{animation:none;opacity:.3}
  .fx-progress{display:none!important}
  .fxa-glow::after{display:none}
}

/* ─────────────────────────────────────────────────────────────────────────
   Operating nav: left tool rail (single pane of glass) + cross-tool pivot.
   Injected by learn-nav.js on every Pattern-B tool page.
   ───────────────────────────────────────────────────────────────────────── */
/* Canonical tool shell. learn-nav.js normalizes every tool to
   topbar -> app-body(sidebar + main) and adds body.tool-shell; these rules then
   lay all ten out identically (overriding the divergent tools' fixed
   positioning) and make the rail a plain leftmost flex child - no shim. */
body.tool-shell{margin:0;height:100vh;overflow:hidden;display:flex;flex-direction:column}
body.tool-shell #topbar{position:static;flex:0 0 auto;left:auto;right:auto;top:auto;width:auto}
body.tool-shell #app-body{flex:1 1 auto;display:flex;min-height:0;overflow:hidden;width:auto;padding:0}
body.tool-shell #sidebar{position:static;flex:0 0 auto;height:auto;top:auto;left:auto;transform:none;z-index:auto;padding-top:0}
body.tool-shell #main{position:static;flex:1 1 auto;min-width:0;overflow-y:auto;margin:0;top:auto;left:auto;padding-top:0}
body.tool-shell #main>.scope-bar,body.tool-shell #main>.scope-crumbs{position:sticky;top:0;z-index:5}
/* Rail: a thin collapsed strip by default (vertical label); peeks out as an
   overlay on hover, and pins open in-flow on click - keeping content roomy. */
#tool-rail{flex:0 0 auto;width:34px;position:relative;z-index:40;transition:width .2s cubic-bezier(.2,.8,.3,1);
  background:linear-gradient(180deg,var(--bg3,#0C0E0D),var(--bg2,#080A09));border-right:1px solid var(--border,rgba(100,168,255,.07))}
#tool-rail.open{width:64px}
/* brand-gradient spine on the expanded panel's own right edge (not the
   collapsed strip's, or it runs down the middle of the overlay on hover) */
#tool-rail .tr-expanded::after{content:'';position:absolute;top:8%;bottom:8%;right:0;width:1px;pointer-events:none;
  background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--cyan,#00D4FF) 34%,transparent),color-mix(in srgb,var(--teal,#00897B) 30%,transparent),transparent)}
/* collapsed strip with the vertical label */
#tool-rail .tr-collapsed{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;gap:9px;padding:12px 0;cursor:pointer;transition:opacity .15s}
#tool-rail .tr-collapsed .tr-hint{font-size:15px;line-height:1;color:var(--cyan,#00D4FF);opacity:.75}
#tool-rail .tr-collapsed .tr-vlabel{writing-mode:vertical-rl;transform:rotate(180deg);font-family:var(--mono,'DM Mono',monospace);
  font-size:9px;letter-spacing:.26em;text-transform:uppercase;color:var(--tx3,#6E6860);white-space:nowrap}
#tool-rail:hover .tr-collapsed{opacity:0;pointer-events:none}
#tool-rail.open .tr-collapsed{display:none}
/* expanded panel: overlay while peeking, in-flow when pinned open */
#tool-rail .tr-expanded{position:absolute;left:0;top:0;bottom:0;width:64px;display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:8px 0 14px;overflow-y:auto;overflow-x:visible;z-index:2;
  background:linear-gradient(180deg,var(--bg3,#0C0E0D),var(--bg2,#080A09));border-right:1px solid var(--border2,rgba(100,168,255,.14));
  box-shadow:8px 0 28px -12px rgba(0,0,0,.6);opacity:0;pointer-events:none;transform:translateX(-8px);transition:opacity .18s,transform .18s}
#tool-rail .tr-expanded::-webkit-scrollbar{width:0}
#tool-rail:hover .tr-expanded{opacity:1;pointer-events:auto;transform:none}
#tool-rail.open .tr-expanded{position:relative;width:100%;opacity:1;pointer-events:auto;transform:none;box-shadow:none;border-right:0;background:transparent}
/* pin toggle */
#tool-rail .tr-toggle{width:26px;height:20px;display:flex;align-items:center;justify-content:center;border:0;background:none;cursor:pointer;
  color:var(--tx3,#6E6860);border-radius:6px;margin-bottom:2px;transition:color .15s,background .15s}
#tool-rail .tr-toggle svg{width:13px;height:13px;transition:transform .2s}
#tool-rail .tr-toggle:hover{color:var(--cyan,#00D4FF);background:color-mix(in srgb,var(--cyan,#00D4FF) 12%,transparent)}
#tool-rail.open .tr-toggle svg{transform:rotate(180deg)}
#tool-rail .tr-item,#tool-rail .tr-pivot{width:100%;display:flex;flex-direction:column;align-items:center;gap:4px;
  padding:5px 2px;text-decoration:none;border:0;background:none;cursor:pointer;position:relative;font-family:inherit}
#tool-rail .tr-ico{width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  color:var(--tr-accent,#8aa2c8);background:color-mix(in srgb,var(--tr-accent,#8aa2c8) 9%,transparent);
  border:1px solid color-mix(in srgb,var(--tr-accent,#8aa2c8) 20%,transparent);
  transition:transform .2s cubic-bezier(.2,.8,.3,1),background .2s,box-shadow .2s,border-color .2s,color .2s}
#tool-rail .tr-ico svg{width:17px;height:17px;display:block}
#tool-rail .tr-lbl{font-family:var(--mono,'DM Mono',monospace);font-size:8px;line-height:1;letter-spacing:.08em;text-transform:uppercase;
  color:var(--tx4,#484440);text-align:center;max-width:60px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:color .2s}
#tool-rail .tr-item:hover .tr-ico,#tool-rail .tr-pivot:hover .tr-ico{transform:translateY(-2px) scale(1.05);
  background:color-mix(in srgb,var(--tr-accent) 18%,transparent);border-color:color-mix(in srgb,var(--tr-accent) 40%,transparent);
  box-shadow:0 7px 18px -7px color-mix(in srgb,var(--tr-accent) 75%,transparent)}
#tool-rail .tr-item:hover .tr-lbl,#tool-rail .tr-pivot:hover .tr-lbl{color:var(--tx2,#A8A29A)}
#tool-rail .tr-item.here .tr-ico{color:#04120f;border-color:transparent;
  background:linear-gradient(145deg,var(--tr-accent),color-mix(in srgb,var(--tr-accent) 55%,#02110d));
  box-shadow:0 0 20px -4px color-mix(in srgb,var(--tr-accent) 80%,transparent),0 0 0 3px color-mix(in srgb,var(--tr-accent) 16%,transparent)}
#tool-rail .tr-item.here .tr-lbl{color:var(--tr-accent);font-weight:500}
#tool-rail .tr-item.here::before{content:'';position:absolute;left:-1px;top:8px;bottom:8px;width:3px;border-radius:0 3px 3px 0;
  background:var(--tr-accent);box-shadow:0 0 8px color-mix(in srgb,var(--tr-accent) 85%,transparent)}
#tool-rail .tr-pivot{--tr-accent:var(--cyan,#00D4FF)}
#tool-rail .tr-sep{width:26px;height:1px;flex:none;margin:5px 0 7px;
  background:linear-gradient(90deg,transparent,var(--border2,rgba(100,168,255,.16)),transparent)}
/* Accessibility: visible keyboard focus + skip link (shared, interior pages) */
:focus-visible{outline:2px solid var(--cyan,#00D4FF);outline-offset:2px;border-radius:5px}
.skip-link{position:fixed;top:8px;left:8px;z-index:100000;padding:10px 16px;border-radius:7px;
  background:var(--bg2,#080A09);border:1px solid var(--border3,rgba(100,168,255,.22));color:var(--tx,#EDE9E3);
  font-family:var(--font,sans-serif);font-size:13px;text-decoration:none;transform:translateY(-160%);transition:transform .18s ease}
.skip-link:focus{transform:translateY(0)}
@media(prefers-reduced-motion:reduce){.skip-link{transition:none}}
@media (prefers-reduced-motion:no-preference){#tool-rail .tr-item.here::before{animation:trPulse 2.6s ease-in-out infinite}}
@keyframes trPulse{0%,100%{opacity:1}50%{opacity:.45}}
@media (max-width:720px){#tool-rail.open,#tool-rail .tr-expanded{width:56px}#tool-rail .tr-lbl{display:none}#tool-rail .tr-ico{width:34px;height:34px}}

/* cross-tool pivot panel */
#foyl-pivot{position:fixed;z-index:99997;left:70px;top:60px;width:320px;max-width:calc(100vw - 90px);
  background:var(--surf,#0F1110);border:1px solid var(--border2,rgba(100,168,255,.16));border-radius:12px;
  box-shadow:0 20px 60px rgba(0,0,0,.55);overflow:hidden;font-family:var(--font,sans-serif);color:var(--tx,#EDE9E3);animation:fpIn .16s ease}
@keyframes fpIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
#foyl-pivot .fp-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border,rgba(100,168,255,.08))}
#foyl-pivot .fp-head b{font-size:13px;font-weight:600}
#foyl-pivot .fp-x{background:none;border:0;color:var(--tx3,#6E6860);font-size:19px;line-height:1;cursor:pointer;padding:0 2px}
#foyl-pivot .fp-in{width:100%;box-sizing:border-box;padding:11px 14px;background:var(--bg2,#080A09);border:0;border-bottom:1px solid var(--border,rgba(100,168,255,.08));
  color:var(--tx,#EDE9E3);font-family:var(--mono,monospace);font-size:12.5px;outline:none}
#foyl-pivot .fp-body{max-height:340px;overflow-y:auto;padding:6px}
#foyl-pivot .fp-hint{padding:16px 12px;color:var(--tx3,#6E6860);font-size:12px;line-height:1.5}
#foyl-pivot .fp-ent{padding:10px 10px 8px;font-size:13.5px;font-weight:600}
#foyl-pivot .fp-ent .fp-sub{font-family:var(--mono,monospace);font-weight:400;font-size:11px;color:var(--tx3,#6E6860);margin-left:6px}
#foyl-pivot .fp-meta{display:block;font-weight:400;font-size:11px;color:var(--tx2,#A8A29A);margin-top:3px}
#foyl-pivot .fp-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;margin:2px 4px;border-radius:8px;
  text-decoration:none;color:var(--tx,#EDE9E3);border:1px solid transparent;transition:background .12s,border-color .12s}
#foyl-pivot .fp-row:hover{background:var(--surf2,#151817);border-color:var(--border2,rgba(100,168,255,.16))}
#foyl-pivot .fp-row.fp-all{background:color-mix(in srgb,var(--cyan,#00D4FF) 8%,transparent);margin-bottom:4px}
#foyl-pivot .fp-tool{display:flex;align-items:center;gap:8px;font-size:12.5px}
#foyl-pivot .fp-n{font-family:var(--mono,monospace);font-size:11px;color:var(--tx2,#A8A29A);font-variant-numeric:tabular-nums}
#foyl-pivot .fp-tdot{width:8px;height:8px;border-radius:2px;background:#889;flex:none}
#foyl-pivot .fp-tdot[data-t="identity"]{background:#8B5CF6}#foyl-pivot .fp-tdot[data-t="edr"]{background:#22C55E}
#foyl-pivot .fp-tdot[data-t="firewall"]{background:#F97316}#foyl-pivot .fp-tdot[data-t="email"]{background:#EAB308}
#foyl-pivot .fp-tdot[data-t="casb"]{background:#818CF8}
/* autocomplete suggestions */
#foyl-pivot .fp-sug{width:calc(100% - 8px);display:flex;align-items:center;gap:10px;padding:8px 11px;margin:2px 4px;border-radius:8px;
  border:1px solid transparent;background:none;cursor:pointer;text-align:left;color:var(--tx,#EDE9E3);font-family:inherit;transition:background .12s,border-color .12s}
#foyl-pivot .fp-sug:hover{background:var(--surf2,#151817);border-color:var(--border2,rgba(100,168,255,.16))}
#foyl-pivot .fp-sug-ico{width:26px;height:26px;border-radius:7px;display:flex;align-items:center;justify-content:center;flex:none;border:1px solid var(--border2,rgba(100,168,255,.14))}
#foyl-pivot .fp-sug-ico svg{width:14px;height:14px}
#foyl-pivot .fp-sug-ico.user{color:#8B5CF6;background:color-mix(in srgb,#8B5CF6 12%,transparent)}
#foyl-pivot .fp-sug-ico.host{color:#22C55E;background:color-mix(in srgb,#22C55E 12%,transparent)}
#foyl-pivot .fp-sug-tx{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
#foyl-pivot .fp-sug-n{font-size:12.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#foyl-pivot .fp-sug-s{font-family:var(--mono,monospace);font-size:10px;color:var(--tx3,#6E6860);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#foyl-pivot .fp-sug-k{font-family:var(--mono,monospace);font-size:8.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--tx4,#484440);flex:none}
#foyl-pivot .fp-back{background:none;border:0;color:var(--tx3,#6E6860);font-size:11.5px;cursor:pointer;padding:6px 8px;margin:2px 0 4px;font-family:inherit}
#foyl-pivot .fp-back:hover{color:var(--cyan,#00D4FF)}

/* pivot landing: banner + row highlight on the target console */
#foyl-pivot-bar{position:fixed;z-index:99996;left:50%;top:58px;transform:translateX(-50%);max-width:calc(100vw - 120px);
  display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--surf,#0F1110);border:1px solid var(--border2,rgba(100,168,255,.2));
  border-left:3px solid var(--cyan,#00D4FF);border-radius:9px;box-shadow:0 12px 40px rgba(0,0,0,.5);
  font-family:var(--font,sans-serif);font-size:12px;color:var(--tx,#EDE9E3);animation:fpIn .2s ease}
#foyl-pivot-bar .fpb-dot{width:8px;height:8px;border-radius:50%;background:var(--cyan,#00D4FF);flex:none;box-shadow:0 0 0 4px color-mix(in srgb,var(--cyan,#00D4FF) 15%,transparent)}
#foyl-pivot-bar .fpb-tx b{font-family:var(--mono,monospace)}
#foyl-pivot-bar .fpb-x{background:none;border:1px solid var(--border2,rgba(100,168,255,.2));color:var(--tx2,#A8A29A);
  border-radius:6px;padding:3px 9px;font-size:11px;cursor:pointer;white-space:nowrap}
.foyl-pivot-hit{outline:2px solid var(--cyan,#00D4FF)!important;outline-offset:-2px;background:color-mix(in srgb,var(--cyan,#00D4FF) 9%,transparent)!important;border-radius:4px}
:root[data-theme="projector"] #tool-rail,:root[data-theme="projector"] #tool-rail .tr-expanded{background:linear-gradient(180deg,#eef2f5,#e7ebef);border-right-color:rgba(0,60,55,.12)}
@media (prefers-reduced-motion:reduce){#foyl-pivot,#foyl-pivot-bar{animation:none}.foyl-pivot-hit{scroll-behavior:auto}}
