/* One visual language for the supported constructors only.
   Applied last, after sport styles. No IDs, form contracts, visibility states,
   drag hooks, rule values, or modal implementations are replaced. Account and
   the other sport pages deliberately do not receive the body marker. */
body[data-constructor-ui="unified"] {
  --cu-ink:#1d1d1f; --cu-muted:#62666e; --cu-line:#d7e3f3;
  --cu-field:#f8f9fb; --cu-blue:#1a6ed4; --cu-green:#178344;
  --cu-radius:12px; --cu-control-radius:8px;
}

/* Cards, tool palette and the common builder frame. Keep special wide history
   editors and the mobile sizing engine's --mc-card-width intact. */
body[data-constructor-ui="unified"] :is(.group-label,.toolbox-section-label)[hidden] {display:none!important}
body[data-constructor-ui="unified"] :is(#builder-shell,:is(#bb-builder-shell,#bbpm-builder-shell),#vb-builder-shell,#sport-hockey .hk-builder) {
  border:1px solid #dde1e7; border-radius:14px; background:#f5f6f8;
}
body[data-constructor-ui="unified"] :is(#sidebar,:is(#bb-sidebar,#bbpm-sidebar),#vb-sidebar,#sport-hockey .hk-sidebar) {
  box-sizing:border-box; width:258px; padding:20px 15px; background:#fafafb;
}
body[data-constructor-ui="unified"] :is(.toolbox,.bb-toolbox,#sport-volleyball .vb-toolbox,#sport-hockey .hk-tool) {
  box-sizing:border-box; width:100%; min-height:37px; padding:9px 10px;
  margin:0 0 7px; border:1px solid #e0e4eb; border-radius:9px;
  font-size:12.5px; line-height:1.4; font-weight:600;
}
body[data-constructor-ui="unified"] :is(#topbar,:is(#bb-topbar,#bbpm-topbar),#vb-topbar,#sport-hockey .hk-topbar) {
  padding:14px 22px; gap:12px;
}
body[data-constructor-ui="unified"] :is(#workspace,:is(#bb-workspace,#bbpm-workspace),#vb-workspace,#sport-hockey .hk-workspace) {
  padding:38px 20px 54px;
}
/* Volleyball uses the same current basketball skin, including its Apple-theme
   workspace, delivery states and preview header; no visibility/layout changes. */
body[data-constructor-ui="unified"] #sport-volleyball #vb-workspace {
  background-color:#f4f6f9;
  background-image:radial-gradient(circle,#cfd7e3 .8px,transparent .9px);
  background-size:20px 20px;
  scrollbar-color:#bdc7d4 #f4f6f9;
}
body[data-constructor-ui="unified"] #vb_delivery_switch[role="radiogroup"] > label {
  border:1px solid var(--cb-border,#dce1e8); border-radius:10px; color:#45454b;
  min-height:44px; background:#fff; font-size:14px; font-weight:600; line-height:1.45;
}
body[data-constructor-ui="unified"] #vb_delivery_switch[role="radiogroup"] > label.active {
  background:#edf5ff; color:#0067d8; border-color:#94c2f8;
  box-shadow:inset 0 0 0 1px rgba(0,122,255,.12);
}
body[data-constructor-ui="unified"] #vb_delivery_switch input[type="radio"] {accent-color:var(--cb-blue,#007aff)}
body[data-constructor-ui="unified"] #sport-volleyball .vb-preview {
  border:1px solid #d3dfef; border-radius:12px;
  box-shadow:0 1px 3px rgba(29,29,31,.025);
}
body[data-constructor-ui="unified"] #sport-volleyball .vb-preview > h3 {
  background:#edf4ff; color:#174d89; border-bottom:1px solid #d8e5f6;
  font-weight:650; line-height:1.45;
}
body[data-constructor-ui="unified"] #sport-volleyball :is(#vb-preview-forecast,#vb-preview-conditions) {line-height:1.6}
/* ID-based counterparts to the basketball skin. Card/field presentation is
   shared through the existing bb-* classes on the volleyball puzzle only. */
body[data-constructor-ui="unified"] :is(#vb-sidebar h1,#vb-topbar h2) {color:var(--cu-ink);font-weight:650;line-height:1.4}
body[data-constructor-ui="unified"] #vb-builder-shell {max-width:100%;box-shadow:none}
body[data-constructor-ui="unified"] #vb-sidebar {border-color:#e1e5eb}
body[data-constructor-ui="unified"] #vb-topbar {background:#fff;border-color:#e1e5eb}
body[data-constructor-ui="unified"] #vb-zoomBox {gap:7px;border-color:#e1e5eb;background:#f5f6f8;border-radius:9px}
body[data-constructor-ui="unified"] #vb-zoomBox button {width:28px;height:26px;padding:0;border:1px solid #dce1e8;border-radius:6px;font-size:12px;color:var(--cu-ink);background:#fff;white-space:nowrap;box-shadow:0 1px 2px rgba(29,29,31,.035)}
body[data-constructor-ui="unified"] #vb-clearBtn {min-height:32px;border:1px solid #dce1e8;border-radius:8px;padding:7px 13px;background:#fff;color:var(--cu-muted);font-family:inherit;font-size:12px;font-weight:600}
body[data-constructor-ui="unified"] #vb-clearBtn:hover {border-color:#efb5b3;color:#b32624;background:#fff6f5}
body[data-constructor-ui="unified"] #vb-empty-hint {border-color:#cbd6e5;color:#68778b;background:rgba(255,255,255,.65);word-break:normal;overflow-wrap:normal}
body[data-constructor-ui="unified"] :is(.piece,.bb-piece,#sport-volleyball .vb-piece,#sport-hockey .hk-piece) {
  border:2px solid var(--cu-line); border-radius:var(--cu-radius);
  padding:14px 16px 15px; background:#fff; color:var(--cu-ink);
  box-shadow:0 2px 7px rgba(26,45,74,.045),0 8px 20px rgba(26,45,74,.025);
}
body[data-constructor-ui="unified"] :is(.piece.or-slot,.bb-piece.bb-or-slot,#sport-volleyball .vb-piece.vb-or-slot) {
  background:#fffaf0; border-color:#e7d3a1;
}
body[data-constructor-ui="unified"] :is(.piece.exact-values-slot,#sport-hockey .hk-piece:has(.hk-exact-zone)) {
  background:#fbf8ff; border-color:#d6c6ef;
}
body[data-constructor-ui="unified"] #sport-hockey .hk-forecast-piece {
  background:#fffaf5; border-color:#edcfb5;
}
body[data-constructor-ui="unified"] :is(.phead,.bb-phead,#sport-volleyball .vb-block-head,#sport-hockey .hk-piece-head) {
  display:flex; align-items:center; gap:8px; margin-bottom:11px;
  padding-bottom:9px; border-bottom:1px solid #e9edf3;
  font-size:13px; font-weight:650; line-height:1.4; color:var(--cu-ink);
}
body[data-constructor-ui="unified"] :is(.phead .ic,.bb-phead .bb-ic,#sport-hockey .hk-piece-head>span:first-child) {font-size:15px}
body[data-constructor-ui="unified"] :is(.glabel,.bb-glabel,#sport-hockey .hk-piece-group) {
  padding:2px 7px; border-radius:9px; font-size:10px; line-height:1.3;
  font-weight:700; letter-spacing:.015em; text-transform:uppercase; white-space:nowrap;
}
body[data-constructor-ui="unified"] :is(.phead .rm,.bb-phead .bb-rm,#sport-hockey .hk-delete) {
  padding:0; margin-left:6px; font-size:15px; font-weight:700; line-height:1;
  border:0; background:transparent; color:#828b98; cursor:pointer;
}
body[data-constructor-ui="unified"] :is(.frow,.bb-frow,#sport-hockey .hk-fields) {gap:7px;line-height:1.45}
body[data-constructor-ui="unified"] :is(.piece,.bb-piece,#sport-volleyball .vb-piece,#sport-hockey .hk-piece) :where(select,input:not([type=checkbox]):not([type=radio]),textarea) {
  box-sizing:border-box; min-width:0; max-width:100%; min-height:34px;
  border:1px solid #d8dee8; border-radius:var(--cu-control-radius);
  padding:6px 8px; font-family:inherit; font-size:12.5px; font-weight:400;
  color:var(--cu-ink); background:var(--cu-field);
}
body[data-constructor-ui="unified"] :is(.piece,.bb-piece,#sport-hockey .hk-piece) input[type=number] {
  width:64px; padding:8px 10px; font-size:14px;
}
body[data-constructor-ui="unified"] :is(.piece,.bb-piece,#sport-volleyball .vb-piece,#sport-hockey .hk-piece) :is(input,select,textarea):focus-visible {
  outline:none; border-color:#5da6f9; box-shadow:0 0 0 3px rgba(0,122,255,.13);
}
body[data-constructor-ui="unified"] :is(.frow label.chk,.bb-frow label.bb-chk) {
  border-radius:8px; border-color:#d8dee8; background:var(--cu-field);
}
body[data-constructor-ui="unified"] :is(.piece,.bb-piece,#sport-volleyball .vb-piece,#sport-hockey .hk-piece) .hint {
  color:var(--cu-muted); font-size:12px; line-height:1.45;
}
body[data-constructor-ui="unified"] :is(.connector,.bb-connector,#sport-hockey .hk-connector) {height:35px}
body[data-constructor-ui="unified"] :is(.connector .badge,.bb-connector .bb-badge,#sport-hockey .hk-connector b) {
  padding:2px 9px; border-radius:10px; font-size:10px; font-weight:700;
}
@media(min-width:901px) {
  body[data-constructor-ui="unified"] #sport-hockey .hk-piece:not(.hk-period-history-piece):not(.hk-past-games-piece):not(:has(.hk-or-divider)) {width:396px}
  body[data-constructor-ui="unified"] #sport-hockey .hk-piece:not(.hk-period-history-piece):not(.hk-past-games-piece):not(:has(.hk-or-divider))>.hk-or-row>.hk-block {flex:none;width:328px;max-width:100%}
}

/* Shared controls use the same visual states, not shared application logic. */
body[data-constructor-ui="unified"] :is(.constructor-mode-tabs,#sport-hockey .hk-mode-switch) {display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 10px}
body[data-constructor-ui="unified"] :is(.constructor-mode-tabs,#sport-hockey .hk-mode-switch) button {
  box-sizing:border-box; min-height:40px; padding:9px 18px; border:1px solid #dce1e8;
  border-radius:8px; background:#fff; color:var(--cu-ink); font-size:14px;
  font-family:inherit; font-weight:600; line-height:1.4; cursor:pointer;
}
body[data-constructor-ui="unified"] :is(.constructor-mode-tabs,#sport-hockey .hk-mode-switch) button[aria-pressed=true] {color:#15539f;background:#e7f0fb;border-color:var(--cu-blue)}
body[data-constructor-ui="unified"] :is(.constructor-mode-tabs,#sport-hockey .hk-mode-switch) button:disabled {cursor:default}
body[data-constructor-ui="unified"] :is(#clearBtn,:is(#bb-clearBtn,#bbpm-clear),#sport-hockey .hk-clear) {
  min-height:32px; border:1px solid #dce1e8; border-radius:8px;
  padding:7px 13px; background:#fff; color:var(--cu-muted); font-size:12px; font-weight:600;
}
body[data-constructor-ui="unified"] :is(#zoomBox,:is(#bb-zoomBox,#bbpm-zoomBox),#sport-hockey .hk-zoom) {gap:7px;border-radius:9px}
body[data-constructor-ui="unified"] :is(#zoomBox button,:is(#bb-zoomBox,#bbpm-zoomBox) button,#sport-hockey .hk-zoom button) {
  width:28px; height:26px; padding:0; border:1px solid #dce1e8; border-radius:6px;
  font-size:12px; color:var(--cu-ink); background:#fff;
}
body[data-constructor-ui="unified"] :is(.signal-view-launch,#sport-basketball .bb-output-settings,#sport-hockey .hk-output-settings) {
  display:flex; flex-wrap:wrap; align-items:center; gap:10px; padding:15px;
  margin:18px 0; border:1px solid #dce4ef; border-radius:12px; background:#f8fafc;
}
body[data-constructor-ui="unified"] :is(.signal-view-launch .btn,#sport-basketball .bb-output-settings button,#sport-hockey .hk-output-settings button) {
  box-sizing:border-box; min-height:42px; padding:10px 16px;
  border:1px solid var(--cu-blue); border-radius:8px; background:var(--cu-blue);
  color:#fff; font-family:inherit; font-size:14px;
  font-weight:600; line-height:1.4; text-align:center; cursor:pointer;
}
body[data-constructor-ui="unified"] :is(.signal-view-launch .report-button,#sport-basketball .bb-output-report,#sport-hockey .hk-report-button) {
  background:var(--cu-green); border-color:var(--cu-green);
}

/* Modal skins only. Native basketball dialogs stay native; football/hockey
   retain their .open/aria-hidden logic. Never set display on a closed overlay. */
body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-dialog,#daily-report-modal .dr-dialog,#sport-basketball .bb-output-dialog,#sport-hockey .hk-settings-dialog) {
  box-sizing:border-box; border:1px solid #dce6f2; border-radius:15px;
  background:#fff; color:#193352; box-shadow:0 18px 60px #17273a33;
  max-height:calc(100dvh - 36px);
}
body[data-constructor-ui="unified"] :is(#signal-view-modal,#daily-report-modal,#sport-hockey .hk-settings-modal) {padding:18px}
body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-dialog,#bb-signal-view-modal,#hk-signal-view-modal .hk-settings-dialog) {width:760px;max-width:100%}
body[data-constructor-ui="unified"] :is(#daily-report-modal .dr-dialog,#bb-daily-report-modal,#sport-hockey .hk-report-dialog) {width:580px;max-width:100%}
body[data-constructor-ui="unified"] #sport-basketball .bb-output-dialog {max-width:calc(100vw - 36px);max-height:calc(100dvh - 36px)}
body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-header,#daily-report-modal .dr-header,#sport-basketball .bb-output-head,#sport-hockey .hk-settings-header) {
  display:flex; align-items:flex-start; justify-content:space-between; gap:14px;
  padding:22px; border-bottom:1px solid #d9e4f2; flex:none;
}
body[data-constructor-ui="unified"] :is(.sv-header,.dr-header,.bb-output-head,.hk-settings-header) h2 {margin:0;font-size:20px;color:#193352}
body[data-constructor-ui="unified"] :is(.sv-header,.dr-header,.bb-output-head,.hk-settings-header) p {margin:6px 0 0;font-size:13px;color:#738196}
body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-close,#daily-report-modal .dr-close,#sport-basketball .bb-output-head button,#sport-hockey .hk-settings-close) {
  flex:none; width:36px; height:36px; padding:0; border:1px solid #d9e4f2;
  border-radius:8px; background:#fff; color:#405b79; font-size:24px; cursor:pointer;
}
body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-body,#daily-report-modal .dr-body,#sport-basketball .bb-output-body,#sport-hockey .hk-settings-body) {padding:22px;min-height:0;overflow:auto;overscroll-behavior:contain}
body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-body,#sport-basketball .bb-output-columns,#sport-hockey .hk-signal-columns) {display:grid;grid-template-columns:240px minmax(0,1fr);gap:22px}
body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-option,#sport-basketball .bb-output-body label,#sport-hockey .hk-settings-body label) {min-height:0;padding:0;margin:13px 0;font-size:14px;color:#193352;line-height:1.45}
body[data-constructor-ui="unified"] :is(#signal-view-modal,#daily-report-modal,#sport-basketball .bb-output-body,#sport-hockey .hk-settings-body) input[type=checkbox] {width:16px;height:16px;accent-color:#178344}
body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-message,#daily-report-modal .dr-message,#sport-basketball .bb-output-message,#sport-hockey .hk-settings-message) {
  padding:14px; border:0; border-left:3px solid #15944b; border-radius:8px;
  background:#e7f7ef; color:#13446c; font-size:13px; line-height:1.65; overflow-wrap:anywhere;
}
body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-footer,#daily-report-modal .dr-footer,#sport-basketball .bb-output-foot,#sport-hockey .hk-settings-footer) {
  display:flex; justify-content:flex-end; flex-wrap:wrap; gap:10px;
  padding:14px 22px; border-top:1px solid #d9e4f2; flex:none;
}
body[data-constructor-ui="unified"] :is(.sv-footer,.dr-footer,.bb-output-foot,.hk-settings-footer) button {
  min-height:40px; padding:10px 16px; border:1px solid #c2d8f5;
  border-radius:8px; background:#fff; color:#405b79; font-weight:700; cursor:pointer;
  font-size:14px; line-height:1.4;
}
body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-save,#daily-report-modal .dr-save,#sport-basketball .bb-output-primary,#sport-basketball .bb-output-green,#sport-hockey .hk-settings-save) {
  background:var(--cu-green); border-color:var(--cu-green); color:#fff;
}
body[data-constructor-ui="unified"] :is(#strategy_note_modal,#hockey_strategy_note_modal)>[role=dialog] {border:1px solid #dce6f2;border-radius:15px!important;padding:22px!important;color:#193352;box-shadow:0 18px 60px #17273a33}
body[data-constructor-ui="unified"] #daily-report-modal .dr-message.disabled {border-left-color:#9aa7b7;background:#f2f4f7;color:#6b7480}
body[data-constructor-ui="unified"] :is(.hk-settings-error,.bb-output-error,.sv-error,.dr-error) {color:#b42318;font-size:13px;line-height:1.45}
body[data-constructor-ui="unified"] .msg {padding:12px 14px;border-radius:8px;font-size:14px;line-height:1.45}
body[data-constructor-ui="unified"] :is(#mode_lbl_classic,#mode_lbl_adv,#bb_mode_lbl_classic,#bb_mode_lbl_adv) {border-radius:8px;min-height:40px;box-sizing:border-box;font-size:14px}

/* Saved cards already share one Jinja macro. Style existing actions uniformly
   while retaining their actual link/form methods and permission gates. */
body[data-constructor-ui="unified"] .saved-strategy-list {gap:14px}
body[data-constructor-ui="unified"] .saved-strategy-card {padding:16px;border:1px solid #d8e3f0;border-radius:12px;box-shadow:none;color:#17273a}
body[data-constructor-ui="unified"] .saved-strategy-title h3 {font-size:16px;font-weight:700;line-height:1.4}
body[data-constructor-ui="unified"] .saved-strategy-meta {gap:6px 14px;font-size:12px;color:#61748e}
body[data-constructor-ui="unified"] .saved-strategy-status {padding:4px 8px;border-radius:6px;font-size:12px}
body[data-constructor-ui="unified"] .saved-strategy-metrics>div {background:#f5f7fa;border-radius:9px;padding:9px 7px}
body[data-constructor-ui="unified"] .saved-strategy-conditions {border:1px solid #dce5f1;border-radius:8px;font-size:13px}
body[data-constructor-ui="unified"] .saved-strategy-actions {gap:8px}
body[data-constructor-ui="unified"] .saved-strategy-actions .btn {
  min-height:40px; padding:8px 12px!important; border-radius:8px;
  font-family:inherit; font-size:13px!important; font-weight:600; line-height:1.35;
}
body[data-constructor-ui="unified"] .saved-strategy-actions :is(.btn-blue,.cu-action-retro) {background:var(--cu-blue)!important;border:1px solid var(--cu-blue)!important;color:#fff!important}
body[data-constructor-ui="unified"] .saved-strategy-actions .btn-green {background:var(--cu-green);border:1px solid var(--cu-green)}
body[data-constructor-ui="unified"] .saved-strategy-actions .btn-gray {background:#6b7480;border:1px solid #6b7480}
body[data-constructor-ui="unified"] .saved-strategy-actions .btn-red {background:#cf2626;border:1px solid #cf2626}

@media(max-width:900px) {
  body[data-constructor-ui="unified"] #vb-zoomBox button {width:34px;height:34px;min-height:34px}
  body[data-constructor-ui="unified"] #vb-clearBtn {min-height:44px;padding:8px 12px}
  body[data-constructor-ui="unified"] :is(#sidebar,:is(#bb-sidebar,#bbpm-sidebar),#vb-sidebar,#sport-hockey .hk-sidebar) {width:100%}
  body[data-constructor-ui="unified"] :is(#topbar,:is(#bb-topbar,#bbpm-topbar),#vb-topbar,#sport-hockey .hk-topbar) {padding:10px 12px;flex-wrap:wrap;gap:9px}
  body[data-constructor-ui="unified"] :is(#workspace,:is(#bb-workspace,#bbpm-workspace),#vb-workspace,#sport-hockey .hk-workspace) {padding:20px 10px 44px}
  body[data-constructor-ui="unified"] .mc-mobile :is(.piece,.bb-piece,.hk-piece) {padding:12px}
  body[data-constructor-ui="unified"] .mc-mobile :is(.phead,.bb-phead,.hk-piece-head) {padding-right:30px;min-height:30px;line-height:1.45}
  body[data-constructor-ui="unified"] .mc-mobile :is(.glabel,.bb-glabel,.hk-piece-group) {font-size:9px}
  body[data-constructor-ui="unified"] .mc-mobile :is(.piece,.bb-piece,.hk-piece) :is(select,input:not([type=checkbox]):not([type=radio]),textarea) {font-size:16px;min-height:40px}
  body[data-constructor-ui="unified"] :is(#zoomBox button,:is(#bb-zoomBox,#bbpm-zoomBox) button,#sport-hockey .hk-zoom button) {width:34px;height:34px;min-height:34px}
  body[data-constructor-ui="unified"] :is(#clearBtn,:is(#bb-clearBtn,#bbpm-clear),#sport-hockey .hk-clear) {min-height:44px;padding:8px 12px}
}
@media(max-width:650px) {
  body[data-constructor-ui="unified"] :is(#signal-view-modal,#daily-report-modal,#sport-hockey .hk-settings-modal) {padding:10px}
  body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-dialog,#daily-report-modal .dr-dialog,#sport-basketball .bb-output-dialog,#sport-hockey .hk-settings-dialog) {max-height:calc(100dvh - 20px)}
  body[data-constructor-ui="unified"] #sport-basketball .bb-output-dialog {max-width:calc(100vw - 20px)}
  body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-body,#sport-basketball .bb-output-columns,#sport-hockey .hk-signal-columns) {grid-template-columns:1fr;gap:14px}
  body[data-constructor-ui="unified"] :is(#signal-view-modal .sv-header,#signal-view-modal .sv-body,#signal-view-modal .sv-footer,#daily-report-modal .dr-header,#daily-report-modal .dr-body,#daily-report-modal .dr-footer,#sport-basketball .bb-output-head,#sport-basketball .bb-output-body,#sport-basketball .bb-output-foot,#sport-hockey .hk-settings-header,#sport-hockey .hk-settings-body,#sport-hockey .hk-settings-footer) {padding:16px}
}
@media(max-width:600px) {
  body[data-constructor-ui="unified"] .saved-strategy-card {padding:12px}
  body[data-constructor-ui="unified"] :is(.signal-view-launch .btn,#sport-basketball .bb-output-settings button,#sport-hockey .hk-output-settings button) {flex:1 1 200px;min-height:44px;max-width:100%}
}
