/* Cupo Ui component styles. One block per Components/Ui/ component, same order as DESIGN.md.
   Tokens only — no literal colour, radius or font-size below this line. */

/* ---- State gutter ---------------------------------------------------------------------------
   Shared by every surface that can carry state: table rows, cards, stat tiles, notice rows. The
   element sets data-state and gets a coloured left rule plus, where it reads better, a tinted
   fill. Elements with no data-state get a transparent rule so nothing shifts by 3px. */

[data-state] {
    --cu-state: transparent;
    --cu-state-soft: transparent;
}

[data-state="accent"] { --cu-state: var(--cu-accent); --cu-state-soft: var(--cu-accent-soft); }
[data-state="ok"]     { --cu-state: var(--cu-ok);     --cu-state-soft: var(--cu-ok-soft); }
[data-state="warn"]   { --cu-state: var(--cu-warn);   --cu-state-soft: var(--cu-warn-soft); }
[data-state="crit"]   { --cu-state: var(--cu-crit);   --cu-state-soft: var(--cu-crit-soft); }
[data-state="idle"]   { --cu-state: var(--cu-line-strong); --cu-state-soft: var(--cu-surface-2); }

/* ---- CuPageHeader --------------------------------------------------------------------------- */

.cu-page-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--cu-s4);
    flex-wrap: wrap;
    padding-bottom: var(--cu-s3);
    border-bottom: 1px solid var(--cu-line);
}

.cu-page-header-text {
    min-width: 0;
}

.cu-page-header-eyebrow {
    display: flex;
    align-items: center;
    gap: var(--cu-s1);
    margin-bottom: var(--cu-s1);
    flex-wrap: wrap;
}

.cu-page-header-eyebrow a {
    color: var(--cu-text-muted);
}

.cu-page-header-eyebrow a:hover {
    color: var(--cu-accent);
}

.cu-page-header-title {
    font-size: var(--cu-fs-h1);
}

.cu-page-header-subtitle {
    margin-top: var(--cu-s1);
    max-width: 68ch;
    color: var(--cu-text-muted);
}

.cu-page-header-actions {
    display: flex;
    align-items: center;
    gap: var(--cu-s2);
    flex-wrap: wrap;
}

/* ---- CuButton -------------------------------------------------------------------------------- */

.cu-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--cu-s1);
    height: 2rem;
    padding: 0 var(--cu-s3);
    border: 1px solid transparent;
    border-radius: var(--cu-r);
    background: transparent;
    color: var(--cu-text);
    font: inherit;
    font-size: var(--cu-fs-data);
    font-weight: 600;
    line-height: 1;
    white-space: nowrap;
    cursor: pointer;
    text-decoration: none;
    transition: background-color var(--cu-dur) var(--cu-ease), border-color var(--cu-dur) var(--cu-ease);
}

.cu-btn:hover {
    text-decoration: none;
}

.cu-btn:disabled,
.cu-btn[aria-disabled="true"] {
    opacity: 0.5;
    cursor: not-allowed;
}

.cu-btn .cu-icon {
    font-size: 1rem;
    margin-left: calc(var(--cu-s1) * -1);
}

.cu-btn.is-sm { height: 1.625rem; padding: 0 var(--cu-s2); font-size: var(--cu-fs-small); }
.cu-btn.is-lg { height: 2.375rem; padding: 0 var(--cu-s4); font-size: var(--cu-fs-body); }
.cu-btn.is-block { width: 100%; }

.cu-btn.is-primary {
    background: var(--cu-accent);
    border-color: var(--cu-accent);
    color: #fff;
}

.cu-btn.is-primary:not(:disabled):hover {
    background: var(--cu-accent-strong);
    border-color: var(--cu-accent-strong);
    color: #fff;
}

.cu-btn.is-default {
    background: var(--cu-surface);
    border-color: var(--cu-line-strong);
    color: var(--cu-text);
}

.cu-btn.is-default:not(:disabled):hover {
    background: var(--cu-surface-2);
    border-color: var(--cu-accent-line);
}

.cu-btn.is-subtle {
    background: var(--cu-accent-soft);
    border-color: transparent;
    color: var(--cu-accent-strong);
}

.cu-btn.is-subtle:not(:disabled):hover {
    background: var(--cu-accent-line);
    color: var(--cu-accent-strong);
}

.cu-btn.is-ghost {
    color: var(--cu-text-muted);
}

.cu-btn.is-ghost:not(:disabled):hover {
    background: var(--cu-surface-3);
    color: var(--cu-text);
}

.cu-btn.is-danger {
    background: var(--cu-crit);
    border-color: var(--cu-crit);
    color: #fff;
}

.cu-btn.is-danger:not(:disabled):hover {
    background: var(--cu-crit);
    border-color: var(--cu-crit);
    filter: brightness(0.9);
    color: #fff;
}

.cu-btn.is-icon {
    width: 2rem;
    padding: 0;
}

.cu-btn.is-icon.is-sm { width: 1.625rem; }

.cu-btn.is-icon .cu-icon { margin-left: 0; }

/* ---- CuBadge --------------------------------------------------------------------------------- */

.cu-badge {
    display: inline-flex;
    align-items: center;
    gap: var(--cu-s1);
    padding: 0 var(--cu-s2);
    height: 1.25rem;
    border-radius: var(--cu-r-sm);
    border: 1px solid transparent;
    font-size: var(--cu-fs-micro);
    font-weight: 700;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    white-space: nowrap;
}

.cu-badge.is-neutral { background: var(--cu-surface-3); border-color: var(--cu-line); color: var(--cu-text-muted); }
.cu-badge.is-accent  { background: var(--cu-accent-soft); border-color: var(--cu-accent-line); color: var(--cu-accent-strong); }
.cu-badge.is-ok      { background: var(--cu-ok-soft); border-color: var(--cu-ok-line); color: var(--cu-ok); }
.cu-badge.is-warn    { background: var(--cu-warn-soft); border-color: var(--cu-warn-line); color: var(--cu-warn); }
.cu-badge.is-crit    { background: var(--cu-crit-soft); border-color: var(--cu-crit-line); color: var(--cu-crit); }

.cu-badge-dot {
    width: 0.375rem;
    height: 0.375rem;
    border-radius: var(--cu-r-pill);
    background: currentColor;
    flex: none;
}

.cu-badge-count {
    min-width: 1.125rem;
    justify-content: center;
    text-transform: none;
    font-variant-numeric: tabular-nums;
}

/* ---- CuCard / CuSection ----------------------------------------------------------------------- */

.cu-card {
    background: var(--cu-surface);
    border: 1px solid var(--cu-line);
    border-left: var(--cu-gutter) solid var(--cu-state, transparent);
    border-radius: var(--cu-r);
    box-shadow: var(--cu-shadow-1);
    overflow: hidden;
}

.cu-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--cu-s3);
    padding: var(--cu-s2) var(--cu-s4);
    background: var(--cu-surface-2);
    border-bottom: 1px solid var(--cu-line);
    min-height: 2.5rem;
}

.cu-card-title {
    font-size: var(--cu-fs-h3);
    font-weight: 700;
}

.cu-card-subtitle {
    margin-top: 2px;
    font-size: var(--cu-fs-small);
    color: var(--cu-text-muted);
}

.cu-card-actions {
    display: flex;
    align-items: center;
    gap: var(--cu-s2);
    flex: none;
}

.cu-card-body {
    padding: var(--cu-s4);
}

.cu-card.is-flush > .cu-card-body {
    padding: 0;
}

.cu-card-foot {
    padding: var(--cu-s2) var(--cu-s4);
    border-top: 1px solid var(--cu-line);
    background: var(--cu-surface-2);
}

.cu-card.is-clickable {
    text-decoration: none;
    cursor: pointer;
    text-align: left;
    width: 100%;
    font: inherit;
    color: inherit;
    display: block;
    transition: border-color var(--cu-dur) var(--cu-ease), box-shadow var(--cu-dur) var(--cu-ease);
}

.cu-card.is-clickable:hover {
    border-color: var(--cu-accent-line);
    border-left-color: var(--cu-accent);
    box-shadow: var(--cu-shadow-2);
}

.cu-section {
    display: flex;
    flex-direction: column;
    gap: var(--cu-s2);
}

.cu-section-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--cu-s3);
}

.cu-section-title {
    font-size: var(--cu-fs-h3);
}

.cu-section-subtitle {
    font-size: var(--cu-fs-small);
    color: var(--cu-text-muted);
}

/* ---- CuStat ----------------------------------------------------------------------------------- */

.cu-stat-row {
    display: grid;
    gap: var(--cu-s3);
    grid-template-columns: repeat(auto-fit, minmax(10.5rem, 1fr));
}

.cu-stat {
    text-decoration: none;
    display: block;
    width: 100%;
    text-align: left;
    padding: var(--cu-s3) var(--cu-s4);
    background: var(--cu-surface);
    border: 1px solid var(--cu-line);
    border-left: var(--cu-gutter) solid var(--cu-state, transparent);
    border-radius: var(--cu-r);
    box-shadow: var(--cu-shadow-1);
    font: inherit;
    color: inherit;
}

.cu-stat.is-clickable {
    cursor: pointer;
    transition: border-color var(--cu-dur) var(--cu-ease);
}

.cu-stat.is-clickable:hover {
    border-color: var(--cu-accent-line);
}

.cu-stat-label {
    display: block;
    font-size: var(--cu-fs-micro);
    font-weight: 700;
    letter-spacing: var(--cu-track-wide);
    text-transform: uppercase;
    color: var(--cu-text-muted);
}

.cu-stat-value {
    display: block;
    margin-top: var(--cu-s1);
    font-size: var(--cu-fs-h2);
    font-weight: 800;
    letter-spacing: var(--cu-track-tight);
    line-height: var(--cu-lh-tight);
    font-variant-numeric: tabular-nums;
}

.cu-stat[data-state="crit"] .cu-stat-value { color: var(--cu-crit); }
.cu-stat[data-state="warn"] .cu-stat-value { color: var(--cu-warn); }
.cu-stat[data-state="ok"] .cu-stat-value { color: var(--cu-ok); }

.cu-stat-hint {
    display: block;
    margin-top: var(--cu-s1);
    font-size: var(--cu-fs-small);
    color: var(--cu-text-muted);
}

/* ---- CuToolbar ---------------------------------------------------------------------------------- */

.cu-toolbar {
    display: flex;
    align-items: center;
    gap: var(--cu-s2);
    flex-wrap: wrap;
    padding: var(--cu-s2) var(--cu-s3);
    background: var(--cu-surface);
    border: 1px solid var(--cu-line);
    border-radius: var(--cu-r);
}

.cu-toolbar-search {
    position: relative;
    flex: 1 1 16rem;
    min-width: 12rem;
    max-width: 24rem;
    display: flex;
    align-items: center;
}

.cu-toolbar-search .cu-icon {
    position: absolute;
    left: var(--cu-s2);
    color: var(--cu-text-muted);
    pointer-events: none;
}

.cu-toolbar-search input {
    padding-left: 2rem;
}

.cu-toolbar-filters {
    display: flex;
    align-items: center;
    gap: var(--cu-s2);
    flex-wrap: wrap;
}

/* Form controls default to filling their field; inside the toolbar they sit side by side, so the
   100% width has to be undone or every filter stacks into its own row. */
.cu-toolbar-filters .cu-input,
.cu-toolbar-filters .cu-select {
    width: auto;
    min-width: 9rem;
}

.cu-toolbar-actions {
    display: flex;
    align-items: center;
    gap: var(--cu-s2);
    margin-left: auto;
}

/* ---- Form primitives ------------------------------------------------------------------------------ */

.cu-field {
    display: flex;
    flex-direction: column;
    gap: var(--cu-s1);
    min-width: 0;
}

.cu-field-label {
    font-size: var(--cu-fs-small);
    font-weight: 600;
    color: var(--cu-text);
}

.cu-field-required {
    color: var(--cu-crit);
    margin-left: 2px;
}

.cu-field-hint {
    font-size: var(--cu-fs-small);
    color: var(--cu-text-muted);
}

.cu-field-error {
    display: flex;
    align-items: center;
    gap: var(--cu-s1);
    font-size: var(--cu-fs-small);
    color: var(--cu-crit);
}

.cu-field-error .cu-icon { font-size: 0.9375rem; }

.cu-input,
.cu-select,
.cu-textarea {
    width: 100%;
    min-width: 0;
    padding: 0 var(--cu-s2);
    height: 2rem;
    border: 1px solid var(--cu-line-strong);
    border-radius: var(--cu-r);
    background: var(--cu-surface);
    color: var(--cu-text);
    font: inherit;
    font-size: var(--cu-fs-data);
}

.cu-textarea {
    height: auto;
    min-height: 4.5rem;
    padding: var(--cu-s2);
    line-height: var(--cu-lh);
    resize: vertical;
}

.cu-select {
    appearance: none;
    padding-right: var(--cu-s5);
    background-image: linear-gradient(45deg, transparent 50%, currentColor 50%),
                      linear-gradient(135deg, currentColor 50%, transparent 50%);
    background-position: right 1rem center, right 0.7rem center;
    background-size: 5px 5px, 5px 5px;
    background-repeat: no-repeat;
}

.cu-input::placeholder,
.cu-textarea::placeholder {
    color: var(--cu-text-faint);
}

.cu-input:focus,
.cu-select:focus,
.cu-textarea:focus {
    border-color: var(--cu-accent);
    outline: 2px solid var(--cu-accent-soft);
    outline-offset: 0;
}

.cu-input:disabled,
.cu-select:disabled,
.cu-textarea:disabled {
    background: var(--cu-surface-3);
    color: var(--cu-text-muted);
    cursor: not-allowed;
}

.cu-input.is-mono { font-family: var(--cu-font-mono); }

.cu-field.has-error .cu-input,
.cu-field.has-error .cu-select,
.cu-field.has-error .cu-textarea {
    border-color: var(--cu-crit);
}

.cu-check {
    display: inline-flex;
    align-items: flex-start;
    gap: var(--cu-s2);
    cursor: pointer;
    font-size: var(--cu-fs-body);
}

.cu-check input {
    margin: 0;
    width: 1rem;
    height: 1rem;
    accent-color: var(--cu-accent);
    flex: none;
    margin-top: 2px;
}

.cu-check-text { min-width: 0; }

.cu-check-hint {
    display: block;
    font-size: var(--cu-fs-small);
    color: var(--cu-text-muted);
}

.cu-form-grid {
    display: grid;
    gap: var(--cu-s3) var(--cu-s4);
    grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
}

.cu-form-grid > .is-wide { grid-column: 1 / -1; }

/* ---- CuTable ---------------------------------------------------------------------------------------- */

.cu-table-wrap {
    width: 100%;
    overflow-x: auto;
}

.cu-table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-size: var(--cu-fs-data);
}

.cu-table th,
.cu-table td {
    padding: 0 var(--cu-s3);
    text-align: left;
    border-bottom: 1px solid var(--cu-line);
    vertical-align: middle;
}

.cu-table thead th {
    position: sticky;
    top: 0;
    z-index: 1;
    height: 2rem;
    background: var(--cu-surface-2);
    border-bottom: 1px solid var(--cu-line-strong);
    font-size: var(--cu-fs-micro);
    font-weight: 700;
    letter-spacing: var(--cu-track-wide);
    text-transform: uppercase;
    color: var(--cu-text-muted);
    white-space: nowrap;
}

.cu-table tbody tr {
    height: var(--cu-row-h);
    border-left: var(--cu-gutter) solid transparent;
}

.cu-table.is-dense tbody tr { height: var(--cu-row-h-dense); }

/* td, not tr: a border on a <tr> in a border-collapse:separate table is not painted in every
   engine, so the gutter is drawn on the first cell of the row instead. */
.cu-table tbody td:first-child {
    border-left: var(--cu-gutter) solid var(--cu-state, transparent);
}

.cu-table tbody tr:hover td {
    background: var(--cu-surface-2);
}

.cu-table tbody tr.is-clickable {
    cursor: pointer;
}

.cu-table tbody tr:focus-visible {
    outline: 2px solid var(--cu-focus);
    outline-offset: -2px;
}

.cu-table td.is-end,
.cu-table th.is-end { text-align: right; }

.cu-table td.is-center,
.cu-table th.is-center { text-align: center; }

.cu-table td.is-mono {
    font-family: var(--cu-font-mono);
    font-size: 0.9em;
}

.cu-table td.is-numeric {
    font-variant-numeric: tabular-nums;
    text-align: right;
}

.cu-table td.is-actions {
    text-align: right;
    white-space: nowrap;
}

.cu-sort {
    display: inline-flex;
    align-items: center;
    gap: var(--cu-s1);
    border: none;
    background: none;
    padding: 0;
    margin: 0;
    font: inherit;
    color: inherit;
    letter-spacing: inherit;
    text-transform: inherit;
    cursor: pointer;
}

.cu-sort:hover { color: var(--cu-accent); }

.cu-sort .cu-icon {
    font-size: 0.9375rem;
    opacity: 0;
}

.cu-sort:hover .cu-icon { opacity: 0.4; }
.cu-sort.is-sorted { color: var(--cu-accent); }
.cu-sort.is-sorted .cu-icon { opacity: 1; }

.cu-table-state {
    padding: var(--cu-s6) var(--cu-s4);
}

/* ---- CuPagination ------------------------------------------------------------------------------------ */

.cu-pagination {
    display: flex;
    align-items: center;
    gap: var(--cu-s3);
    flex-wrap: wrap;
    padding: var(--cu-s2) var(--cu-s3);
    font-size: var(--cu-fs-small);
    color: var(--cu-text-muted);
}

.cu-pagination-pages {
    display: flex;
    align-items: center;
    gap: var(--cu-s1);
    margin-left: auto;
}

.cu-pagination-size {
    display: flex;
    align-items: center;
    gap: var(--cu-s1);
}

.cu-pagination-size .cu-select {
    width: auto;
    height: 1.625rem;
    font-size: var(--cu-fs-small);
}

/* ---- CuAlert ------------------------------------------------------------------------------------------ */

.cu-alert {
    display: flex;
    align-items: flex-start;
    gap: var(--cu-s2);
    padding: var(--cu-s3);
    border: 1px solid var(--cu-state, var(--cu-line));
    border-left-width: var(--cu-gutter);
    border-radius: var(--cu-r);
    background: var(--cu-state-soft, var(--cu-surface-2));
    font-size: var(--cu-fs-body);
}

.cu-alert .cu-icon { color: var(--cu-state); margin-top: 1px; }
.cu-alert-body { flex: 1; min-width: 0; }
.cu-alert-title { font-weight: 700; }
.cu-alert-actions { margin-top: var(--cu-s2); display: flex; gap: var(--cu-s2); }

/* ---- CuEmpty ------------------------------------------------------------------------------------------- */

.cu-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--cu-s2);
    padding: var(--cu-s6) var(--cu-s4);
    text-align: center;
}

.cu-empty .cu-icon {
    font-size: 2rem;
    color: var(--cu-text-faint);
}

.cu-empty-title { font-size: var(--cu-fs-h3); }

.cu-empty-description {
    max-width: 46ch;
    color: var(--cu-text-muted);
}

.cu-empty-actions { margin-top: var(--cu-s2); display: flex; gap: var(--cu-s2); }

/* ---- CuSkeleton / CuSpinner ----------------------------------------------------------------------------- */

.cu-skeleton {
    display: block;
    height: 0.75rem;
    border-radius: var(--cu-r-sm);
    background: linear-gradient(90deg, var(--cu-surface-3), var(--cu-line), var(--cu-surface-3));
    background-size: 200% 100%;
    animation: cu-shimmer 1.4s linear infinite;
}

.cu-skeleton + .cu-skeleton { margin-top: var(--cu-s2); }

@keyframes cu-shimmer {
    from { background-position: 200% 0; }
    to { background-position: -200% 0; }
}

.cu-spinner {
    display: inline-block;
    width: 1rem;
    height: 1rem;
    border: 2px solid var(--cu-accent-line);
    border-top-color: var(--cu-accent);
    border-radius: var(--cu-r-pill);
    animation: cu-spin 0.7s linear infinite;
}

.cu-spinner.is-lg { width: 1.75rem; height: 1.75rem; border-width: 3px; }
.cu-spinner.on-ink { border-color: rgba(255, 255, 255, 0.35); border-top-color: #fff; }

@keyframes cu-spin {
    to { transform: rotate(360deg); }
}

.cu-loading {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--cu-s2);
    padding: var(--cu-s6) var(--cu-s4);
    color: var(--cu-text-muted);
}

/* ---- CuTabs ---------------------------------------------------------------------------------------------- */

.cu-tabs {
    display: flex;
    align-items: stretch;
    gap: var(--cu-s1);
    border-bottom: 1px solid var(--cu-line);
    overflow-x: auto;
}

.cu-tab {
    display: inline-flex;
    align-items: center;
    gap: var(--cu-s1);
    height: 2.25rem;
    padding: 0 var(--cu-s3);
    border: none;
    border-bottom: 2px solid transparent;
    background: none;
    color: var(--cu-text-muted);
    font: inherit;
    font-size: var(--cu-fs-data);
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
}

.cu-tab:hover { color: var(--cu-text); }

.cu-tab.is-active {
    color: var(--cu-accent);
    border-bottom-color: var(--cu-accent);
}

/* ---- CuDialog ------------------------------------------------------------------------------------------------ */

.cu-dialog-scrim {
    position: fixed;
    inset: 0;
    z-index: var(--cu-z-dialog);
    display: flex;
    align-items: flex-start;
    justify-content: center;
    padding: var(--cu-s5) var(--cu-s4);
    overflow-y: auto;
    background: rgba(12, 27, 33, 0.55);
    animation: cu-fade var(--cu-dur) var(--cu-ease);
}

@keyframes cu-fade {
    from { opacity: 0; }
    to { opacity: 1; }
}

.cu-dialog {
    width: min(34rem, 100%);
    margin: auto;
    background: var(--cu-surface);
    border-radius: var(--cu-r-lg);
    box-shadow: var(--cu-shadow-2);
    display: flex;
    flex-direction: column;
    max-height: calc(100vh - var(--cu-s7));
}

.cu-dialog.is-sm { width: min(24rem, 100%); }
.cu-dialog.is-lg { width: min(48rem, 100%); }
.cu-dialog.is-xl { width: min(68rem, 100%); }

.cu-dialog:focus { outline: none; }

.cu-dialog-head {
    display: flex;
    align-items: flex-start;
    gap: var(--cu-s3);
    padding: var(--cu-s4);
    border-bottom: 1px solid var(--cu-line);
}

.cu-dialog-title { font-size: var(--cu-fs-h2); }

.cu-dialog-subtitle {
    margin-top: var(--cu-s1);
    font-size: var(--cu-fs-body);
    color: var(--cu-text-muted);
}

.cu-dialog-body {
    padding: var(--cu-s4);
    overflow-y: auto;
    flex: 1;
}

.cu-dialog-foot {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: var(--cu-s2);
    padding: var(--cu-s3) var(--cu-s4);
    border-top: 1px solid var(--cu-line);
    background: var(--cu-surface-2);
    border-radius: 0 0 var(--cu-r-lg) var(--cu-r-lg);
}

/* ---- CuToast --------------------------------------------------------------------------------------------------- */

.cu-toaster {
    position: fixed;
    right: var(--cu-s4);
    bottom: var(--cu-s4);
    z-index: var(--cu-z-toast);
    display: flex;
    flex-direction: column;
    gap: var(--cu-s2);
    width: min(24rem, calc(100vw - var(--cu-s6)));
}

.cu-toast {
    display: flex;
    align-items: flex-start;
    gap: var(--cu-s2);
    padding: var(--cu-s3);
    background: var(--cu-surface);
    border: 1px solid var(--cu-line);
    border-left: var(--cu-gutter) solid var(--cu-state, var(--cu-accent));
    border-radius: var(--cu-r);
    box-shadow: var(--cu-shadow-2);
    animation: cu-toast-in var(--cu-dur-slow) var(--cu-ease);
}

@keyframes cu-toast-in {
    from { opacity: 0; transform: translateY(var(--cu-s2)); }
    to { opacity: 1; transform: none; }
}

.cu-toast .cu-icon { color: var(--cu-state, var(--cu-accent)); }
.cu-toast-body { flex: 1; min-width: 0; }
.cu-toast-title { font-weight: 700; font-size: var(--cu-fs-body); }
.cu-toast-detail { font-size: var(--cu-fs-small); color: var(--cu-text-muted); overflow-wrap: anywhere; }

/* ---- CuKeyValue --------------------------------------------------------------------------------------------------- */

.cu-kv {
    display: grid;
    grid-template-columns: minmax(8rem, max-content) 1fr;
    gap: var(--cu-s1) var(--cu-s4);
    margin: 0;
    font-size: var(--cu-fs-data);
}

.cu-kv dt {
    color: var(--cu-text-muted);
    font-size: var(--cu-fs-small);
    font-weight: 600;
}

.cu-kv dd {
    margin: 0;
    min-width: 0;
    overflow-wrap: anywhere;
}

@media (max-width: 560px) {
    .cu-kv { grid-template-columns: 1fr; gap: 0; }
    .cu-kv dd { margin-bottom: var(--cu-s2); }
}

/* ---- CuCopy / CuId ------------------------------------------------------------------------------------------------- */

.cu-id {
    display: inline-flex;
    align-items: center;
    gap: var(--cu-s1);
    max-width: 100%;
}

.cu-id-value {
    text-decoration: none;
    font-family: var(--cu-font-mono);
    font-size: 0.9em;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cu-copy {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.25rem;
    height: 1.25rem;
    padding: 0;
    border: none;
    border-radius: var(--cu-r-sm);
    background: none;
    color: var(--cu-text-faint);
    cursor: pointer;
    flex: none;
}

.cu-copy:hover { color: var(--cu-accent); background: var(--cu-accent-soft); }
.cu-copy.is-copied { color: var(--cu-ok); }
.cu-copy .cu-icon { font-size: 0.9375rem; }

/* ---- Notice rows (dashboard + notifications feed) ---------------------------------------------------------------------- */

.cu-notice {
    display: flex;
    align-items: flex-start;
    gap: var(--cu-s2);
    width: 100%;
    padding: var(--cu-s2) var(--cu-s3);
    border: none;
    border-left: var(--cu-gutter) solid var(--cu-state, transparent);
    border-bottom: 1px solid var(--cu-line);
    background: none;
    font: inherit;
    color: inherit;
    text-align: left;
    cursor: pointer;
}

.cu-notice:last-child { border-bottom: none; }
.cu-notice:hover { background: var(--cu-surface-2); }
.cu-notice .cu-icon { color: var(--cu-state, var(--cu-text-muted)); margin-top: 2px; }
.cu-notice-body { flex: 1; min-width: 0; }

.cu-notice-title {
    display: flex;
    align-items: center;
    gap: var(--cu-s2);
    flex-wrap: wrap;
    font-weight: 600;
}

.cu-notice-detail {
    font-size: var(--cu-fs-small);
    color: var(--cu-text-muted);
    overflow-wrap: anywhere;
}

.cu-notice-time {
    flex: none;
    font-family: var(--cu-font-mono);
    font-size: var(--cu-fs-micro);
    color: var(--cu-text-muted);
    white-space: nowrap;
    margin-top: 2px;
}

.cu-source-list {
    display: flex;
    flex-wrap: wrap;
    gap: var(--cu-s2);
}

.cu-source {
    display: inline-flex;
    align-items: center;
    gap: var(--cu-s1);
    padding: 0 var(--cu-s2);
    height: 1.375rem;
    border: 1px solid var(--cu-line);
    border-radius: var(--cu-r-pill);
    font-size: var(--cu-fs-small);
    color: var(--cu-text-muted);
}

.cu-source .cu-icon { font-size: 0.875rem; color: var(--cu-ok); }
.cu-source.is-failed { border-color: var(--cu-crit-line); color: var(--cu-crit); background: var(--cu-crit-soft); }
.cu-source.is-failed .cu-icon { color: var(--cu-crit); }

/* ---- Notification bell ------------------------------------------------------------------------------------------------- */

.cu-bell-badge {
    position: absolute;
    top: 1px;
    right: 0;
    min-width: 1rem;
    height: 1rem;
    padding: 0 3px;
    border-radius: var(--cu-r-pill);
    font-size: var(--cu-fs-micro);
    font-weight: 700;
    line-height: 1rem;
    text-align: center;
    color: #fff;
    background: var(--cu-warn);
    font-variant-numeric: tabular-nums;
}

.cu-bell-badge.is-crit { background: var(--cu-crit); }

/* ---- Account menu ------------------------------------------------------------------------------------------------------ */

.cu-menu {
    position: relative;
}

.cu-menu-panel {
    position: absolute;
    right: 0;
    top: calc(100% + var(--cu-s1));
    min-width: 13rem;
    padding: var(--cu-s1);
    background: var(--cu-surface);
    color: var(--cu-text);
    border: 1px solid var(--cu-line);
    border-radius: var(--cu-r);
    box-shadow: var(--cu-shadow-2);
    z-index: var(--cu-z-topbar);
}

.cu-menu-meta {
    padding: var(--cu-s2);
    border-bottom: 1px solid var(--cu-line);
    margin-bottom: var(--cu-s1);
}

.cu-menu-item {
    display: flex;
    align-items: center;
    gap: var(--cu-s2);
    width: 100%;
    padding: var(--cu-s1) var(--cu-s2);
    border: none;
    border-radius: var(--cu-r-sm);
    background: none;
    color: inherit;
    font: inherit;
    font-size: var(--cu-fs-data);
    text-align: left;
    cursor: pointer;
}

.cu-menu-item:hover { background: var(--cu-surface-3); }

/* ---- Page crash boundary ------------------------------------------------------------------------------------------------ */

.cu-crash {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--cu-s3);
    padding: var(--cu-s7) var(--cu-s4);
    text-align: center;
}

.cu-crash .cu-icon { font-size: 2.5rem; color: var(--cu-crit); }
.cu-crash p { max-width: 60ch; color: var(--cu-text-muted); overflow-wrap: anywhere; }

/* ---- Session expiry toast ------------------------------------------------------------------------------------------------ */

.cu-session-toast {
    position: fixed;
    right: var(--cu-s4);
    bottom: var(--cu-s4);
    z-index: var(--cu-z-toast);
    width: min(22rem, calc(100vw - var(--cu-s6)));
    padding: var(--cu-s3);
    background: var(--cu-surface);
    border: 1px solid var(--cu-line);
    border-left: var(--cu-gutter) solid var(--cu-warn);
    border-radius: var(--cu-r);
    box-shadow: var(--cu-shadow-2);
}

.cu-session-toast-head {
    display: flex;
    align-items: center;
    gap: var(--cu-s2);
    font-weight: 700;
}

.cu-session-toast-head .cu-icon { color: var(--cu-warn); }
.cu-session-toast-title { flex: 1; }
.cu-session-toast-body { margin: var(--cu-s2) 0 var(--cu-s3); font-size: var(--cu-fs-body); }
.cu-session-toast-actions { display: flex; gap: var(--cu-s2); align-items: center; }

.cu-countdown {
    font-family: var(--cu-font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 700;
}


/* ---- CuEntityLink ------------------------------------------------------------------------------------------------------- */

.cu-entity {
    display: inline-flex;
    align-items: flex-start;
    gap: var(--cu-s1);
    max-width: 100%;
    color: inherit;
    text-decoration: none;
}

.cu-entity .cu-icon {
    flex: none;
    margin-top: 2px;
    color: var(--cu-text-faint);
}

.cu-entity:hover .cu-entity-label {
    color: var(--cu-accent);
    text-decoration: underline;
}

.cu-entity-text {
    display: inline-flex;
    flex-direction: column;
    min-width: 0;
}

.cu-entity-label {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cu-entity-sub {
    font-size: var(--cu-fs-small);
    color: var(--cu-text-muted);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ---- CuCommandPalette --------------------------------------------------------------------------------------------------- */

.cu-palette-scrim {
    position: fixed;
    inset: 0;
    z-index: var(--cu-z-dialog);
    display: flex;
    align-items: flex-start;
    justify-content: center;
    padding: 10vh var(--cu-s4) var(--cu-s4);
    background: rgba(12, 27, 33, 0.55);
    animation: cu-fade var(--cu-dur) var(--cu-ease);
}

.cu-palette {
    display: flex;
    flex-direction: column;
    width: min(42rem, 100%);
    max-height: min(32rem, 70vh);
    overflow: hidden;
    background: var(--cu-surface);
    border-radius: var(--cu-r-lg);
    box-shadow: var(--cu-shadow-2);
}

.cu-palette-field {
    display: flex;
    align-items: center;
    gap: var(--cu-s2);
    padding: var(--cu-s3) var(--cu-s4);
    border-bottom: 1px solid var(--cu-line);
}

.cu-palette-field .cu-icon { color: var(--cu-text-faint); }

.cu-palette-field input {
    flex: 1;
    min-width: 0;
    border: none;
    background: none;
    font: inherit;
    font-size: var(--cu-fs-h3);
    color: var(--cu-text);
}

.cu-palette-field input:focus { outline: none; }
.cu-palette-field input::placeholder { color: var(--cu-text-faint); }

.cu-palette-results {
    flex: 1;
    overflow-y: auto;
    padding: var(--cu-s2) 0;
}

.cu-palette-group + .cu-palette-group {
    margin-top: var(--cu-s2);
    padding-top: var(--cu-s2);
    border-top: 1px solid var(--cu-line);
}

.cu-palette-group-title {
    padding: var(--cu-s1) var(--cu-s4);
    color: var(--cu-text-muted);
}

.cu-palette-row {
    display: flex;
    align-items: flex-start;
    gap: var(--cu-s2);
    padding: var(--cu-s2) var(--cu-s4);
    border-left: var(--cu-gutter) solid transparent;
    cursor: pointer;
}

.cu-palette-row:hover { background: var(--cu-surface-2); }

.cu-palette-row.is-active {
    background: var(--cu-accent-soft);
    border-left-color: var(--cu-accent);
}

.cu-palette-row .cu-icon {
    flex: none;
    margin-top: 2px;
    color: var(--cu-text-faint);
}

.cu-palette-row-text {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.cu-palette-row-title { font-weight: 600; }

.cu-palette-row-sub {
    font-size: var(--cu-fs-small);
    color: var(--cu-text-muted);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cu-palette-none {
    padding: var(--cu-s5) var(--cu-s4);
    text-align: center;
    color: var(--cu-text-muted);
}

.cu-palette-foot {
    display: flex;
    gap: var(--cu-s4);
    padding: var(--cu-s2) var(--cu-s4);
    border-top: 1px solid var(--cu-line);
    background: var(--cu-surface-2);
    font-size: var(--cu-fs-micro);
    color: var(--cu-text-muted);
}

.cu-palette-foot kbd {
    padding: 0 var(--cu-s1);
    margin-right: 2px;
    font-family: var(--cu-font-mono);
    background: var(--cu-surface);
    border: 1px solid var(--cu-line);
    border-radius: var(--cu-r-sm);
}
