/* Setup progress companion rail (assets/speck/setup-rail.js) on the setup
   guide, setup.html. It borrows the guide's own card anatomy: a head with a mono
   kicker, a body on the page background, and a hairline footer rail like the
   glasses card's "Plan setup now" exit. The guide keeps its full 1000px width at
   every size; the rail never takes a column. At 1520px and up (WIDE_MIN in
   setup-rail.js) it is a card fixed in the empty right margin, outside the page.
   Narrower, a slim strip inside the sticky masthead: laptops also get the phase
   map inline, phones get the short form. */

/* very wide: a card in the right margin, beside the page, not inside it */
@media (min-width:1520px){
  .spk-layout>.spk-rail{position:fixed;top:calc(var(--spk-mast,68px) + 24px);left:calc(50% + var(--shell,1000px) / 2 + 24px);width:236px;z-index:3}
}
.spk-rail[hidden]{display:none!important}

/* rail card: the guide's .node__card, lit like the active phase while a step is open */
.spk-card{position:relative;border:1px solid var(--rule-2);border-radius:var(--r-3,10px);background:var(--bg-2);overflow:hidden;transition:border-color .2s var(--ease,ease),box-shadow .2s var(--ease,ease)}
.spk-rail.is-live .spk-card{border-color:rgba(77,213,138,.32);box-shadow:var(--glow-md)}
.spk-head{padding:14px 18px 14px}
.spk-slot{position:relative;width:200px;height:64px;margin:0 auto 12px;pointer-events:none}
.spk-hop{width:100%;height:100%;transition:transform .14s ease-out}
.spk-hop.up{transform:translateY(-4px)}
.spk-text{min-width:0}
/* kicker: the guide's .pk phase label */
.spk-kick{margin:0 0 6px;font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--lens-dim,var(--lens))}
.spk-say{margin:0;font-size:14px;line-height:1.45;color:var(--ink);min-height:3em;font-weight:400}
.spk-say.flash{animation:spk-flash .5s var(--ease,ease-out)}
.spk-say a{color:var(--lens);text-decoration:underline;text-underline-offset:3px}
.spk-say a:focus-visible{outline:2px solid var(--lens);outline-offset:2px}
@keyframes spk-flash{from{color:var(--lens)}}
/* timer: the guide's .d detail line */
.spk-timer{margin:8px 0 0;font-family:var(--mono);font-size:11.5px;color:var(--muted)}
.spk-timer b{font-weight:400;color:var(--lens)}
.spk-timer[hidden]{display:none}

/* phase map: the guide's step boxes and .pc counters, on the page background */
.spk-map{list-style:none;margin:0;padding:12px 18px 13px;border-top:1px solid var(--rule);background:var(--bg);display:grid;gap:7px}
.spk-map li{display:flex;align-items:center;gap:9px;font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;color:var(--muted)}
.spk-map li[hidden]{display:none}
.spk-map i{flex:none;display:grid;place-items:center;width:13px;height:13px;border:1px solid var(--rule-2);border-radius:var(--r-2,3px);font-style:normal;font-size:8px;line-height:1;color:transparent;transition:border-color .16s var(--ease,ease),background-color .16s var(--ease,ease),box-shadow .16s var(--ease,ease)}
.spk-map span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.spk-map em{font-style:normal;font-size:10.5px}
.spk-map li.done{color:var(--ink-2)}
.spk-map li.done i{background:var(--lens);border-color:var(--lens);color:var(--on-lens,#0b0d0a);box-shadow:var(--glow-sm)}
.spk-map li.done em{color:var(--lens)}
.spk-map li.now{color:var(--ink)}
.spk-map li.now i{border-color:var(--lens);box-shadow:var(--glow-sm)}
.spk-map li.now em{color:var(--ink-2)}

/* meter: a lit hairline over the footer rail */
.spk-bar{position:relative;height:1px;background:var(--rule)}
.spk-bar i{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--lens);box-shadow:var(--glow-sm);transition:width .5s var(--ease,cubic-bezier(.22,.8,.32,1))}
/* footer rail: the glasses card's exit row */
.spk-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:44px;padding:0 10px 0 18px;background:var(--bg);font-family:var(--mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.spk-count b{font-weight:400;color:var(--ink-2)}
.spk-jump{display:inline-flex;align-items:center;gap:7px;min-height:44px;padding:0 6px;border:0;background:transparent;font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);white-space:nowrap;cursor:pointer;transition:color .16s var(--ease,ease)}
.spk-jump .spk-ja{display:inline-block;transition:transform .16s var(--ease,ease)}
.spk-jump:hover,.spk-jump:focus-visible{color:var(--lens);outline:none}
.spk-jump:hover .spk-ja,.spk-jump:focus-visible .spk-ja{transform:translateY(2px)}
.spk-jump:focus-visible{box-shadow:inset 0 0 0 1px var(--lens);border-radius:var(--r-2,3px)}
.spk-jump[hidden]{display:none}

/* phone strip, inside the sticky masthead */
.spk-strip .mast>.spk-rail{border-top:1px solid var(--rule);background:color-mix(in oklab,var(--bg) 96%,transparent)}
.spk-strip .spk-card{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"head foot";align-items:center;border:0;border-radius:0;background:transparent;box-shadow:none;overflow:visible;max-width:var(--shell,1000px);margin-inline:auto}
.spk-strip .spk-rail.is-live .spk-card{box-shadow:none}
.spk-strip .spk-head{grid-area:head;min-width:0;display:grid;grid-template-columns:100px minmax(0,1fr);align-items:center;column-gap:10px;padding:6px 0 8px calc(var(--shell-pad,28px) - 16px)}
.spk-strip .spk-slot{width:100px;height:32px;margin:0}
.spk-strip .spk-text{display:grid;grid-template-columns:minmax(0,1fr);grid-template-areas:"k" "s";align-items:baseline}
.spk-strip .spk-kick{grid-area:k;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:8.5px;margin:0 0 2px}
.spk-strip .spk-say{grid-area:s;font-size:12.5px;line-height:1.3;min-height:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.spk-strip .spk-timer{grid-area:k;margin:0 0 2px;font-size:9.5px;white-space:nowrap}
.spk-strip .spk-text.has-timer .spk-kick{visibility:hidden}
.spk-strip .spk-map,.spk-strip .spk-count{display:none}
.spk-strip .spk-foot{grid-area:foot;min-height:0;padding:0 var(--shell-pad,28px) 0 10px;background:transparent}
/* the guide's square .chev control */
.spk-strip .spk-jump{width:34px;height:34px;min-height:0;padding:0;justify-content:center;border:1px solid var(--rule-2);border-radius:var(--r-2,3px);font-size:14px;color:var(--lens)}
.spk-strip .spk-jump:hover,.spk-strip .spk-jump:focus-visible{border-color:var(--lens);box-shadow:none}
.spk-strip .spk-jump .spk-jl{display:none}
.spk-strip .spk-bar{position:absolute;left:0;right:0;bottom:-1px;height:2px;background:transparent}
/* Anchor jumps (#desktopConnect) land below the taller header. */
.spk-strip .node--optional{scroll-margin-top:calc(var(--spk-mast,120px) + 24px)}
/* The strip already says where you are; the guide's own floating context line would stack under it. */
.spk-strip .flow-context{display:none!important}

/* laptop strip: the phase map rides along as inline checkpoints (counts stay in the guide) */
@media (min-width:900px){
  .spk-strip .spk-card{grid-template-columns:minmax(0,1fr) auto auto;grid-template-areas:"head map foot"}
  .spk-strip .spk-map{display:flex;grid-area:map;align-items:center;gap:12px;padding:0 6px 0 16px;border:0;background:transparent}
  .spk-strip .spk-map li{gap:6px;font-size:9.5px;white-space:nowrap}
  .spk-strip .spk-map span{overflow:visible}
  .spk-strip .spk-map i{width:11px;height:11px}
  .spk-strip .spk-map em{display:none}
}

@media (prefers-reduced-motion:reduce){
  .spk-hop,.spk-bar i,.spk-card,.spk-map i,.spk-jump,.spk-jump .spk-ja{transition:none}
  .spk-say.flash{animation:none}
}
