/* The departures board: housing, rail, blades (split flaps), status lamps, the Drive / KRYPHS switch,
   digit counters. The board is the same dark object in both themes.
   Without JavaScript every cell is a static blade showing its text. board.js turns cells into flaps. */
@layer tokens, base, components, sections, utilities;

@layer components{
  .board{position:relative;isolation:isolate;border-radius:var(--r-xl);background:linear-gradient(180deg, var(--board-rail), var(--board) 160px) var(--board);color:var(--blade-ink);box-shadow:var(--shadow-board);padding:0 clamp(10px, 1.4vw, 18px) clamp(12px, 1.4vw, 18px)}
  .board::before{content:"";position:absolute;inset:0;border-radius:inherit;border:1px solid var(--board-rim);pointer-events:none}
  .board :focus-visible{outline-color:var(--accent-soft)}

  /* rail: the strip along the top of the board */
  .board-rail{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;min-height:64px;padding:12px clamp(4px, .6vw, 8px);border-bottom:1px solid var(--board-rule);margin-bottom:8px}
  .rail-id{display:inline-flex;align-items:center;gap:10px;font-family:var(--mono);font-size:12px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--blade-ink)}
  .rail-id .dim{color:var(--blade-dim)}
  .rail-query{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:0 14px;border-radius:var(--r-pill);background:var(--blade-bot);border:1px solid var(--board-rim);font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--blade-dim);white-space:nowrap}
  .rail-query .ico{width:14px;height:14px}
  .rail-end{display:flex;align-items:center;gap:12px;margin-inline-start:auto}
  .board .tag-example{color:var(--blade-dim)}
  .board-foot{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:12px clamp(4px, .6vw, 8px) 2px;font-size:13px;line-height:1.5;color:var(--blade-dim)}
  .board-foot .in-pilot{margin-inline-start:0;background:color-mix(in srgb, var(--accent) 16%, var(--board));border-color:color-mix(in srgb, var(--accent-soft) 45%, transparent);color:var(--accent-soft)}
  .board-foot .in-pilot::before{background:var(--accent-soft)}

  /* status lamps */
  .lamp{display:inline-block;width:9px;height:9px;border-radius:50%;flex:none;background:var(--lamp-off)}
  .lamp[data-lamp="go"]{background:var(--lamp-go);box-shadow:0 0 0 3px color-mix(in srgb, var(--lamp-go) 18%, transparent), 0 0 14px color-mix(in srgb, var(--lamp-go) 55%, transparent)}
  .lamp[data-lamp="warn"]{background:var(--lamp-warn);box-shadow:0 0 0 3px color-mix(in srgb, var(--lamp-warn) 18%, transparent), 0 0 14px color-mix(in srgb, var(--lamp-warn) 50%, transparent)}
  .lamp[data-lamp="stop"]{background:var(--lamp-stop);box-shadow:0 0 0 3px color-mix(in srgb, var(--lamp-stop) 18%, transparent), 0 0 14px color-mix(in srgb, var(--lamp-stop) 50%, transparent)}
  .lamp[data-lamp="new"],.lamp.k{background:var(--lamp-new);box-shadow:0 0 0 3px color-mix(in srgb, var(--lamp-new) 20%, transparent), 0 0 14px var(--lamp-glow)}

  /* the table of blades */
  .board-table{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:5px 6px;margin:-6px 0;font-family:var(--mono);font-variant-numeric:tabular-nums}
  .board-table caption{caption-side:bottom}
  .board-table th{padding:4px 2px 2px 12px;font-size:11px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;text-align:start;color:var(--blade-dim);white-space:nowrap;overflow:hidden}
  .board-table th.n{text-align:end;padding-inline:0 12px}
  .board-table td{position:relative;height:48px;padding:0 12px;border-radius:var(--r-blade);background:linear-gradient(180deg, var(--blade-top) 0 50%, var(--blade-bot) 50% 100%) var(--blade-bot);box-shadow:0 1px 0 var(--blade-edge) inset, 0 2px 3px -1px var(--blade-hinge);font-size:16px;font-weight:500;letter-spacing:.02em;text-transform:uppercase;color:var(--blade-ink);white-space:nowrap;overflow:hidden;text-overflow:clip;vertical-align:middle}
  .board-table td::after{content:"";position:absolute;inset-inline:0;top:50%;height:1px;margin-top:-.5px;background:color-mix(in srgb, var(--blade-hinge) 62%, transparent);z-index:4;pointer-events:none}
  .board-table td::before{content:"";position:absolute;top:50%;inset-inline:-1px;height:6px;margin-top:-3px;border-inline:2px solid var(--blade-hinge);z-index:4;pointer-events:none}
  .board-table td.n{text-align:end}
  .board-table td.dim{color:var(--blade-dim)}
  .board-table td.st{padding-inline-start:30px}
  .board-table td.st .lamp{position:absolute;inset-inline-start:12px;top:50%;margin-top:-4.5px;z-index:5}
  .js .board-table[data-board]:not(.is-ready) td{color:transparent;animation:cell-show 0s 2.5s forwards}
  @keyframes cell-show{to{color:var(--blade-ink)}}
  html:not(.js) .switch{display:none}

  /* a flap module, built by board.js inside a cell */
  .flap{position:absolute;inset:0;perspective:420px;font:inherit;color:var(--blade-ink)}
  .f-half{position:absolute;inset-inline:0;height:50%;overflow:hidden}
  .f-top{top:0;border-radius:var(--r-blade) var(--r-blade) 0 0;background:var(--blade-top)}
  .f-bot{bottom:0;border-radius:0 0 var(--r-blade) var(--r-blade);background:var(--blade-bot)}
  .f-half>span{position:absolute;inset-inline:0;height:200%;display:flex;align-items:center;padding:0 12px}
  .f-top>span,.f-front>span{top:0}
  .f-bot>span,.f-back>span{bottom:0}
  .f-half b{display:block;min-width:0;flex:1;font-weight:inherit;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
  .n .f-half b{text-align:end}
  .dim .f-half b{color:var(--blade-dim)}
  .st .f-half>span{padding-inline-start:30px}
  .f-leaf{position:absolute;inset-inline:0;top:0;height:50%;z-index:2;transform-origin:50% 100%;transform-style:preserve-3d;will-change:auto}
  .f-front,.f-back{height:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden}
  .f-front{top:0;border-radius:var(--r-blade) var(--r-blade) 0 0;background:var(--blade-top)}
  .f-back{top:0;border-radius:0 0 var(--r-blade) var(--r-blade);background:var(--blade-bot);transform:rotateX(180deg)}
  .f-shade{position:absolute;inset:0;background:var(--blade-hinge);opacity:0;pointer-events:none}
  .flap.is-idle .f-leaf{visibility:hidden}

  /* digit counters (prices, calculator) */
  .digits{display:inline-flex;gap:4px;font-family:var(--mono);font-variant-numeric:tabular-nums;line-height:1;vertical-align:bottom}
  .dg{position:relative;display:inline-block;width:.74em;height:1.24em;border-radius:calc(var(--r-blade) + 1px);background:linear-gradient(180deg, var(--blade-top) 0 50%, var(--blade-bot) 50% 100%);box-shadow:0 1px 0 var(--blade-edge) inset, 0 3px 6px -2px var(--blade-hinge);color:var(--blade-ink);font-weight:500;text-align:center;overflow:hidden}
  .dg::after{content:"";position:absolute;inset-inline:0;top:50%;height:max(1px, .03em);margin-top:-.015em;background:color-mix(in srgb, var(--blade-hinge) 80%, transparent);z-index:4}
  .dg>i{font-style:normal;display:flex;align-items:center;justify-content:center;height:100%}
  .dg .f-half>span{justify-content:center;padding:0}
  .dg.sep{width:.36em}
  .dg.blank{opacity:.55}

  /* the Drive / KRYPHS switch */
  .switch{position:relative;display:inline-grid;grid-auto-flow:column;grid-auto-columns:max-content;padding:3px;border-radius:var(--r-pill);background:var(--blade-bot);border:1px solid var(--board-rim)}
  .switch button{position:relative;z-index:1;min-height:44px;padding:0 16px;border:0;border-radius:var(--r-pill);background:transparent;color:var(--blade-dim);font-family:var(--body);font-size:14px;font-weight:600;cursor:pointer;touch-action:manipulation;transition:color .25s var(--ease-out)}
  .switch button[aria-pressed="true"]{color:var(--blade-ink)}
  .switch-thumb{position:absolute;z-index:0;top:3px;bottom:3px;left:0;width:0;border-radius:var(--r-pill);background:var(--board-rim);transition:transform .45s var(--ease-out), width .45s var(--ease-out), background-color .3s var(--ease-out)}
  .switch.is-k .switch-thumb{background:var(--accent)}
  .no-thumb .switch-thumb{display:none}
  .no-thumb .switch button[aria-pressed="true"]{background:var(--board-rim)}
  .no-thumb .switch.is-k button[aria-pressed="true"]{background:var(--accent)}
  @media (hover:hover) and (pointer:fine){.switch button:hover{color:var(--blade-ink)}}

  /* question chips that drive a board */
  .asks-list{list-style:none;display:grid;gap:10px}
  .ask{display:flex;align-items:center;gap:12px;width:100%;min-height:52px;padding:10px 18px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface);color:var(--text);font-family:var(--body);font-size:16px;font-weight:500;text-align:start;cursor:pointer;touch-action:manipulation;transition:border-color .2s var(--ease-out), background-color .2s var(--ease-out), transform .12s var(--ease-out)}
  .ask .ico{width:18px;height:18px;color:var(--accent-text)}
  .ask[aria-pressed="true"]{border-color:var(--accent);background:var(--accent-wash)}
  .ask:active{transform:scale(.99)}
  @media (hover:hover) and (pointer:fine){.ask:hover{border-color:var(--line-strong)}}

  /* the AI assistant chat, set in the board's housing */
  .chat-log{display:grid;align-content:start;gap:14px;min-height:clamp(330px, 26vw, 380px);padding:18px clamp(4px, .6vw, 8px) 10px}
  .msg{font-size:15px;line-height:1.55}
  .msg.user{justify-self:end;max-width:84%;padding:12px 16px;border-radius:18px 18px 5px 18px;background:var(--accent);color:var(--on-accent);font-weight:500}
  .msg.bot{display:grid;grid-template-columns:32px minmax(0, 1fr);gap:10px;align-items:start;max-width:96%}
  .bot-av{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:var(--board-rim);color:var(--accent-soft)}
  .bot-av .ico{width:16px;height:16px}
  .bot-body{display:grid;gap:12px;padding:14px 16px;border-radius:5px 18px 18px 18px;background:var(--blade-bot);box-shadow:0 0 0 1px var(--board-rim);color:var(--blade-ink)}
  .bot-body b{color:var(--blade-ink);font-weight:600}
  .hit{display:grid;grid-template-columns:46px minmax(0, 1fr);gap:12px;align-items:center;padding:12px;border-radius:var(--r-md);background:var(--board);box-shadow:0 0 0 1px var(--board-rim)}
  .hit-thumb{display:grid;place-items:center;width:46px;height:58px;border-radius:var(--r-sm);background:linear-gradient(160deg, var(--accent-deep), var(--board-rail));color:var(--blade-ink)}
  .hit-thumb .ico{width:18px;height:18px}
  .hit-name{font-family:var(--mono);font-size:13px;letter-spacing:.02em;overflow-wrap:anywhere}
  .hit-meta{margin-top:2px;font-size:13px;color:var(--blade-dim)}
  .hit-warn{display:flex;align-items:center;gap:6px;margin-top:4px;font-size:13px;color:var(--lamp-warn)}
  .hit-warn .ico{width:14px;height:14px}
  .cmp{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .cmp div{display:grid;gap:4px;padding:12px 14px;border-radius:var(--r-sm);background:var(--board);box-shadow:0 0 0 1px var(--board-rim);font-family:var(--mono);font-size:13px}
  .cmp span{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--blade-dim)}
  .cmp b{font-weight:500;color:var(--blade-dim)}
  .cmp b.up{color:var(--lamp-go)}
  .todo{display:grid;gap:6px;padding-inline-start:20px}
  .chat-actions{display:flex;flex-wrap:wrap;gap:8px}
  .chat-actions span{padding:7px 13px;border-radius:var(--r-pill);box-shadow:0 0 0 1px var(--board-rim);font-size:13px;font-weight:500;color:var(--blade-ink)}
  .chat-actions .primary{background:var(--accent);box-shadow:none;color:var(--on-accent)}
  .msg.typing .bot-body{display:flex;gap:5px;justify-self:start;padding:15px 16px}
  .msg.typing i{width:7px;height:7px;border-radius:50%;background:var(--blade-dim);animation:dot 1s var(--ease-in-out) infinite}
  .msg.typing i:nth-child(2){animation-delay:.15s}.msg.typing i:nth-child(3){animation-delay:.3s}
  @keyframes dot{0%,60%,100%{transform:none;opacity:.45}30%{transform:translateY(-4px);opacity:1}}
  .chat-in{animation:msg-in .38s var(--ease-out) both}
  @keyframes msg-in{from{opacity:0;transform:translateY(10px) scale(.98)}}
  .chat .part{opacity:0;transform:translateY(6px);transition:opacity .32s var(--ease-out), transform .32s var(--ease-out)}
  .chat .part.shown{opacity:1;transform:none}
  @media (max-width:560px){.msg.user{max-width:92%}.msg.bot{max-width:100%}.chat-log{min-height:0}.hit{grid-template-columns:28px minmax(0, 1fr);gap:8px;padding:10px}.hit-thumb{width:28px;height:40px}}

  /* small screens: fewer columns, smaller blades */
  @media (max-width:1100px){.board-table .c-xl{display:none}}
  @media (max-width:760px){
    .board-table{border-spacing:4px 5px}
    .board-table td{height:40px;font-size:13px;padding:0 9px}
    .board-table td.st{padding-inline-start:26px}
    .board-table td.st .lamp{inset-inline-start:10px}
    .f-half>span{padding:0 9px}
    .st .f-half>span{padding-inline-start:26px}
    .board-table th{padding-inline-start:9px;font-size:10px;letter-spacing:.1em}
    .board-table th.n{padding-inline-end:9px}
    .board-table .c-md{display:none}
    .board-rail{gap:10px;min-height:0}
    .rail-query{display:none}
    .rail-end:has(.switch){width:100%;justify-content:space-between;margin-inline-start:0}
    .switch button{padding:0 12px;font-size:13px}
  }
  @media (max-width:420px){.board-table td{font-size:12px;letter-spacing:0}}
}
