
  /* ---- terminal app ---- */
  .term{flex:1;background:#0a0e16;color:#d6e4da;font-family:var(--term-font,var(--mono));font-size:var(--term-size,13px);
    padding:12px 14px;overflow-y:auto;line-height:1.55;user-select:text}
  .term .row{white-space:pre-wrap;word-break:break-word}
  .term .pr{color:var(--accent)} .term .path{color:var(--accent2)}
  .term .ok{color:var(--accent)} .term .err{color:var(--red)} .term .dim{color:var(--ink-faint)}
  .term .amb{color:var(--amber)}
  .term .inputline{display:flex;align-items:baseline;gap:0}
  .term .inputline input{flex:1;background:none;border:none;outline:none;color:#d6e4da;
    font-family:var(--term-font,var(--mono));font-size:var(--term-size,13px);caret-color:var(--accent)}

  /* ---- prompt block cursor ----
     A 1px caret vanishes against #0a0e16, so the idle prompt gets a real block. It is an absolutely
     positioned ::after on the `$ ` marker: out of flow, so nothing shifts when it appears or goes,
     and it lands exactly where the first typed character will.
     Only on the LIVE, EMPTY line: every finished command leaves a disabled input behind, and an
     empty one of those would otherwise blink forever half a screen up. `:placeholder-shown` is the
     only way CSS can read "this field is empty" — hence the blank placeholder set in prompt().
     While typing, the native accent caret takes over, so the two never overlap. */
  .term .tex-sig{position:relative}
  .term .inputline:has(input:placeholder-shown:not(:disabled)) .tex-sig::after{
    content:"";position:absolute;left:100%;top:.14em;width:.58em;height:1.02em;
    background:var(--accent);opacity:.9;animation:texCaret 1.2s steps(1,end) infinite}
  .term .inputline:has(input:placeholder-shown:not(:disabled)) input{caret-color:transparent}
  /* Unhurried on purpose: a fast blink reads as an error light. body.reduce-motion kills every
     animation globally (14-mail.css), and the base opacity above leaves the block solid — the
     "waiting for you" signal survives with the movement gone. */
  @keyframes texCaret{0%,54%{opacity:.9}55%,100%{opacity:0}}