/** * 2meet Data Optimizer — Admin Styles (Morandi Design System) * * Morandi tokens are provided via the 'morandi-design-system' CSS dependency * registered in TMDO_Admin::enqueue_assets(). No @import needed. */ /* ── KPI Hero Strip (v2.16.0) ────────────────────────────────────────── */ .wpdo-kpi-hero { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--space-4); margin: var(--space-5) 0; } .wpdo-kpi-card { background: var(--color-bg-secondary, #FAF9F6); border: 1px solid var(--color-bg-divider, #E8E3D9); border-radius: var(--radius-lg); padding: var(--space-4) var(--space-5); box-shadow: var(--shadow-sm, 0 1px 3px rgba(58,53,48,0.08)); position: relative; overflow: hidden; transition: transform var(--duration-normal, 200ms) var(--ease-default, ease-out), box-shadow var(--duration-normal, 200ms) var(--ease-default, ease-out); } .wpdo-kpi-card::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--color-accent-warm, #c4a986), var(--color-accent-warm, #c4a986)); opacity: 0.6; } .wpdo-kpi-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md, 0 4px 12px rgba(58,53,48,0.10)); } .wpdo-kpi-label { font-family: var(--font-family-body); font-size: var(--text-sm, 13px); color: var(--color-text-secondary, #6b6256); font-weight: 500; letter-spacing: 0.02em; text-transform: uppercase; margin-bottom: var(--space-2); } .wpdo-kpi-value { font-family: var(--font-family-display); font-size: 2.25rem; line-height: 1.1; font-weight: 700; color: var(--color-text-primary, #3a3530); margin-bottom: var(--space-2); letter-spacing: -0.02em; } .wpdo-kpi-unit { font-size: 1.1rem; color: var(--color-text-secondary, #6b6256); font-weight: 500; margin-left: 2px; } .wpdo-kpi-empty { color: var(--color-text-tertiary, #9a8e7e); font-weight: 400; } .wpdo-kpi-sub { font-family: var(--font-family-body); font-size: var(--text-xs, 12px); color: var(--color-text-secondary, #6b6256); line-height: 1.4; } /* Per-KPI accent stripe color */ .wpdo-kpi--ratio::before { background: linear-gradient(90deg, #c4a986, #d4b89a); } .wpdo-kpi--speedup::before { background: linear-gradient(90deg, #5a9a85, #7eb39e); } .wpdo-kpi--coverage::before { background: linear-gradient(90deg, #8b7eb3, #a397c9); } .wpdo-kpi--health-excellent::before { background: linear-gradient(90deg, #5a9a85, #7eb39e); } .wpdo-kpi--health-good::before { background: linear-gradient(90deg, #c4a986, #d4b89a); } .wpdo-kpi--health-warn::before { background: linear-gradient(90deg, #d4a574, #e0b888); } .wpdo-kpi--health-crit::before { background: linear-gradient(90deg, #c47a7a, #d49090); } .wpdo-kpi--health-excellent .wpdo-kpi-value { color: #4a8270; } .wpdo-kpi--health-good .wpdo-kpi-value { color: #a8906f; } .wpdo-kpi--health-warn .wpdo-kpi-value { color: #b88955; } .wpdo-kpi--health-crit .wpdo-kpi-value { color: #a86060; } @media (max-width: 600px) { .wpdo-kpi-hero { grid-template-columns: 1fr 1fr; gap: var(--space-3); } .wpdo-kpi-value { font-size: 1.75rem; } } /* ── Grouped Tab Navigation (v2.16.0) ────────────────────────────────── */ .wpdo-tab-nav { display: flex; flex-wrap: wrap; gap: var(--space-3) var(--space-4); align-items: flex-end; padding-bottom: 0; border-bottom: 1px solid var(--color-bg-divider, #E8E3D9); margin-bottom: var(--space-4); } .wpdo-tab-group { display: inline-flex; flex-direction: column; gap: 4px; margin-right: var(--space-2); padding-right: var(--space-3); position: relative; } .wpdo-tab-group:not(:last-child)::after { content: ""; position: absolute; right: 0; top: 24px; bottom: 4px; width: 1px; background: var(--color-bg-divider, #E8E3D9); } .wpdo-tab-group-label { font-family: var(--font-family-body); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--color-text-tertiary, #9a8e7e); font-weight: 500; padding-left: var(--space-2); user-select: none; pointer-events: none; } .wpdo-tab-group .nav-tab { margin: 0 2px -1px 0; transition: background-color var(--duration-fast, 120ms) ease, color var(--duration-fast, 120ms) ease; } .wpdo-tab-group .nav-tab:hover { background-color: var(--color-bg-tertiary, #F2EEE8); color: var(--color-text-primary, #3a3530); } @media (max-width: 768px) { .wpdo-tab-nav { gap: var(--space-2); } .wpdo-tab-group { margin-right: 0; padding-right: var(--space-2); } .wpdo-tab-group-label { font-size: 10px; } } /* ── Layout ──────────────────────────────────────────────────────────── */ .wpdo-wrap .wpdo-tab-content { margin-top: var(--space-5); } .wpdo-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: var(--space-5); margin-bottom: var(--space-5); } .wpdo-card { background: var(--color-bg-secondary, #FAF9F6); border: 1px solid var(--color-bg-divider, #E8E3D9); border-radius: var(--radius-lg); padding: var(--space-4) var(--space-5); box-shadow: var(--shadow-sm, 0 1px 3px rgba(58,53,48,0.08)); overflow-x: auto; /* WCAG 1.4.10 Reflow: tables scroll within card, not page */ } .wpdo-card h2 { margin-top: 0; padding-top: 0; border-bottom: 1px solid var(--color-bg-divider, #E8E3D9); padding-bottom: var(--space-3); font-family: var(--font-family-display); } .wpdo-card h3, .wpdo-card h4 { margin-top: var(--space-3); font-family: var(--font-family-display); } .wpdo-card-wide { grid-column: 1 / -1; } /* Utility spacers replacing inline style="margin-top:N" */ .wpdo-mt-1 { margin-top: var(--space-2); } .wpdo-mt-2 { margin-top: var(--space-3); } .wpdo-mt-3 { margin-top: var(--space-5); } .wpdo-mb-2 { margin-bottom: var(--space-3); } .wpdo-table--narrow { max-width: 480px; } .wpdo-table--medium { max-width: 700px; } .wpdo-block--wide { max-width: 900px; } .wpdo-col-param { width: 180px; } /* Inline form row */ .wpdo-form-row { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap; margin: var(--space-3) 0; } /* ── Tables ──────────────────────────────────────────────────────────── */ .wpdo-table { font-size: var(--text-sm); font-family: var(--font-family-body); } .wpdo-table code, .wpdo-wrap code { font-size: var(--text-xs); background: var(--color-bg-tertiary, #F2EEE8); padding: 2px var(--space-1); border-radius: var(--radius-sm); font-family: var(--font-family-mono); } .wpdo-log-msg { max-width: 400px; word-break: break-word; } /* ── Touch targets (CLAUDE.md: 44px minimum) ─────────────────────────── */ .wpdo-wrap .button, .wpdo-wrap .button-secondary, .wpdo-wrap .button-primary, .wpdo-wrap input[type="number"], .wpdo-wrap input[type="text"], .wpdo-wrap input[type="search"], .wpdo-wrap select { min-height: 44px; line-height: 1.4; } .wpdo-wrap .button-small { min-height: 40px; /* WCAG 2.2 AA: 24px min; 40px exceeds 2.5.8 while remaining compact */ padding: 0 var(--space-2); } .wpdo-wrap input[type="number"] { padding: 6px var(--space-2); } .wpdo-wrap input[type="number"].wpdo-input--xs { width: 72px; /* was inline 60px — bumped to fit 44px height without clipping digits */ } .wpdo-wrap .button:focus-visible, .wpdo-wrap input:focus-visible, .wpdo-wrap select:focus-visible { outline: 2px solid var(--color-terra-primary, #C4897A); outline-offset: 2px; } /* ── Method pill for REST API tab (was inline #0073aa) ───────────────── */ .wpdo-method-pill { background: var(--color-blue-primary, #9EB3C2); color: var(--color-text-primary, #3A3530); padding: 2px var(--space-2); border-radius: var(--radius-sm); font-size: var(--text-xs); font-weight: var(--font-weight-semibold); font-family: var(--font-family-mono); } /* Code block for curl examples (was inline #EFEFEF) */ .wpdo-wrap .wpdo-code-block { background: var(--color-bg-tertiary, #F2EEE8); color: var(--color-text-primary, #3A3530); padding: var(--space-3); border-radius: var(--radius-sm); font-size: var(--text-xs); font-family: var(--font-family-mono); overflow: auto; white-space: pre; border: 1px solid var(--color-bg-divider, #E8E3D9); } /* ── Zone badges (icon + text, not colour alone — WCAG 1.4.1) ────────── */ .wpdo-zone { display: inline-flex; align-items: center; gap: 4px; padding: 2px var(--space-2); border-radius: var(--radius-sm); font-size: var(--text-xs); font-weight: var(--font-weight-semibold); color: var(--color-text-primary, #3A3530); line-height: 1.4; } .wpdo-zone::before { font-family: var(--font-family-mono); font-weight: var(--font-weight-bold); } .wpdo-zone-hot { background: var(--color-terra-primary, #C4897A); } .wpdo-zone-hot::before { content: "🔥"; } .wpdo-zone-warm { background: var(--color-apricot-medium, #C8B090); } .wpdo-zone-warm::before { content: "◐"; } .wpdo-zone-cold { background: var(--color-blue-medium, #8AA0B2); } .wpdo-zone-cold::before { content: "❄"; } .wpdo-zone-archive { background: var(--color-gray-medium, #AFA8A0); } .wpdo-zone-archive::before { content: "▦"; } /* ── State badges (shape-prefixed for colour-blind legibility) ───────── */ .wpdo-state { display: inline-flex; align-items: center; gap: 4px; padding: 2px var(--space-2); border-radius: var(--radius-sm); font-size: var(--text-xs); font-weight: var(--font-weight-semibold); line-height: 1.4; } .wpdo-state::before { font-family: var(--font-family-mono); } .wpdo-state-idle { background: var(--color-bg-tertiary, #F2EEE8); color: var(--color-text-primary, #3A3530); } .wpdo-state-idle::before { content: "○"; } .wpdo-state-dual_write { background: var(--color-apricot-lightest, #EDD9C0); color: var(--color-text-primary, #3A3530); } .wpdo-state-dual_write::before { content: "⇄"; } .wpdo-state-backfill { background: var(--color-blue-lightest, #C8D6DE); color: var(--color-text-primary, #3A3530); } .wpdo-state-backfill::before { content: "⟲"; } .wpdo-state-verify { background: var(--color-apricot-lightest, #EDD9C0); color: var(--color-text-primary, #3A3530); } .wpdo-state-verify::before { content: "⚠"; } .wpdo-state-cutover { background: var(--color-green-lightest, #C8D5C4); color: var(--color-text-primary, #3A3530); } .wpdo-state-cutover::before { content: "✓"; } .wpdo-state-cleanup { background: var(--color-blue-lightest, #C8D6DE); color: var(--color-text-primary, #3A3530); } .wpdo-state-cleanup::before { content: "✂"; } .wpdo-state-complete { background: var(--color-green-primary, #A8B9A4); color: var(--color-text-primary, #3A3530); } .wpdo-state-complete::before { content: "✔"; } /* ── Generic badges ──────────────────────────────────────────────────── */ .wpdo-badge { display: inline-block; padding: 2px var(--space-2); border-radius: var(--radius-sm); font-size: var(--text-xs); background: var(--color-bg-tertiary, #F2EEE8); color: var(--color-text-primary, #3A3530); } .wpdo-badge-ok { background: var(--color-green-lightest, #C8D5C4); color: var(--color-text-primary, #3A3530); } .wpdo-badge-warn { background: var(--color-apricot-lightest, #EDD9C0); color: var(--color-text-primary, #3A3530); } /* ── Progress bars (transform-based — no layout-thrashing) ───────────── */ .wpdo-progress { display: inline-block; width: 120px; height: 14px; background: var(--color-bg-tertiary, #F2EEE8); border-radius: var(--radius-full); overflow: hidden; vertical-align: middle; margin-right: var(--space-2); } .wpdo-progress-bar { height: 100%; width: 100%; background: var(--color-blue-primary, #9EB3C2); border-radius: var(--radius-full); transform-origin: left center; transform: scaleX(var(--wpdo-progress, 0)); transition: transform var(--duration-slow, 0.4s) var(--ease-default, ease); } .wpdo-progress-text { font-size: var(--text-xs); color: var(--color-text-primary, #3A3530); } /* ── Confidence bar ──────────────────────────────────────────────────── */ .wpdo-confidence { display: inline-block; width: 60px; height: 10px; background: var(--color-bg-tertiary, #F2EEE8); border-radius: var(--radius-full); overflow: hidden; vertical-align: middle; margin-right: var(--space-1); } .wpdo-confidence-bar { height: 100%; width: 100%; background: var(--color-green-primary, #A8B9A4); border-radius: var(--radius-full); transform-origin: left center; transform: scaleX(var(--wpdo-confidence, 0)); } /* ── Screen reader only ──────────────────────────────────────────────── */ .wpdo-sr-only { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); border: 0; } /* ── Tab red-dot badge (v2.8.1) ──────────────────────────────────────── */ .nav-tab .wpdo-tab-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: #dc3232; margin-left: 6px; vertical-align: middle; box-shadow: 0 0 6px rgba(220, 50, 50, 0.6); animation: wpdo-tab-dot-pulse 2s ease infinite; } @keyframes wpdo-tab-dot-pulse { 0% { box-shadow: 0 0 0 0 rgba(220, 50, 50, 0.7); } 70% { box-shadow: 0 0 0 6px rgba(220, 50, 50, 0); } 100% { box-shadow: 0 0 0 0 rgba(220, 50, 50, 0); } } /* ── Reduced motion ──────────────────────────────────────────────────── */ @media (prefers-reduced-motion: reduce) { .wpdo-progress-bar { transition-duration: 0.01ms; } .nav-tab .wpdo-tab-dot { animation: none; } .wpdo-bar-fill, .wpdo-eb-bar-fill, .wpdo-setup-progress-fill { transition-duration: 0.01ms; } } /* ── v3.0.2 — Inline-style Elimination Utilities ────────────────────── */ /* Margin / visibility */ .wpdo-mt-0 { margin-top: 0; } .wpdo-mt-24 { margin-top: 24px; } .wpdo-hidden { display: none; } /* Semantic text colours */ .wpdo-text-success { color: #155724; } .wpdo-text-error { color: #721c24; } .wpdo-text-muted { color: #999; } .wpdo-text-warn { color: #856404; } .wpdo-text-success-em { color: #46b450; font-weight: bold; } .wpdo-text-warn-em { color: #dba617; font-weight: bold; } .wpdo-text-neutral { color: #8c8f94; } .wpdo-text-skip { color: #888; font-size: 0.9em; } .wpdo-check-success { color: #155724; font-size: 12px; } /* Mode badges — small pill (Entity Bridge status table) */ .wpdo-mode-sm { display: inline-block; padding: 2px 8px; border-radius: 3px; font-size: 12px; } /* Mode badges — round pill (Entity Bridge health cards) */ .wpdo-mode-pill { display: inline-block; padding: 2px 10px; border-radius: 20px; font-size: 12px; font-weight: 600; } .wpdo-mode--disabled { background: #e0e0e0; color: #444; } .wpdo-mode--dual-write { background: #d4edda; color: #155724; } .wpdo-mode--shadow-read { background: #fff3cd; color: #856404; } .wpdo-mode--aeav-only { background: #cce5ff; color: #004085; } /* Entity Bridge grid */ .wpdo-eb-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(380px, 1fr)); gap: 20px; margin-top: 20px; } .wpdo-eb-card { padding: 20px; border-radius: 8px; background: #fff; box-shadow: 0 1px 4px rgba(0,0,0,.1); } .wpdo-eb-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 12px; } .wpdo-eb-title { margin: 0 0 4px; font-size: 16px; } .wpdo-mode-days { margin-left: 8px; font-size: 12px; color: var(--color-text-secondary, #666); } .wpdo-mode-warn-sm { font-size: 12px; color: #856404; background: #fff3cd; padding: 2px 8px; border-radius: 4px; } .wpdo-eb-pipeline { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 16px; font-size: 11px; } .wpdo-pipeline-arrow { color: #999; } .wpdo-stage-pill { padding: 2px 8px; border-radius: 3px; } .wpdo-stage-pill--inactive { background: #f0f0f0; color: #666; } .wpdo-eb-tables-row { margin-bottom: 14px; padding: 6px 10px; background: #f8f9fa; border-radius: 4px; font-size: 12px; color: #555; display: flex; flex-wrap: wrap; gap: 4px; align-items: center; } .wpdo-eb-tables-label { font-weight: 600; margin-right: 4px; } .wpdo-eb-sep { color: #ccc; } .wpdo-code-xs { font-size: 11px; } .wpdo-eb-section { margin-bottom: 14px; } .wpdo-eb-section-title { font-size: 12px; text-transform: uppercase; color: var(--color-text-secondary, #666); letter-spacing: .5px; font-weight: 600; } .wpdo-eb-group { margin-top: 8px; } .wpdo-eb-group-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 3px; } .wpdo-eb-group-name { font-size: 13px; font-weight: 500; } .wpdo-eb-group-meta { font-size: 12px; color: var(--color-text-secondary, #666); } .wpdo-eb-group-bar-row { display: flex; align-items: center; gap: 8px; } .wpdo-eb-bar-track { flex: 1; height: 8px; background: #e0e0e0; border-radius: 4px; overflow: hidden; } .wpdo-eb-bar-fill { height: 100%; width: var(--wpdo-eb-pct, 0%); background: var(--wpdo-eb-color, #28a745); transition: width .4s ease; border-radius: 4px; } .wpdo-eb-pct-label { font-size: 12px; min-width: 42px; text-align: right; color: #333; } .wpdo-eb-key-hint { font-size: 11px; color: #888; margin-top: 2px; } .wpdo-eb-actions { margin-top: 6px; } .wpdo-eb-shadow-row { margin-bottom: 12px; padding: 8px; background: #f8f9fa; border-radius: 4px; font-size: 13px; } .wpdo-eb-shadow-ok { color: #28a745; font-size: 12px; } .wpdo-eb-shadow-warn { color: #dc3545; } .wpdo-eb-promote-row { margin-bottom: 12px; font-size: 12px; color: var(--color-text-secondary, #666); } .wpdo-eb-auto-ok { color: #155724; } .wpdo-eb-auto-warn { color: #856404; } .wpdo-eb-auto-badge { background: #d4edda; color: #155724; padding: 1px 5px; border-radius: 3px; margin-left: 4px; font-size: 11px; } .wpdo-eb-info-row { margin-bottom: 14px; padding: 8px 10px; background: #f0f4ff; border-left: 3px solid #4f6ef7; border-radius: 0 4px 4px 0; font-size: 13px; color: #333; } .wpdo-eb-button-row { display: flex; gap: 8px; flex-wrap: wrap; } .wpdo-eb-btn-dim { opacity: .5; } .wpdo-eb-footer { margin-top: 24px; padding: 20px; background: #fff; border-radius: 8px; box-shadow: 0 1px 4px rgba(0,0,0,.1); } .wpdo-eb-ol { margin-left: 20px; line-height: 1.9; font-size: 13px; } /* Stress-test table cells */ .wpdo-td { padding: 6px; } .wpdo-td-muted { padding: 6px; color: var(--color-text-secondary, #666); } .wpdo-td-val { padding: 6px; font-weight: 600; } .wpdo-stats-table { width: 100%; font-size: 13px; margin-top: 10px; border-collapse: collapse; } /* Full-width progress bar */ .wpdo-bar-track { height: 14px; background: var(--color-bg-tertiary, #e0e0e0); border-radius: 7px; overflow: hidden; } .wpdo-bar-fill { height: 100%; background: linear-gradient(90deg, #28a745, #20c997); width: var(--wpdo-bar-width, 0%); transition: width 0.4s; } .wpdo-bar-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; font-size: 13px; } .wpdo-bar-pct { font-weight: 600; } .wpdo-bar-section { margin-bottom: 10px; } /* Layouts */ .wpdo-grid-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 20px; } .wpdo-grid-4col { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; max-width: 720px; margin: 1rem 0; } /* Notices */ .wpdo-notice-error { margin: 14px 0; padding: 12px 14px; background: #f8d7da; color: #721c24; border-left: 4px solid #dc3545; border-radius: 4px; font-size: 13px; line-height: 1.6; } .wpdo-notice-warn-inline { margin: 0; font-size: 12px; color: #856404; background: #fff3cd; padding: 6px 10px; border-radius: 4px; line-height: 1.6; } /* Count badge */ .wpdo-count-danger { font-size: 18px; color: #dc3545; } /* Form helpers */ .wpdo-th-main { width: 35%; } .wpdo-label-block { display: block; margin-bottom: 6px; } .wpdo-hr-section { margin: 18px 0; } /* Lists */ .wpdo-list-disc { list-style: disc; padding-left: 1.5em; } .wpdo-list-ol { margin-left: 20px; line-height: 1.9; font-size: 13px; } .wpdo-list-ol-tight { margin: 6px 0 8px 22px; padding: 0; } /* Max-width constraints */ .wpdo-max-520 { max-width: 520px; } .wpdo-max-600 { max-width: 600px; } .wpdo-max-720 { max-width: 720px; } .wpdo-max-800 { max-width: 800px; } /* Dashboard widget */ .wpdo-widget-intro { font-size: 1.1em; margin-bottom: 0.6em; } .wpdo-widget-link-right { float: right; padding-top: 4px; } .wpdo-widget-notice { margin: 0.6em 0; padding: 0.6em 0.8em; border-radius: 3px; } .wpdo-widget-notice-warn { background: #fff8e5; border-left: 3px solid #dba617; } .wpdo-widget-notice-error { background: #fef0f0; border-left: 3px solid #dc3232; } .wpdo-widget-notice-info { background: #e5f5fa; border-left: 3px solid #00a0d2; } .wpdo-widget-notice-neutral { background: #f6f7f7; border-left: 3px solid #2271b1; } .wpdo-widget-notice-ok { background: #ecf7ed; border-left: 3px solid #46b450; } /* Setup wizard */ .wpdo-setup-progress-track { background: #f0f0f1; height: 8px; border-radius: 4px; overflow: hidden; margin-bottom: 2em; } .wpdo-setup-progress-fill { background: #2271b1; height: 100%; width: var(--wpdo-progress-pct, 0%); transition: width 0.3s; } .wpdo-setup-card-full { max-width: none; padding: 2em; } .wpdo-setup-banner { background: #f0f6fc; border-left: 4px solid #2271b1; padding: 0.75em 1em; margin-bottom: 1em; display: flex; align-items: center; gap: 1em; } .wpdo-setup-banner-btn { white-space: nowrap; } /* HivePress / WC tabs */ .wpdo-cli-block { background: #f6f7f7; padding: 12px; border-left: 4px solid #2271b1; } .wpdo-opacity-60 { opacity: .6; } /* Text colour — strong danger / amber (stress-test status) */ .wpdo-text-danger { color: #dc3545; } .wpdo-text-amber { color: #dba617; } /* Inline code on white bg (mode-card context) */ .wpdo-code-white { background: #fff; padding: 2px 6px; border-radius: 3px; } /* Mode info card (stress-test modal-status section) */ .wpdo-mode-card { border-left-width: 4px; border-left-style: solid; border-radius: 6px; margin-top: 16px; font-size: 13px; line-height: 1.7; } .wpdo-mode-card--ok { background: #e8f5e9; border-left-color: #28a745; } .wpdo-mode-card--warn { background: #fff3cd; border-left-color: #dba617; } /* Settings link margin */ .wpdo-ml-2 { margin-left: 8px; } /* Matrix / details table helpers */ .wpdo-summary-toggle { cursor: pointer; color: #0073aa; font-weight: 600; } .wpdo-table-inset { background: #fff; font-size: 12px; } .wpdo-tr-header th, .wpdo-tr-header td { background: #f0f0f0; } .wpdo-tr-highlight { background: #fff8e1; } .wpdo-tr-success { background: #e8f5e9; font-weight: 600; } /* Entity Bridge JS-hook class static styles (admin.php, updated by wpdo-entity-bridge.js) */ .wpdo-entity-bridge-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(380px, 1fr)); gap: 20px; margin-top: 20px; } .wpdo-mode-badge { display: inline-block; padding: 2px 10px; border-radius: 20px; font-size: 12px; font-weight: 600; transition: background-color var(--duration-normal, 200ms) var(--ease-default, ease), color var(--duration-normal, 200ms) var(--ease-default, ease); } /* JS sets className = 'wpdo-mode-badge wpdo-mode-disabled' etc. */ .wpdo-mode-badge.wpdo-mode-disabled { background: #e0e0e0; color: #444; } .wpdo-mode-badge.wpdo-mode-dual-write { background: #d4edda; color: #155724; } .wpdo-mode-badge.wpdo-mode-shadow-read { background: #fff3cd; color: #856404; } .wpdo-mode-badge.wpdo-mode-aeav-only { background: #cce5ff; color: #004085; } .wpdo-pipeline { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 16px; font-size: 11px; } .wpdo-pipeline-dot { padding: 2px 8px; border-radius: 3px; background: #f0f0f0; color: #666; } .wpdo-pipeline-inactive { background: #f0f0f0; color: #666; } .wpdo-native-counts { margin-bottom: 14px; padding: 6px 10px; background: #f8f9fa; border-radius: 4px; font-size: 12px; color: #555; display: flex; flex-wrap: wrap; gap: 4px; align-items: center; } .wpdo-native-counts-label { font-weight: 600; margin-right: 4px; } .wpdo-native-sep { color: #ccc; } .wpdo-mig-status { font-size: 11px; padding: 1px 6px; border-radius: 3px; background: #f0f0f0; } .wpdo-cov-pct { font-size: 12px; min-width: 42px; text-align: right; color: #333; } .wpdo-cov-bar-fill { height: 100%; width: var(--wpdo-cov-pct, 0%); background: var(--wpdo-cov-color, #28a745); transition: width .4s ease; border-radius: 4px; } .wpdo-recommendation { margin-bottom: 14px; padding: 8px 10px; background: #f0f4ff; border-left: 3px solid #4f6ef7; border-radius: 0 4px 4px 0; font-size: 13px; color: #333; } /* Settings tab helpers */ .wpdo-h3-section { margin-top: 2em; } .wpdo-h4-mb { margin-bottom: 6px; } .wpdo-table-mb { margin-bottom: 14px; } .wpdo-table-mb-sm { margin-bottom: 8px; } .wpdo-pre-code { background: #f0f0f1; padding: 1em; overflow: auto; max-height: 400px; } .wpdo-details-section { margin-top: 1.5em; border: 1px solid #c3c4c7; border-radius: 3px; padding: 0.6em 1em; } .wpdo-label-inline { display: inline-block; margin-right: 1em; margin-bottom: 0.3em; } .wpdo-description-mt { margin-top: 1em; } .wpdo-description-sm { margin-top: 0.25em; } .wpdo-description-xs { margin-top: 0.5em; font-size: 12px; } .wpdo-text-ok { color: #46b450; font-weight: bold; } .wpdo-text-err { color: #dc3232; font-weight: bold; } .wpdo-text-muted { color: #666; font-size: 12px; } .wpdo-text-green { color: #155724; } .wpdo-text-olive { color: #856404; } .wpdo-text-green-bold { color: #28a745; font-weight: 600; } .wpdo-text-red-bold { color: #dc3545; font-weight: 600; } .wpdo-code-sm { margin-left: 8px; font-size: 11px; } .wpdo-badge-mode { display: inline-block; margin-left: 8px; padding: 2px 8px; border-radius: 3px; font-size: 11px; } /* Advisor confidence bar (Classifier tab) */ .wpdo-advisor-bar-track { display: inline-block; background: #f0f0f1; border-radius: 3px; width: 80px; height: 18px; position: relative; vertical-align: middle; } .wpdo-advisor-bar-fill { position: absolute; inset: 0 auto 0 0; background: var(--wpdo-adv-color, #c3c4c7); width: var(--wpdo-adv-width, 0%); border-radius: 3px; } .wpdo-advisor-bar-label { position: absolute; inset: 0; text-align: center; font-size: 11px; line-height: 18px; } /* EB card group section: empty state warning */ .wpdo-eb-warn-box { margin: 0; font-size: 12px; color: #856404; background: #fff3cd; padding: 6px 10px; border-radius: 4px; line-height: 1.6; } /* Additional utilities */ .wpdo-text-dark-red { color: #721c24; } .wpdo-text-red { color: #dc3545; } .wpdo-ml-2 { margin-left: 8px; } .wpdo-form-table-mt0 { margin-top: 0; } .wpdo-badge-mode.wpdo-mode-disabled { background: #e0e0e0; color: #444; } .wpdo-badge-mode.wpdo-mode-dual-write { background: #d4edda; color: #155724; } .wpdo-badge-mode.wpdo-mode-shadow-read { background: #fff3cd; color: #856404; } .wpdo-badge-mode.wpdo-mode-aeav-only { background: #cce5ff; color: #004085; } .wpdo-summary-section { cursor: pointer; font-weight: 600; font-size: 1.1em; } .wpdo-notice-warn-desc { margin-top: 8px; color: #856404; background: #fff3cd; padding: 8px 12px; border-radius: 4px; } .wpdo-card--light { background: #f6f7f7; } .wpdo-h3-sm { font-size: 14px; } /* ── Settings section cards (task E) ─────────────────────────────── */ .wpdo-settings-section { background: var(--color-surface-card, #fbf7f0); border: 1px solid var(--color-border-soft, #e5dccd); border-radius: var(--radius-md, 12px); padding: var(--space-4, 16px) var(--space-6, 24px); margin-bottom: var(--space-5, 20px); } .wpdo-section-save-row { display: flex; align-items: center; gap: var(--space-3, 12px); padding-top: var(--space-3, 12px); } .wpdo-section-save-status { font-size: 0.9rem; color: var(--color-success, #5a8c5a); opacity: 0; transition: opacity var(--duration-normal, 200ms) var(--ease-default, ease); } .wpdo-section-save-status.visible { opacity: 1; } /* Inline form wrapper — the GET → POST hardening (v1.0.0) turned several action links into single-button forms; they must not break the row flow. */ .wpdo-form-inline { display: inline; }