:root {
  --nt-night-bg: #0A0F24;
  --nt-night-bg-deep: #070B1C;
  --nt-night-ambient: #1D2B66;
  --nt-night-ambient-alt: #2A1A5E;
  --nt-night-surface: #121C42;
  --nt-night-surface-sunken: #0C1331;
  --nt-night-border: #34467E;
  --nt-night-border-dashed: #3F5088;
  --nt-night-frame: #26345F;
  --nt-night-tick: #2F3F75;
  --nt-night-track: #1B2750;
  --nt-night-dot: #8FA3D9;
  --nt-text-primary: #EEF2FF;
  --nt-text-secondary: #A9B3CF;
  --nt-text-tertiary: #7C88AA;
  --nt-text-placeholder: #B9A8FF;
  --nt-hud-bracket: #7BE6FF;
  --nt-hud-cyan: #38D9F5;
  --nt-hud-violet: #9B7BFF;
  --nt-semantic-challenge: #FF5468;
  --nt-semantic-solution: #FFC940;
  --nt-semantic-system: #2FE39A;
  --nt-semantic-output: #4FA8FF;
  --nt-spectrum-0: #22D3EE;
  --nt-spectrum-20: #3B82F6;
  --nt-spectrum-40: #8B5CF6;
  --nt-spectrum-60: #F050C8;
  --nt-spectrum-80: #FFB020;
  --nt-spectrum-100: #2FE39A;
  --nt-paper-cream: #F3ECDF;
  --nt-paper-ink: #12163A;
  --nt-paper-ink-muted: #4A4F6A;
  --nt-paper-indigo: #3B38B8;
  --nt-font-sans: "Plus Jakarta Sans", system-ui, sans-serif;
  --nt-font-pixel: Silkscreen, ui-monospace, monospace;
  --nt-size-display: 64px;
  --nt-size-h1: 44px;
  --nt-size-h2: 32px;
  --nt-size-h3: 22px;
  --nt-size-body: 16px;
  --nt-size-small: 14px;
  --nt-size-label: 12px;
  --nt-size-micro: 10px;
  --nt-tracking-pixel: 0.12em;
  --nt-space-1: 4px;
  --nt-space-2: 8px;
  --nt-space-3: 12px;
  --nt-space-4: 16px;
  --nt-space-6: 24px;
  --nt-space-8: 32px;
  --nt-space-12: 48px;
  --nt-space-16: 64px;
  --nt-space-24: 96px;
  --nt-step: 4px;
  --nt-bracket: 18px;
  --nt-border-width: 1.5px;
  --nt-spectrum: linear-gradient(90deg, #22D3EE 0%, #3B82F6 20%, #8B5CF6 40%, #F050C8 60%, #FFB020 80%, #2FE39A 100%);
  --nt-steps-gradient: linear-gradient(180deg, #FF5468, #FFC940, #2FE39A, #4FA8FF);
}
/* ==========================================================================
   Neon Thread - CSS components
   Emiliano Stefanelli design system

   Load order:
     <link rel="stylesheet" href="tokens/tokens.css">
     <link rel="stylesheet" href="css/neon-thread.css">

   Every component reads --nt-accent, so one variable recolours it:
     <div class="nt-card" style="--nt-accent: var(--nt-semantic-output)">
   ========================================================================== */


:root {
  --nt-accent: var(--nt-hud-cyan);
  --nt-stair: polygon(0 8px, 4px 8px, 4px 4px, 8px 4px, 8px 0, calc(100% - 8px) 0, calc(100% - 8px) 4px, calc(100% - 4px) 4px, calc(100% - 4px) 8px, 100% 8px,
                      100% calc(100% - 8px), calc(100% - 4px) calc(100% - 8px), calc(100% - 4px) calc(100% - 4px), calc(100% - 8px) calc(100% - 4px), calc(100% - 8px) 100%,
                      8px 100%, 8px calc(100% - 4px), 4px calc(100% - 4px), 4px calc(100% - 8px), 0 calc(100% - 8px));
  /* pixel corner brackets, used as masks so they take any colour */
  --nt-corner-tl: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28'%3E%3Cpath d='M1 27V9h4V5h4V1h18' fill='none' stroke='white' stroke-width='2'/%3E%3C/svg%3E");
  --nt-corner-tr: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28'%3E%3Cpath d='M1 1h18v4h4v4h4v18' fill='none' stroke='white' stroke-width='2'/%3E%3C/svg%3E");
  --nt-corner-br: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28'%3E%3Cpath d='M27 1v18h-4v4h-4v4H1' fill='none' stroke='white' stroke-width='2'/%3E%3C/svg%3E");
  --nt-corner-bl: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28'%3E%3Cpath d='M1 1v18h4v4h4v4h18' fill='none' stroke='white' stroke-width='2'/%3E%3C/svg%3E");
  --nt-dots: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Crect width='2' height='2' fill='%238FA3D9' fill-opacity='.12'/%3E%3C/svg%3E");
}

/* ---------- page ---------- */
.nt-page {
  margin: 0;
  min-height: 100vh;
  color: var(--nt-text-primary);
  font-family: var(--nt-font-sans);
  font-size: var(--nt-size-body);
  line-height: 1.55;
  background-color: var(--nt-night-bg);
  background-image:
    var(--nt-dots),
    radial-gradient(ellipse 70% 55% at 20% 0%, color-mix(in srgb, var(--nt-night-ambient) 60%, transparent), transparent 70%),
    radial-gradient(ellipse 50% 45% at 90% 100%, color-mix(in srgb, var(--nt-night-ambient-alt) 40%, transparent), transparent 70%);
  -webkit-font-smoothing: antialiased;
}
.nt-page ::selection { background: color-mix(in srgb, var(--nt-hud-cyan) 35%, transparent); }

/* HUD frame around the viewport */
.nt-frame { position: fixed; inset: 12px; border: 1.5px solid var(--nt-night-frame); pointer-events: none; z-index: 50; }
.nt-frame::before {
  content: ""; position: absolute; inset: -2px;
  background: var(--nt-hud-bracket);
  -webkit-mask: var(--nt-corner-tl) top left / 44px 44px no-repeat, var(--nt-corner-tr) top right / 44px 44px no-repeat, var(--nt-corner-br) bottom right / 44px 44px no-repeat, var(--nt-corner-bl) bottom left / 44px 44px no-repeat;
          mask: var(--nt-corner-tl) top left / 44px 44px no-repeat, var(--nt-corner-tr) top right / 44px 44px no-repeat, var(--nt-corner-br) bottom right / 44px 44px no-repeat, var(--nt-corner-bl) bottom left / 44px 44px no-repeat;
  filter: drop-shadow(0 0 3px var(--nt-hud-bracket));
}

/* ---------- type ---------- */
.nt-display { font-size: clamp(40px, 7vw, var(--nt-size-display)); font-weight: 800; line-height: 0.98; letter-spacing: -0.02em; margin: 0; }
.nt-h1 { font-size: clamp(32px, 5vw, var(--nt-size-h1)); font-weight: 700; line-height: 1.05; letter-spacing: -0.01em; margin: 0; text-wrap: balance; }
.nt-h2 { font-size: clamp(26px, 3.6vw, var(--nt-size-h2)); font-weight: 700; line-height: 1.1; margin: 0; text-wrap: balance; }
.nt-h3 { font-size: var(--nt-size-h3); font-weight: 700; line-height: 1.2; margin: 0; }
.nt-lead { font-size: 19px; line-height: 1.5; color: var(--nt-text-secondary); max-width: 62ch; }
.nt-muted { color: var(--nt-text-secondary); }
.nt-meta { color: var(--nt-text-tertiary); font-size: var(--nt-size-small); }
.nt-ph { color: var(--nt-text-placeholder); }

/* the 8-bit voice: labels, eyebrows, subtitles, buttons. Always uppercase, always glowing */
.nt-label {
  font-family: var(--nt-font-pixel);
  font-size: var(--nt-size-label);
  font-weight: 400;
  letter-spacing: var(--nt-tracking-pixel);
  text-transform: uppercase;
  line-height: 1.4;
  color: var(--nt-accent);
  text-shadow: 0 0 6px color-mix(in srgb, var(--nt-accent) 55%, transparent);
}
.nt-label--micro { font-size: var(--nt-size-micro); color: var(--nt-text-tertiary); text-shadow: none; }
.nt-label--lg { font-size: 16px; }

/* ---------- HUD card ---------- */
/* <div class="nt-card"><div class="nt-card__box">...</div></div> */
.nt-card { position: relative; filter: drop-shadow(0 0 6px color-mix(in srgb, var(--nt-accent) 32%, transparent)); }
.nt-card__box {
  position: relative;
  clip-path: var(--nt-stair);
  background: linear-gradient(var(--nt-night-surface), var(--nt-night-surface)) padding-box, var(--nt-night-border) border-box;
  border: var(--nt-border-width) solid transparent;
  padding: var(--nt-space-6);
  height: 100%;
  box-sizing: border-box;
}
.nt-card__box::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: var(--nt-accent);
  -webkit-mask: var(--nt-corner-tl) top left / 28px 28px no-repeat, var(--nt-corner-tr) top right / 28px 28px no-repeat, var(--nt-corner-br) bottom right / 28px 28px no-repeat, var(--nt-corner-bl) bottom left / 28px 28px no-repeat;
          mask: var(--nt-corner-tl) top left / 28px 28px no-repeat, var(--nt-corner-tr) top right / 28px 28px no-repeat, var(--nt-corner-br) bottom right / 28px 28px no-repeat, var(--nt-corner-bl) bottom left / 28px 28px no-repeat;
}
/* three status LEDs, top right */
.nt-card__box::after {
  content: ""; position: absolute; top: 12px; right: 14px; width: 18px; height: 4px; pointer-events: none;
  background: linear-gradient(90deg, color-mix(in srgb, var(--nt-accent) 25%, transparent) 0 4px, transparent 4px 7px, color-mix(in srgb, var(--nt-accent) 55%, transparent) 7px 11px, transparent 11px 14px, var(--nt-accent) 14px 18px);
}
.nt-card--quiet .nt-card__box::after { display: none; }
.nt-card--placeholder .nt-card__box {
  background: var(--nt-night-surface-sunken);
  border: var(--nt-border-width) dashed var(--nt-night-border-dashed);
  display: grid; place-content: center; gap: 4px; text-align: center; min-height: 160px;
}
.nt-card--placeholder .nt-card__box::after { display: none; }

/* big number inside a card */
.nt-stat__value { font-size: 40px; font-weight: 700; line-height: 1; letter-spacing: -0.01em; text-shadow: 0 0 14px color-mix(in srgb, var(--nt-accent) 45%, transparent); }
.nt-stat__label { margin-top: var(--nt-space-2); color: var(--nt-text-secondary); font-size: var(--nt-size-small); line-height: 1.4; }

/* ---------- the four steps: Challenge / Solution / System / Output ---------- */
.nt-steps { list-style: none; margin: 0; padding: 0; }
.nt-step { position: relative; padding: 0 0 var(--nt-space-6) 40px; }
.nt-step:last-child { padding-bottom: 0; }
.nt-step[data-step="challenge"] { --nt-accent: var(--nt-semantic-challenge); --nt-next: var(--nt-semantic-solution); }
.nt-step[data-step="solution"]  { --nt-accent: var(--nt-semantic-solution);  --nt-next: var(--nt-semantic-system); }
.nt-step[data-step="system"]    { --nt-accent: var(--nt-semantic-system);    --nt-next: var(--nt-semantic-output); }
.nt-step[data-step="output"]    { --nt-accent: var(--nt-semantic-output);    --nt-next: var(--nt-semantic-output); }
/* the lit pixel node */
.nt-step::before {
  content: ""; position: absolute; left: 0; top: 2px; width: 16px; height: 16px;
  background: linear-gradient(#fff, #fff) center / 6px 6px no-repeat, var(--nt-accent);
  box-shadow: 0 0 8px var(--nt-accent), 0 0 22px color-mix(in srgb, var(--nt-accent) 55%, transparent);
  z-index: 1;
}
/* the fibre segment to the next node */
.nt-step:not(:last-child)::after {
  content: ""; position: absolute; left: 7px; top: 18px; bottom: 2px; width: 2px;
  background: linear-gradient(var(--nt-accent), var(--nt-next));
  box-shadow: 0 0 6px color-mix(in srgb, var(--nt-accent) 60%, transparent);
}
.nt-step__label { display: block; margin-bottom: 4px; }
.nt-step__text { margin: 0; }

/* ---------- button ---------- */
/* <a class="nt-btn" href="#"><span>Let's talk >></span></a> */
.nt-btn { --nt-accent: var(--nt-semantic-system); display: inline-block; text-decoration: none; filter: drop-shadow(0 0 8px color-mix(in srgb, var(--nt-accent) 55%, transparent)); transition: filter .2s ease, transform .2s ease; }
.nt-btn > span {
  display: block; clip-path: var(--nt-stair); background: var(--nt-accent); color: var(--nt-night-bg);
  font-family: var(--nt-font-pixel); font-size: 15px; letter-spacing: var(--nt-tracking-pixel); text-transform: uppercase; padding: 14px 26px;
}
.nt-btn:hover { transform: translateY(-1px); filter: drop-shadow(0 0 12px var(--nt-accent)); }
.nt-btn:focus-visible { outline: 2px solid var(--nt-hud-bracket); outline-offset: 4px; }
.nt-btn--ghost > span { background: transparent; color: var(--nt-accent); box-shadow: inset 0 0 0 1.5px var(--nt-accent); }

/* ---------- chips ---------- */
.nt-chip { display: inline-block; padding: 6px 12px; border: 1px solid var(--nt-night-border); font-family: var(--nt-font-pixel); font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--nt-accent); }
.nt-chip--paper { border-color: var(--nt-paper-ink); color: var(--nt-paper-ink); background: rgba(255, 255, 255, 0.4); }

/* ---------- the thread as a divider ---------- */
/* <div class="nt-thread" style="--at: 40%"></div>   --at places the "you are here" pixel */
.nt-thread { position: relative; height: 3px; margin: var(--nt-space-12) 0; background: var(--nt-spectrum); border-radius: 2px; box-shadow: 0 0 10px rgba(120, 140, 255, 0.45); }
.nt-thread::after { content: ""; position: absolute; top: 50%; left: var(--at, 0%); width: 10px; height: 10px; transform: translate(-50%, -50%); background: #fff; box-shadow: 0 0 8px #fff, 0 0 18px var(--nt-hud-cyan); display: var(--nt-thread-pixel, block); }
.nt-thread--no-pixel::after { display: none; }

/* ---------- cover: classic cream fading into the night ---------- */
.nt-cover {
  color: var(--nt-paper-ink);
  background: linear-gradient(90deg, var(--nt-paper-cream) 0 37%, #EAE0D8 44%, #CBBFD2 49.5%, #8C86B6 55%, #4B4F8A 60%, #242B60 65%, #121936 70.5%, var(--nt-night-bg) 76%);
}
@media (max-width: 760px) {
  .nt-cover { background: linear-gradient(180deg, var(--nt-paper-cream) 0 45%, #EAE0D8 52%, #CBBFD2 58%, #8C86B6 64%, #4B4F8A 70%, #242B60 76%, #121936 82%, var(--nt-night-bg) 88%); }
}
.nt-cover .nt-label { --nt-accent: var(--nt-paper-indigo); text-shadow: none; }

@media (prefers-reduced-motion: reduce) { .nt-btn { transition: none; } }

/* Framework360: on a page built with Neon Thread, the theme's own header, footer and global blocks step aside */
body:has(#es-root) .ms-visualbuilder-global-block:not(:has(#es-root)),
body:has(#es-root) .ms-global-block:not(:has(#es-root)) { display: none !important; }
/* ---------- game layer (css/neon-thread-game.css) ---------- */
/* ==========================================================================
   Neon Thread - game layer
   Two card families with opposite roles, plus the pieces around them.

   READ  -> .nt-dialog   an RPG dialogue box. Flat, double pixel border,
                         portrait on the left, text that types itself,
                         a blinking down-arrow. Never a link.
   PRESS -> .nt-level    a level-select block. Raised (pixel thickness under
                         and right), presses down on tap, neon border,
                         level number, always a visible call to action.
   Lists   .nt-quest     side quests: compact rows, lighter than a level.
   Wins    .nt-power     power-up tokens: one number, one line. Not links.
   Voice   .nt-voice     Emiliano's own sentence, in neon script.
   Sprite  .nt-sprite    8-bit illustration drawn from a pixel grid.
   Avatar  .nt-avatar    every profile picture: pixel-stepped circle.
   ========================================================================== */

/* ---------- READ: dialogue box ---------- */
.nt-dialog { --nt-accent: var(--nt-hud-cyan); position: relative; clip-path: var(--nt-stair); background: #C9D3F5; padding: 3px; height: 100%; box-sizing: border-box; }
.nt-dialog__box {
  position: relative; height: 100%; box-sizing: border-box;
  clip-path: var(--nt-stair);
  background: var(--nt-night-bg-deep);
  box-shadow: inset 0 0 0 3px var(--nt-night-bg-deep), inset 0 0 0 4px rgba(201, 211, 245, .28);
  padding: 22px 22px 32px;
  display: grid; grid-template-columns: 64px 1fr; gap: 18px; align-items: start; align-content: start;
}
.nt-dialog__face {
  width: 64px; height: 64px; display: grid; place-items: center;
  background: #0F1736; clip-path: var(--nt-stair);
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--nt-accent) 65%, transparent);
}
.nt-dialog__face .nt-sprite { --s: 44px; }
.nt-dialog__name { display: block; margin-bottom: 6px; font-family: var(--nt-font-pixel); font-size: 12px; letter-spacing: var(--nt-tracking-pixel); text-transform: uppercase; color: var(--nt-accent); }
.nt-dialog h3 { margin: 0 0 6px; }
.nt-dialog p { margin: 0; color: var(--nt-text-primary); }
.nt-dialog__box::after {
  content: ""; position: absolute; right: 18px; bottom: 13px; width: 10px; height: 6px; background: var(--nt-accent); opacity: 0;
  clip-path: polygon(0 0, 100% 0, 100% 34%, 80% 34%, 80% 67%, 60% 67%, 60% 100%, 40% 100%, 40% 67%, 20% 67%, 20% 34%, 0 34%);
}
.nt-dialog.is-done .nt-dialog__box::after, .nt-dialog:not([data-typing]) .nt-dialog__box::after { opacity: 1; animation: nt-blink 1.1s steps(2) infinite; }
@keyframes nt-blink { 50% { opacity: 0; } }
.nt-type-rest { color: transparent; }
@media (max-width: 420px) { .nt-dialog__box { grid-template-columns: 52px 1fr; gap: 14px; padding: 18px 16px 30px; } .nt-dialog__face { width: 52px; height: 52px; } .nt-dialog__face .nt-sprite { --s: 36px; } }

/* ---------- PRESS: level select ---------- */
.nt-level {
  --nt-accent: var(--nt-hud-cyan); --nt-depth: 6px;
  position: relative; display: block; text-decoration: none; color: inherit;
  filter: drop-shadow(var(--nt-depth) var(--nt-depth) 0 color-mix(in srgb, var(--nt-accent) 42%, #05081A));
  transition: transform .14s steps(3), filter .14s steps(3);
}
.nt-level__box {
  position: relative; height: 100%; box-sizing: border-box; clip-path: var(--nt-stair);
  background: linear-gradient(160deg, #1A2660, #101943 70%) padding-box, var(--nt-accent) border-box;
  border: 2px solid transparent; padding: 22px 22px 24px; display: flex; flex-direction: column; gap: 10px;
}
.nt-level__top { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }
.nt-level h3 { margin: 4px 0 0; }
.nt-level:hover, .nt-level:focus-visible { transform: translate(-2px, -2px); filter: drop-shadow(8px 8px 0 color-mix(in srgb, var(--nt-accent) 42%, #05081A)) drop-shadow(0 0 16px color-mix(in srgb, var(--nt-accent) 45%, transparent)); outline: none; }
.nt-level:active { transform: translate(var(--nt-depth), var(--nt-depth)); filter: drop-shadow(0 0 0 transparent) drop-shadow(0 0 18px color-mix(in srgb, var(--nt-accent) 60%, transparent)); }
/* the menu cursor */
.nt-level::before {
  content: ""; position: absolute; left: -24px; top: 34px; width: 12px; height: 14px; background: var(--nt-accent); opacity: 0;
  clip-path: polygon(0 0, 34% 0, 34% 14%, 67% 14%, 67% 29%, 100% 29%, 100% 71%, 67% 71%, 67% 86%, 34% 86%, 34% 100%, 0 100%);
}
.nt-level:hover::before, .nt-level:focus-visible::before { opacity: 1; animation: nt-blink .8s steps(2) infinite; }
@media (hover: none), (max-width: 760px) { .nt-level::before { display: none; } }
/* the button inside: always visible */
.nt-level__go {
  margin-top: auto; align-self: flex-start; display: inline-flex; gap: 8px; align-items: center; padding: 11px 15px; clip-path: var(--nt-stair);
  font-family: var(--nt-font-pixel); font-size: 13px; letter-spacing: var(--nt-tracking-pixel); text-transform: uppercase; white-space: nowrap;
  color: var(--nt-night-bg); background: var(--nt-accent);
}

/* the case told as a thread of steps: they light up in order, challenge red to output blue */
.nt-chain { list-style: none; margin: 4px 0 8px; padding: 0; display: flex; flex-wrap: wrap; gap: 6px 0; font-size: 15px; line-height: 1.4; }
.nt-chain li { color: var(--nt-text-tertiary); transition: color .5s ease, text-shadow .5s ease; transition-delay: calc(var(--i, 0) * 160ms); }
.nt-chain li:not(:last-child)::after { content: ">"; margin: 0 8px; font-family: var(--nt-font-pixel); font-size: 12px; color: var(--nt-text-tertiary); }
.nt-chain.is-lit li { color: var(--c, var(--nt-text-primary)); }
.nt-chain.is-lit li:last-child { color: var(--nt-text-primary); font-weight: 700; }

/* ---------- side quests ---------- */
.nt-quests { margin: 0; padding: 0; list-style: none; border-top: 1px dashed var(--nt-night-border-dashed); }
.nt-quest {
  display: grid; grid-template-columns: 18px 1fr auto; gap: 14px; align-items: center; padding: 14px 6px;
  border-bottom: 1px dashed var(--nt-night-border-dashed); text-decoration: none; color: inherit; transition: background .2s ease;
}
.nt-quest__x { width: 12px; height: 12px; background: var(--nt-accent);
  clip-path: polygon(0 0, 25% 0, 50% 25%, 75% 0, 100% 0, 100% 25%, 75% 50%, 100% 75%, 100% 100%, 75% 100%, 50% 75%, 25% 100%, 0 100%, 0 75%, 25% 50%, 0 25%); }
.nt-quest__name { font-weight: 700; font-size: 17px; }
.nt-quest__tag { margin-left: 10px; font-family: var(--nt-font-pixel); font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--nt-text-tertiary); }
.nt-quest__line { display: block; color: var(--nt-text-secondary); font-size: 14px; margin-top: 2px; }
.nt-quest__go { font-family: var(--nt-font-pixel); color: var(--nt-accent); transition: transform .2s steps(2); }
.nt-quest:hover { background: color-mix(in srgb, var(--nt-accent) 8%, transparent); }
.nt-quest:hover .nt-quest__go { transform: translateX(4px); }

/* ---------- power-ups ---------- */
.nt-powers { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
.nt-power {
  --nt-accent: var(--nt-hud-cyan); position: relative; padding: 22px 20px 20px; box-sizing: border-box;
  clip-path: polygon(0 12px, 6px 12px, 6px 6px, 12px 6px, 12px 0, calc(100% - 12px) 0, calc(100% - 12px) 6px, calc(100% - 6px) 6px, calc(100% - 6px) 12px, 100% 12px, 100% calc(100% - 12px), calc(100% - 6px) calc(100% - 12px), calc(100% - 6px) calc(100% - 6px), calc(100% - 12px) calc(100% - 6px), calc(100% - 12px) 100%, 12px 100%, 12px calc(100% - 6px), 6px calc(100% - 6px), 6px calc(100% - 12px), 0 calc(100% - 12px));
  background: radial-gradient(120% 80% at 20% 0%, color-mix(in srgb, var(--nt-accent) 16%, transparent), transparent 60%), var(--nt-night-surface-sunken);
}
.nt-power__coin { position: relative; display: inline-block; }
.nt-power__coin .nt-sprite { --s: 40px; }
.nt-power__coin::after { content: "+1"; position: absolute; left: 44px; top: 4px; font-family: var(--nt-font-pixel); font-size: 12px; color: var(--nt-accent); opacity: 0; }
.nt-power.is-on .nt-power__coin::after { animation: nt-plus 1.1s steps(6) forwards; animation-delay: calc(var(--i, 0) * 180ms); }
@keyframes nt-plus { 0% { opacity: 0; transform: translateY(6px); } 30% { opacity: 1; } 100% { opacity: 0; transform: translateY(-14px); } }
.nt-power__num { display: block; margin: 12px 0 6px; font-size: 38px; font-weight: 800; line-height: 1; letter-spacing: -.02em; color: var(--nt-text-primary); text-shadow: 0 0 16px color-mix(in srgb, var(--nt-accent) 55%, transparent); }
.nt-power__line { margin: 0 0 14px; color: var(--nt-text-secondary); font-size: 14px; line-height: 1.45; }
.nt-power__tag { font-family: var(--nt-font-pixel); font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--nt-accent); }
@media (max-width: 980px) {
  .nt-powers { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 12px; scrollbar-width: thin; }
  .nt-power { flex: 0 0 236px; scroll-snap-align: start; }
}

/* ---------- voice ---------- */
.nt-voice { font-family: "Yellowtail", "Brush Script MT", cursive; font-weight: 400; color: #FFF7FD;
  text-shadow: 0 0 4px #fff, 0 0 12px var(--nt-accent), 0 0 28px color-mix(in srgb, var(--nt-accent) 70%, transparent), 0 0 54px color-mix(in srgb, var(--nt-accent) 40%, transparent); }

/* ---------- sprites + avatar ---------- */
.nt-sprite { display: inline-block; width: var(--s, 48px); height: var(--s, 48px); color: var(--nt-accent); flex: none;
  filter: drop-shadow(0 0 5px color-mix(in srgb, var(--nt-accent) 55%, transparent)); }
.nt-sprite svg { display: block; width: 100%; height: 100%; shape-rendering: crispEdges; overflow: visible; }
.nt-avatar { --nt-pixel-circle: polygon(68.75% 0%,68.75% 6.25%,81.25% 6.25%,81.25% 12.5%,87.5% 12.5%,87.5% 18.75%,93.75% 18.75%,93.75% 31.25%,100% 31.25%,100% 68.75%,93.75% 68.75%,93.75% 81.25%,87.5% 81.25%,87.5% 87.5%,81.25% 87.5%,81.25% 93.75%,68.75% 93.75%,68.75% 100%,31.25% 100%,31.25% 93.75%,18.75% 93.75%,18.75% 87.5%,12.5% 87.5%,12.5% 81.25%,6.25% 81.25%,6.25% 68.75%,0% 68.75%,0% 31.25%,6.25% 31.25%,6.25% 18.75%,12.5% 18.75%,12.5% 12.5%,18.75% 12.5%,18.75% 6.25%,31.25% 6.25%,31.25% 0%);
  clip-path: var(--nt-pixel-circle); object-fit: cover; }

@media (prefers-reduced-motion: reduce) {
  .nt-level, .nt-chain li { transition: none; }
  .nt-dialog__box::after, .nt-level::before, .nt-power__coin::after { animation: none !important; }
}
.nt-quest__tag { white-space: nowrap; }
@media (max-width: 520px) { .nt-quest__name { display: block; } .nt-quest__tag { display: block; margin: 2px 0 4px; } }
