/* ===== Widget Grid V8/V11 styles =====
   WGI-M5 (2026-05-27): wrapped in @scope (.character-page) so V8 rules only
   match inside the mount-root. Original V8's :root block replaced by a
   theme-bridge that maps V8 tokens onto D&D Within's design system —
   including --char-accent (per-character) flowing into V8's accent + tile-dash. */

/* Theme-bridge: V8 → D&D Within tokens. Stays outside @scope so the custom
   props are inherited by everything inside .character-page. */
.character-page {
  /* Bridge to D&D Within's design tokens — alleen tokens zonder palette-equivalent.
     --user-*, --tile-*, --info-font-*, --tick/--handle/--guide/--alert worden
     door applyPalette() op <html> gezet en erven naar binnen .character-page in.
     Hier defaulten breekt dat over (CSS specificity: .character-page wint van
     inline <html> style voor descendants). */
  --bg: var(--bg-dark, #161618);
  --panel: var(--bg-card, #1f1f23);
  --text: var(--text-main, #e8e8ec);
  --muted: var(--text-dim, #8a8a96);
  --border: var(--border-light, #2a2a30);
  --accent: var(--char-accent, var(--accent, #6cf));
  --tile-dash: var(--char-accent, #6cf);
}

/* WGI-M7: verberg V8's eigen char-switcher UI wanneer V8 inline draait in
   D&D Within (DnD's navbar is daar de char-switcher). Standalone V8 zet geen
   body[data-route] dus de dropdown blijft daar zichtbaar. */
body[data-route^="characters/"] .character-page .rs-char-section,
body[data-route^="characters/"] .character-page #rs-char-toggle {
  display: none;
}

@scope (.character-page) {


  * {
    box-sizing: border-box;
    -webkit-tap-highlight-color: transparent;
  }

  body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
    background: var(--bg);
    color: var(--text);
    margin: 0;
    padding: 0;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
  /* V11 phase 3.5 — full-width topbar with situation tabs.
     Layout is: body = flex-column with .app-topbar on row 1 and .app-row on row 2.
     .app-row is the original flex-row containing left sidebar / main / right sidebar. */
  .app-topbar {
    display: flex;
    flex-shrink: 0;
    border-bottom: 1px solid var(--user-border-soft, var(--border));
    background: var(--user-bg-2, var(--panel));
  }
  .topbar-spacer-left,
  .topbar-spacer-right {
    width: 56px;
    flex-shrink: 0;
  }
  .topbar-spacer-left { border-right: 1px solid var(--user-border, var(--border)); }
  .topbar-spacer-right { border-left: 1px solid var(--user-border, var(--border)); }
  .app-topbar .dash-tabs {
    flex: 1;
    margin: 0;
    border-bottom: none;
    overflow: hidden;
  }
  .app-row {
    display: flex;
    flex: 1;
    min-height: 0;
    align-items: stretch;
  }
  main.app-main {
    flex: 1;
    min-width: 0;
    padding: 12px;
    /* FAB clearance: hou onderkant van het canvas vrij voor de dice/notes/
       bug-report FABs zonder de sidebars in te korten. */
    padding-block-end: 2.5rem;
    overflow-y: auto;
  }
  @media (max-width: 600px) {
    main.app-main { padding: 6px; padding-block-end: 2.5rem; }
  }

  /* ----- Left sidebar ----- */
  aside.sidebar {
    width: 56px;
    flex-shrink: 0;
    background: var(--user-bg-2, var(--panel));
    border-right: 1px solid var(--user-border, var(--border));
    display: flex;
    flex-direction: column;
    position: relative;       /* anchor voor uitschuif-panel */
    z-index: 40;
  }
  /* Uitschuif-panel ligt OVER de main content (verschuift de grid niet) */
  .sidebar-panel {
    position: absolute;
    left: 100%;
    top: 0;
    width: 240px;
    height: 100%;
    background: var(--user-bg-2, var(--panel));
    border-right: 1px solid var(--user-border, var(--border));
    display: flex;
    flex-direction: column;
    opacity: 0;
    pointer-events: none;
    transform: translateX(-8px);
    transition: opacity 0.18s ease, transform 0.18s ease;
    z-index: 50;
    box-shadow: 4px 0 24px rgba(0, 0, 0, 0.35);
  }
  aside.sidebar:hover .sidebar-panel,
  aside.sidebar.pinned .sidebar-panel {
    opacity: 1;
    pointer-events: auto;
    transform: translateX(0);
  }
  @media (hover: none) {
    /* Op touch geen hover-uitschuif; alleen .pinned (klik op categorie) */
    aside.sidebar:hover .sidebar-panel {
      opacity: 0; pointer-events: none; transform: translateX(-8px);
    }
    aside.sidebar.pinned .sidebar-panel {
      opacity: 1; pointer-events: auto; transform: translateX(0);
    }
  }
  .sidebar-search {
    padding: 12px;
    border-bottom: 1px solid var(--user-border, var(--border));
    flex-shrink: 0;
  }
  .sidebar-search input {
    width: 100%;
    background: var(--user-bg-1, var(--bg));
    border: 1px solid var(--user-border, var(--border));
    color: var(--user-text-regular, var(--text));
    padding: 7px 10px;
    border-radius: 6px;
    font-size: 13px;
    font-family: var(--info-font-body, inherit);
  }
  .sidebar-search input:focus { outline: none; border-color: var(--user-text-highlight, var(--accent)); }
  .sidebar-categories { display: flex; flex-direction: column; padding: 8px 0; flex-shrink: 0; }
  .cat-item {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 12px 0;
    background: transparent;
    border: none;
    color: var(--user-text-regular, var(--muted));
    cursor: pointer;
    font-size: 20px;
    border-left: 2px solid transparent;
    transition: background 0.15s, color 0.15s, border-color 0.15s;
  }
  .cat-item:hover { background: rgba(255,255,255,0.10); color: var(--user-text-highlight, var(--accent)); }
  .cat-item.active {
    color: var(--user-text-highlight, var(--accent));
    border-left-color: var(--user-text-highlight, var(--accent));
    background: rgba(255,255,255,0.03);
  }
  /* V9: ingeklapte sidebar → geen actieve-categorie-markering */
  aside.sidebar:not(:hover):not(.pinned) .cat-item.active {
    color: var(--user-text-regular, var(--muted));
    border-left-color: transparent;
    background: transparent;
  }
  @media (hover: none) {
    /* touch: alleen .pinned telt — :hover blijft hangen op touch-devices */
    aside.sidebar:not(.pinned) .cat-item.active {
      color: var(--user-text-regular, var(--muted));
      border-left-color: transparent;
      background: transparent;
    }
  }
  .cat-icon { display: inline-flex; align-items: center; justify-content: center; }
  .cat-icon svg { width: 20px; height: 20px; flex-shrink: 0; }
  /* ----- Right sidebar ----- */
  aside.sidebar.right-sidebar {
    border-right: none;
    border-left: 1px solid var(--user-border, var(--border));
    order: 3;
  }
  aside.sidebar#leftSidebar { order: 1; }
  main.app-main { order: 2; }
  aside.sidebar.right-sidebar .sidebar-panel {
    left: auto;
    right: 100%;
    border-right: none;
    border-left: 1px solid var(--user-border, var(--border));
    box-shadow: -4px 0 24px rgba(0, 0, 0, 0.35);
    transform: translateX(8px);
  }
  /* Rechter sidebar heeft GEEN uitklappend panel (per Joshua, 2026-05-29).
     De .sidebar-panel binnen rightSidebar wordt volledig verborgen; het
     `rs-char-toggle` knopje dat het panel zou openen ook. characterSelect
     blijft in DOM voor binding-compat. */
  aside.sidebar.right-sidebar .sidebar-panel,
  aside.sidebar.right-sidebar:hover .sidebar-panel,
  aside.sidebar.right-sidebar.pinned .sidebar-panel {
    display: none !important;
  }
  aside.sidebar.right-sidebar #rs-char-toggle { display: none; }
  /* Right-sidebar action buttons */
  .rs-btn {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 12px 0;
    background: transparent;
    border: none;
    color: var(--user-text-regular, var(--muted));
    cursor: pointer;
    font-size: 20px;
    border-left: 2px solid transparent;
    transition: background 0.15s, color 0.15s, border-color 0.15s;
  }
  .rs-btn:hover:not(:disabled) {
    background: rgba(255,255,255,0.10);
    color: var(--user-text-highlight, var(--accent));
    border-left-color: var(--user-text-highlight, var(--accent));
  }
  .rs-btn:disabled { opacity: 0.35; cursor: not-allowed; }
  .rs-btn svg { width: 20px; height: 20px; flex-shrink: 0; }
  /* Edit-values toggle — glow als de modus actief is */
  #rs-edit-values.active {
    color: var(--user-text-highlight, var(--accent));
    border-left-color: var(--user-text-highlight, var(--accent));
    background: rgba(255,255,255,0.06);
  }
  #rs-edit-values.active svg {
    filter: drop-shadow(0 0 6px var(--user-text-highlight, var(--accent)))
            drop-shadow(0 0 2px var(--user-text-highlight, var(--accent)));
  }
  /* Character-select inside right sidebar panel */
  .rs-char-section { padding: 8px 12px; }
  .rs-char-section .sidebar-section-label { padding: 4px 0 8px; }
  .rs-char-section select {
    width: 100%;
    background: var(--user-bg-1, var(--bg));
    border: 1px solid var(--user-border, var(--border));
    color: var(--user-text-regular, var(--text));
    padding: 7px 10px;
    border-radius: 6px;
    font-size: 13px;
    font-family: var(--info-font-body, inherit);
    cursor: pointer;
  }
  .rs-char-section select:focus { outline: none; border-color: var(--user-text-highlight, var(--accent)); }

  /* ----- Edit-values mode (V11 Phase 3.2) ----- */
  body.edit-values-active svg.dashboard g.editable-cell { cursor: pointer; pointer-events: all; }
  body.edit-values-active svg.dashboard g.editable-cell:hover path {
    filter: drop-shadow(0 0 5px var(--user-text-highlight, var(--accent)));
  }
  body.edit-values-active svg.dashboard g.editable-cell:hover path.info-box-cell {
    stroke: var(--user-text-highlight, var(--accent));
    stroke-width: 1.5;
    fill-opacity: 0.55;
  }
  .edit-input-overlay {
    position: absolute;
    background: var(--user-bg-2, var(--panel, #2a2318));
    border: 2px solid var(--user-text-highlight, var(--accent, #c9a961));
    color: var(--user-text-regular, var(--text, #e8dcc8));
    padding: 4px 8px;
    border-radius: 4px;
    font-size: 14px;
    font-family: var(--info-font-body, inherit);
    z-index: 200;
    text-align: center;
    box-shadow: 0 2px 12px rgba(0,0,0,0.5);
  }
  .edit-input-overlay:focus { outline: none; }


  .sidebar-widgets {
    padding: 4px 8px 12px;
    overflow-y: auto;
    flex: 1;
  }
  .sidebar-section-label {
    font-size: 10px;
    color: var(--user-text-regular, var(--muted));
    opacity: 0.55;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    padding: 10px 12px 4px;
    font-family: var(--info-font-display, inherit);
  }
  .widget-item {
    padding: 8px 12px;
    border-radius: 6px;
    cursor: pointer;
    color: var(--user-text-regular, var(--text));
    font-size: 13px;
    font-family: var(--info-font-body, inherit);
    transition: background 0.15s, color 0.15s;
    border-left: 2px solid transparent;
  }
  .widget-item:hover {
    background: rgba(255,255,255,0.04);
    color: var(--user-text-highlight, var(--accent));
  }
  .widget-item.active {
    color: var(--user-text-highlight, var(--accent));
    border-left-color: var(--user-text-highlight, var(--accent));
    background: rgba(255,255,255,0.03);
  }
  .widget-item.empty { opacity: 0.5; cursor: default; font-style: italic; }

  h1 {
    font-weight: 500;
    font-size: 20px;
    margin: 0 0 4px;
    letter-spacing: -0.01em;
  }

  .subtitle {
    color: var(--muted);
    font-size: 13px;
    margin: 0 0 20px;
  }

  .topbar-row {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 16px;
    margin-bottom: 20px;
  }
  .topbar-row > div { flex: 1; min-width: 0; }
  .topbar-row .subtitle { margin: 0; }

  .top-buttons {
    display: flex;
    gap: 8px;
    flex: 0 0 auto;
  }
  .icon-button {
    width: 44px; height: 44px;
    background: var(--panel);
    border: 1px solid var(--border);
    color: var(--text);
    border-radius: 10px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.15s, color 0.15s, border-color 0.15s;
  }
  .icon-button:hover { background: var(--accent); color: var(--bg); border-color: var(--accent); }
  .icon-button[aria-pressed="true"] { background: var(--accent); color: var(--bg); border-color: var(--accent); }
  .icon-button svg { width: 22px; height: 22px; }
  /* V9: settings-knop in widget-scope (een widget is geselecteerd) */
  .icon-button.widget-scope {
    border-color: var(--accent);
    color: var(--accent);
    box-shadow: 0 0 0 1px var(--accent),
                0 0 10px color-mix(in srgb, var(--accent) 40%, transparent);
  }
  .icon-button.widget-scope:hover { background: var(--accent); color: var(--bg); }

  /* V9 — character-select in topbar (dashboard-breed) */
  .character-select {
    background: var(--panel);
    border: 1px solid var(--border);
    color: var(--text);
    border-radius: 10px;
    height: 44px;
    padding: 0 34px 0 14px;
    font: inherit;
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    min-width: 140px;
    max-width: 200px;
    appearance: none;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238a8a96' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
    background-repeat: no-repeat;
    background-position: right 12px center;
    transition: border-color 0.15s, color 0.15s;
  }
  .character-select:hover { border-color: var(--accent); color: var(--accent); }
  .character-select:focus { outline: none; border-color: var(--accent); }

  .settings-overlay {
    position: fixed; inset: 0;
    background: rgba(0,0,0,0.55);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.22s ease;
    z-index: 99;
  }
  .settings-overlay.open { opacity: 1; pointer-events: auto; }

  .settings-panel {
    position: fixed;
    top: 0; right: 0; bottom: 0;
    width: 380px;
    max-width: 92vw;
    background: var(--panel);
    border-left: 1px solid var(--border);
    box-shadow: -8px 0 32px rgba(0,0,0,0.4);
    transform: translateX(100%);
    transition: transform 0.28s cubic-bezier(.4,0,.2,1);
    z-index: 100;
    display: flex;
    flex-direction: column;
  }
  .settings-panel.open { transform: translateX(0); }

  .settings-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px 20px;
    border-bottom: 1px solid var(--border);
  }
  .settings-header h2 {
    margin: 0;
    font-size: 16px;
    font-weight: 600;
    letter-spacing: -0.01em;
  }
  .settings-close {
    width: 36px; height: 36px;
    background: transparent;
    border: 1px solid var(--border);
    color: var(--text);
    border-radius: 8px;
    cursor: pointer;
    font-size: 18px;
    line-height: 1;
  }
  .settings-close:hover { background: var(--bg); border-color: var(--accent); color: var(--accent); }

  .settings-tabs {
    display: flex;
    gap: 2px;
    padding: 0 12px;
    border-bottom: 1px solid var(--border);
    flex: 0 0 auto;
  }
  .settings-tab {
    flex: 1;
    padding: 12px 8px;
    background: transparent;
    border: none;
    color: var(--muted);
    font: inherit;
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    transition: color 0.15s, border-color 0.15s;
  }
  .settings-tab:hover { color: var(--text); }
  .settings-tab.active {
    color: var(--accent);
    border-bottom-color: var(--accent);
  }

  .settings-body {
    overflow-y: auto;
    overflow-x: hidden;
    padding: 16px 20px;
    flex: 1;
  }
  .settings-pane { display: none; }
  .settings-pane.active { display: block; }

  .control input[type="color"] {
    width: 100%;
    height: 36px;
    padding: 2px;
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 6px;
    cursor: pointer;
  }
  .control-row {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 8px;
  }

  .radio-group {
    display: flex;
    gap: 2px;
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 3px;
  }
  .radio-group label {
    flex: 1;
    text-align: center;
    padding: 8px 10px;
    border-radius: 4px;
    cursor: pointer;
    font-size: 13px;
    color: var(--muted);
    font-weight: 500;
    text-transform: none;
    letter-spacing: normal;
    transition: background 0.15s, color 0.15s;
  }
  .radio-group label:has(input:checked) {
    background: var(--accent);
    color: var(--bg);
  }
  .radio-group input { display: none; }

  .controls {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 12px;
  }
  @media (min-width: 500px) {
    .settings-panel .controls { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  }

  .control {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
  }
  /* Type-afhankelijke controls verbergen (conditional forms). */
  .kind-hidden { display: none !important; }

  .control label {
    color: var(--muted);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    font-weight: 500;
  }

  .control input {
    background: var(--bg);
    border: 1px solid var(--border);
    color: var(--text);
    padding: 8px 10px;
    border-radius: 6px;
    font: inherit;
    /* 16px voorkomt iOS auto-zoom op focus */
    font-size: 16px;
    font-variant-numeric: tabular-nums;
  }

  .control input:focus {
    outline: none;
    border-color: var(--accent);
  }

  .readout {
    background: var(--bg);
    border: 1px solid var(--border);
    color: var(--accent);
    padding: 8px 10px;
    border-radius: 6px;
    font: 500 14px system-ui;
    font-variant-numeric: tabular-nums;
    min-height: 36px;
    display: flex;
    align-items: center;
    gap: 8px;
  }
  .readout .mode-pill {
    background: var(--accent);
    color: var(--bg);
    font-size: 10px;
    font-weight: 700;
    padding: 2px 6px;
    border-radius: 4px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
  }

  .range-inputs {
    display: flex;
    gap: 6px;
    min-width: 0;
  }
  .range-inputs input {
    flex: 1;
    width: 0;
    min-width: 0;
    text-align: center;
    /* 16px voorkomt iOS auto-zoom op focus */
    font-size: 16px;
  }
  .range-tags {
    display: flex;
    gap: 6px;
    margin-top: -2px;
  }
  .range-tags span {
    flex: 1;
    text-align: center;
    color: var(--muted);
    font-size: 9px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    font-weight: 600;
  }
  .range-curr {
    margin-top: 2px;
    color: var(--accent);
    font-size: 11px;
    font-weight: 600;
    text-align: center;
    font-variant-numeric: tabular-nums;
  }

  .canvas-wrap {
    background: var(--panel);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 2px;              /* minimale box-padding zodat de grid strak langs de rand loopt */
    overflow-x: hidden;        /* V9: discrete paginering i.p.v. scrollen */
    margin-bottom: 12px;       /* iets meer lucht tussen de box en de pagina-nav */
  }

  /* V10 — situatie-dashboard tabs (Character / Social / …) bovenaan het canvas.
     Scaffolding-only: visueel actief-state, geen content per tab. */
  .dash-tabs {
    display: flex;
    gap: 2px;
    margin: 0;
    border-bottom: 1px solid var(--user-border-soft, var(--border));
    overflow: hidden;
  }
  .dash-tab {
    padding: 10px 16px;
    background: transparent;
    border: none;
    color: var(--user-text-regular);
    font: inherit;
    font-family: var(--info-font-display);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    cursor: pointer;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    transition: color 0.15s, border-color 0.15s;
    white-space: nowrap;
  }
  .dash-tab:hover { color: var(--user-text-highlight); }
  .dash-tab.active {
    color: var(--user-text-highlight);
    border-bottom-color: var(--user-border-glow, var(--user-text-highlight));
  }

  /* V11 — sidebar pulse op lege tab-switch */
  @keyframes sidebar-pulse-amber {
    0%   { box-shadow: none; }
    40%  { box-shadow: 0 0 0 3px rgba(251,191,36,0.7), inset 0 0 12px rgba(251,191,36,0.15); }
    100% { box-shadow: none; }
  }
  #leftSidebar.pulse-empty {
    animation: sidebar-pulse-amber 0.6s ease-out forwards;
  }

  /* V9 — paginanavigatie */
  .page-nav {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    margin: -2px 0 6px;
  }
  .page-arrow {
    width: 28px; height: 28px;
    background: var(--user-bg-1, var(--panel));
    border: 1px solid var(--user-border, var(--border));
    color: var(--user-text-highlight, var(--text));
    border-radius: 8px;
    cursor: pointer;
    font-size: 18px;
    line-height: 1;
    display: flex; align-items: center; justify-content: center;
    transition: background 0.15s, opacity 0.15s;
  }
  .page-arrow:hover:not(:disabled) { background: var(--user-bg-2, var(--bg)); }
  .page-arrow:disabled { opacity: 0.3; cursor: default; }
  .page-dots { display: flex; gap: 8px; align-items: center; }
  .page-dot {
    width: 9px; height: 9px;
    border-radius: 50%;
    border: 1px solid var(--user-border, var(--border));
    background: transparent;
    padding: 0;
    cursor: pointer;
    transition: background 0.15s, transform 0.15s;
  }
  .page-dot:hover { background: var(--user-border, var(--muted)); }
  .page-dot.active {
    background: var(--user-text-highlight, var(--accent));
    border-color: var(--user-text-highlight, var(--accent));
    transform: scale(1.15);
  }

  svg {
    display: block;
    user-select: none;
  }

  /* Touch: the dashboard canvas owns its own gestures (widget move/resize +
     page-swipe). Without touch-action:none on the ROOT svg, mobile browsers
     read a drag as a scroll/pan and fire pointercancel mid-drag → the widget
     drops. touch-action on inline SVG *children* (topbar/resize-hit) is ignored
     by Chrome/Safari, so it must sit on the root svg here. */
  svg.dashboard,
  #canvas {
    touch-action: none;
  }

  /* V9: pill-resize-handle (rand-pill + drie grip-bollen, palette-warm) */
  svg .resize-handle-hit {
    fill: transparent;
    touch-action: none;
  }
  svg g.resize-handle.ew .resize-handle-hit { cursor: ew-resize; }
  svg g.resize-handle.ns .resize-handle-hit { cursor: ns-resize; }
  svg .resize-handle-pill {
    fill: var(--user-border-glow, #fbbf24);
    fill-opacity: 0.42;
    stroke: var(--user-border-glow, #fbbf24);
    stroke-opacity: 0.65;
    stroke-width: 1;
    vector-effect: non-scaling-stroke;
    pointer-events: none;
    transition: fill-opacity 0.12s ease, stroke-opacity 0.12s ease, filter 0.18s ease;
  }
  svg .resize-handle-grip {
    fill: var(--user-bg-2, #161311);
    fill-opacity: 0.85;
    pointer-events: none;
    transition: fill-opacity 0.12s ease;
  }
  svg g.resize-handle:hover .resize-handle-pill {
    fill-opacity: 0.85;
    stroke-opacity: 1;
  }
  svg g.resize-handle:hover .resize-handle-grip { fill-opacity: 1; }
  svg g.resize-handle.dragging .resize-handle-pill {
    fill-opacity: 1;
    stroke-opacity: 1;
    filter: drop-shadow(0 0 6px color-mix(in srgb, var(--user-border-glow, #fbbf24) 70%, transparent));
  }
  svg g.resize-handle.dragging .resize-handle-grip { fill-opacity: 1; }

  svg .widget-topbar {
    cursor: grab;
    fill: rgba(255, 204, 102, 0.18);
    stroke: var(--tile-widget);
    stroke-width: 1;
    touch-action: none;
    rx: 3;
  }
  svg .widget-topbar:hover { fill: rgba(255, 204, 102, 0.32); }
  svg .widget-topbar.dragging { cursor: grabbing; fill: rgba(255, 204, 102, 0.55); }
  svg .widget-grip { stroke: var(--tile-widget); stroke-width: 1.5; pointer-events: none; }

  svg .widget-onboard-rect {
    fill: var(--tile-widget);
    fill-opacity: 0.18;
    stroke: var(--tile-widget);
    stroke-width: 1.5;
    pointer-events: none;
  }
  svg .widget-onboard-rect.alert {
    fill: var(--alert);
    fill-opacity: 0.22;
    stroke: var(--alert);
    stroke-width: 2.5;
    filter: drop-shadow(0 0 8px rgba(255, 140, 51, 0.75));
  }
  svg .widget-onboard-topbar {
    fill: var(--tile-widget);
    fill-opacity: 0.5;
    stroke: var(--tile-widget);
    stroke-width: 1;
    cursor: grab;
    touch-action: none;
  }
  svg .widget-onboard-topbar:hover { fill-opacity: 0.7; }
  svg .widget-onboard-topbar.dragging { cursor: grabbing; fill-opacity: 0.9; }
  svg .widget-onboard-topbar.alert {
    fill: var(--alert);
    fill-opacity: 0.7;
    stroke: var(--alert);
  }
  svg .widget-title { fill: var(--bg); font-family: system-ui, sans-serif; font-weight: 600; pointer-events: none; user-select: none; }
  svg .widget-content-area { fill: var(--tile-widget); fill-opacity: 0.08; pointer-events: none; }
  /* ------- Default styling = palette-driven (Positive Gold etc) -------
     Edit-mode en Dev-view zijn aparte toggles via svg.is-editing /
     svg.dev-view / body.dev-view classes. */
  svg .info-box-2d {
    stroke: var(--user-border);
    stroke-opacity: 0.55;
    rx: 6; ry: 6;
  }
  svg .info-box-cell {
    fill: var(--user-bg-1);
    fill-opacity: 0.35;
  }
  svg .info-box-outer {
    fill: none;
    stroke: var(--user-border-soft);
    stroke-width: 1;
    pointer-events: none;
    transition: stroke 0.2s, filter 0.2s;
  }
  /* Glow alleen op de widget die zelf gedragd wordt — Amber accent.
     Info-boxes glowen niet mee; andere widgets ook niet. */
  svg g.widget.is-dragging-self .widget-onboard-rect {
    stroke: var(--user-border-glow);
    filter: drop-shadow(0 0 8px color-mix(in srgb, var(--user-border-glow) 50%, transparent));
  }
  svg .info-box-text { fill: var(--user-text-regular); font-family: var(--info-font-body); }
  svg .info-box-text.highlight { fill: var(--user-text-highlight); }
  svg .info-box-text.is-prof-col { font-size: 1.25em; }
  svg .widget-onboard-rect {
    fill: var(--user-bg-2);
    fill-opacity: 1;
    stroke: var(--user-border);
    stroke-opacity: 0.6;
    transition: stroke 0.2s, filter 0.2s;
  }
  svg .widget-content-area { fill: transparent; }
  svg .widget-onboard-topbar {
    fill: var(--user-bg-1);
    fill-opacity: 0.35;
    stroke: var(--user-border-soft);
    pointer-events: auto;   /* drag altijd toegestaan via topbar */
    cursor: grab;
  }
  svg .widget-onboard-topbar.dragging {
    fill-opacity: 0.55;
    cursor: grabbing;
  }
  svg .widget-title {
    fill: var(--user-text-highlight);
    font-family: var(--info-font-display);
    letter-spacing: 0.08em;
  }
  /* V9: in-widget gear/delete verwijderd — settings via topbar-knop, delete via toets. */

  /* Active-marker: amber stroke + glow op het buitenrand-rect van de actieve widget */
  svg g.widget.is-active .widget-onboard-rect {
    stroke-width: 3;
    stroke: var(--user-border-glow, #fbbf24);
    filter: drop-shadow(0 0 10px color-mix(in srgb, var(--user-border-glow, #fbbf24) 65%, transparent));
  }
  /* Multi-select: mede-geselecteerde (niet-actieve) widgets krijgen een
     zichtbare maar zachtere rand dan de actieve widget. */
  svg g.widget.is-multi-selected .widget-onboard-rect {
    stroke-width: 2.5;
    stroke: var(--user-border-glow, #fbbf24);
    stroke-opacity: 0.85;
    fill-opacity: 1;
    filter: drop-shadow(0 0 6px color-mix(in srgb, var(--user-border-glow, #fbbf24) 45%, transparent));
  }
  /* Inactieve widgets iets gedempt zodat focus op active blijft */
  svg g.widget.is-inactive:not(.is-multi-selected) .widget-onboard-rect {
    fill-opacity: 0.55;
    stroke-opacity: 0.5;
  }
  svg g.widget.is-inactive .widget-onboard-topbar {
    fill-opacity: 0.7;
  }

  /* Dev-only SVG elements — V10: amber-grid (volledig raster) i.p.v.
     rail+ticks aan de zijkant. Rail/tick CSS blijft staan voor compat. */
  svg .rail,
  svg .tile-dash,
  svg .tile-dash-2d,
  svg .tick,
  svg .tick-strong,
  svg .tick-info,
  svg .dash-outline,
  svg .label,
  svg .meta,
  svg .dev-grid-bg { display: none; }
  svg.dev-view .tile-dash-2d,
  svg.dev-view .dev-grid-bg { display: revert; }
  /* Dev-grid achtergrond — doffe amber, vult het hele dashboard-vlak.
     Tile-rects in bg-kleur erboven vormen de cellen; het verschil = de
     tile-spacing, en die wordt automatisch het zichtbare raster. */
  svg .dev-grid-bg {
    fill: color-mix(in srgb, var(--user-border-glow, #fbbf24) 32%, transparent);
    pointer-events: none;
  }
  svg.dev-view .tile-dash-2d {
    fill: var(--user-bg-2);
    fill-opacity: 1;
    stroke: none;
  }

  /* Drag-handles: V10 zijn alleen zichtbaar wanneer de muis in proximity is
     (of de handle zelf gedragd wordt). Edit-mode is altijd actief. */
  svg g.resize-handle { display: none; }
  svg g.resize-handle.proximity-near,
  svg g.resize-handle.dragging { display: revert; }

  /* Bug #rC2HV4: in edit-values mode geen hele-widget manipulatie — verberg
     resize-handles + de move-topbar zodat alleen losse infoboxen overblijven. */
  body.edit-values-active svg g.resize-handle { display: none !important; }
  body.edit-values-active svg .widget-topbar { pointer-events: none; fill: transparent; }

  /* Mobile "hover": touch devices have no hovering pointer, so the proximity
     mechanism that reveals resize-handles never fires — they'd be invisible and
     unresizable. Instead, when a widget is SELECTED (tap → .is-active) show ITS
     handles at full strength (44×44 hit area already), and make the move-topbar
     clearer. Hover/mouse devices keep the proximity behaviour untouched. */
  @media (hover: none) and (pointer: coarse) {
    svg g.widget.is-active g.resize-handle { display: revert; }
    svg g.widget.is-active .resize-handle-pill { fill-opacity: 0.9; stroke-opacity: 1; }
    svg g.widget.is-active .resize-handle-grip { fill-opacity: 1; }
    svg g.widget.is-active .widget-topbar { fill: rgba(255, 204, 102, 0.34); }
  }

  /* Page styling = palette-driven (default) */
  body {
    background: var(--user-bg-page);
    color: var(--user-text-regular);
  }
  body h1 {
    color: var(--user-text-highlight);
    font-family: var(--info-font-display);
    letter-spacing: 0.06em;
  }
  body .subtitle { color: var(--user-text-regular); opacity: 0.7; }
  body .canvas-wrap {
    background: var(--user-bg-2);
    border-color: var(--user-border);
  }

  /* Dev-only items in settings — alleen wanneer body.dev-view */
  .dev-only { display: none; }
  body.dev-view .dev-only { display: revert; }
  /* Dashboard footer-info (Dashboard / Widget / Info boxes panels) heeft
     een eigen toggle in de algemene settings — onafhankelijk van dev-view. */
  .info.show-on-toggle { display: none; }
  body.show-dashboard-info .info.show-on-toggle { display: grid; }

  /* Display-only SVG elements — pointer-events: none zorgt dat touches niet de handles blokkeren */
  svg .rail,
  svg .tile-dash,
  svg .tile-dash-2d,
  svg .dash-outline,
  svg .tile-widget,
  svg .tile-info,
  svg .tick,
  svg .tick-strong,
  svg .tick-info,
  svg .guide,
  svg .label,
  svg .meta { pointer-events: none; }

  svg .rail { stroke: var(--border); stroke-width: 1.5; }
  svg .tile-dash { stroke: var(--tile-dash); stroke-width: 6; stroke-linecap: butt; }
  svg .tile-dash-2d { fill: var(--tile-dash); fill-opacity: 0.22; stroke: var(--tile-dash); stroke-opacity: 0.55; stroke-width: 0.5; }
  svg .dash-outline { fill: none; stroke: var(--border); stroke-width: 1; stroke-dasharray: 3 4; }
  svg .tile-widget { stroke: var(--tile-widget); stroke-width: 6; stroke-linecap: butt; }
  svg .tile-info { stroke: var(--tile-info); stroke-width: 4; stroke-linecap: butt; }
  svg .tick-info { stroke: var(--tile-info); stroke-width: 1.5; }
  svg .tick { stroke: var(--tick); stroke-width: 1.5; }
  svg .tick-strong { stroke: var(--text); stroke-width: 2; }
  svg .guide { stroke: var(--guide); stroke-width: 1; stroke-dasharray: 2 3; }
  svg .label { fill: var(--text); font: 500 12px system-ui; }
  svg .meta { fill: var(--muted); font: 11px system-ui; font-variant-numeric: tabular-nums; }

  .info {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 12px;
  }

  .info-box {
    background: var(--panel);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 14px 16px;
  }

  .info-box h3 {
    margin: 0 0 10px;
    font-size: 11px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    font-weight: 600;
  }

  .info-row {
    display: flex;
    justify-content: space-between;
    padding: 3px 0;
    font-size: 13px;
    font-variant-numeric: tabular-nums;
  }

  .info-row .key { color: var(--muted); }
  .info-row .val { color: var(--text); font-weight: 500; }
  .info-row .val.highlight { color: var(--accent); }
  .info-row .val.warn { color: #fc6; }

  /* ===== Map-widget ===== */
  svg .map-placeholder { fill: var(--user-bg-2, #161311); }
  svg .map-status {
    fill: var(--user-text-regular, #9a8e7e);
    font-size: 12px;
    font-family: var(--info-font-body, serif);
  }
  /* Pins zijn standaard onzichtbaar; bij hover verschijnt een gele shade. */
  svg .map-pin {
    fill: transparent;
    stroke: transparent;
    stroke-width: 1;
    vector-effect: non-scaling-stroke;
    transition: fill 0.15s ease, stroke 0.15s ease;
  }
  svg .map-pin.has-link { pointer-events: all; cursor: pointer; }
  svg .map-pin.has-link:hover {
    fill: rgba(251,191,36,0.20);
    stroke: rgba(251,191,36,0.45);
  }
  body.edit-values-active svg .map-pin {
    pointer-events: all;
    cursor: pointer;
    stroke: rgba(251,191,36,0.35);
    stroke-width: 1.5;
  }
  body.edit-values-active svg .map-pin:hover {
    fill: rgba(251,191,36,0.25);
    stroke: rgba(251,191,36,0.70);
  }
  body.pin-add-mode svg .map-pin { pointer-events: none !important; }
  body.pin-add-mode svg .map-image { cursor: crosshair; }
  body.pin-add-mode svg rect.map-placeholder { cursor: crosshair; }
  svg .map-btn { cursor: pointer; }
  svg .map-btn-bg {
    fill: rgba(12,10,8,0.72);
    stroke: var(--user-border-soft, rgba(201,169,97,0.25));
  }
  svg .map-btn:hover .map-btn-bg { fill: rgba(12,10,8,0.94); }
  svg .map-btn-label {
    fill: var(--user-text-highlight, #c9a961);
    font-size: 15px;
    font-weight: 700;
  }
  svg .map-dim-pip {
    fill: rgba(12,10,8,0.72);
    stroke: var(--user-border-soft, rgba(201,169,97,0.45));
    stroke-width: 1.2;
  }
  svg .map-dim-pip.active { fill: var(--user-border-glow, #fbbf24); }

  /* ===== Map-widget edit-mode action buttons (V11 Phase 3.3) ===== */
  svg .map-action-btn { cursor: pointer; }
  svg .map-action-btn rect { transition: fill 0.12s; }
  svg .map-action-btn rect:first-of-type { fill: rgba(12,10,8,0.72); }
  svg .map-action-btn:hover rect:first-of-type { fill: rgba(251,191,36,0.18); }
  svg .map-action-btn path, svg .map-action-btn circle,
  svg .map-action-btn line, svg .map-action-btn polyline {
    stroke: var(--user-text-highlight, #c9a961);
    fill: none; stroke-width: 1.5;
    stroke-linecap: round; stroke-linejoin: round;
    vector-effect: non-scaling-stroke;
  }
  svg .map-action-btn.active rect:first-of-type { fill: rgba(251,191,36,0.32); }
  svg .map-action-btn.active circle, svg .map-action-btn.active line,
  svg .map-action-btn.active path { stroke: #fbbf24; }

  /* ===== Map-edit popover (HTML overlay) ===== */
  .map-edit-popover {
    position: fixed; z-index: 250;
    background: var(--user-bg-2, var(--panel));
    border: 2px solid var(--user-text-highlight, var(--accent));
    border-radius: 6px; padding: 12px; min-width: 220px;
    display: flex; flex-direction: column; gap: 8px;
    box-shadow: 0 4px 16px rgba(0,0,0,0.5);
    font-family: var(--info-font-body, sans-serif);
    font-size: 13px; color: var(--user-text-regular, var(--text));
  }
  .map-edit-popover label {
    font-size: 11px; color: var(--user-text-muted, var(--muted)); margin-bottom: -4px;
  }
  .map-edit-popover input, .map-edit-popover select {
    background: var(--user-bg-1, var(--bg));
    border: 1px solid var(--user-border, var(--border));
    color: var(--user-text-regular, var(--text));
    padding: 6px 8px; border-radius: 4px; font-size: 13px; width: 100%;
  }
  .map-edit-popover .mep-row { display: flex; gap: 6px; justify-content: flex-end; margin-top: 4px; }
  .map-edit-popover button { padding: 6px 12px; border-radius: 4px; cursor: pointer; font-size: 12px; font-weight: 600; border: none; }
  .map-edit-popover .btn-save { background: var(--user-text-highlight, #c9a961); color: var(--user-bg-1, #1a1208); }
  .map-edit-popover .btn-save:hover { filter: brightness(1.15); }
  .map-edit-popover .btn-cancel { background: transparent; color: var(--user-text-regular, var(--text)); border: 1px solid var(--user-border, var(--border)) !important; }
  .map-edit-popover .btn-delete { background: #7a2020; color: #f8d0d0; margin-right: auto; }
  .map-edit-popover .btn-delete:hover { background: #a03030; }

  /* ===== Combat Tracker / Initiative Tracker ===== */
  .combat-root {
    width: 100%; height: 100%; box-sizing: border-box;
    display: flex; flex-direction: column;
    font-family: var(--info-font-body, sans-serif);
    color: var(--user-text-regular, var(--text));
    font-size: 12px; overflow: hidden;
  }
  .combat-header {
    display: flex; align-items: center; gap: 8px;
    padding: 4px 6px; flex: 0 0 auto;
    border-bottom: 1px solid var(--user-border, var(--border));
  }
  .combat-round {
    font-weight: 700; font-size: 12px; letter-spacing: .02em;
    color: var(--user-text-highlight, var(--accent)); white-space: nowrap;
  }
  .combat-controls { display: flex; gap: 4px; margin-left: auto; align-items: center; }
  .combat-ctrl-btn {
    border: 1px solid var(--user-border, var(--border));
    background: var(--user-bg-1, var(--bg)); color: var(--user-text-regular, var(--text));
    border-radius: 5px; padding: 3px 8px; font-size: 11px; font-weight: 600; cursor: pointer;
    line-height: 1.4;
  }
  .combat-ctrl-btn:hover:not(:disabled) { border-color: var(--user-text-highlight, var(--accent)); }
  .combat-ctrl-btn:disabled { opacity: .4; cursor: default; }
  .combat-ctrl-btn.active { background: var(--user-text-highlight, var(--accent)); color: var(--user-bg-1, #1a1208); border-color: transparent; }
  .combat-add-btn { background: var(--user-text-highlight, var(--accent)); color: var(--user-bg-1, #1a1208); border-color: transparent; }

  .combat-body { flex: 1 1 auto; overflow: auto; padding: 4px 6px 6px; }
  .combat-empty { padding: 16px 8px; text-align: center; color: var(--user-text-muted, var(--muted)); font-size: 12px; }

  .combat-table { display: flex; flex-direction: column; gap: 4px; min-width: max-content; }
  .combat-row {
    display: grid;
    /* Naam-kolom: bescheiden floor (96px) die nog meegroeit met langere namen.
       Compromis: bug #9 verwijderde de harde 110px-floor; latere DM-bug vroeg
       toch weer een minimumbreedte → 96px geeft een ondergrens zónder de kolom
       opnieuw rigide te maken (1.4fr blijft groeien). */
    grid-template-columns: 34px minmax(96px,1.4fr) 84px 120px 52px 40px 28px;
    align-items: center; gap: 6px;
    background: var(--user-bg-1, var(--bg));
    border: 1px solid var(--user-border, var(--border));
    border-radius: 8px; padding: 3px 6px;
  }
  .combat-row.combat-head { background: transparent; border: none; padding: 0 6px; }
  .combat-head-cell { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--user-text-muted, var(--muted)); justify-content: center; }
  /* Alle headers horizontaal gecentreerd behalve de naam-kolom. */
  .combat-head-name { justify-content: flex-start; }
  /* Dunne kolom-afscheidingslijnen — subtiele site-borderkleur (niet amber). */
  .combat-row .combat-cell:not(:last-child) {
    border-right: 1px solid color-mix(in srgb, var(--user-border, var(--border)) 55%, transparent);
  }
  .combat-row.combat-head .combat-cell:not(:last-child) { border-right-color: transparent; }
  .combat-row.is-active {
    border-color: var(--user-text-highlight, var(--accent));
    box-shadow: 0 0 0 1px var(--user-text-highlight, var(--accent)) inset;
    background: color-mix(in srgb, var(--user-text-highlight, var(--accent)) 12%, var(--user-bg-1, var(--bg)));
  }
  .combat-cell { display: flex; align-items: center; min-width: 0; }
  .combat-cell-name { flex-direction: column; align-items: stretch; gap: 1px; }
  /* KO-rijen: monster dimt weg (KO = uit het gevecht); bondgenoot valt op
     met een rode danger-rand (níét amber) zodat de DM het direct ziet. */
  .combat-row.combat-row-ko-monster { opacity: .45; filter: saturate(.5); }
  .combat-row.combat-row-ko-ally {
    border-color: #f04a4a;
    box-shadow: 0 0 0 1px #f04a4a inset;
    background: color-mix(in srgb, #f04a4a 12%, var(--user-bg-1, var(--bg)));
  }

  .combat-portrait { width: 30px; height: 30px; border-radius: 50%; overflow: hidden; flex: 0 0 auto;
    background: var(--user-bg-2, var(--panel)); display: flex; align-items: center; justify-content: center;
    border: 1px solid var(--user-border, var(--border)); }
  .combat-portrait img { width: 100%; height: 100%; object-fit: cover; }
  .combat-portrait.small { width: 26px; height: 26px; }
  .combat-portrait-empty { font-weight: 700; font-size: 13px; color: var(--user-text-muted, var(--muted)); }

  .combat-name-input {
    background: transparent; border: none; color: var(--user-text-regular, var(--text));
    font-size: 13px; font-weight: 600; width: 100%; padding: 1px 2px; border-radius: 3px;
  }
  .combat-name-input:focus { outline: none; background: var(--user-bg-2, var(--panel)); }
  .combat-kind-badge { font-size: 9px; text-transform: uppercase; letter-spacing: .04em; padding: 0 2px; }
  .combat-kind-pc { color: #6fb3ff; }
  .combat-kind-npc { color: #c9a961; }
  .combat-kind-monster { color: #f08a8a; }

  .combat-stepper { display: inline-flex; align-items: center; gap: 2px; }
  .combat-step-btn {
    width: 20px; height: 22px; border-radius: 5px; cursor: pointer; font-size: 14px; font-weight: 700;
    border: 1px solid var(--user-border, var(--border)); background: var(--user-bg-2, var(--panel));
    color: var(--user-text-regular, var(--text)); line-height: 1; padding: 0; flex: 0 0 auto;
  }
  .combat-step-btn:hover { border-color: var(--user-text-highlight, var(--accent)); }
  .combat-step-input {
    width: 34px; text-align: center; background: var(--user-bg-2, var(--panel));
    border: 1px solid var(--user-border, var(--border)); border-radius: 5px;
    color: var(--user-text-regular, var(--text)); font-size: 13px; font-weight: 700; padding: 2px 0;
  }
  .combat-step-input:focus { outline: none; border-color: var(--user-text-highlight, var(--accent)); }
  .combat-stepper.hp .combat-step-input { width: 40px; }
  /* HP-box kleurt naar resterend HP-percentage ((current+temp)/max). */
  .combat-stepper.hp.hp-ok   .combat-step-input { color: #7ed47e; border-color: color-mix(in srgb, #7ed47e 45%, var(--user-border, var(--border))); }
  .combat-stepper.hp.hp-warn .combat-step-input { color: #e0a23a; border-color: color-mix(in srgb, #e0a23a 45%, var(--user-border, var(--border))); }
  .combat-stepper.hp.hp-crit .combat-step-input { color: #f04a4a; border-color: color-mix(in srgb, #f04a4a 45%, var(--user-border, var(--border))); }
  .combat-stepper.hp.down .combat-step-input { color: #f04a4a; text-decoration: line-through; }
  .combat-hp-max { font-size: 11px; color: var(--user-text-muted, var(--muted)); margin-left: 4px; white-space: nowrap; }

  .combat-ac-input {
    width: 40px; text-align: center; background: var(--user-bg-2, var(--panel));
    border: 1px solid var(--user-border, var(--border)); border-radius: 5px;
    color: var(--user-text-regular, var(--text)); font-size: 13px; font-weight: 600; padding: 2px 0;
  }
  .combat-ac-input:focus { outline: none; border-color: var(--user-text-highlight, var(--accent)); }

  .combat-vis-btn {
    width: 28px; height: 24px; border-radius: 5px; cursor: pointer; font-size: 13px; font-weight: 700;
    border: 1px solid var(--user-border, var(--border)); background: var(--user-bg-2, var(--panel));
    color: var(--user-text-muted, var(--muted)); padding: 0; line-height: 1;
  }
  .combat-vis-btn.vis-revealed { color: #7ed47e; border-color: #3a6a3a; }
  .combat-vis-btn.vis-silhouette { color: #d9b24a; border-color: #6a5a2a; }
  .combat-vis-btn.vis-hidden { color: var(--user-text-muted, var(--muted)); }

  .combat-del-btn {
    width: 24px; height: 24px; border-radius: 5px; cursor: pointer; font-size: 16px; font-weight: 700;
    border: 1px solid transparent; background: transparent; color: var(--user-text-muted, var(--muted)); padding: 0; line-height: 1;
  }
  .combat-del-btn:hover { color: #f08a8a; background: rgba(160,48,48,.15); }

  /* Transposed (veld per rij, entity per kolom) */
  .combat-table.transposed .combat-row { grid-template-columns: 60px repeat(auto-fit, minmax(120px, 1fr)); }
  .combat-table.transposed .combat-cell.col-active { box-shadow: 0 0 0 1px var(--user-text-highlight, var(--accent)) inset; border-radius: 6px; }

  /* Initiative Tracker (speler) */
  .combat-initiative { display: flex; flex-direction: column; gap: 5px; }
  .combat-initiative.horizontal { flex-direction: row; flex-wrap: wrap; }
  .combat-init-item {
    display: flex; align-items: center; gap: 8px; padding: 4px 8px;
    background: var(--user-bg-1, var(--bg)); border: 1px solid var(--user-border, var(--border)); border-radius: 8px;
  }
  .combat-initiative.horizontal .combat-init-item { flex-direction: column; gap: 4px; padding: 6px; }
  .combat-init-item.is-active {
    border-color: var(--user-text-highlight, var(--accent));
    box-shadow: 0 0 0 1px var(--user-text-highlight, var(--accent)) inset;
  }
  .combat-init-item.masked .combat-portrait { filter: grayscale(1) brightness(.5); }
  .combat-init-name { font-size: 14px; font-weight: 600; }
  .combat-init-item.masked .combat-init-name { color: var(--user-text-muted, var(--muted)); letter-spacing: .1em; }

  /* Add-deelnemer paneel */
  .combat-add-panel { min-width: 280px; max-width: 320px; }
  .combat-add-tabs { display: flex; gap: 4px; }
  .combat-add-tab {
    flex: 1; padding: 5px 8px; border-radius: 5px; cursor: pointer; font-size: 12px; font-weight: 600;
    border: 1px solid var(--user-border, var(--border)); background: var(--user-bg-1, var(--bg));
    color: var(--user-text-regular, var(--text));
  }
  .combat-add-tab.active { background: var(--user-text-highlight, var(--accent)); color: var(--user-bg-1, #1a1208); border-color: transparent; }
  .combat-add-list { max-height: 260px; overflow: auto; display: flex; flex-direction: column; gap: 3px; }
  .combat-add-item {
    display: flex; align-items: center; gap: 8px; text-align: left; width: 100%;
    padding: 4px 6px; border-radius: 6px; cursor: pointer; font-size: 13px;
    border: 1px solid transparent; background: var(--user-bg-1, var(--bg)); color: var(--user-text-regular, var(--text));
  }
  .combat-add-item:hover { border-color: var(--user-text-highlight, var(--accent)); }
  .combat-add-item.added { background: color-mix(in srgb, var(--user-text-highlight, var(--accent)) 25%, var(--user-bg-1, var(--bg))); }
  .combat-add-name { font-weight: 600; flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .combat-add-meta { font-size: 10px; color: var(--user-text-muted, var(--muted)); text-transform: capitalize; }

} /* end @scope (.character-page) */
