/* v2 interaction layer */
.term{border-bottom:1px dashed currentColor;cursor:help;text-decoration:none;transition:color .2s,border-color .2s;outline-offset:3px}
.term:hover,.term:focus-visible{color:#5f8f26;border-bottom-style:solid}
.teaching-section .term:hover,.teaching-section .term:focus-visible,.hero .term:hover{color:var(--lime)}
.v2-pop{position:fixed;z-index:200;width:280px;background:#0f1a17;color:#e8eee4;border:1px solid #2e4138;border-radius:10px;padding:14px 16px 15px;box-shadow:0 18px 50px #0007;opacity:0;transform:translateY(6px) scale(.98);transition:opacity .18s,transform .18s var(--ease);pointer-events:none}
.v2-pop.on{opacity:1;transform:none}
.v2-pop svg{width:100%;height:44px;margin-bottom:8px}
.v2-pop-grid{stroke:#27372f;stroke-width:1;fill:none}
.v2-pop-trace{stroke:var(--lime);stroke-width:2;fill:none;stroke-linecap:round;stroke-dasharray:400;stroke-dashoffset:400;animation:v2-draw .9s var(--ease) forwards}
@keyframes v2-draw{to{stroke-dashoffset:0}}
.v2-pop strong{display:block;font:500 16px var(--display);letter-spacing:-.02em}
.v2-pop p{font-size:12.5px;line-height:1.55;color:#a9b7ae;margin-top:5px}

/* spotlight */
.v2-spot{position:relative;isolation:isolate}
.v2-spot::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .3s;background:radial-gradient(420px circle at var(--mx,50%) var(--my,50%),#d9ff671f,transparent 55%);z-index:1}
.v2-spot:hover::after{opacity:1}
.research-theme{transition:transform .35s var(--ease),box-shadow .35s}
.research-theme:hover{transform:translateY(-6px);box-shadow:0 24px 60px #16201f1f}
.research-theme .theme-art svg{transition:transform .9s var(--ease),filter .6s}
.research-theme.alive .theme-art svg{transform:scale(1.04);filter:saturate(1.3) brightness(1.08)}
.research-theme.alive .theme-art svg path,.research-theme.alive .theme-art svg ellipse{stroke-dasharray:6 6;animation:v2-flow 1.6s linear infinite}
@keyframes v2-flow{to{stroke-dashoffset:-24}}
.journey-track article{transition:transform .3s var(--ease)}
.journey-track article:hover{transform:translateY(-4px)}
.journey-track article:hover .timeline-dot{background:#79a047;border-color:#79a047;box-shadow:0 0 0 7px #79a04722}

/* teaching labs */
.v2-labs{margin-top:70px}
.v2-labs-head{display:flex;justify-content:space-between;align-items:end;gap:30px;margin-bottom:26px}
.v2-labs-head h3{font-size:clamp(34px,4vw,54px);color:#eef1e7}
.v2-labs-head p{max-width:420px;color:#8a9b90;font-size:14px}
.v2-lab-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}
.v2-lab{background:#101b19;border:1px solid #233530;border-radius:14px;padding:24px;color:#e7ece3;display:flex;flex-direction:column;gap:16px;min-width:0;overflow:hidden}
.v2-lab .cw-kicker{font:10px var(--mono);letter-spacing:.1em;color:var(--lime)}
.v2-lab h4{font:500 26px/1.1 var(--display);letter-spacing:-.04em}
.v2-lab>p{font-size:13px;color:#97a79d}
.v2-stage{position:relative;background:#0b1413;border:1px solid #1d2c28;border-radius:10px}
.v2-stage canvas{display:block;width:100%;height:230px}
.v2-lab-tip{position:absolute;z-index:3;max-width:220px;background:#1a2b26;border:1px solid #35504a;color:#dfe8de;font-size:12px;line-height:1.45;padding:9px 11px;border-radius:8px;pointer-events:none}
.v2-controls{display:flex;flex-wrap:wrap;gap:14px 22px;align-items:center}
.v2-controls label{display:grid;gap:6px;font:10px var(--mono);letter-spacing:.06em;color:#8fa096;flex:1;min-width:200px}
.v2-controls input[type=range]{accent-color:var(--lime);width:100%}
.v2-seg{display:flex;gap:4px;background:#0b1413;border:1px solid #23352f;border-radius:30px;padding:3px}
.v2-seg button{background:none;padding:6px 12px;border-radius:30px;font:11px var(--mono);color:#9fb0a6}
.v2-seg button[aria-pressed=true]{background:var(--lime);color:#14201a}
.v2-read{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:#1e2e29;border:1px solid #1e2e29;border-radius:8px;overflow:hidden}
.v2-read div{background:#0e1817;padding:10px 12px}
.v2-read dt{font:9px var(--mono);letter-spacing:.08em;color:#7d8e85;text-transform:uppercase}
.v2-read dd{margin:3px 0 0;font:500 18px var(--display);font-variant-numeric:tabular-nums}
.v2-read dd[data-s=ok]{color:var(--lime)}.v2-read dd[data-s=warn]{color:#ffd66b}.v2-read dd[data-s=bad]{color:#ff7a59}
.v2-note{font-size:13px;color:#b9c6bd;min-height:42px;border-left:2px solid var(--lime);padding-left:12px}
.v2-split{display:grid;grid-template-columns:1.5fr 1fr;gap:10px}
.v2-split canvas{height:200px}
.v2-fine{font:9px var(--mono);color:#66786f;letter-spacing:.04em}
@media (max-width:980px){.v2-lab-grid{grid-template-columns:1fr}.v2-labs-head{flex-direction:column;align-items:start}}
@media (max-width:560px){.v2-split{grid-template-columns:1fr}.v2-read dd{font-size:15px}.v2-lab{padding:16px}}

/* NeomFlex journey */
.nf-open{margin-top:22px;display:inline-flex;align-items:center;gap:14px;padding:13px 18px;border-radius:6px;background:var(--ink);color:#eef1e7;font-size:13px;font-weight:550;position:relative;overflow:hidden;transition:transform .25s var(--ease)}
.nf-open::before{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent,#d9ff6740,transparent);transform:translateX(-100%);animation:nf-shine 3.2s ease-in-out infinite}
@keyframes nf-shine{60%,100%{transform:translateX(100%)}}
.nf-open:hover{transform:translateY(-3px)}
.nf-open .nf-dot{width:8px;height:8px;border-radius:50%;background:var(--lime);box-shadow:0 0 0 0 #d9ff6799;animation:nf-pulse 1.8s infinite}
@keyframes nf-pulse{70%{box-shadow:0 0 0 10px #d9ff6700}}
.nf-dialog{width:min(1240px,96vw);max-height:94svh;border:1px solid #23352f;border-radius:16px;padding:0;background:#0b1413;color:#e7ece3;overflow:auto}
.nf-dialog::backdrop{background:#050a09cc;backdrop-filter:blur(6px)}
.nf-dialog[open]{animation:dialog-in .35s var(--ease)}
.nf-top{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:18px 22px;border-bottom:1px solid #1d2c28}
.nf-top h3{font:500 22px var(--display);letter-spacing:-.03em}
.nf-top span{font:10px var(--mono);color:var(--lime);letter-spacing:.1em}
.nf-top button{background:none;border:1px solid #2e4138;border-radius:6px;padding:7px 12px;font-size:12px;color:#c7d2ca}
.nf-body{display:grid;grid-template-columns:1fr 300px;min-height:0}
.nf-canvas{position:relative;border-right:1px solid #1d2c28}
.nf-canvas canvas{display:block;width:100%;height:min(520px,58svh)}
.nf-side{padding:22px;display:flex;flex-direction:column;gap:18px}
.nf-caption span{font:10px var(--mono);color:#7d8e85}
.nf-caption strong{display:block;font:500 26px/1.1 var(--display);letter-spacing:-.04em;margin-top:6px}
.nf-caption p{font-size:13.5px;color:#a7b6ac;margin-top:10px;line-height:1.6;animation:panel-in .4s}
.nf-meters{display:grid;gap:1px;background:#1e2e29;border:1px solid #1e2e29;border-radius:8px;overflow:hidden}
.nf-meters div{background:#0e1817;padding:10px 12px;display:flex;justify-content:space-between;align-items:baseline}
.nf-meters dt{font:9px var(--mono);letter-spacing:.08em;color:#7d8e85;text-transform:uppercase}
.nf-meters dd{margin:0;font:500 18px var(--display);font-variant-numeric:tabular-nums;color:var(--lime)}
.nf-steps{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-top:1px solid #1d2c28}
.nf-steps button{background:none;padding:14px 12px;text-align:left;border-right:1px solid #1d2c28;color:#8fa096;font-size:12px;position:relative}
.nf-steps button:last-child{border-right:0}
.nf-steps button small{display:block;font:9px var(--mono);color:#5f7068;margin-bottom:3px}
.nf-steps button::after{content:'';position:absolute;left:0;right:0;top:-1px;height:2px;background:var(--lime);transform:scaleX(0);transform-origin:left;transition:transform .4s var(--ease)}
.nf-steps button[aria-selected=true]{color:#eef1e7;background:#d9ff670a}
.nf-steps button[aria-selected=true]::after,.nf-steps button.done::after{transform:none}
.nf-steps button.done{color:#b8c6bc}
.nf-foot{font:9px var(--mono);color:#5f7068;padding:12px 22px;border-top:1px solid #1d2c28;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}
.nf-foot button{background:none;color:var(--lime);font:10px var(--mono);text-decoration:underline}
@media (max-width:900px){.nf-body{grid-template-columns:1fr}.nf-canvas{border-right:0;border-bottom:1px solid #1d2c28}.nf-steps{grid-template-columns:repeat(5,minmax(110px,1fr));overflow-x:auto}}
@media (prefers-reduced-motion:reduce){.v2-pop-trace{animation:none;stroke-dashoffset:0}.nf-open::before,.nf-open .nf-dot{animation:none}.research-theme.alive .theme-art svg path{animation:none}}
