diff --git a/frontend/src/components/ReportEditor/CharacterPalette.css b/frontend/src/components/ReportEditor/CharacterPalette.css index 35bf34d..4ea814c 100644 --- a/frontend/src/components/ReportEditor/CharacterPalette.css +++ b/frontend/src/components/ReportEditor/CharacterPalette.css @@ -4,9 +4,9 @@ top: 0; width: 300px; height: 100vh; - background: white; - border-left: 1px solid #ccc; - box-shadow: -2px 0 8px rgba(0, 0, 0, 0.1); + background: var(--surface); + border-left: 1px solid var(--border-strong); + box-shadow: var(--shadow-raised); overflow-y: auto; z-index: 1000; display: flex; @@ -17,9 +17,9 @@ display: flex; justify-content: space-between; align-items: center; - padding: 15px; - border-bottom: 1px solid #e0e0e0; - background: #f9f9f9; + padding: var(--space-4); + border-bottom: 1px solid var(--border); + background: var(--surface-sunken); position: sticky; top: 0; z-index: 10; @@ -27,41 +27,41 @@ .palette-header h3 { margin: 0; - font-size: 16px; - color: #333; + font-size: var(--fs-lg); + color: var(--text); } .close-button { background: transparent; border: none; - font-size: 20px; + font-size: var(--fs-2xl); cursor: pointer; - color: #666; - padding: 5px 10px; + color: var(--text-muted); + padding: var(--space-1-5) var(--space-2-5); line-height: 1; } .close-button:hover { - color: #333; - background: rgba(0, 0, 0, 0.05); + color: var(--text); + background: var(--surface-hover); border-radius: 3px; } .palette-content { flex: 1; overflow-y: auto; - padding: 10px; + padding: var(--space-2-5); } .palette-category { - margin-bottom: 10px; + margin-bottom: var(--space-2-5); } .category-header { display: flex; align-items: center; - padding: 10px; - background: #f5f5f5; + padding: var(--space-2-5); + background: var(--surface-sunken); cursor: pointer; border-radius: 4px; user-select: none; @@ -69,32 +69,32 @@ } .category-header:hover { - background: #e8e8e8; + background: var(--surface-hover); } .category-header.expanded { - background: #667eea; - color: white; + background: var(--accent); + color: var(--accent-contrast); } .category-icon { - margin-right: 8px; - font-size: 12px; + margin-right: var(--space-2); + font-size: var(--fs-sm); width: 12px; display: inline-block; } .category-name { - font-weight: 500; - font-size: 14px; + font-weight: var(--fw-medium); + font-size: var(--fs-md); } .character-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(40px, 1fr)); - gap: 5px; - padding: 10px; - background: #fafafa; + gap: var(--space-1-5); + padding: var(--space-2-5); + background: var(--surface-sunken); border-radius: 0 0 4px 4px; } @@ -104,27 +104,27 @@ justify-content: center; width: 40px; height: 40px; - border: 1px solid #ddd; - background: white; + border: 1px solid var(--border); + background: var(--surface); cursor: pointer; - font-size: 24px; - font-family: 'Courier New', 'Consolas', monospace; + font-size: var(--fs-2xl); + font-family: var(--font-mono); transition: all 0.2s; border-radius: 3px; user-select: none; } .char-button:hover { - border-color: #667eea; - background: #f0f0ff; + border-color: var(--accent); + background: var(--accent-soft); transform: scale(1.1); } .char-button.active { - background: #667eea; - color: white; - border-color: #667eea; - box-shadow: 0 2px 4px rgba(102, 126, 234, 0.3); + background: var(--accent); + color: var(--accent-contrast); + border-color: var(--accent); + box-shadow: 0 2px 4px var(--accent-soft); } /* Scrollbar styling */ @@ -135,16 +135,16 @@ .character-palette::-webkit-scrollbar-track, .palette-content::-webkit-scrollbar-track { - background: #f1f1f1; + background: var(--surface-sunken); } .character-palette::-webkit-scrollbar-thumb, .palette-content::-webkit-scrollbar-thumb { - background: #c0c0c0; + background: var(--border-strong); border-radius: 4px; } .character-palette::-webkit-scrollbar-thumb:hover, .palette-content::-webkit-scrollbar-thumb:hover { - background: #a0a0a0; + background: var(--text-muted); } diff --git a/frontend/src/components/ReportEditor/ConfigPanel.css b/frontend/src/components/ReportEditor/ConfigPanel.css index c7ed8ca..03204e4 100644 --- a/frontend/src/components/ReportEditor/ConfigPanel.css +++ b/frontend/src/components/ReportEditor/ConfigPanel.css @@ -4,7 +4,7 @@ left: 0; right: 0; bottom: 0; - background: rgba(0, 0, 0, 0.5); + background: var(--backdrop); display: flex; align-items: center; justify-content: center; @@ -12,38 +12,38 @@ } .config-panel { - background: white; + background: var(--surface); border-radius: 8px; width: 90%; max-width: 600px; max-height: 80vh; display: flex; flex-direction: column; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); + box-shadow: var(--shadow-overlay); } .config-panel-header { display: flex; justify-content: space-between; align-items: center; - padding: 20px; - border-bottom: 1px solid #e0e0e0; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; + padding: var(--space-5); + border-bottom: 1px solid var(--border); + background: var(--header-bg); + color: var(--header-text); border-radius: 8px 8px 0 0; } .config-panel-header h2 { margin: 0; - font-size: 20px; - font-weight: 600; + font-size: var(--fs-2xl); + font-weight: var(--fw-semibold); } .close-button { background: none; border: none; - color: white; - font-size: 32px; + color: var(--header-text); + font-size: var(--fs-display); cursor: pointer; padding: 0; width: 32px; @@ -56,70 +56,70 @@ } .close-button:hover { - background: rgba(255, 255, 255, 0.2); + background: var(--header-chrome); } .config-panel-content { - padding: 20px; + padding: var(--space-5); overflow-y: auto; flex: 1; } .config-section { - margin-bottom: 24px; + margin-bottom: var(--space-6); } .config-section h3 { - margin: 0 0 12px 0; - font-size: 16px; - font-weight: 600; - color: #333; + margin: 0 0 var(--space-3) 0; + font-size: var(--fs-lg); + font-weight: var(--fw-semibold); + color: var(--text); } .section-header { display: flex; justify-content: space-between; align-items: center; - margin-bottom: 12px; + margin-bottom: var(--space-3); } .input-group { display: flex; - gap: 8px; + gap: var(--space-2); } .config-input { flex: 1; - padding: 10px 12px; - border: 1px solid #ddd; + padding: var(--space-2-5) var(--space-3); + border: 1px solid var(--border); border-radius: 6px; - font-size: 14px; - font-family: 'Courier New', monospace; + font-size: var(--fs-md); + font-family: var(--font-mono); } .config-input:focus { outline: none; - border-color: #667eea; + border-color: var(--accent); } .config-input:disabled { - background: #f5f5f5; + background: var(--surface-sunken); cursor: not-allowed; } .config-button { - padding: 10px 16px; - background: #f0f0f0; - border: 1px solid #ddd; + padding: var(--space-2-5) var(--space-4); + background: var(--surface-sunken); + border: 1px solid var(--border); border-radius: 6px; - font-size: 14px; - font-weight: 500; + font-size: var(--fs-md); + font-weight: var(--fw-medium); cursor: pointer; transition: all 0.2s; } .config-button:hover:not(:disabled) { - background: #e0e0e0; + background: var(--surface-hover); transform: translateY(-1px); } @@ -129,8 +129,8 @@ } .config-button.primary { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; + background: var(--accent-gradient); + color: var(--accent-contrast); border-color: transparent; } @@ -139,65 +139,65 @@ } .config-button.small { - padding: 6px 12px; - font-size: 12px; + padding: var(--space-1-5) var(--space-3); + font-size: var(--fs-sm); } .config-error { - margin-top: 8px; - padding: 12px; - background: #fee; - border: 1px solid #fcc; + margin-top: var(--space-2); + padding: var(--space-3); + background: var(--danger-soft); + border: 1px solid var(--danger); border-radius: 6px; - color: #c33; - font-size: 14px; + color: var(--danger); + font-size: var(--fs-md); } .config-info { - padding: 16px; - background: #f0f8ff; - border: 1px solid #d0e8ff; + padding: var(--space-4); + background: var(--accent-soft); + border: 1px solid var(--accent); border-radius: 6px; - color: #0066cc; - font-size: 14px; + color: var(--accent); + font-size: var(--fs-md); text-align: center; } .manual-input-section { - margin-top: 12px; + margin-top: var(--space-3); display: flex; flex-direction: column; - gap: 8px; + gap: var(--space-2); } .manual-data-input { - padding: 10px 12px; - border: 1px solid #ddd; + padding: var(--space-2-5) var(--space-3); + border: 1px solid var(--border); border-radius: 6px; - font-size: 14px; - font-family: 'Courier New', monospace; + font-size: var(--fs-md); + font-family: var(--font-mono); resize: vertical; min-height: 120px; } .manual-data-input:focus { outline: none; - border-color: #667eea; + border-color: var(--accent); } .data-preview { max-height: 300px; overflow-y: auto; - padding: 12px; - background: #f5f5f5; - border: 1px solid #ddd; + padding: var(--space-3); + background: var(--surface-sunken); + border: 1px solid var(--border); border-radius: 6px; } .data-preview pre { margin: 0; - font-size: 12px; - font-family: 'Courier New', monospace; + font-size: var(--fs-sm); + font-family: var(--font-mono); white-space: pre-wrap; word-wrap: break-word; } diff --git a/frontend/src/components/ReportEditor/EditorCanvas.css b/frontend/src/components/ReportEditor/EditorCanvas.css index 4726ac1..afc2295 100644 --- a/frontend/src/components/ReportEditor/EditorCanvas.css +++ b/frontend/src/components/ReportEditor/EditorCanvas.css @@ -3,8 +3,8 @@ display: flex; justify-content: center; align-items: flex-start; - padding: 20px; - background: #f5f5f5; + padding: var(--space-5); + background: var(--surface-sunken); overflow: auto; } @@ -58,8 +58,8 @@ .frame-preview { position: absolute; - border: 2px dashed #667eea; - background: rgba(102, 126, 234, 0.1); + border: 2px dashed var(--accent); + background: var(--accent-soft); pointer-events: none; box-sizing: border-box; } @@ -74,8 +74,8 @@ .selection-rectangle { position: absolute; - border: 2px dashed #667eea; - background: rgba(102, 126, 234, 0.1); + border: 2px dashed var(--accent); + background: var(--accent-soft); pointer-events: none; box-sizing: border-box; z-index: 100; diff --git a/frontend/src/components/ReportEditor/ObjectInspector.css b/frontend/src/components/ReportEditor/ObjectInspector.css index e94a155..e393859 100644 --- a/frontend/src/components/ReportEditor/ObjectInspector.css +++ b/frontend/src/components/ReportEditor/ObjectInspector.css @@ -4,93 +4,93 @@ top: 0; width: 250px; height: 100vh; - background: #f5f5f5; - border-right: 1px solid #ddd; - box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1); + background: var(--surface-sunken); + border-right: 1px solid var(--border); + box-shadow: var(--shadow-raised); overflow-y: auto; - font-family: Arial, sans-serif; - font-size: 13px; + font-family: var(--font-sans); + font-size: var(--fs-base); z-index: 1000; } .inspector-header { - background: #e0e0e0; - padding: 10px; - font-weight: bold; - border-bottom: 1px solid #ccc; + background: var(--surface-hover); + padding: var(--space-2-5); + font-weight: var(--fw-bold); + border-bottom: 1px solid var(--border-strong); } .inspector-empty { - padding: 20px; - color: #999; + padding: var(--space-5); + color: var(--text-muted); text-align: center; } .inspector-section { - border-bottom: 1px solid #ddd; - padding: 10px; + border-bottom: 1px solid var(--border); + padding: var(--space-2-5); } .section-title { - font-weight: bold; - margin-bottom: 10px; - color: #555; + font-weight: var(--fw-bold); + margin-bottom: var(--space-2-5); + color: var(--text-muted); } .property-row { display: flex; align-items: center; - margin-bottom: 8px; + margin-bottom: var(--space-2); } .property-row label { flex: 0 0 70px; - color: #666; - font-size: 12px; + color: var(--text-muted); + font-size: var(--fs-sm); } .property-row input, .property-row select { flex: 1; - padding: 4px 6px; - border: 1px solid #ccc; + padding: var(--space-1) var(--space-1-5); + border: 1px solid var(--border-strong); border-radius: 3px; - font-size: 12px; + font-size: var(--fs-sm); } .property-row input:disabled { - background: #e0e0e0; - color: #999; + background: var(--surface-hover); + color: var(--text-muted); } .property-row select:disabled { - background: #e0e0e0; - color: #999; + background: var(--surface-hover); + color: var(--text-muted); } .property-row input:focus, .property-row select:focus { outline: none; - border-color: #667eea; + border-color: var(--accent); } .expr-btn-row { display: flex; flex-wrap: wrap; - gap: 3px; - margin-bottom: 6px; + gap: var(--space-1); + margin-bottom: var(--space-1-5); } .expr-btn-row button { - padding: 2px 6px; - font-size: 11px; - border: 1px solid #ccc; + padding: var(--space-0-5) var(--space-1-5); + font-size: var(--fs-xs); + border: 1px solid var(--border-strong); border-radius: 3px; cursor: pointer; - background: #fff; + background: var(--surface); } .expr-btn-row button:hover { - background: #e8eeff; - border-color: #667eea; + background: var(--accent-soft); + border-color: var(--accent); } diff --git a/frontend/src/components/ReportEditor/ObjectInspector.jsx b/frontend/src/components/ReportEditor/ObjectInspector.jsx index 264da30..de14033 100644 --- a/frontend/src/components/ReportEditor/ObjectInspector.jsx +++ b/frontend/src/components/ReportEditor/ObjectInspector.jsx @@ -176,11 +176,11 @@ function ObjectInspector({ element, onUpdate, allElements = [] }) { {parentBand ? ( <>
{parentBand.parentBandId ? ( diff --git a/frontend/src/components/ReportEditor/ReportEditor.css b/frontend/src/components/ReportEditor/ReportEditor.css index 543c09b..48a71f4 100644 --- a/frontend/src/components/ReportEditor/ReportEditor.css +++ b/frontend/src/components/ReportEditor/ReportEditor.css @@ -18,7 +18,7 @@ left: 0; right: 0; bottom: 0; - background: rgba(0, 0, 0, 0.5); + background: var(--backdrop); display: flex; align-items: center; justify-content: center; @@ -26,74 +26,74 @@ } .load-dialog { - background: white; + background: var(--surface); border-radius: 8px; width: 500px; max-width: 90vw; max-height: 80vh; display: flex; flex-direction: column; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2); + box-shadow: var(--shadow-overlay); } .load-dialog-header { display: flex; justify-content: space-between; align-items: center; - padding: 16px 20px; - border-bottom: 1px solid #eee; + padding: var(--space-4) var(--space-5); + border-bottom: 1px solid var(--border); } .load-dialog-header h2 { margin: 0; - font-size: 18px; - color: #333; + font-size: var(--fs-xl); + color: var(--text); } .load-dialog-close { background: none; border: none; - font-size: 24px; + font-size: var(--fs-2xl); cursor: pointer; - color: #999; + color: var(--text-muted); padding: 0; line-height: 1; } .load-dialog-close:hover { - color: #333; + color: var(--text); } .load-dialog-actions { - padding: 12px 20px; - border-bottom: 1px solid #eee; + padding: var(--space-3) var(--space-5); + border-bottom: 1px solid var(--border); } .load-dialog-new-btn { - padding: 8px 16px; - background: #667eea; - color: white; + padding: var(--space-2) var(--space-4); + background: var(--accent); + color: var(--accent-contrast); border: none; border-radius: 6px; cursor: pointer; - font-size: 14px; + font-size: var(--fs-md); } .load-dialog-new-btn:hover { - background: #5a6fd6; + background: var(--accent-hover); } .load-dialog-content { flex: 1; overflow-y: auto; - padding: 12px 0; + padding: var(--space-3) 0; } .load-dialog-loading, .load-dialog-empty { - padding: 40px 20px; + padding: var(--space-10) var(--space-5); text-align: center; - color: #999; + color: var(--text-muted); } .load-dialog-list { @@ -105,47 +105,47 @@ .load-dialog-item { display: flex; align-items: center; - padding: 12px 20px; - border-bottom: 1px solid #f0f0f0; + padding: var(--space-3) var(--space-5); + border-bottom: 1px solid var(--border); cursor: pointer; transition: background 0.2s; } .load-dialog-item:hover { - background: #f8f8f8; + background: var(--surface-hover); } .load-dialog-item--current { - background: #e8f0ff; + background: var(--accent-soft); } .load-dialog-item--current:hover { - background: #dde8ff; + background: color-mix(in srgb, var(--accent) 20%, transparent); } .load-dialog-item-info { flex: 1; display: flex; flex-direction: column; - gap: 4px; + gap: var(--space-1); } .load-dialog-item-name { - font-weight: 500; - color: #333; + font-weight: var(--fw-medium); + color: var(--text); } .load-dialog-item-date { - font-size: 12px; - color: #999; + font-size: var(--fs-sm); + color: var(--text-muted); } .load-dialog-item-delete { background: none; border: none; - font-size: 16px; + font-size: var(--fs-lg); cursor: pointer; - padding: 4px 8px; + padding: var(--space-1) var(--space-2); opacity: 0.5; transition: opacity 0.2s; } diff --git a/frontend/src/components/ReportEditor/Toolbar.css b/frontend/src/components/ReportEditor/Toolbar.css index 4dd6bbf..804f8d6 100644 --- a/frontend/src/components/ReportEditor/Toolbar.css +++ b/frontend/src/components/ReportEditor/Toolbar.css @@ -1,54 +1,54 @@ .toolbar { display: flex; align-items: center; - padding: 12px 16px; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - border-bottom: 2px solid rgba(0, 0, 0, 0.1); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); - gap: 16px; + padding: var(--space-3) var(--space-4); + background: var(--header-bg); + border-bottom: 2px solid color-mix(in srgb, var(--text) 10%, transparent); + box-shadow: var(--shadow-raised); + gap: var(--space-4); } .toolbar-group { display: flex; align-items: center; - gap: 8px; + gap: var(--space-2); } .toolbar-separator { width: 1px; height: 32px; - background: rgba(255, 255, 255, 0.3); + background: var(--header-chrome-border); } .toolbar-label { - color: white; - font-size: 14px; - font-weight: 500; - margin-right: 4px; + color: var(--header-text); + font-size: var(--fs-md); + font-weight: var(--fw-medium); + margin-right: var(--space-1); } .toolbar-button { - padding: 8px 16px; - background: rgba(255, 255, 255, 0.2); - border: 1px solid rgba(255, 255, 255, 0.3); - color: white; + padding: var(--space-2) var(--space-4); + background: var(--header-chrome); + border: 1px solid var(--header-chrome-border); + color: var(--header-text); border-radius: 6px; - font-size: 14px; - font-weight: 500; + font-size: var(--fs-md); + font-weight: var(--fw-medium); cursor: pointer; transition: all 0.2s; white-space: nowrap; } .toolbar-button:hover { - background: rgba(255, 255, 255, 0.3); + background: var(--header-chrome-hover); transform: translateY(-1px); } .toolbar-button.active { - background: rgba(255, 255, 255, 0.4); - border-color: rgba(255, 255, 255, 0.5); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); + background: color-mix(in srgb, var(--header-text) 40%, transparent); + border-color: color-mix(in srgb, var(--header-text) 50%, transparent); + box-shadow: var(--shadow-raised); } .toolbar-button:disabled { @@ -62,21 +62,21 @@ } .toolbar-report-name { - padding: 8px 12px; - background: rgba(255, 255, 255, 0.9); - border: 1px solid rgba(255, 255, 255, 0.3); + padding: var(--space-2) var(--space-3); + background: var(--surface); + border: 1px solid var(--header-chrome-border); border-radius: 6px; - font-size: 14px; + font-size: var(--fs-md); width: 200px; - color: #333; + color: var(--text); } .toolbar-report-name::placeholder { - color: #999; + color: var(--text-muted); } .toolbar-report-name:focus { outline: none; - border-color: rgba(255, 255, 255, 0.6); - box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2); + border-color: color-mix(in srgb, var(--header-text) 60%, transparent); + box-shadow: 0 0 0 2px var(--header-chrome); } diff --git a/frontend/src/components/ReportEditor/a4/A4Canvas.css b/frontend/src/components/ReportEditor/a4/A4Canvas.css index 26f5dd7..116a081 100644 --- a/frontend/src/components/ReportEditor/a4/A4Canvas.css +++ b/frontend/src/components/ReportEditor/a4/A4Canvas.css @@ -3,8 +3,8 @@ .a4-canvas-container { flex: 1; overflow: auto; - background: #8a8a8a; - padding: 24px; + background: var(--desk); + padding: var(--space-6); display: flex; justify-content: center; align-items: flex-start; @@ -102,8 +102,8 @@ /* Rubber-band selection rectangle */ .a4-selection-rectangle { position: absolute; - border: 1px dashed #667eea; - background: rgba(102, 126, 234, 0.12); + border: 1px dashed var(--accent); + background: var(--accent-soft); pointer-events: none; z-index: 15; } @@ -126,13 +126,13 @@ .a4-preview-page-break { width: 100%; - padding: 6px 0 14px; + padding: var(--space-1-5) 0 var(--space-4); text-align: center; - font-family: system-ui, sans-serif; - font-size: 11px; - color: #e8e8e8; - border-top: 1px dashed rgba(255, 255, 255, 0.4); - margin-top: 14px; + font-family: var(--font-sans); + font-size: var(--fs-xs); + color: var(--desk-text); + border-top: 1px dashed color-mix(in srgb, var(--desk-text) 40%, transparent); + margin-top: var(--space-4); } .a4-preview-el { diff --git a/frontend/src/components/ReportEditor/a4/A4Inspector.css b/frontend/src/components/ReportEditor/a4/A4Inspector.css index 8ca704e..58b10e8 100644 --- a/frontend/src/components/ReportEditor/a4/A4Inspector.css +++ b/frontend/src/components/ReportEditor/a4/A4Inspector.css @@ -2,36 +2,36 @@ .a4-inspector .mm-suffix { flex: 0 0 auto; - margin-left: 6px; - color: #999; - font-size: 11px; + margin-left: var(--space-1-5); + color: var(--text-muted); + font-size: var(--fs-xs); } .a4-inspector .a4-style-buttons { flex: 1; display: flex; - gap: 4px; + gap: var(--space-1); } .a4-inspector .a4-style-btn { flex: 1; - padding: 4px 0; - border: 1px solid #ccc; + padding: var(--space-1) 0; + border: 1px solid var(--border-strong); border-radius: 3px; - background: #fff; + background: var(--surface); cursor: pointer; - font-size: 12px; + font-size: var(--fs-sm); } .a4-inspector .a4-style-btn:hover { - background: #e8eeff; - border-color: #667eea; + background: var(--accent-soft); + border-color: var(--accent); } .a4-inspector .a4-style-btn.active { - background: #667eea; - border-color: #667eea; - color: #fff; + background: var(--accent); + border-color: var(--accent); + color: var(--accent-contrast); } .a4-inspector input[type="color"] { @@ -42,16 +42,16 @@ .a4-inspector .a4-expression-input { width: 100%; box-sizing: border-box; - margin-bottom: 4px; - font-family: monospace; - font-size: 11px; + margin-bottom: var(--space-1); + font-family: var(--font-mono); + font-size: var(--fs-xs); resize: vertical; } .a4-inspector .inspector-hint { - padding: 2px 0 6px; - color: #999; - font-size: 10px; + padding: var(--space-0-5) 0 var(--space-1-5); + color: var(--text-muted); + font-size: var(--fs-xs); line-height: 1.3; } diff --git a/frontend/src/components/ReportEditor/a4/A4KindChooser.css b/frontend/src/components/ReportEditor/a4/A4KindChooser.css index abd9084..1f94798 100644 --- a/frontend/src/components/ReportEditor/a4/A4KindChooser.css +++ b/frontend/src/components/ReportEditor/a4/A4KindChooser.css @@ -3,7 +3,7 @@ .a4-kind-overlay { position: fixed; inset: 0; - background: rgba(0, 0, 0, 0.5); + background: var(--backdrop); display: flex; align-items: center; justify-content: center; @@ -11,44 +11,44 @@ } .a4-kind-dialog { - background: #fff; + background: var(--surface); border-radius: 8px; width: 460px; max-width: 92vw; - box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3); + box-shadow: var(--shadow-overlay); } .a4-kind-header { display: flex; align-items: center; justify-content: space-between; - padding: 14px 18px; - border-bottom: 1px solid #e0e0e0; + padding: var(--space-4) var(--space-5); + border-bottom: 1px solid var(--border); } .a4-kind-header h2 { margin: 0; - font-size: 16px; - color: #333; + font-size: var(--fs-lg); + color: var(--text); } .a4-kind-close { border: none; background: none; - font-size: 22px; + font-size: var(--fs-2xl); line-height: 1; - color: #888; + color: var(--text-muted); cursor: pointer; } .a4-kind-close:hover { - color: #333; + color: var(--text); } .a4-kind-options { display: flex; - gap: 12px; - padding: 18px; + gap: var(--space-3); + padding: var(--space-5); } .a4-kind-option { @@ -56,45 +56,45 @@ display: flex; flex-direction: column; align-items: flex-start; - gap: 6px; - padding: 16px; - border: 1px solid #ddd; + gap: var(--space-1-5); + padding: var(--space-4); + border: 1px solid var(--border); border-radius: 6px; - background: #fafafa; + background: var(--surface-sunken); cursor: pointer; text-align: left; font: inherit; } .a4-kind-option:hover { - border-color: #667eea; - background: #f0f3ff; + border-color: var(--accent); + background: var(--accent-soft); } .a4-kind-option-icon { - font-size: 22px; + font-size: var(--fs-2xl); } .a4-kind-option-title { - font-size: 14px; - font-weight: 600; - color: #333; + font-size: var(--fs-md); + font-weight: var(--fw-semibold); + color: var(--text); } .a4-kind-option-desc { - font-size: 11px; + font-size: var(--fs-xs); line-height: 1.45; - color: #777; + color: var(--text-muted); } /* Cross-kind group in the load dialog — dimmed, because these are reports the current editor cannot open; clicking one navigates to the other editor. */ .load-dialog-group-title { - padding: 10px 4px 4px; - font-size: 11px; + padding: var(--space-2-5) var(--space-1) var(--space-1); + font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: 0.04em; - color: #999; + color: var(--text-muted); } .load-dialog-item--other { @@ -106,12 +106,12 @@ } .load-dialog-kind-badge { - margin-left: 8px; - padding: 1px 6px; + margin-left: var(--space-2); + padding: 1px var(--space-1-5); border-radius: 9px; - background: #e8e8e8; - color: #666; - font-size: 10px; + background: var(--surface-hover); + color: var(--text-muted); + font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: 0.04em; vertical-align: middle; diff --git a/frontend/src/components/ReportEditor/a4/A4PageSetup.css b/frontend/src/components/ReportEditor/a4/A4PageSetup.css index 0439777..d9b8031 100644 --- a/frontend/src/components/ReportEditor/a4/A4PageSetup.css +++ b/frontend/src/components/ReportEditor/a4/A4PageSetup.css @@ -4,7 +4,7 @@ .a4-page-setup-overlay { position: fixed; inset: 0; - background: rgba(0, 0, 0, 0.5); + background: var(--backdrop); display: flex; align-items: center; justify-content: center; @@ -12,55 +12,55 @@ } .a4-page-setup { - background: #fff; + background: var(--surface); border-radius: 8px; width: 340px; max-height: 85vh; display: flex; flex-direction: column; - box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3); + box-shadow: var(--shadow-overlay); } .a4-page-setup-header { display: flex; align-items: center; justify-content: space-between; - padding: 14px 18px; - border-bottom: 1px solid #e0e0e0; + padding: var(--space-4) var(--space-5); + border-bottom: 1px solid var(--border); } .a4-page-setup-header h2 { margin: 0; - font-size: 16px; - color: #333; + font-size: var(--fs-lg); + color: var(--text); } .a4-page-setup-close { border: none; background: none; - font-size: 22px; + font-size: var(--fs-2xl); line-height: 1; - color: #888; + color: var(--text-muted); cursor: pointer; } .a4-page-setup-close:hover { - color: #333; + color: var(--text); } .a4-page-setup-body { - padding: 8px 18px 18px; + padding: var(--space-2) var(--space-5) var(--space-5); overflow-y: auto; } .a4-page-setup-dims, .a4-page-setup-hint { - font-size: 11px; - color: #888; - margin-top: 6px; + font-size: var(--fs-xs); + color: var(--text-muted); + margin-top: var(--space-1-5); line-height: 1.4; } .a4-page-setup-dims { - color: #667eea; + color: var(--accent); } diff --git a/frontend/src/components/ReportEditor/a4/A4ReportEditor.css b/frontend/src/components/ReportEditor/a4/A4ReportEditor.css index 9550452..2d1cb2f 100644 --- a/frontend/src/components/ReportEditor/a4/A4ReportEditor.css +++ b/frontend/src/components/ReportEditor/a4/A4ReportEditor.css @@ -6,16 +6,16 @@ } .toolbar-zoom { - padding: 8px 10px; - background: rgba(255, 255, 255, 0.9); - border: 1px solid rgba(255, 255, 255, 0.3); + padding: var(--space-2) var(--space-2-5); + background: var(--surface); + border: 1px solid var(--header-chrome-border); border-radius: 6px; - font-size: 14px; - color: #333; + font-size: var(--fs-md); + color: var(--text); cursor: pointer; } .toolbar-zoom:focus { outline: none; - box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2); + box-shadow: 0 0 0 2px var(--header-chrome); } diff --git a/frontend/src/styles/tokens.css b/frontend/src/styles/tokens.css index b65d157..5d8402c 100644 --- a/frontend/src/styles/tokens.css +++ b/frontend/src/styles/tokens.css @@ -68,6 +68,11 @@ /* The dim behind a modal */ --backdrop: rgba(0, 0, 0, 0.5); + /* The desk the A4 designer's white page sits on, and the page-break label + drawn on it. Mid-grey, as in a word processor, so the page edge reads. */ + --desk: #8a8a8a; + --desk-text: #e8e8e8; + /* The header is its own surface: a saturated bar with white chrome on it, so it cannot borrow --surface/--text without losing that contrast. */ --header-bg: linear-gradient(135deg, #667eea 0%, #764ba2 100%); @@ -134,6 +139,10 @@ sinks into the theme instead of turning grey. */ --backdrop: rgba(2, 10, 18, 0.75); + /* Darker than --bg so the white page is the brightest thing on screen */ + --desk: #01070d; + --desk-text: #6e9caf; + --header-bg: linear-gradient(180deg, #0a2336 0%, #04121e 100%); --header-text: #d9f6ff; --header-chrome: rgba(0, 217, 255, 0.10);