/* cab.css — the shared cabinet view system's stylesheet (docs/cabinet-card-controls.md).
   SINGLE SOURCE: the dashboard loads it after app.css; module (iframe) tabs load the generated copy
   kit/cab-kit.css (python3 scripts/build_cab_kit.py). Tab-specific rules (#tab-…) do NOT belong here — they stay in app.css.
   New cabinet card style = ONE `.cab-card--<type>` block appended to the "Cabinet style variants" section at the end. */
/* ══ Cabinet view system v3 (2026-10-11) — docs/cabinet-card-anatomy.md · cabinet-card-controls.md ══════════
   Card = content + a floated tools cluster. Controls are FLAT own-class buttons (cab-tb / cab-fc / cab-ib / cab-fb),
   never ra-btn/ra-pill, so loud themes (carnival, neubrutalism…) can't turn dozens of controls into stamps. */
/* ── command bar: one compact row ── */
.cab-bar{display:flex;flex-wrap:wrap;align-items:center;gap:calc(6px * var(--ra-density,1))}
.cab-bar-filters{margin-top:calc(6px * var(--ra-density,1))}
.cab-bar-search{flex:1 1 200px;min-width:150px;max-width:380px}
.cab-bar-extra{display:contents}
html body .cab-bar select,html body .cab-bar input.cab-bar-search:not([type=color]):not([type=range]),html body .cab-bulk select{background-image:none!important;background-color:var(--ra-surface-1)!important;box-sizing:border-box;height:calc(26px * var(--ra-density,1))!important;min-height:0!important;padding:0 calc(8px * var(--ra-density,1))!important;font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1))!important;border-width:1px!important;box-shadow:none!important;border-radius:var(--ra-radius-sm)!important;width:auto}
.cab-bar input.cab-bar-search{width:auto}
.cab-tb,.cab-fc,.cab-fb,.cab-lnk,.cab-ib{appearance:none;font:inherit;cursor:pointer;box-shadow:none;text-shadow:none;background-image:none;clip-path:none;text-transform:none;letter-spacing:normal}
.cab-tb{display:inline-flex;align-items:center;justify-content:center;height:calc(26px * var(--ra-density,1));min-width:calc(26px * var(--ra-density,1));padding:0 calc(8px * var(--ra-density,1));border:1px solid var(--ra-border);background:var(--ra-card-bg);color:var(--ra-text-mid);border-radius:var(--ra-radius-sm);font-size:calc(12px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1}
.cab-tb-primary{background:var(--ra-accent-bg);color:var(--ra-accent-strong,var(--ra-accent));border-color:var(--ra-accent-border);font-weight:700}
.cab-tb:hover{border-color:var(--ra-border-strong);color:var(--ra-text)}
.cab-tb[aria-pressed="true"]{background:var(--ra-accent-bg);color:var(--ra-accent-strong,var(--ra-accent));border-color:var(--ra-accent-border)}
.cab-seg{display:inline-flex}.cab-seg .cab-tb{border-radius:0;margin-left:-1px}.cab-seg .cab-tb:first-child{border-radius:var(--ra-radius-sm) 0 0 var(--ra-radius-sm);margin-left:0}.cab-seg .cab-tb:last-child{border-radius:0 var(--ra-radius-sm) var(--ra-radius-sm) 0}.cab-seg .cab-tb[aria-pressed="true"]{position:relative;z-index:1}
.cab-fcs{display:inline-flex;flex-wrap:wrap;gap:calc(4px * var(--ra-density,1))}
.cab-fc{display:inline-flex;align-items:center;gap:calc(5px * var(--ra-density,1));height:calc(24px * var(--ra-density,1));padding:0 calc(10px * var(--ra-density,1));border:1px solid var(--ra-border);background:transparent;color:var(--ra-text-mid);border-radius:var(--ra-radius-pill);font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1;white-space:nowrap}
.cab-fc i{font-style:normal;font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));opacity:.7}
.cab-fc:hover{border-color:var(--ra-border-strong);color:var(--ra-text)}
.cab-fc[aria-pressed="true"]{background:var(--ra-accent-bg);color:var(--ra-accent-strong,var(--ra-accent));border-color:var(--ra-accent-border)}
.cab-count{margin-left:auto;font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-faint);white-space:nowrap}
.cab-fb{display:inline-flex;align-items:center;gap:calc(4px * var(--ra-density,1));height:calc(24px * var(--ra-density,1));padding:0 calc(10px * var(--ra-density,1));border:1px solid var(--ra-border);background:transparent;color:var(--ra-text-mid);border-radius:var(--ra-radius-sm);font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1;white-space:nowrap}
.cab-fb:hover{border-color:var(--ra-border-strong);color:var(--ra-text)}
.cab-fb-primary{background:var(--ra-accent-bg);color:var(--ra-accent-strong,var(--ra-accent));border-color:var(--ra-accent-border)}
.cab-fb-danger{color:var(--ra-danger);border-color:var(--ra-danger-border,var(--ra-border))}
.cab-lnk{border:0;background:none;padding:0 calc(6px * var(--ra-density,1));color:var(--ra-text-faint);font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));text-transform:none}.cab-lnk:hover{color:var(--ra-accent)}
.cab-ib{display:inline-flex;align-items:center;justify-content:center;width:calc(22px * var(--ra-density,1));height:calc(22px * var(--ra-density,1));padding:0;border:0;background:transparent;color:var(--ra-text-dim);border-radius:var(--ra-radius-sm);font-size:calc(12px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1}
.cab-ib:hover{background:var(--ra-surface-2);color:var(--ra-text)}
/* ── grid / host ── */
.cab-host{display:block!important;grid-template-columns:none!important}
.cab-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,calc(var(--cab-min-w,320px) * var(--cab-dens-scale,1))),1fr));gap:calc(12px * var(--ra-density,1));align-items:stretch}
.cab-host[data-density="compact"]{--cab-dens-scale:1}.cab-host[data-density="detailed"]{--cab-dens-scale:1.12}
.cab-group-hdr{display:flex;align-items:center;gap:calc(8px * var(--ra-density,1));padding:calc(4px * var(--ra-density,1)) calc(10px * var(--ra-density,1));background:var(--ra-surface-2);border-left:3px solid var(--ra-accent);border-radius:var(--ra-radius-sm);font-weight:700;font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));letter-spacing:.06em;text-transform:uppercase;color:var(--ra-text-faint);margin:calc(14px * var(--ra-density,1)) 0 calc(6px * var(--ra-density,1))}
.cab-empty{color:var(--ra-text-faint);padding:calc(14px * var(--ra-density,1))}
.cab-more{display:flex;justify-content:center;padding:calc(12px * var(--ra-density,1)) 0}
/* ── card ── */
.cab-card{--cab-accent:var(--ra-border-strong);--cab-accent-bg:var(--ra-surface-2);position:relative;container-type:inline-size;overflow:hidden;display:flex;flex-direction:column;gap:calc(5px * var(--ra-density,1));background:var(--ra-card-bg);border:1px solid var(--ra-border);border-top:3px solid var(--cab-accent);border-radius:var(--ra-card-radius);padding:calc(8px * var(--ra-density,1)) calc(10px * var(--ra-density,1));box-sizing:border-box;min-width:0;height:auto;transition:border-color var(--ra-motion) var(--ra-ease),transform var(--ra-motion) var(--ra-ease),box-shadow var(--ra-motion) var(--ra-ease)}
.cab-card:not(.cab-card-editing):hover{transform:translateY(-1px);box-shadow:var(--ra-shadow-1);border-color:var(--ra-border-strong)}
.cab-card-editing{grid-column:1/-1;border-top-color:var(--ra-accent)}
.cab-card.cab-clickable{cursor:pointer}
.cab-card:focus-visible,.cab-row:focus-visible,.cab-table tr:focus-visible{outline:2px solid var(--ra-accent);outline-offset:2px}
.cab-card:has(.cab-select:checked),.cab-row:has(.cab-select:checked){outline:2px solid var(--ra-accent);outline-offset:-2px;background:var(--ra-accent-bg)}
.cab-card[data-accent-style="left"]{border-top:1px solid var(--ra-border);border-left:3px solid var(--cab-accent)}
.cab-card[data-accent-style="none"],.cab-card[data-accent-style="ring"],.cab-card[data-accent-style="ribbon"]{border-top:1px solid var(--ra-border)}
.cab-card[data-accent-style="ribbon"]::before{content:"";position:absolute;top:0;left:0;border-style:solid;border-width:calc(20px * var(--ra-density,1)) calc(20px * var(--ra-density,1)) 0 0;border-color:var(--cab-accent) transparent transparent;z-index:1;pointer-events:none}
.cab-host[data-density="compact"] .cab-card:not(.cab-card-editing){padding:calc(7px * var(--ra-density,1)) calc(10px * var(--ra-density,1));gap:calc(4px * var(--ra-density,1))}
.cab-card-view{display:flex;flex-direction:column;gap:calc(5px * var(--ra-density,1));flex:1;min-width:0}
.cab-card-head{display:flex;align-items:flex-start;gap:calc(8px * var(--ra-density,1))}
.cab-card-titlewrap>.cab-tools{float:right;margin:calc(-3px * var(--ra-density,1)) calc(-4px * var(--ra-density,1)) 0 calc(6px * var(--ra-density,1))}
.cab-tools{display:inline-flex;align-items:center;gap:calc(1px * var(--ra-density,1));flex-shrink:0;margin:calc(-2px * var(--ra-density,1)) calc(-4px * var(--ra-density,1)) 0 0}
.cab-edit-btn,.cab-card-act{opacity:.6}
.cab-more-btn{opacity:0}
.cab-card:hover .cab-edit-btn,.cab-card:focus-within .cab-edit-btn,.cab-card:hover .cab-card-act,.cab-card:focus-within .cab-card-act,.cab-row:hover .cab-edit-btn,.cab-row:hover .cab-card-act{opacity:1}
.cab-card:hover .cab-more-btn,.cab-card:focus-within .cab-more-btn,.cab-row:hover .cab-more-btn,.cab-row:focus-within .cab-more-btn,.cab-more-btn:focus-visible{opacity:.85}
@media (hover:none){.cab-edit-btn,.cab-card-act{opacity:1}.cab-more-btn{opacity:.85}}
.cab-card-titlewrap{display:block;flex:1;min-width:0}
.cab-card-title{display:inline;margin:0;font-size:calc(12px * var(--fsc,1) * var(--ra-fs-scale,1));font-weight:700;line-height:1.35;color:var(--ra-text-bright);cursor:pointer;overflow-wrap:anywhere}
.cab-card-title:hover{color:var(--ra-accent)}
.cab-card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:calc(5px * var(--ra-density,1));font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-faint);min-width:0}
.cab-card-meta>*{max-width:100%}
.cab-card-stale{color:var(--ra-warn)}
.cab-badge{font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));font-weight:700;letter-spacing:.03em;text-transform:uppercase;padding:1px calc(7px * var(--ra-density,1));border-radius:var(--ra-radius-pill);border:1px solid var(--cab-tone,var(--ra-border-strong));color:var(--cab-tone,var(--ra-text-mid));background:var(--cab-tone-bg,transparent);white-space:nowrap}
.cab-badge-btn{appearance:none;font-family:inherit;line-height:inherit;cursor:pointer;box-shadow:none;background-image:none}.cab-badge-btn:hover{filter:brightness(1.15)}
.cab-card-text{font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1.45;color:var(--ra-text-mid);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.cab-card-callout{font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1.4;color:var(--ra-text);padding:calc(6px * var(--ra-density,1)) calc(8px * var(--ra-density,1));background:var(--cab-accent-bg);border-left:3px solid var(--cab-accent)}
.cab-card-label{display:block;font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));letter-spacing:.06em;text-transform:uppercase;font-weight:700;color:var(--ra-text-faint)}
.cab-card-chips{display:flex;flex-wrap:wrap;gap:calc(4px * var(--ra-density,1));margin-top:auto}
.cab-chip{font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-mid);background:var(--ra-surface-2);border-radius:var(--ra-radius-pill);padding:1px calc(7px * var(--ra-density,1))}
.cab-card .win-fk-chip,.cab-card .project-domain-chip,.cab-row .win-fk-chip{display:inline-block;max-width:calc(50% - 4px);font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1))!important;padding:1px calc(6px * var(--ra-density,1))!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
.cab-card-foot{display:flex;flex-wrap:wrap;gap:calc(6px * var(--ra-density,1));margin-top:auto;padding-top:calc(5px * var(--ra-density,1));border-top:1px solid var(--ra-divider)}
@container (max-width:200px){.cab-card-text,.cab-card-chips,.cab-card-callout,.cab-card-foot,.cab-kv{display:none}}
/* zone A: lead art + select checkbox that replaces it on hover/focus/select-mode */
.cab-lead{position:relative;flex-shrink:0;display:inline-grid;place-items:center;width:calc(26px * var(--ra-density,1));height:calc(26px * var(--ra-density,1));margin:0}
.cab-lead-art{display:grid;place-items:center;transition:opacity var(--ra-motion) var(--ra-ease)}
.cab-lead-emoji{font-size:calc(15px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1}
.cab-lead-bare{width:calc(18px * var(--ra-density,1))}
.cab-select{position:absolute;inset:0;margin:auto;width:calc(17px * var(--ra-density,1));height:calc(17px * var(--ra-density,1));opacity:0;pointer-events:none;cursor:pointer;accent-color:var(--ra-accent);transition:opacity var(--ra-motion) var(--ra-ease)}
.cab-card:hover .cab-select,.cab-row:hover .cab-select,.cab-card:focus-within .cab-select,.cab-row:focus-within .cab-select,.cab-host[data-selecting="true"] .cab-select,.cab-select:checked{opacity:1;pointer-events:auto}
.cab-card:hover .cab-lead-sel:not(.cab-lead-bare) .cab-lead-art,.cab-row:hover .cab-lead-sel:not(.cab-lead-bare) .cab-lead-art,.cab-card:focus-within .cab-lead-sel:not(.cab-lead-bare) .cab-lead-art,.cab-host[data-selecting="true"] .cab-lead-sel:not(.cab-lead-bare) .cab-lead-art,.cab-lead-sel:has(.cab-select:checked) .cab-lead-art{opacity:0}
@media (hover:none){.cab-lead{width:auto;display:inline-flex;gap:calc(4px * var(--ra-density,1))}.cab-select{position:static;opacity:1;pointer-events:auto;margin:0}.cab-lead-art{opacity:1!important}}
.cab-td-sel{width:calc(30px * var(--ra-density,1))}.cab-td-sel .cab-select{position:static;opacity:1;pointer-events:auto}
/* edit form */
.cab-field{display:flex;flex-direction:column;gap:calc(2px * var(--ra-density,1));flex:1;min-width:0}
.cab-field>.ra-input,.cab-field>.ra-select,.cab-field>input,.cab-field>select,.cab-field>textarea{width:100%;box-sizing:border-box}
.cab-field-row{display:flex;gap:calc(8px * var(--ra-density,1))}
.cab-card-form{display:flex;flex-direction:column;gap:calc(10px * var(--ra-density,1))}
.cab-card-editing{gap:calc(10px * var(--ra-density,1))}
.cab-card-actions{display:flex;gap:calc(8px * var(--ra-density,1))}
/* ── list rows ── */
.cab-list{display:flex;flex-direction:column}
.cab-row{position:relative;display:flex;align-items:center;gap:calc(8px * var(--ra-density,1));padding:calc(6px * var(--ra-density,1)) calc(6px * var(--ra-density,1)) calc(6px * var(--ra-density,1)) calc(10px * var(--ra-density,1));border-bottom:1px solid var(--ra-divider);border-left:3px solid var(--cab-accent);min-width:0;transition:background var(--ra-motion) var(--ra-ease)}
.cab-row.cab-clickable{cursor:pointer}.cab-row:hover{background:var(--ra-surface-2)}
.cab-row .cab-lead{float:none;margin:0}
.cab-row-main{flex:1;min-width:0}
.cab-row-line{display:flex;flex-wrap:wrap;align-items:baseline;gap:calc(4px * var(--ra-density,1)) calc(8px * var(--ra-density,1))}
.cab-row-title{font-size:calc(12px * var(--fsc,1) * var(--ra-fs-scale,1));font-weight:600;color:var(--ra-text-bright);cursor:pointer;overflow-wrap:anywhere}.cab-row-title:hover{color:var(--ra-accent)}
.cab-row-text{font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cab-tools-row{float:none;margin:0;flex-shrink:0}
.cab-row-editing{padding:calc(8px * var(--ra-density,1)) 0}
/* ── kanban / table / timeline ── */
.cab-kanban{display:flex;align-items:flex-start;gap:calc(10px * var(--ra-density,1));overflow-x:auto;padding-bottom:calc(8px * var(--ra-density,1))}
.cab-kcol{flex:0 0 240px;background:var(--ra-surface-2);border-radius:var(--ra-radius-md);padding:calc(8px * var(--ra-density,1));min-height:80px;max-height:70vh;overflow-y:auto;display:flex;flex-direction:column;gap:calc(6px * var(--ra-density,1))}
.cab-kcol-hdr{font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));letter-spacing:.06em;text-transform:uppercase;font-weight:700}
.cab-kcol [draggable]{cursor:grab}
.cab-card-mini{padding:calc(8px * var(--ra-density,1)) calc(10px * var(--ra-density,1));gap:calc(4px * var(--ra-density,1))}
.cab-table-wrap{overflow-x:auto;background:var(--ra-card-bg);border:1px solid var(--ra-border);border-radius:var(--ra-card-radius,var(--ra-radius-md))}.cab-tr-group>td{padding:0!important;border:0!important}.cab-tr-group .cab-group-hdr{margin:calc(6px * var(--ra-density,1)) 0 0;border-radius:0}.cab-table thead th{background:var(--ra-surface-2)}.cab-table{width:100%}.cab-table td{vertical-align:middle}
.cab-th-sort{all:unset;cursor:pointer}
.cab-td-act{width:calc(36px * var(--ra-density,1))}
.cab-timeline{display:flex;flex-direction:column;gap:calc(2px * var(--ra-density,1))}
.cab-tl-axis{display:flex;justify-content:space-between;font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-faint);padding:0 calc(90px * var(--ra-density,1)) calc(4px * var(--ra-density,1)) calc(160px * var(--ra-density,1))}
.cab-tl-row{display:flex;align-items:center;gap:calc(8px * var(--ra-density,1));padding:calc(3px * var(--ra-density,1)) 0}
.cab-tl-label{width:calc(152px * var(--ra-density,1));flex-shrink:0;font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-mid);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cab-tl-label:hover{color:var(--ra-accent)}
.cab-tl-track{flex:1;position:relative;height:10px;background:var(--ra-surface-2);border-radius:var(--ra-radius-sm)}
.cab-tl-dot{position:absolute;top:50%;width:10px;height:10px;transform:translate(-50%,-50%);border-radius:50%;background:var(--cab-accent)}
.cab-tl-date{width:calc(80px * var(--ra-density,1));flex-shrink:0;text-align:right;font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-faint)}
/* ── popovers ── */
.cab-pop{position:fixed;z-index:calc(var(--ra-z-overlay,100) + 3);display:flex;flex-direction:column;min-width:170px;max-width:340px;max-height:70vh;overflow:auto;background:var(--ra-card-bg);border:1px solid var(--ra-border-strong);border-radius:var(--ra-radius-md);box-shadow:var(--ra-shadow-2);padding:calc(4px * var(--ra-density,1))}
.cab-pop-title{font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));letter-spacing:.08em;text-transform:uppercase;color:var(--ra-text-faint);padding:calc(8px * var(--ra-density,1)) calc(8px * var(--ra-density,1)) calc(2px * var(--ra-density,1))}
button.cab-pop-item,label.cab-pop-item,div.cab-pop-item{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:calc(6px * var(--ra-density,1));cursor:pointer;font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));padding:calc(6px * var(--ra-density,1)) calc(8px * var(--ra-density,1));border-radius:var(--ra-radius-sm);color:var(--ra-text)}
button.cab-pop-item:hover,button.cab-pop-item:focus-visible,label.cab-pop-item:hover{background:var(--ra-surface-2)}
.cab-pop-item.on{font-weight:700;color:var(--ra-accent)}.cab-pop-item.danger{color:var(--ra-danger)}
.cab-pop-row{display:flex;align-items:center}.cab-pop-row .cab-pop-item{flex:1}.cab-pop-x{all:unset;cursor:pointer;color:var(--ra-text-faint);padding:0 calc(8px * var(--ra-density,1))}.cab-pop-x:hover{color:var(--ra-danger)}
.cab-peek{padding:calc(8px * var(--ra-density,1));max-width:340px;display:flex;flex-direction:column;gap:calc(6px * var(--ra-density,1))}.cab-peek p{margin:0;font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-mid)}.cab-peek-title{font-weight:700;color:var(--ra-text-bright)}
.cab-bulk{position:sticky;top:0;z-index:2;display:flex;flex-wrap:wrap;align-items:center;gap:calc(6px * var(--ra-density,1));background:var(--ra-accent-bg);border:1px solid var(--ra-accent-border);border-radius:var(--ra-radius-md);padding:calc(6px * var(--ra-density,1)) calc(10px * var(--ra-density,1));margin-bottom:calc(10px * var(--ra-density,1));font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1))}
/* ── archetype slots ── */
.cab-cover{width:100%;aspect-ratio:var(--cab-media-aspect,4/3);overflow:hidden;border-radius:var(--ra-radius-sm);background:var(--ra-surface-2);display:grid;place-items:center}
.cab-cover img{width:100%;height:100%;object-fit:cover;display:block}.cab-cover-fb{font-size:calc(32px * var(--fsc,1) * var(--ra-fs-scale,1))}
.cab-progress{display:flex;align-items:center;gap:calc(8px * var(--ra-density,1))}
.cab-progress-bar{flex:1;height:6px;border-radius:var(--ra-radius-pill);background:var(--ra-progress-track);overflow:hidden}.cab-progress-bar>span{display:block;height:100%;background:var(--cab-accent)}
.cab-progress-lbl{font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-dim);white-space:nowrap}
.cab-streak{display:flex;align-items:center;gap:calc(8px * var(--ra-density,1))}.cab-streak-n{font-weight:700;font-size:calc(12px * var(--fsc,1) * var(--ra-fs-scale,1))}
.cab-streak-dots{display:inline-flex;gap:calc(4px * var(--ra-density,1))}.cab-streak-dots i{width:8px;height:8px;border-radius:50%;background:var(--ra-surface-3,var(--ra-surface-2));border:1px solid var(--ra-border)}.cab-streak-dots i.on{background:var(--cab-accent);border-color:var(--cab-accent)}
.cab-kv{margin:0;display:flex;flex-direction:column;gap:calc(3px * var(--ra-density,1))}.cab-kv>div{display:flex;gap:calc(8px * var(--ra-density,1));align-items:baseline;font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1))}
.cab-kv dt{flex:0 0 calc(70px * var(--ra-density,1));color:var(--ra-text-faint);font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));text-transform:uppercase;letter-spacing:.05em}.cab-kv dd{margin:0;color:var(--ra-text);overflow-wrap:anywhere;display:flex;align-items:center;gap:calc(4px * var(--ra-density,1))}
.cab-copy{width:auto;height:auto;padding:0 calc(5px * var(--ra-density,1))}
.cab-amount{margin-left:auto;font-variant-numeric:tabular-nums;font-weight:700;white-space:nowrap;font-size:calc(12px * var(--fsc,1) * var(--ra-fs-scale,1))}.cab-amount-ok{color:var(--ra-ok)}.cab-amount-danger{color:var(--ra-danger)}
.cab-datechip{display:grid;place-items:center;min-width:calc(34px * var(--ra-density,1));padding:calc(2px * var(--ra-density,1)) calc(6px * var(--ra-density,1));border-radius:var(--ra-radius-md);background:var(--cab-accent-bg);font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));font-weight:700;line-height:1.1;text-align:center}
.cab-a-person .cab-lead{width:calc(34px * var(--ra-density,1));height:calc(34px * var(--ra-density,1))}.cab-a-person .cab-lead-art{width:calc(30px * var(--ra-density,1));height:calc(30px * var(--ra-density,1));border-radius:50%;border:2px solid var(--cab-accent);overflow:hidden;background:var(--cab-accent-bg);font-weight:700}
/* filter row: dropdowns and toggles are the SAME pill as the chips (one control vocabulary, any theme) */
html body .cab-bar-filters select{appearance:none!important;-webkit-appearance:none!important;height:calc(24px * var(--ra-density,1))!important;padding:0 calc(22px * var(--ra-density,1)) 0 calc(10px * var(--ra-density,1))!important;border:1px solid var(--ra-border)!important;border-style:solid!important;border-radius:var(--ra-radius-pill)!important;background-color:transparent!important;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M0 0l4 5 4-5z' fill='%23888'/%3E%3C/svg%3E")!important;background-repeat:no-repeat!important;background-position:right calc(8px * var(--ra-density,1)) center!important;color:var(--ra-text-mid)!important;font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1))!important;max-width:calc(150px * var(--ra-density,1));text-overflow:ellipsis}
html body .cab-bar-filters select:hover{border-color:var(--ra-border-strong)!important;color:var(--ra-text)!important}
html body .cab-bar-filters select:not([data-all]):not(:has(option:checked[value="all"])):not(:has(option:checked[value=""])){background-color:var(--ra-accent-bg)!important;color:var(--ra-accent-strong,var(--ra-accent))!important;border-color:var(--ra-accent-border)!important}
.cab-bar-filters .cab-count{margin-left:auto}
.cab-card.cab-dim{opacity:.6}
/* compat cards (Todos): selection checkbox only shows while the host is in select mode */
.cab-compat-sel{display:none;flex-shrink:0;align-items:center;padding-top:calc(3px * var(--ra-density,1))}
.cab-host[data-selecting="true"] .cab-compat-sel{display:inline-flex}
.cab-compat-sel .cab-select{position:static;opacity:1;pointer-events:auto;margin:0}
.cab-host:has(>.cab-bulk) .cab-compat-sel{display:inline-flex}
.cab-tb{white-space:nowrap}
.cab-kcol.cab-over{outline:2px dashed var(--ra-accent);outline-offset:-2px;background:var(--ra-accent-bg)}
.cab-kcol.cab-over{outline:2px dashed var(--ra-accent);outline-offset:-2px;background:var(--ra-accent-bg)}
.cab-card-sub{font-weight:400;color:var(--ra-text-mid);font-size:.88em;margin-left:calc(4px * var(--ra-density,1))}
/* ── detail dialog (core-cab-detail.js) — module tabs only; the dashboard uses showBacklinks() ── */
.cab-modal{position:fixed;inset:0;z-index:var(--ra-z-overlay,1000);background:color-mix(in srgb,var(--ra-bg) 68%,transparent);backdrop-filter:blur(2px);display:grid;place-items:center;padding:calc(16px * var(--ra-density,1))}
.cab-modal-box{width:min(560px,100%);max-height:min(86vh,100%);display:flex;flex-direction:column;background:var(--ra-card-bg,var(--ra-surface-1));color:var(--ra-text);border:var(--ra-border-w,1px) solid var(--ra-accent-border);border-radius:var(--ra-radius-lg);box-shadow:var(--ra-shadow-2)}
.cab-modal-head{display:flex;align-items:center;justify-content:space-between;gap:calc(10px * var(--ra-density,1));padding:calc(12px * var(--ra-density,1)) calc(16px * var(--ra-density,1));border-bottom:var(--ra-border-w,1px) solid var(--ra-border)}
.cab-modal-title{margin:0;font-size:var(--ra-fs-lg,15px);color:var(--ra-text-bright);font-family:var(--ra-font-display,var(--ra-font-body))}
.cab-modal-body{padding:calc(12px * var(--ra-density,1)) calc(16px * var(--ra-density,1));overflow:auto;display:flex;flex-direction:column;gap:calc(10px * var(--ra-density,1))}
.cab-modal-foot{display:flex;flex-wrap:wrap;gap:calc(6px * var(--ra-density,1));padding:calc(10px * var(--ra-density,1)) calc(16px * var(--ra-density,1));border-top:var(--ra-border-w,1px) solid var(--ra-border)}
.cab-kv-wide dt{flex-basis:calc(110px * var(--ra-density,1))}
.cab-kv-wide dd{margin:0;min-width:0;overflow-wrap:anywhere}

/* ══ View plugins (core-cab-views*.js, 2026-10-12): calendar · heatmap · roadmap · gallery · ticker · report · matrix · tree · treemap · pivot · swimlane · triage · split · compare · map ══
   Token-only; sizes follow --ra-density / --ra-fs-scale like the rest of the system. */
.cab-vbar{display:flex;flex-wrap:wrap;align-items:center;gap:calc(6px * var(--ra-density,1));margin:0 0 calc(8px * var(--ra-density,1))}
.cab-vtitle{font-size:calc(13px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text);min-width:calc(120px * var(--ra-density,1));text-align:center}
.cab-vnote{font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-faint)}
.cab-vchip{all:unset;box-sizing:border-box;display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));padding:calc(2px * var(--ra-density,1)) calc(6px * var(--ra-density,1));border-radius:var(--ra-radius-sm);background:color-mix(in srgb,var(--cab-accent,var(--ra-accent)) 16%,var(--ra-card-bg));border-left:3px solid var(--cab-accent,var(--ra-accent));color:var(--ra-text)}
.cab-vchip:hover,.cab-vchip:focus-visible{background:color-mix(in srgb,var(--cab-accent,var(--ra-accent)) 30%,var(--ra-card-bg))}
/* calendar */
.cab-cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:calc(1px * var(--ra-density,1));background:var(--ra-border);border:1px solid var(--ra-border);border-radius:var(--ra-radius-md);overflow:hidden}
.cab-cal-dow{background:var(--ra-surface-2);padding:calc(4px * var(--ra-density,1));font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));letter-spacing:.06em;text-transform:uppercase;color:var(--ra-text-faint);text-align:center}
.cab-cal-day{background:var(--ra-card-bg);min-height:calc(86px * var(--ra-density,1));padding:calc(3px * var(--ra-density,1));display:flex;flex-direction:column;gap:calc(2px * var(--ra-density,1));min-width:0}
.cab-cal-day.out{opacity:.45}.cab-cal-day.today{box-shadow:inset 0 0 0 2px var(--ra-accent)}.cab-cal-day.sel{background:var(--ra-accent-bg)}
.cab-cal-day.cab-over{outline:2px dashed var(--ra-accent);outline-offset:-2px}
.cab-cal-num{all:unset;cursor:pointer;align-self:flex-start;font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-mid);padding:0 calc(3px * var(--ra-density,1));border-radius:var(--ra-radius-sm)}.cab-cal-num:hover,.cab-cal-num:focus-visible{background:var(--ra-surface-2)}
.cab-cal-num i{font-style:normal;margin-left:calc(4px * var(--ra-density,1));color:var(--ra-accent)}
.cab-cal-more{all:unset;cursor:pointer;font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-faint);padding:0 calc(3px * var(--ra-density,1))}.cab-cal-more:hover{color:var(--ra-accent)}
/* heatmap */
.cab-hm-wrap{overflow-x:auto;padding-bottom:calc(6px * var(--ra-density,1))}
.cab-hm{display:inline-flex;gap:calc(3px * var(--ra-density,1))}.cab-hm-col{display:flex;flex-direction:column;gap:calc(3px * var(--ra-density,1))}
.cab-hm-cell{all:unset;box-sizing:border-box;display:inline-block;width:calc(12px * var(--ra-density,1));height:calc(12px * var(--ra-density,1));border-radius:calc(2px * var(--ra-density,1));background:var(--ra-surface-2);cursor:pointer}
.cab-hm-cell.none{background:transparent;cursor:default}
.cab-hm-cell.l1{background:color-mix(in srgb,var(--ra-accent) 25%,var(--ra-surface-2))}.cab-hm-cell.l2{background:color-mix(in srgb,var(--ra-accent) 50%,var(--ra-surface-2))}.cab-hm-cell.l3{background:color-mix(in srgb,var(--ra-accent) 75%,var(--ra-surface-2))}.cab-hm-cell.l4{background:var(--ra-accent)}
.cab-hm-cell.sel,.cab-hm-cell:focus-visible{outline:2px solid var(--ra-text);outline-offset:1px}
.cab-hm-legend{margin-left:auto;display:inline-flex;align-items:center;gap:calc(3px * var(--ra-density,1));font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-faint)}.cab-hm-legend .cab-hm-cell{cursor:default}
/* roadmap */
.cab-gantt{display:flex;flex-direction:column;gap:calc(2px * var(--ra-density,1))}
.cab-gt-row{display:flex;align-items:center;gap:calc(8px * var(--ra-density,1));padding:calc(3px * var(--ra-density,1)) 0}
.cab-gt-track{flex:1;position:relative;height:calc(14px * var(--ra-density,1));background:var(--ra-surface-2);border-radius:var(--ra-radius-sm);overflow:hidden}
.cab-gt-bar{position:absolute;top:calc(2px * var(--ra-density,1));bottom:calc(2px * var(--ra-density,1));border-radius:var(--ra-radius-sm);background:var(--cab-accent)}
.cab-gt-today{position:absolute;top:0;bottom:0;width:2px;background:var(--ra-text);opacity:.5;z-index:1}
/* gallery */
.cab-masonry{column-width:calc(var(--cab-min-w,240px) * .8);column-gap:calc(10px * var(--ra-density,1))}
.cab-tile{break-inside:avoid;margin:0 0 calc(10px * var(--ra-density,1));background:var(--ra-card-bg);border:1px solid var(--ra-border);border-radius:var(--ra-radius-md);overflow:hidden;cursor:pointer;position:relative}
.cab-tile:hover,.cab-tile:focus-visible{border-color:var(--cab-accent,var(--ra-accent))}
.cab-tile img{display:block;width:100%;height:auto}
.cab-tile-fallback{display:flex;align-items:center;justify-content:center;aspect-ratio:4/3;font-size:calc(34px * var(--fsc,1) * var(--ra-fs-scale,1));background:color-mix(in srgb,var(--cab-accent,var(--ra-accent)) 18%,var(--ra-surface-2));color:var(--cab-accent,var(--ra-accent))}
.cab-tile figcaption{padding:calc(6px * var(--ra-density,1)) calc(8px * var(--ra-density,1));font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* ticker + report + memory */
.cab-ticker{font-family:var(--ra-font-mono,ui-monospace,monospace);border:1px solid var(--ra-border);border-radius:var(--ra-radius-md);overflow:hidden;background:var(--ra-card-bg)}
.cab-tick{display:flex;gap:calc(10px * var(--ra-density,1));padding:calc(2px * var(--ra-density,1)) calc(8px * var(--ra-density,1));font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1.5;border-left:3px solid var(--cab-accent,transparent);min-width:0}
.cab-tick:nth-child(even){background:var(--ra-surface-2)}.cab-tick:hover,.cab-tick:focus-visible{background:var(--ra-accent-bg)}
.cab-tick-t{flex:0 1 55%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;color:var(--ra-text)}.cab-tick-m{flex:1 1 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ra-text-faint)}
textarea.cab-report{width:100%;box-sizing:border-box;font-family:var(--ra-font-mono,ui-monospace,monospace);font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));background:var(--ra-surface-1);color:var(--ra-text);border:1px solid var(--ra-border);border-radius:var(--ra-radius-md);padding:calc(8px * var(--ra-density,1))}
.cab-memory{display:flex;flex-direction:column;gap:calc(4px * var(--ra-density,1))}
/* matrix */
.cab-matrix{display:grid;grid-template-columns:calc(96px * var(--ra-density,1)) repeat(var(--cab-mx-cols,2),minmax(0,1fr));gap:calc(6px * var(--ra-density,1))}
.cab-mx-corner,.cab-mx-xh,.cab-mx-yh{font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));letter-spacing:.05em;text-transform:uppercase;color:var(--ra-text-faint);font-weight:700}
.cab-mx-yh{writing-mode:vertical-rl;transform:rotate(180deg);text-align:center;align-self:center;justify-self:center}
.cab-mx-cell{position:relative;min-height:calc(110px * var(--ra-density,1));background:var(--ra-surface-2);border-radius:var(--ra-radius-md);padding:calc(18px * var(--ra-density,1)) calc(6px * var(--ra-density,1)) calc(6px * var(--ra-density,1));display:flex;flex-direction:column;gap:calc(3px * var(--ra-density,1));min-width:0}
.cab-mx-cell.cab-over{outline:2px dashed var(--ra-accent);outline-offset:-2px;background:var(--ra-accent-bg)}.cab-mx-cell [draggable]{cursor:grab}
.cab-mx-n{position:absolute;top:calc(4px * var(--ra-density,1));right:calc(8px * var(--ra-density,1));font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-faint)}
/* tree */
.cab-tree{display:flex;flex-direction:column;gap:calc(4px * var(--ra-density,1))}
.cab-tree-kids{margin-left:calc(18px * var(--ra-density,1));padding-left:calc(10px * var(--ra-density,1));border-left:2px solid var(--ra-border);display:flex;flex-direction:column;gap:calc(4px * var(--ra-density,1));margin-top:calc(4px * var(--ra-density,1))}
.cab-tree-sum{display:flex;align-items:center;gap:calc(8px * var(--ra-density,1));cursor:pointer;list-style:none}.cab-tree-sum::-webkit-details-marker{display:none}.cab-tree-sum>*:first-child{flex:1;min-width:0}
.cab-tree-sum::before{content:"▸";color:var(--ra-text-faint)}details[open]>.cab-tree-sum::before{content:"▾"}
/* treemap */
.cab-treemap{position:relative;width:100%;aspect-ratio:100/56;background:var(--ra-surface-2);border-radius:var(--ra-radius-md);overflow:hidden}
.cab-tm-tile,.cab-tm-group{position:absolute;box-sizing:border-box;overflow:hidden;border:1px solid var(--ra-card-bg)}
.cab-tm-tile{background:color-mix(in srgb,var(--cab-accent,var(--ra-accent)) 45%,var(--ra-card-bg));color:var(--ra-text);padding:calc(3px * var(--ra-density,1)) calc(5px * var(--ra-density,1));font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));cursor:pointer;display:flex;flex-direction:column;line-height:1.25}
.cab-tm-tile:hover,.cab-tm-tile:focus-visible{background:color-mix(in srgb,var(--cab-accent,var(--ra-accent)) 70%,var(--ra-card-bg))}.cab-tm-tile i{font-style:normal;opacity:.7}
.cab-tm-group{pointer-events:none;border:2px solid var(--ra-border-strong);z-index:2}.cab-tm-group span{background:var(--ra-card-bg);color:var(--ra-text-mid);font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));padding:0 calc(4px * var(--ra-density,1));display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* pivot + compare */
.cab-pv-cell{background:linear-gradient(to right,color-mix(in srgb,var(--ra-accent) 28%,transparent) var(--cab-pv,0%),transparent 0)}
.cab-pivot tfoot th,.cab-pivot tfoot td,.cab-pv-tot{font-weight:700}
.cab-pivot tbody th,.cab-pivot tfoot th{white-space:nowrap;text-align:left}
.cab-compare th[data-cab-id]{min-width:calc(140px * var(--ra-density,1))}.cab-compare tr.cab-cmp-diff>*{background:var(--ra-accent-bg)}
/* swimlane */
.cab-swimlane{display:grid;grid-template-columns:calc(110px * var(--ra-density,1)) repeat(var(--cab-sl-cols,3),minmax(calc(180px * var(--ra-density,1)),1fr));gap:calc(6px * var(--ra-density,1));overflow-x:auto}
.cab-sl-lane{font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));font-weight:700;color:var(--ra-text-mid);padding-top:calc(6px * var(--ra-density,1));display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.cab-sl-cell{background:var(--ra-surface-2);border-radius:var(--ra-radius-md);padding:calc(6px * var(--ra-density,1));min-height:calc(48px * var(--ra-density,1));display:flex;flex-direction:column;gap:calc(6px * var(--ra-density,1));min-width:0}.cab-sl-cell.cab-over{outline:2px dashed var(--ra-accent);outline-offset:-2px;background:var(--ra-accent-bg)}.cab-sl-cell [draggable]{cursor:grab}
/* triage */
.cab-triage{max-width:calc(560px * var(--ra-density,1));margin:0 auto calc(10px * var(--ra-density,1))}
.cab-tri-bar{justify-content:center}kbd{font-family:inherit}.cab-tri-bar kbd,.cab-vbar kbd{font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1));border:1px solid var(--ra-border-strong);border-radius:var(--ra-radius-sm);padding:0 calc(4px * var(--ra-density,1));margin-right:calc(4px * var(--ra-density,1));color:var(--ra-text-faint)}
/* split */
.cab-split{display:grid;grid-template-columns:minmax(calc(200px * var(--ra-density,1)),1fr) 2fr;gap:calc(10px * var(--ra-density,1));align-items:start}
.cab-split-list{display:flex;flex-direction:column;max-height:70vh;overflow-y:auto;border:1px solid var(--ra-border);border-radius:var(--ra-radius-md);background:var(--ra-card-bg)}
.cab-split-item{all:unset;box-sizing:border-box;display:flex;flex-direction:column;gap:calc(1px * var(--ra-density,1));cursor:pointer;padding:calc(6px * var(--ra-density,1)) calc(10px * var(--ra-density,1));border-left:3px solid var(--cab-accent,transparent);border-bottom:1px solid var(--ra-border)}
.cab-split-item:hover,.cab-split-item:focus-visible{background:var(--ra-surface-2)}.cab-split-item.on{background:var(--ra-accent-bg)}
.cab-split-t{font-size:calc(12px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cab-split-m{font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cab-split-pane{border:1px solid var(--ra-border);border-radius:var(--ra-radius-md);background:var(--ra-card-bg);padding:calc(12px * var(--ra-density,1));min-width:0}
.cab-split-h{margin:0 0 calc(6px * var(--ra-density,1));font-size:calc(15px * var(--fsc,1) * var(--ra-fs-scale,1))}
.cab-split-row{display:grid;grid-template-columns:calc(110px * var(--ra-density,1)) 1fr;gap:calc(8px * var(--ra-density,1));padding:calc(3px * var(--ra-density,1)) 0;border-bottom:1px dashed var(--ra-border);font-size:calc(12px * var(--fsc,1) * var(--ra-fs-scale,1))}.cab-split-row>span{color:var(--ra-text-faint)}
/* map plot */
.cab-map{width:100%;height:auto;background:var(--ra-surface-2);border-radius:var(--ra-radius-md)}
.cab-map-pt{cursor:pointer}.cab-map-pt circle{fill:color-mix(in srgb,var(--ra-accent) 55%,transparent);stroke:var(--ra-accent);stroke-width:2}.cab-map-pt.on circle,.cab-map-pt:focus-visible circle{fill:var(--ra-accent)}.cab-map-pt text{fill:var(--ra-text);font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));pointer-events:none}
@media (max-width:640px){.cab-split{grid-template-columns:1fr}.cab-split-list{max-height:30vh}.cab-cal-day{min-height:calc(60px * var(--ra-density,1))}.cab-vchip{font-size:calc(9px * var(--fsc,1) * var(--ra-fs-scale,1))}.cab-matrix{grid-template-columns:calc(40px * var(--ra-density,1)) repeat(var(--cab-mx-cols,2),minmax(0,1fr))}}
/* ── controller v4 (2026-10-12): KPI strip · perf-budget banner · table power-ups ── */
.cab-kpis{display:flex;flex-wrap:wrap;gap:calc(6px * var(--ra-density,1));margin:calc(6px * var(--ra-density,1)) 0}
.cab-kpi{all:unset;box-sizing:border-box;cursor:pointer;display:inline-flex;align-items:baseline;gap:calc(6px * var(--ra-density,1));padding:calc(4px * var(--ra-density,1)) calc(10px * var(--ra-density,1));border:1px solid var(--ra-border);border-radius:var(--ra-radius-md);background:var(--ra-card-bg);color:var(--ra-text-mid)}
.cab-kpi b{font-size:calc(15px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text)}.cab-kpi span{font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1));letter-spacing:.04em;text-transform:uppercase}
.cab-kpi:hover:not(:disabled),.cab-kpi:focus-visible{border-color:var(--ra-border-strong)}.cab-kpi[aria-pressed="true"]{background:var(--ra-accent-bg);border-color:var(--ra-accent-border)}.cab-kpi[aria-pressed="true"] b{color:var(--ra-accent-strong,var(--ra-accent))}
.cab-kpi:disabled{cursor:default}.cab-kpi.warn b{color:var(--ra-warning,var(--ra-accent))}.cab-kpi.bad b{color:var(--ra-danger)}.cab-kpi.good b{color:var(--ra-success,var(--ra-accent))}
.cab-budget{display:flex;flex-wrap:wrap;align-items:center;gap:calc(8px * var(--ra-density,1));margin-bottom:calc(8px * var(--ra-density,1));padding:calc(6px * var(--ra-density,1)) calc(10px * var(--ra-density,1));border:1px dashed var(--ra-border-strong);border-radius:var(--ra-radius-md);background:var(--ra-surface-2);font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-mid)}
.cab-table th{position:relative}
.cab-th-rs{position:absolute;top:0;right:0;bottom:0;width:calc(6px * var(--ra-density,1));cursor:col-resize;touch-action:none}.cab-th-rs:hover{background:var(--ra-accent-bg)}
.cab-table th:nth-child(2),.cab-table td:nth-child(2){position:sticky;left:0;z-index:1;background:var(--ra-card-bg)}
.cab-table thead th:nth-child(2){z-index:3;background:var(--ra-surface-2)}
.cab-table tfoot td{position:sticky;bottom:0;background:var(--ra-surface-2);font-weight:700;border-top:1px solid var(--ra-border-strong)}
.cab-cell-edit{cursor:cell}.cab-cell-edit:hover{background:var(--ra-accent-bg)}
input.cab-cell-input{box-sizing:border-box;width:100%;min-width:calc(80px * var(--ra-density,1));height:calc(24px * var(--ra-density,1));font:inherit;background:var(--ra-surface-1);color:var(--ra-text);border:1px solid var(--ra-accent);border-radius:var(--ra-radius-sm);padding:0 calc(6px * var(--ra-density,1))}
/* ── UX layer (core-cab-zux.js): write status · changed dot · privacy mode · command palette · swipe · live region ── */
.cab-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
[data-cab-state="saving"]{opacity:.6;pointer-events:none;cursor:progress}
[data-cab-state="saving"]::after{content:"";position:absolute;top:calc(8px * var(--ra-density,1));right:calc(8px * var(--ra-density,1));width:calc(12px * var(--ra-density,1));height:calc(12px * var(--ra-density,1));border-radius:50%;border:2px solid var(--ra-accent);border-top-color:transparent;animation:cab-spin .7s linear infinite}
[data-cab-state="ok"]{box-shadow:0 0 0 2px var(--ra-success,var(--ra-accent))}
[data-cab-state="error"]{box-shadow:0 0 0 2px var(--ra-danger)}
@keyframes cab-spin{to{transform:rotate(360deg)}}
.cab-card,.cab-row{position:relative}
.cab-changed .cab-card-title::after,.cab-changed .cab-row-title::after{content:"";display:inline-block;width:calc(7px * var(--ra-density,1));height:calc(7px * var(--ra-density,1));margin-left:calc(6px * var(--ra-density,1));border-radius:50%;background:var(--ra-accent);vertical-align:middle}
/* privacy mode: html.ra-private (Alt+P) blurs money, private-flagged cards and [data-redact] cells */
html.ra-private .cab-amount,html.ra-private [data-redact],html.ra-private .cab-private .cab-card-title,html.ra-private .cab-private .cab-row-title,html.ra-private .cab-private .cab-card-text,html.ra-private .cab-private .cab-card-callout,html.ra-private .cab-private .cab-card-meta{filter:blur(calc(6px * var(--ra-density,1)));user-select:none}
[data-swipe]{transition:none}[data-swipe="right"]{box-shadow:inset calc(6px * var(--ra-density,1)) 0 0 var(--ra-success,var(--ra-accent))}[data-swipe="left"]{box-shadow:inset calc(-6px * var(--ra-density,1)) 0 0 var(--ra-danger)}
/* command palette */
.cab-pal{position:fixed;inset:0;z-index:calc(var(--ra-z-overlay,100) + 3);background:color-mix(in srgb,var(--ra-surface-1) 70%,transparent);display:flex;align-items:flex-start;justify-content:center;padding-top:12vh}
.cab-pal-box{width:min(560px,92vw);background:var(--ra-card-bg);border:1px solid var(--ra-border-strong);border-radius:var(--ra-radius-lg);box-shadow:var(--ra-shadow-2);padding:calc(10px * var(--ra-density,1));display:flex;flex-direction:column;gap:calc(8px * var(--ra-density,1))}
.cab-pal-title{font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));font-weight:700;color:var(--ra-text-mid);display:flex;justify-content:space-between;gap:calc(8px * var(--ra-density,1))}
input.cab-pal-in{box-sizing:border-box;width:100%;height:calc(34px * var(--ra-density,1));font:inherit;font-size:calc(13px * var(--fsc,1) * var(--ra-fs-scale,1));background:var(--ra-surface-1);color:var(--ra-text);border:1px solid var(--ra-border-strong);border-radius:var(--ra-radius-md);padding:0 calc(10px * var(--ra-density,1))}
.cab-pal-list{list-style:none;margin:0;padding:0;max-height:50vh;overflow-y:auto}
.cab-pal-item{display:flex;justify-content:space-between;gap:calc(10px * var(--ra-density,1));padding:calc(6px * var(--ra-density,1)) calc(10px * var(--ra-density,1));border-radius:var(--ra-radius-sm);cursor:pointer;font-size:calc(12px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text)}
.cab-pal-item i{font-style:normal;color:var(--ra-text-faint);font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1))}
.cab-pal-item:hover,.cab-pal-item.on{background:var(--ra-accent-bg);color:var(--ra-accent-strong,var(--ra-accent))}.cab-pal-empty{padding:calc(10px * var(--ra-density,1));color:var(--ra-text-faint)}
@media (prefers-reduced-motion:reduce){[data-cab-state="saving"]::after{animation:none}.cab-card,.cab-row,.cab-tile{transition:none!important}}
/* ── health flags · reading mode · related rail · manual order · pinned/lens chips · changes feed ── */
.cab-flagged .cab-card-title::before,.cab-flagged .cab-row-title::before{content:"⚠";margin-right:calc(5px * var(--ra-density,1));color:var(--ra-warning,var(--ra-danger));font-size:.9em}
.cab-flagged{outline:1px dashed color-mix(in srgb,var(--ra-warning,var(--ra-danger)) 55%,transparent);outline-offset:-1px}
.cab-pin::before,.cab-lens::before{content:none}.cab-lens{background:var(--ra-accent-bg);border-color:var(--ra-accent-border);color:var(--ra-accent-strong,var(--ra-accent))}
.cab-reading{display:flex;flex-direction:column;gap:calc(14px * var(--ra-density,1));max-width:calc(760px * var(--ra-density,1));margin:0 auto}
.cab-read{background:var(--ra-card-bg);border:1px solid var(--ra-border);border-left:4px solid var(--cab-accent,var(--ra-accent));border-radius:var(--ra-radius-md);padding:calc(14px * var(--ra-density,1)) calc(18px * var(--ra-density,1))}
.cab-read-h{margin:0 0 calc(6px * var(--ra-density,1));font-size:calc(17px * var(--fsc,1) * var(--ra-fs-scale,1));cursor:pointer}
.cab-read-body{font-size:calc(14px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1.65;color:var(--ra-text);overflow-wrap:anywhere}
a.cab-wikilink{cursor:pointer;color:var(--ra-accent-strong,var(--ra-accent));border-bottom:1px dashed currentColor;text-decoration:none}a.cab-wikilink:hover,a.cab-wikilink:focus-visible{background:var(--ra-accent-bg)}
.cab-related{display:flex;flex-wrap:wrap;gap:calc(4px * var(--ra-density,1));align-items:center}.cab-related .cab-vchip{display:inline-block;max-width:calc(260px * var(--ra-density,1))}
.cab-dragging{opacity:.4}[draggable="true"].cab-card,[draggable="true"].cab-row{cursor:grab}
.cab-change{display:flex;flex-direction:column;gap:calc(2px * var(--ra-density,1))}.cab-change>.cab-vnote{padding-left:calc(10px * var(--ra-density,1))}
/* ═══ Cabinet style variants (2026-10-12) — each cabinet's card looks like its concept, all from tokens (theme-safe).
   Keyed on .cab-card--<type>; layout/zones stay the shared system's. Todos keeps its own themed .todo-row rules. ═══ */

/* 💡 idea — a sticky note: paper tint, folded corner, ruled summary lines, highlighter "next" */
.cab-card.cab-card--idea{background:linear-gradient(180deg,color-mix(in srgb,var(--cab-accent) 9%,var(--ra-card-bg)),var(--ra-card-bg) 70%);border-radius:var(--ra-radius-sm) var(--ra-radius-sm) var(--ra-radius-sm) calc(16px * var(--ra-density,1));box-shadow:0 8px 12px -10px color-mix(in srgb,var(--ra-text) 55%,transparent)}
.cab-card.cab-card--idea::after{content:"";position:absolute;top:0;right:0;width:calc(22px * var(--ra-density,1));height:calc(22px * var(--ra-density,1));background:linear-gradient(225deg,var(--ra-bg) 50%,color-mix(in srgb,var(--cab-accent) 30%,var(--ra-surface-2)) 50%);border-bottom-left-radius:6px;box-shadow:-2px 2px 3px color-mix(in srgb,var(--ra-text) 18%,transparent);pointer-events:none}
.cab-card--idea .cab-card-text{line-height:1.6;background-image:repeating-linear-gradient(transparent 0 calc(1.6em - 1px),color-mix(in srgb,var(--cab-accent) 22%,transparent) calc(1.6em - 1px) 1.6em)}
.cab-card--idea .cab-card-callout{background:linear-gradient(transparent 0 8%,color-mix(in srgb,var(--cab-accent) 22%,transparent) 8%);border-left:0;border-radius:var(--ra-radius-sm)}

/* 🏆 win — soft shine, laurel-gold underline */
.cab-card.cab-card--win{background-image:linear-gradient(115deg,transparent 62%,color-mix(in srgb,var(--cab-accent) 11%,transparent));box-shadow:inset 0 -3px 0 color-mix(in srgb,var(--cab-accent) 35%,transparent)}
.cab-card--win .cab-lead{width:auto;height:auto;margin:calc(2px * var(--ra-density,1))}
.cab-card--win .cab-lead-art{width:auto;height:auto;border-radius:0;background:none;box-shadow:none}   /* the icon tile (wins-art.js) is its own shape — no medal ring behind it */
.cab-card--win .cab-card-title{letter-spacing:.01em}

/* 🧰 thing — a product tile on a price tag: square art, perforated divider, pennant price */
.cab-card.cab-card--thing{border-radius:var(--ra-radius-md);box-shadow:var(--ra-shadow-1)}
.cab-card--thing .cab-lead{width:calc(46px * var(--ra-density,1));height:calc(46px * var(--ra-density,1))}
.cab-card--thing .cab-lead-art{width:calc(44px * var(--ra-density,1));height:calc(44px * var(--ra-density,1));border-radius:var(--ra-radius-md);background:var(--ra-surface-2);border:1px solid var(--ra-border);overflow:hidden}
.cab-card--thing .cab-card-meta{border-top:2px dotted var(--ra-border);padding-top:calc(6px * var(--ra-density,1));margin-top:calc(2px * var(--ra-density,1))}
.cab-card--thing .cab-amount{padding:calc(2px * var(--ra-density,1)) calc(10px * var(--ra-density,1)) calc(2px * var(--ra-density,1)) calc(18px * var(--ra-density,1));background:radial-gradient(circle at 8px 50%,var(--ra-card-bg) 2.5px,transparent 3px),var(--cab-accent-bg);clip-path:polygon(10px 0,100% 0,100% 100%,10px 100%,0 50%);color:var(--ra-text-bright)}

/* 📇 contact — an ID / business card: crisp corners, lanyard slot, big ringed avatar */
.cab-card.cab-card--contact,.cab-card.cab-card--person{border-radius:calc(var(--ra-card-radius) * .5);border-top-width:1px;border-left:calc(6px * var(--ra-density,1)) solid var(--cab-accent);padding-top:calc(16px * var(--ra-density,1));box-shadow:var(--ra-shadow-1)}
.cab-card--contact::before,.cab-card--person::before{content:"";position:absolute;top:calc(5px * var(--ra-density,1));left:50%;width:calc(30px * var(--ra-density,1));height:calc(5px * var(--ra-density,1));transform:translateX(-50%);border-radius:var(--ra-radius-pill);background:var(--ra-surface-3,var(--ra-surface-2));box-shadow:inset 0 1px 2px color-mix(in srgb,var(--ra-text) 35%,transparent)}
.cab-card--contact .cab-lead,.cab-card--person .cab-lead{width:calc(44px * var(--ra-density,1));height:calc(44px * var(--ra-density,1))}
.cab-card--contact .cab-lead-art,.cab-card--person .cab-lead-art{width:calc(42px * var(--ra-density,1));height:calc(42px * var(--ra-density,1));font-size:calc(14px * var(--fsc,1) * var(--ra-fs-scale,1));font-weight:700}
.cab-card--contact .cab-kv dt,.cab-card--person .cab-kv dt{letter-spacing:.1em}

/* 🎓 course — a certificate: inset double rule, serif title */
.cab-card.cab-card--course{border-top-width:1px;padding:calc(14px * var(--ra-density,1)) calc(16px * var(--ra-density,1));outline:1px solid color-mix(in srgb,var(--cab-accent) 55%,transparent);outline-offset:calc(-6px * var(--ra-density,1))}
.cab-card--course .cab-card-title{font-family:Georgia,"Times New Roman",serif;font-size:calc(14px * var(--fsc,1) * var(--ra-fs-scale,1));letter-spacing:.02em}
.cab-card--course .cab-card-meta{text-transform:uppercase;letter-spacing:.08em}

/* 🎬 story — a poster: full-bleed cover, film-strip perforations, caption below */
.cab-card.cab-card--story{padding:0;gap:0;border-top-width:1px;border-radius:var(--ra-radius-md)}
.cab-card--story .cab-card-view{gap:calc(5px * var(--ra-density,1))}
.cab-card--story .cab-card-view>*:not(.cab-cover){margin-inline:calc(10px * var(--ra-density,1))}
.cab-card--story .cab-card-view>*:last-child{margin-bottom:calc(10px * var(--ra-density,1))}
.cab-card--story .cab-cover{position:relative;border-radius:0;--cab-media-aspect:2/3;max-height:calc(300px * var(--ra-density,1))}
.cab-card--story .cab-cover::before,.cab-card--story .cab-cover::after{content:"";position:absolute;top:0;bottom:0;width:calc(8px * var(--ra-density,1));background:radial-gradient(circle at 50% 50%,var(--ra-card-bg) 1.6px,transparent 2px) 0 0/100% calc(10px * var(--ra-density,1)),color-mix(in srgb,var(--ra-text) 55%,transparent);pointer-events:none}
.cab-card--story .cab-cover::before{left:0}.cab-card--story .cab-cover::after{right:0}

/* 🍜 food — a menu card: double rule, italic serif dish name, ornament */
.cab-card.cab-card--food{border:3px double var(--ra-border-strong);border-radius:var(--ra-radius-sm);background:linear-gradient(180deg,color-mix(in srgb,var(--cab-accent) 6%,var(--ra-card-bg)),var(--ra-card-bg))}
.cab-card--food .cab-card-title{font-family:Georgia,"Times New Roman",serif;font-style:italic;font-size:calc(14px * var(--fsc,1) * var(--ra-fs-scale,1))}
.cab-card--food .cab-card-head::after{content:"";position:absolute}
.cab-card--food .cab-card-meta{border-top:1px dashed var(--ra-border);padding-top:calc(5px * var(--ra-density,1))}

/* 📁 project — a mission-control tile: heavy left stripe, mono kicker feel, chunky striped progress */
.cab-card.cab-card--project{border-radius:var(--ra-radius-sm);border-top-width:1px;border-left:calc(7px * var(--ra-density,1)) solid var(--cab-accent)}
.cab-card--project .cab-card-title{font-size:calc(14px * var(--fsc,1) * var(--ra-fs-scale,1));letter-spacing:.01em}
.cab-card--project .cab-progress-bar{height:calc(10px * var(--ra-density,1));border-radius:2px}
.cab-card--project .cab-progress-bar>span{background-image:repeating-linear-gradient(135deg,transparent 0 5px,color-mix(in srgb,var(--ra-card-bg) 30%,transparent) 5px 10px)}
.cab-card--project .cab-card-meta{font-family:var(--ra-font-mono,ui-monospace,monospace);text-transform:uppercase;letter-spacing:.04em}

/* 🏃 activity — a routine bubble: rounded dashed "loop" outline, round icon token */
.cab-card.cab-card--activity{border:2px dashed color-mix(in srgb,var(--cab-accent) 55%,var(--ra-border));border-radius:calc(20px * var(--ra-density,1));padding-inline:calc(14px * var(--ra-density,1))}
.cab-card--activity .cab-lead{width:calc(34px * var(--ra-density,1));height:calc(34px * var(--ra-density,1))}
.cab-card--activity .cab-lead-art{width:calc(32px * var(--ra-density,1));height:calc(32px * var(--ra-density,1));border-radius:50%;background:var(--cab-accent-bg);box-shadow:0 0 0 1px var(--ra-border)}

/* 🛠️ tool — a spec sheet: monospace, terminal prompt before the name, ruled header */
.cab-card.cab-card--tool{border-radius:2px;border-top-width:1px;font-family:var(--ra-font-mono,ui-monospace,monospace)}
.cab-card--tool .cab-card-head{border-bottom:1px solid var(--ra-border);padding-bottom:calc(4px * var(--ra-density,1))}
.cab-card--tool .cab-card-title::before{content:"$ ";color:var(--ra-accent)}
.cab-card--tool .cab-card-meta,.cab-card--tool .cab-card-text{font-family:inherit}
/* list rows: an opaque card-coloured surface so text stays readable over glassy / patterned / photo backgrounds */
.cab-list{background:var(--ra-card-bg);border:1px solid var(--ra-border);border-radius:var(--ra-card-radius,var(--ra-radius-md));overflow:hidden}
.cab-row{background:var(--ra-card-bg)}
.cab-row:hover{background:var(--ra-surface-2)}
.cab-row:last-child{border-bottom:0}
/* table: header row sticks under the app's top bar while the page scrolls (overflow:clip keeps the rounded frame without
   making the wrap a scroll container, which would pin sticky to the wrap instead of the page) */
.cab-table-wrap{overflow:clip}
.cab-table thead th{position:sticky;top:var(--cab-sticky-top,var(--topbar-h,54px));z-index:2;background:var(--ra-surface-2);box-shadow:0 1px 0 var(--ra-border)}
#tab-todos .cab-table thead th{top:calc(var(--topbar-h,54px) + var(--todo-tdb-h,0px))}
/* beats themes' translucent `.ra-table th` tint (their rule is !important too) — a sticky header MUST be opaque or rows show through it */
html body .cab-table-wrap .cab-table.ra-table thead th{background:linear-gradient(var(--ra-surface-2),var(--ra-surface-2)),var(--ra-card-bg)!important;background-color:var(--ra-card-bg)!important}

/* 🔐 account — a key tag: ringed key-bow monogram, dashed header rule, monospace identifiers */
.cab-card.cab-card--account{border-radius:var(--ra-radius-lg);border-left:calc(5px * var(--ra-density,1)) solid var(--cab-accent);background:linear-gradient(135deg,color-mix(in srgb,var(--cab-accent) 7%,var(--ra-card-bg)),var(--ra-card-bg) 62%)}
.cab-card--account .cab-card-head{padding-bottom:calc(5px * var(--ra-density,1));border-bottom:1px dashed var(--ra-border)}
.cab-card--account .cab-lead{width:calc(34px * var(--ra-density,1));height:calc(34px * var(--ra-density,1))}
.cab-card--account .cab-lead-art{width:calc(30px * var(--ra-density,1));height:calc(30px * var(--ra-density,1));border-radius:50%;border:2px solid var(--cab-accent);box-shadow:inset 0 0 0 3px var(--ra-card-bg),inset 0 0 0 4px color-mix(in srgb,var(--cab-accent) 40%,transparent);color:var(--cab-accent);font-weight:700}
.cab-card--account .cab-kv dd{font-family:var(--ra-font-mono,ui-monospace,monospace)}

/* 🔑 credential — a vault tile: solid accent top bar, masked secret in a recessed well */
.cab-card.cab-card--credential{border-radius:var(--ra-radius-sm);border-top:calc(5px * var(--ra-density,1)) solid var(--cab-accent)}
.cab-card--credential .cab-kv dd{font-family:var(--ra-font-mono,ui-monospace,monospace)}
.cab-card--credential .cab-kv dd span[id^="cred-pw-"]{background:var(--ra-surface-2);border:1px inset var(--ra-border);border-radius:var(--ra-radius-sm);padding:0 calc(6px * var(--ra-density,1));letter-spacing:.08em}


/* table: money/number columns (column {num:true}) — right-aligned, tabular figures; the header aligns with its figures */
.cab-table th.cab-num,.cab-table td.cab-num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}

/* 📶 wifi — a router tag: rounded router-box lead with an antenna stub, rising signal bars bottom-right, dashed rule, recessed password well */
.cab-card.cab-card--wifi{border-radius:var(--ra-radius-md);border-bottom:calc(4px * var(--ra-density,1)) solid var(--cab-accent);background:linear-gradient(180deg,color-mix(in srgb,var(--cab-accent) 6%,var(--ra-card-bg)),var(--ra-card-bg) 55%)}
.cab-card--wifi .cab-card-head{padding-bottom:calc(5px * var(--ra-density,1));border-bottom:1px dashed var(--ra-border)}
.cab-card--wifi .cab-lead-art{border-radius:var(--ra-radius-sm);border:2px solid var(--cab-accent);background:var(--cab-accent-bg);position:relative}
.cab-card--wifi .cab-lead-art::before{content:"";position:absolute;top:-7px;left:50%;width:2px;height:6px;margin-left:-1px;background:var(--cab-accent)}
.cab-card--wifi::after{content:"";position:absolute;right:calc(10px * var(--ra-density,1));bottom:calc(8px * var(--ra-density,1));width:18px;height:14px;opacity:.55;pointer-events:none;background:linear-gradient(var(--cab-accent),var(--cab-accent)) 0 100%/3px 4px no-repeat,linear-gradient(var(--cab-accent),var(--cab-accent)) 5px 100%/3px 7px no-repeat,linear-gradient(var(--cab-accent),var(--cab-accent)) 10px 100%/3px 10px no-repeat,linear-gradient(var(--cab-accent),var(--cab-accent)) 15px 100%/3px 14px no-repeat}
.cab-card--wifi .cab-kv dd{font-family:var(--ra-font-mono,ui-monospace,monospace)}
.cab-card--wifi .cab-wifi-pw{background:var(--ra-surface-2);border:1px inset var(--ra-border);border-radius:var(--ra-radius-sm);padding:0 calc(6px * var(--ra-density,1));letter-spacing:.08em}

/* 📍 place — a map-pin postcard: double inset border like a card edge, teardrop map-pin lead (point down-left), dotted "route" rule under the header, serif title */
.cab-card.cab-card--place{border-radius:var(--ra-radius-sm);box-shadow:inset 0 0 0 4px var(--ra-card-bg),inset 0 0 0 5px color-mix(in srgb,var(--cab-accent) 45%,var(--ra-border))}
.cab-card--place .cab-card-head{padding-bottom:calc(5px * var(--ra-density,1));border-bottom:2px dotted color-mix(in srgb,var(--cab-accent) 55%,var(--ra-border))}
.cab-card--place .cab-lead-art{width:calc(28px * var(--ra-density,1));height:calc(28px * var(--ra-density,1));border-radius:50% 50% 50% 0;transform:rotate(-45deg);background:var(--cab-accent);color:var(--ra-card-bg);box-shadow:0 1px 0 var(--ra-border)}
.cab-card--place .cab-lead-art>*{transform:rotate(45deg)}
.cab-card--place .cab-card-title{font-family:Georgia,"Times New Roman",serif;letter-spacing:.01em}

/* 🏆 milestone — a trophy plaque: gold double frame, engraved serif title, date chip as a medal face */
.cab-card.cab-card--milestone{border:3px double color-mix(in srgb,var(--cab-accent) 70%,var(--ra-border));border-radius:var(--ra-radius-sm);background:linear-gradient(180deg,color-mix(in srgb,var(--cab-accent) 9%,var(--ra-card-bg)),var(--ra-card-bg) 55%)}
.cab-card--milestone .cab-card-title{font-family:Georgia,"Times New Roman",serif;letter-spacing:.02em}
.cab-card--milestone .cab-lead{width:calc(40px * var(--ra-density,1));height:calc(40px * var(--ra-density,1))}
.cab-card--milestone .cab-lead-art{width:calc(40px * var(--ra-density,1));height:calc(40px * var(--ra-density,1))}
.cab-card--milestone .cab-datechip{flex-direction:column;border-radius:50%;width:calc(38px * var(--ra-density,1));height:calc(38px * var(--ra-density,1));padding:0;border:2px solid var(--cab-accent);box-shadow:inset 0 0 0 2px var(--ra-card-bg)}
.cab-card--milestone .cab-datechip span{font-size:calc(8px * var(--fsc,1) * var(--ra-fs-scale,1));text-transform:uppercase;letter-spacing:.06em}
.cab-card--milestone .cab-datechip b{font-size:calc(13px * var(--fsc,1) * var(--ra-fs-scale,1))}
.milestone-stars{color:var(--ra-warn);letter-spacing:.1em}


/* 📷 media (module: Media) — a photo print: pale mat around the picture, thicker bottom edge, a strip of tape on top */
.cab-card.cab-card--media{padding:0;gap:0;border-top-width:1px;border-radius:var(--ra-radius-sm);box-shadow:var(--ra-shadow-1)}
.cab-card--media .cab-card-view{position:relative;gap:calc(4px * var(--ra-density,1));padding:calc(8px * var(--ra-density,1)) calc(8px * var(--ra-density,1)) calc(10px * var(--ra-density,1))}
.cab-card--media .cab-cover{border-radius:2px;border:1px solid color-mix(in srgb,var(--ra-text) 18%,transparent);box-shadow:inset 0 0 0 calc(3px * var(--ra-density,1)) color-mix(in srgb,var(--ra-card-bg) 70%,transparent)}
.cab-card--media .cab-card-view::before{content:"";position:absolute;top:calc(-4px * var(--ra-density,1));left:50%;width:calc(44px * var(--ra-density,1));height:calc(11px * var(--ra-density,1));transform:translateX(-50%) rotate(-2deg);background:color-mix(in srgb,var(--cab-accent) 38%,var(--ra-surface-2));opacity:.85;border-radius:1px;z-index:1;pointer-events:none}
.cab-card--media .cab-lead,.cab-card--mediainbox .cab-lead{position:absolute;top:calc(14px * var(--ra-density,1));left:calc(14px * var(--ra-density,1));z-index:3;width:calc(22px * var(--ra-density,1));height:calc(22px * var(--ra-density,1));border-radius:50%;background:color-mix(in srgb,var(--ra-card-bg) 88%,transparent);opacity:0;transition:opacity var(--ra-motion) var(--ra-ease)}
.cab-card--media:hover .cab-lead,.cab-card--media:focus-within .cab-lead,.cab-host[data-selecting="true"] .cab-card--media .cab-lead,.cab-card--media .cab-lead:has(.cab-select:checked),.cab-card--mediainbox:hover .cab-lead,.cab-card--mediainbox:focus-within .cab-lead,.cab-host[data-selecting="true"] .cab-card--mediainbox .cab-lead,.cab-card--mediainbox .cab-lead:has(.cab-select:checked){opacity:1}
.cab-card--media .cab-card-title{font-size:calc(12px * var(--fsc,1) * var(--ra-fs-scale,1));font-weight:500;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.cab-card--media .cab-card-meta{font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1))}

/* 📥 media inbox — a contact-sheet frame: square thumbnail, dashed "pending" outline, monospace stamp line */
.cab-card.cab-card--mediainbox{padding:0;gap:0;border:1px dashed var(--ra-border-strong);border-top:calc(3px * var(--ra-density,1)) solid var(--cab-accent);border-radius:var(--ra-radius-sm)}
.cab-card--mediainbox .cab-card-view{gap:calc(4px * var(--ra-density,1));padding:calc(6px * var(--ra-density,1))}
.cab-card--mediainbox .cab-cover{border-radius:2px}
.cab-card--mediainbox .cab-card-title{font-family:var(--ra-font-mono,ui-monospace,monospace);font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cab-card--mediainbox .cab-card-meta{font-family:var(--ra-font-mono,ui-monospace,monospace);font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1))}
/* 🧾 order (Shopping purchase history) — a till receipt: mono type, dashed tear rules, zig-zag bottom edge, double-ruled total */
.cab-card.cab-card--order{border-radius:var(--ra-radius-sm);border-top-width:1px;padding-bottom:calc(18px * var(--ra-density,1));font-family:var(--ra-font-mono,ui-monospace,monospace)}
.cab-card--order::after{content:"";position:absolute;left:0;right:0;bottom:0;height:calc(7px * var(--ra-density,1));background:linear-gradient(135deg,var(--ra-bg) 50%,transparent 50%) 0 0/calc(14px * var(--ra-density,1)) 100%,linear-gradient(225deg,var(--ra-bg) 50%,transparent 50%) 0 0/calc(14px * var(--ra-density,1)) 100%;pointer-events:none}
.cab-card--order .cab-card-title{letter-spacing:.05em;text-transform:uppercase}
.cab-card--order .cab-card-meta{border-top:1px dashed var(--ra-border-strong);border-bottom:1px dashed var(--ra-border-strong);padding:calc(5px * var(--ra-density,1)) 0}
.cab-card--order .cab-amount{border-bottom:3px double var(--ra-text-mid);padding-bottom:1px}
.cab-card--order .cab-card-text,.cab-card--order .cab-card-sub{font-family:inherit}
/* 🏷️ product (Shopping catalog) — a shelf label: square product photo, round price sticker, barcode strip along the bottom */
.cab-card.cab-card--product{border-radius:var(--ra-radius-sm);border-top-width:1px;padding-bottom:calc(20px * var(--ra-density,1))}
.cab-card--product::after{content:"";position:absolute;left:calc(10px * var(--ra-density,1));right:calc(10px * var(--ra-density,1));bottom:calc(5px * var(--ra-density,1));height:calc(9px * var(--ra-density,1));opacity:.4;pointer-events:none;background:repeating-linear-gradient(90deg,var(--ra-text) 0 2px,transparent 2px 4px,var(--ra-text) 4px 5px,transparent 5px 8px,var(--ra-text) 8px 11px,transparent 11px 13px)}
.cab-card--product .cab-cover{border-radius:var(--ra-radius-sm);max-height:calc(200px * var(--ra-density,1))}
.cab-card--product .cab-amount{border:2px solid var(--cab-accent);border-radius:var(--ra-radius-pill);padding:0 calc(9px * var(--ra-density,1));background:var(--cab-accent-bg);color:var(--ra-text-bright)}
/* 🔖 bookmark — a browser tab: square-left/rounded-right tab shape with a status-coloured top edge, favicon in the lead, URL in an address-bar pill */
.cab-card.cab-card--bookmark{border-radius:var(--ra-radius-sm) var(--ra-radius-lg) var(--ra-radius-sm) var(--ra-radius-sm);border-top:calc(3px * var(--ra-density,1)) solid var(--cab-accent)}
.cab-card--bookmark .cab-lead-art{width:calc(22px * var(--ra-density,1));height:calc(22px * var(--ra-density,1));border-radius:var(--ra-radius-sm);background:var(--cab-accent-bg)}
.cab-fav{width:calc(18px * var(--ra-density,1));height:calc(18px * var(--ra-density,1));border-radius:var(--ra-radius-sm);object-fit:contain}
.cab-card--bookmark .cab-kv>div:first-child{background:var(--ra-surface-2);border:1px solid var(--ra-border);border-radius:var(--ra-radius-pill);padding:1px calc(10px * var(--ra-density,1))}
.cab-card--bookmark .cab-kv>div:first-child dt{display:none}
.cab-card--bookmark .cab-kv>div:first-child dd{font-family:var(--ra-font-mono,ui-monospace,monospace);min-width:0;flex:1}
.cab-card--bookmark .cab-url{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}

/* 📅 event — a ticket stub: solid date stub torn off from the body by a dashed perforation with punched notches */
.cab-card.cab-card--event{border-radius:var(--ra-radius-md);border-left:calc(5px * var(--ra-density,1)) solid var(--cab-accent)}
.cab-card--event .cab-lead{width:calc(54px * var(--ra-density,1));height:calc(40px * var(--ra-density,1))}
.cab-card--event .cab-lead-art{box-sizing:border-box;width:100%;height:100%;display:grid;place-items:center;padding-right:calc(8px * var(--ra-density,1));border-right:2px dashed color-mix(in srgb,var(--cab-accent) 55%,var(--ra-border))}
.cab-card--event .cab-datechip{background:var(--cab-accent);color:var(--ra-card-bg);border-radius:var(--ra-radius-sm);min-width:calc(38px * var(--ra-density,1))}
.cab-card--event .cab-datechip span{font-size:calc(8px * var(--fsc,1) * var(--ra-fs-scale,1));text-transform:uppercase;letter-spacing:.08em}


/* event archetype: a date/time chip is wider than the 26px lead slot — let the slot grow with it */
.cab-a-event .cab-lead:has(.cab-datechip){width:auto;min-width:calc(34px * var(--ra-density,1));height:auto}
.cab-a-event .cab-lead:has(.cab-datechip) .cab-lead-art{width:auto}
/* 🏦 transaction — a printed statement slip: dashed tear-off rule under the card, mono figures, green rail for money in.
   The ledger archetype (list rows + table) shares the figures: tabular mono amounts, right-aligned in a fixed column, long
   bank descriptions clamped to two lines (the full text is the tooltip + the detail). */
.cab-card.cab-card--transaction{border-radius:var(--ra-radius-sm);border-left:calc(4px * var(--ra-density,1)) solid var(--cab-accent);border-bottom:2px dashed var(--ra-border)}
.cab-card--transaction .cab-card-title{font-family:var(--ra-font-mono,ui-monospace,monospace);font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1))}
.cab-card--transaction .cab-card-title,.cab-a-ledger .cab-row-title,.cab-tx-desc{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.cab-tx-desc{max-width:48ch}
.cab-a-ledger .cab-amount,.cab-table td.cab-num .cab-amount{font-family:var(--ra-font-mono,ui-monospace,monospace);letter-spacing:-.01em}
.cab-row.cab-a-ledger .cab-amount{min-width:calc(120px * var(--ra-density,1));text-align:right}
.cab-row.cab-a-ledger .cab-row-meta>span:not(.cab-badge){max-width:calc(200px * var(--ra-density,1));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cab-tx-receipt{height:calc(18px * var(--ra-density,1));width:calc(18px * var(--ra-density,1));object-fit:cover;border-radius:var(--ra-radius-sm);border:1px solid var(--ra-border);cursor:pointer;vertical-align:middle;margin-left:calc(6px * var(--ra-density,1))}

/* 💰 holding — a passbook line: double rule on top, big mono balance, asset-type icon token as the lead */
.cab-card.cab-card--holding{border-radius:var(--ra-radius-sm);border-top:calc(4px * var(--ra-density,1)) double var(--cab-accent);background:linear-gradient(180deg,color-mix(in srgb,var(--cab-accent) 6%,var(--ra-card-bg)),var(--ra-card-bg) 55%)}
.cab-card--holding .cab-lead-art{font-size:calc(18px * var(--fsc,1) * var(--ra-fs-scale,1))}
.cab-card--holding .cab-amount{font-size:calc(14px * var(--fsc,1) * var(--ra-fs-scale,1));color:var(--ra-text-bright)}
.cab-row.cab-a-ledger .cab-lead-art{font-size:calc(16px * var(--fsc,1) * var(--ra-fs-scale,1))}

/* phones: a wide table scrolls sideways inside its frame instead of being clipped (a sticky header can't pin to the page inside a scroll frame, so it scrolls with the table) */
@media (max-width:640px){.cab-table-wrap{overflow-x:auto}html body .cab-table-wrap .cab-table.ra-table thead th,.cab-table thead th{position:static}.cab-table td,.cab-table th{white-space:nowrap}.cab-table .cab-tx-desc{white-space:normal;min-width:calc(200px * var(--ra-density,1))}}

/* 💬 chat (module: Chat Hub) — a chat bubble: round avatar, the last message in a speech bubble with a tail; the open thread gets an accent spine */
.cab-chat-av{display:grid;place-items:center;width:100%;height:100%;border-radius:50%;object-fit:cover;background:color-mix(in srgb,var(--av,var(--ra-accent)) 24%,var(--ra-card-bg));box-shadow:inset 0 0 0 2px var(--av,var(--ra-accent));color:var(--ra-text);font-weight:700;font-size:calc(11px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1}
.cab-card.cab-card--chat{border-radius:var(--ra-radius-md)}
.cab-card--chat .cab-card-text{position:relative;background:var(--ra-surface-2);border-radius:var(--ra-radius-md) var(--ra-radius-md) var(--ra-radius-md) 2px;padding:calc(4px * var(--ra-density,1)) calc(8px * var(--ra-density,1));-webkit-line-clamp:2}
.cab-card--chat .cab-card-text::before{content:"";position:absolute;left:-5px;bottom:0;border:calc(5px * var(--ra-density,1)) solid transparent;border-right-color:var(--ra-surface-2);border-bottom-color:var(--ra-surface-2);border-left:0;border-top:0}
.cab-chat-active{background:var(--ra-surface-2)!important;box-shadow:inset 3px 0 0 var(--ra-accent-strong)}
.cab-a-person .cab-lead-art:has(.cab-chat-av){border-width:0;box-shadow:none;background:none}
/* 🏷️ topic — a hashtag label: "#" before the name, rounded outline + left rail in the hotness tone, emoji token lead, faint weight meter */
.cab-card.cab-card--topic{border-radius:var(--ra-radius-lg);border:1px solid color-mix(in srgb,var(--cab-accent) 45%,var(--ra-border));border-left:calc(4px * var(--ra-density,1)) solid var(--cab-accent)}
.cab-card--topic .cab-card-title::before{content:"#";color:var(--cab-accent);margin-right:calc(2px * var(--ra-density,1));font-weight:700}
.cab-card--topic .cab-lead-art{width:calc(28px * var(--ra-density,1));height:calc(28px * var(--ra-density,1));border-radius:50%;background:var(--cab-accent-bg);font-size:calc(16px * var(--fsc,1) * var(--ra-fs-scale,1))}
.cab-card--topic .cab-progress{opacity:.75}

/* 🗞 link (News · manual links) — a newspaper clipping: cut-out dashed edge, serif headline, mono dateline */
.cab-card.cab-card--link{border:1px dashed var(--ra-border-strong);border-top-width:3px;border-top-style:double;border-radius:0}
.cab-card--link .cab-card-title{font-family:Georgia,"Times New Roman",serif;font-size:calc(14px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1.3}
.cab-card--link .cab-card-title a,.cab-card--article .cab-card-title a{text-decoration:none}.cab-card--link .cab-card-title a:hover,.cab-card--article .cab-card-title a:hover{text-decoration:underline}
.cab-card--link .cab-card-meta{font-family:var(--ra-font-mono,ui-monospace,monospace);text-transform:uppercase;letter-spacing:.05em}
/* 📰 article (News · archive) — a wire-service slip: heavy rail, mono caps dateline above a plain headline */
.cab-card.cab-card--article{border-radius:var(--ra-radius-sm);border-top-width:1px;border-left:calc(5px * var(--ra-density,1)) solid var(--cab-accent)}
.cab-card--article .cab-card-meta{font-family:var(--ra-font-mono,ui-monospace,monospace);text-transform:uppercase;letter-spacing:.04em;font-size:calc(10px * var(--fsc,1) * var(--ra-fs-scale,1))}
.cab-card--article .cab-card-text{font-style:italic}
/* ⚡ newsaction (News · action dashboard) — an urgent notice: hazard-stripe header band in the priority colour */
.cab-card.cab-card--newsaction{border-radius:var(--ra-radius-sm);padding-top:calc(14px * var(--ra-density,1))}
.cab-card--newsaction::before{content:"";position:absolute;top:0;left:0;right:0;height:calc(6px * var(--ra-density,1));background:repeating-linear-gradient(135deg,var(--cab-accent) 0 6px,transparent 6px 12px);border-radius:var(--ra-radius-sm) var(--ra-radius-sm) 0 0}
/* 🧰 toolinbox (News · tools inbox) — a parcel tag: punched hole in the corner, dashed string line, mono title */
.cab-card.cab-card--toolinbox{border-radius:var(--ra-radius-md) var(--ra-radius-md) var(--ra-radius-md) calc(var(--ra-radius-md) * 3);border-top-width:1px}
.cab-card--toolinbox::before{content:"";position:absolute;top:calc(8px * var(--ra-density,1));right:calc(10px * var(--ra-density,1));width:calc(9px * var(--ra-density,1));height:calc(9px * var(--ra-density,1));border-radius:50%;background:var(--ra-bg);box-shadow:inset 0 1px 2px color-mix(in srgb,var(--ra-text) 40%,transparent)}
.cab-card--toolinbox .cab-card-title{font-family:var(--ra-font-mono,ui-monospace,monospace)}
.cab-card--toolinbox .cab-card-meta{border-top:1px dashed var(--ra-border);padding-top:calc(5px * var(--ra-density,1))}
/* 🎟 upcoming (News · events) — a ticket stub: perforated divider after the date chip, notched left edge */
.cab-card.cab-card--upcoming{border-radius:var(--ra-radius-md);border-top-width:1px;border-left:calc(5px * var(--ra-density,1)) dotted var(--cab-accent)}
.cab-card--upcoming .cab-datechip{border-right:2px dashed var(--ra-border-strong);border-radius:var(--ra-radius-sm) 0 0 var(--ra-radius-sm);padding-right:calc(8px * var(--ra-density,1))}
.cab-card--upcoming .cab-datechip b{font-size:calc(15px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1}
/* 📥 candidate (News · core review queue) — a pending proposal: dashed outline with a PENDING corner stamp */
.cab-card.cab-card--candidate{border:2px dashed color-mix(in srgb,var(--cab-accent) 60%,var(--ra-border));border-radius:var(--ra-radius-md)}
.cab-card--candidate::after{content:"PENDING";position:absolute;bottom:calc(8px * var(--ra-density,1));right:calc(10px * var(--ra-density,1));font-size:calc(8px * var(--fsc,1) * var(--ra-fs-scale,1));letter-spacing:.14em;font-weight:700;color:var(--ra-text-faint);border:1px solid var(--ra-border);padding:0 calc(4px * var(--ra-density,1));transform:rotate(4deg);pointer-events:none}
/* 📋 hhactivity (Household · activity library) — an index card: red header rule, category as the tab label */
.cab-card.cab-card--hhactivity{border-radius:var(--ra-radius-sm);border-top:calc(3px * var(--ra-density,1)) solid var(--ra-danger)}
.cab-card--hhactivity .cab-card-title{font-size:calc(15px * var(--fsc,1) * var(--ra-fs-scale,1));line-height:1.3}
.cab-card--hhactivity .cab-card-meta{text-transform:uppercase;letter-spacing:.06em}
.cab-card--hhactivity .cab-card-text{font-style:italic}

/* Shared thumbnail treatments scale with density and retain each cabinet's subject. */
.cab-thumbnail{display:inline-grid;position:relative;isolation:isolate;place-items:center;flex-shrink:0;width:calc(36px * var(--ra-density,1));aspect-ratio:1;color:var(--cab-thumbnail-tone);border-radius:var(--ra-radius-md);background:color-mix(in srgb,var(--cab-thumbnail-tone) 12%,var(--ra-surface-2));overflow:hidden}
.cab-thumbnail-art{display:grid;place-items:center;width:65%;height:65%;z-index:1}
.cab-thumbnail-art>svg,.cab-thumbnail-art>img{width:100%;height:100%;object-fit:contain}
.cab-thumbnail-cover{display:grid;width:100%;aspect-ratio:8/5;min-height:0;border-radius:var(--ra-radius-md)}
.cab-thumbnail-cover .cab-thumbnail-art{width:32%;height:55%}
.cab-thumbnail::before,.cab-thumbnail::after{content:'';position:absolute;inset:14%;border:calc(1px * var(--ra-density,1)) solid currentColor;opacity:.3;pointer-events:none}
.cab-thumbnail[data-thumbnail-style="emblem"]::before{border-radius:50%;background:color-mix(in srgb,currentColor 15%,transparent)}
.cab-thumbnail[data-thumbnail-style="emblem"]::after{inset:7%;border-radius:50%;border-style:dashed}
.cab-thumbnail[data-thumbnail-style="tiles"]::before{transform:rotate(12deg);background:color-mix(in srgb,currentColor 18%,transparent);border-radius:var(--ra-radius-md)}
.cab-thumbnail[data-thumbnail-style="tiles"]::after{transform:rotate(-8deg);border-radius:var(--ra-radius-md)}
.cab-thumbnail[data-thumbnail-style="concept"]{background:radial-gradient(ellipse at 20% 20%,color-mix(in srgb,currentColor 28%,transparent),transparent 65%),var(--ra-surface-2)}
.cab-thumbnail[data-thumbnail-style="concept"]::before{inset:8% 38%;transform:rotate(35deg);border-radius:var(--ra-radius-pill)}
.cab-thumbnail[data-thumbnail-style="concept"]::after{inset:30% 8%;transform:rotate(-20deg);border-radius:50%}
.cab-thumbnail[data-thumbnail-style="outline"]{background:transparent;border:calc(1px * var(--ra-density,1)) solid currentColor}
.cab-thumbnail[data-thumbnail-style="outline"]::before,.cab-thumbnail[data-thumbnail-style="minimal"]::before,.cab-thumbnail[data-thumbnail-style="minimal"]::after{display:none}
.cab-thumbnail[data-thumbnail-style="outline"]::after{inset:7%;border-radius:var(--ra-radius-sm)}
.cab-thumbnail[data-thumbnail-style="stamp"]{border:calc(2px * var(--ra-density,1)) dashed currentColor;transform:rotate(-3deg)}
.cab-thumbnail[data-thumbnail-style="stamp"]::after{display:none}
.cab-thumbnail[data-thumbnail-style="orbit"]::before{inset:10%;border-radius:50%;transform:rotate(-35deg) scaleY(.6)}
.cab-thumbnail[data-thumbnail-style="orbit"]::after{inset:10%;border-radius:50%;transform:rotate(35deg) scaleY(.6)}
.cab-thumbnail[data-thumbnail-style="ribbon"]::before{inset:0 70% 0 0;border:0;background:currentColor}
.cab-thumbnail[data-thumbnail-style="ribbon"]::after{inset:0 0 0 85%;border:0;background:currentColor;opacity:.12}
.cab-thumbnail[data-thumbnail-style="minimal"]{background:transparent}

.cab-thumbnail-cover .hab-status-badge{position:absolute;top:var(--ra-space-2);right:var(--ra-space-2);z-index:2}
.cab-kiosk{box-sizing:border-box;position:fixed;inset:0;width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;margin:0;border:0;padding:var(--ra-space-4);background:var(--ra-bg);color:var(--ra-text)}
.cab-kiosk>header{display:flex;align-items:center;gap:var(--ra-space-3);margin-bottom:var(--ra-space-4)}
.cab-kiosk>header strong{flex:1}
.cab-kiosk-content{overflow:auto;height:calc(100% - calc(var(--ra-space-4) * 4))}
.cab-tile-map{position:relative;isolation:isolate;overflow:hidden;width:100%;aspect-ratio:16/9;background:var(--ra-surface-1);border-radius:var(--ra-radius-md)}
.cab-tile-map .cab-tile-image{position:absolute;max-width:none;pointer-events:none}
.cab-tile-anchor{position:absolute;translate:-50% -50%;display:inline-flex}
.cab-tile-marker{min-width:calc(var(--ra-space-4) * 2);min-height:calc(var(--ra-space-4) * 2);border:1px solid var(--ra-border);border-radius:var(--ra-radius-pill);padding:var(--ra-space-2);background:var(--ra-accent-bg);color:var(--ra-accent);cursor:pointer}
.cab-tile-credit{position:absolute;bottom:0;right:0;background:var(--ra-surface-1);color:var(--ra-text);padding:var(--ra-space-1);font-size:var(--ra-fs-xs)}
.cab-dashboard-panel{padding:var(--ra-space-4);margin-block:var(--ra-space-4);overflow:hidden}
.cab-dashboard-panel>header{display:flex;align-items:center;flex-wrap:wrap;gap:var(--ra-space-2);margin-bottom:var(--ra-space-3)}
.cab-dashboard-panel>header strong{flex:1}
.cab-dashboard-panel .cab-panel-scroll{max-height:60vh;overflow:auto}
.cab-cache-note{font-size:var(--ra-fs-xs);color:var(--ra-text-mid);margin-block:var(--ra-space-2)}
.cab-field[hidden]{display:none!important}
.cab-field-check{flex-direction:row!important;align-items:center;gap:var(--ra-space-2)}
.cab-modal-body pre{white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%}
.cab-review-table{width:100%;border-collapse:collapse;margin-block:var(--ra-space-3)}
.cab-review-table th,.cab-review-table td{padding:var(--ra-space-2);border-bottom:1px solid var(--ra-border);text-align:left;vertical-align:top;overflow-wrap:anywhere}
.cab-loading{display:grid;gap:var(--ra-space-3);padding:var(--ra-space-3)}
.cab-skeleton{height:calc(var(--ra-space-4) * 4);border-radius:var(--ra-radius-md);background:var(--ra-surface-2);animation:cab-loading-pulse 1.4s ease-in-out infinite alternate}
@keyframes cab-loading-pulse{to{opacity:.45}}
@media(prefers-reduced-motion:reduce){.cab-skeleton{animation:none}}
.cab-field-check>input[type=checkbox]{width:auto;flex:0 0 auto}
.cab-modal-body>.cab-card-actions{flex-wrap:wrap}

/* Procedures — a runbook card: a double binding rail down the left, a ticked-box title, dotted leaders between the facts. */
.cab-card.cab-card--procedure{border-radius:var(--ra-radius-md);border-top-width:1px;border-left:calc(6px * var(--ra-density,1)) double var(--cab-accent)}
.cab-card--procedure .cab-card-title::before{content:"☑ ";color:var(--cab-accent)}
.cab-card--procedure .cab-kv>div{border-bottom:1px dotted var(--ra-border-strong)}
.cab-card--procedure .cab-card-meta{letter-spacing:.03em}
