| :root { |
| color-scheme: light; |
| font-family: "Inter", "Segoe UI", system-ui, -apple-system, sans-serif; |
| font-size: 16px; |
| --page-bg: #f4f6fb; |
| --surface-color: #ffffff; |
| --surface-muted: #f8fafc; |
| --surface-emphasis: #eef1f7; |
| --header-bg: #1f2937; |
| --footer-bg: #111827; |
| --text-primary: #0f172a; |
| --text-secondary: #475569; |
| --text-muted: #64748b; |
| --text-inverse: #f8fafc; |
| --accent: #4f46e5; |
| --accent-strong: #4338ca; |
| --accent-soft: rgba(79, 70, 229, 0.1); |
| --accent-outline: rgba(79, 70, 229, 0.35); |
| --border-color: rgba(15, 23, 42, 0.08); |
| --border-muted: rgba(148, 163, 184, 0.2); |
| --border-strong: rgba(79, 70, 229, 0.3); |
| --radius-lg: 0.75rem; |
| --radius-md: 0.5rem; |
| --radius-sm: 0.375rem; |
| --shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.05); |
| --shadow-md: 0 4px 6px rgba(15, 23, 42, 0.08); |
| --shadow-lg: 0 10px 15px rgba(15, 23, 42, 0.1); |
| --info-bg: rgba(148, 163, 184, 0.1); |
| --info-border: rgba(148, 163, 184, 0.3); |
| --success-bg: rgba(34, 197, 94, 0.1); |
| --success-border: rgba(34, 197, 94, 0.4); |
| --error-bg: rgba(248, 113, 113, 0.1); |
| --error-border: rgba(248, 113, 113, 0.4); |
| --badge-valid-bg: rgba(34, 197, 94, 0.15); |
| --badge-valid-text: #065f46; |
| --badge-invalid-bg: rgba(248, 113, 113, 0.15); |
| --badge-invalid-text: #7f1d1d; |
| --outline-offset: 2px; |
| } |
|
|
| @media (prefers-color-scheme: dark) { |
| :root { |
| color-scheme: dark; |
| --page-bg: #030712; |
| --surface-color: #0f172a; |
| --surface-muted: #1e293b; |
| --surface-emphasis: #0b1324; |
| --header-bg: #0b1324; |
| --footer-bg: #050b19; |
| --text-primary: #e2e8f0; |
| --text-secondary: #94a3b8; |
| --text-muted: #64748b; |
| --text-inverse: #f9fafb; |
| --accent-soft: rgba(99, 102, 241, 0.15); |
| --border-color: rgba(148, 163, 184, 0.1); |
| --border-muted: rgba(148, 163, 184, 0.2); |
| --border-strong: rgba(99, 102, 241, 0.4); |
| --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3); |
| --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4); |
| --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.5); |
| --info-bg: rgba(148, 163, 184, 0.15); |
| --info-border: rgba(148, 163, 184, 0.3); |
| --success-bg: rgba(34, 197, 94, 0.15); |
| --success-border: rgba(34, 197, 94, 0.4); |
| --error-bg: rgba(248, 113, 113, 0.15); |
| --error-border: rgba(248, 113, 113, 0.4); |
| --badge-valid-bg: rgba(34, 197, 94, 0.2); |
| --badge-valid-text: #86efac; |
| --badge-invalid-bg: rgba(248, 113, 113, 0.2); |
| --badge-invalid-text: #fca5a5; |
| } |
| } |
|
|
| @media (prefers-reduced-motion: reduce) { |
| *, |
| *::before, |
| *::after { |
| transition-duration: 0.01ms !important; |
| animation-duration: 0.01ms !important; |
| animation-iteration-count: 1 !important; |
| } |
| } |
|
|
| *, |
| *::before, |
| *::after { |
| box-sizing: border-box; |
| } |
|
|
| body { |
| margin: 0; |
| min-height: 100vh; |
| display: flex; |
| flex-direction: column; |
| background: var(--page-bg); |
| color: var(--text-primary); |
| } |
|
|
| code { |
| font-family: "JetBrains Mono", "SFMono-Regular", Consolas, "Liberation Mono", monospace; |
| padding: 0.1rem 0.35rem; |
| border-radius: var(--radius-sm); |
| background: var(--surface-emphasis); |
| color: var(--text-secondary); |
| } |
|
|
| .app-header, |
| .app-footer { |
| padding: 2rem; |
| color: var(--text-inverse); |
| } |
|
|
| .app-header { |
| background: var(--header-bg); |
| border-bottom: 1px solid rgba(15, 23, 42, 0.2); |
| } |
|
|
| .app-header h1 { |
| margin: 0 0 0.5rem; |
| font-size: 2rem; |
| font-weight: 700; |
| letter-spacing: -0.02em; |
| } |
|
|
| .tagline { |
| margin: 0; |
| font-size: 0.95rem; |
| color: rgba(248, 250, 252, 0.85); |
| } |
|
|
| .app-footer { |
| margin-top: auto; |
| font-size: 0.875rem; |
| text-align: center; |
| background: var(--footer-bg); |
| border-top: 1px solid rgba(15, 23, 42, 0.2); |
| } |
|
|
| .app-main { |
| flex: 1; |
| padding: 2rem; |
| max-width: 1200px; |
| width: 100%; |
| margin: 0 auto; |
| } |
|
|
| .app-shell { |
| display: flex; |
| gap: 2rem; |
| align-items: flex-start; |
| } |
|
|
| .sidebar { |
| width: 320px; |
| flex-shrink: 0; |
| display: flex; |
| flex-direction: column; |
| gap: 1.5rem; |
| position: sticky; |
| top: 2rem; |
| } |
|
|
| .content { |
| flex: 1; |
| min-width: 0; |
| } |
|
|
| .panel { |
| background: var(--surface-color); |
| border-radius: var(--radius-lg); |
| border: 1px solid var(--border-color); |
| box-shadow: var(--shadow-md); |
| padding: 1.5rem; |
| display: grid; |
| gap: 1.25rem; |
| } |
|
|
| .panel-heading h2 { |
| margin: 0 0 0.25rem; |
| font-size: 1.125rem; |
| font-weight: 700; |
| color: var(--text-primary); |
| } |
|
|
| .panel-heading p { |
| margin: 0; |
| font-size: 0.875rem; |
| color: var(--text-secondary); |
| line-height: 1.5; |
| } |
|
|
| .control-group { |
| display: grid; |
| gap: 0.5rem; |
| } |
|
|
| .control-label { |
| font-weight: 600; |
| font-size: 0.875rem; |
| color: var(--text-primary); |
| } |
|
|
| .control-row { |
| display: grid; |
| grid-template-columns: 1fr auto; |
| gap: 0.75rem; |
| align-items: center; |
| } |
|
|
| .control-help { |
| margin: 0; |
| color: var(--text-muted); |
| font-size: 0.85rem; |
| } |
|
|
| .divider { |
| display: flex; |
| align-items: center; |
| gap: 0.75rem; |
| font-size: 0.75rem; |
| color: var(--text-muted); |
| text-transform: uppercase; |
| letter-spacing: 0.1em; |
| font-weight: 600; |
| } |
|
|
| .divider::before, |
| .divider::after { |
| content: ""; |
| flex: 1; |
| height: 1px; |
| background: var(--border-muted); |
| } |
|
|
| .select, |
| .file-input, |
| .button { |
| font: inherit; |
| border-radius: var(--radius-md); |
| border: 1px solid var(--border-muted); |
| padding: 0.625rem 0.875rem; |
| transition: all 0.15s ease; |
| } |
|
|
| .select { |
| width: 100%; |
| background: var(--surface-color); |
| color: var(--text-primary); |
| } |
|
|
| .file-input { |
| width: 100%; |
| background: var(--surface-color); |
| color: var(--text-primary); |
| } |
|
|
| .select:focus-visible, |
| .file-input:focus-visible { |
| outline: 3px solid var(--accent-outline); |
| outline-offset: var(--outline-offset); |
| } |
|
|
| .file-input { |
| cursor: pointer; |
| } |
|
|
| .file-input::file-selector-button, |
| .file-input::-webkit-file-upload-button { |
| font: inherit; |
| border: none; |
| margin-right: 0.75rem; |
| padding: 0.5rem 0.875rem; |
| border-radius: var(--radius-sm); |
| background: linear-gradient(135deg, var(--accent), var(--accent-strong)); |
| color: var(--text-inverse); |
| font-weight: 600; |
| cursor: pointer; |
| transition: all 0.15s ease; |
| } |
|
|
| .file-input::file-selector-button:hover, |
| .file-input::-webkit-file-upload-button:hover { |
| transform: translateY(-1px); |
| box-shadow: var(--shadow-md); |
| } |
|
|
| .button { |
| background: linear-gradient(135deg, var(--accent), var(--accent-strong)); |
| border: none; |
| color: var(--text-inverse); |
| cursor: pointer; |
| font-weight: 600; |
| font-size: 0.875rem; |
| white-space: nowrap; |
| box-shadow: var(--shadow-sm); |
| } |
|
|
| .button:hover:not(:disabled) { |
| transform: translateY(-1px); |
| box-shadow: var(--shadow-md); |
| } |
|
|
| .button:focus-visible { |
| outline: 2px solid var(--accent-outline); |
| outline-offset: var(--outline-offset); |
| } |
|
|
| .button:disabled { |
| background: var(--surface-emphasis); |
| color: var(--text-muted); |
| border: 1px solid var(--border-muted); |
| cursor: not-allowed; |
| box-shadow: none; |
| transform: none; |
| opacity: 0.6; |
| } |
|
|
| .button-secondary { |
| background: var(--surface-muted); |
| color: var(--text-primary); |
| border: 1px solid var(--border-color); |
| box-shadow: none; |
| } |
|
|
| .button-secondary:hover:not(:disabled) { |
| background: var(--surface-emphasis); |
| box-shadow: var(--shadow-sm); |
| } |
|
|
| .current-selection { |
| display: flex; |
| align-items: center; |
| gap: 0.5rem; |
| padding: 0.75rem 1rem; |
| border-radius: var(--radius-md); |
| background: var(--accent-soft); |
| border: 1px solid var(--border-strong); |
| font-size: 0.875rem; |
| } |
|
|
| .current-selection-label { |
| font-weight: 600; |
| letter-spacing: 0.05em; |
| text-transform: uppercase; |
| font-size: 0.7rem; |
| color: var(--text-muted); |
| } |
|
|
| .current-selection-value { |
| font-weight: 600; |
| color: var(--text-primary); |
| } |
|
|
| .panel-status { |
| gap: 1rem; |
| } |
|
|
| .status-header { |
| display: grid; |
| grid-template-columns: 1fr auto; |
| align-items: center; |
| gap: 1rem; |
| } |
|
|
| .dataset-info { |
| font-weight: 600; |
| color: var(--text-primary); |
| font-size: 0.875rem; |
| flex: 1; |
| } |
|
|
| .nav-buttons { |
| display: grid; |
| grid-template-columns: 1fr 1fr; |
| gap: 0.5rem; |
| min-width: 140px; |
| } |
|
|
| .progress { |
| width: 100%; |
| height: 0.5rem; |
| border-radius: 999px; |
| background: rgba(148, 163, 184, 0.2); |
| overflow: hidden; |
| appearance: none; |
| } |
|
|
| .progress::-webkit-progress-bar { |
| background: transparent; |
| } |
|
|
| .progress::-webkit-progress-value { |
| background: linear-gradient(90deg, var(--accent), var(--accent-strong)); |
| border-radius: 999px; |
| transition: width 0.3s ease; |
| } |
|
|
| .progress::-moz-progress-bar { |
| background: linear-gradient(90deg, var(--accent), var(--accent-strong)); |
| border-radius: 999px; |
| transition: width 0.3s ease; |
| } |
|
|
| .progress.is-empty::-webkit-progress-value, |
| .progress.is-empty::-moz-progress-bar { |
| background: transparent; |
| } |
|
|
| .message { |
| padding: 1rem; |
| border-radius: var(--radius-md); |
| background: var(--info-bg); |
| color: var(--text-primary); |
| font-weight: 500; |
| border: 1px solid var(--info-border); |
| display: flex; |
| align-items: center; |
| gap: 0.75rem; |
| font-size: 0.9rem; |
| line-height: 1.5; |
| } |
|
|
| .message::before { |
| content: "ℹ"; |
| font-weight: 600; |
| font-size: 1rem; |
| color: inherit; |
| background: rgba(148, 163, 184, 0.3); |
| border-radius: 50%; |
| width: 1.5rem; |
| height: 1.5rem; |
| display: inline-flex; |
| align-items: center; |
| justify-content: center; |
| flex-shrink: 0; |
| } |
|
|
| .message[data-type="error"] { |
| background: var(--error-bg); |
| color: #991b1b; |
| border-color: var(--error-border); |
| } |
|
|
| .message[data-type="success"] { |
| background: var(--success-bg); |
| color: #166534; |
| border-color: var(--success-border); |
| } |
|
|
| .message[data-type="error"]::before { |
| content: "✕"; |
| background: rgba(248, 113, 113, 0.3); |
| } |
|
|
| .message[data-type="success"]::before { |
| content: "✓"; |
| background: rgba(34, 197, 94, 0.3); |
| } |
|
|
| .record-card { |
| background: var(--surface-color); |
| border-radius: var(--radius-lg); |
| border: 1px solid var(--border-color); |
| box-shadow: var(--shadow-lg); |
| padding: 2rem; |
| display: grid; |
| gap: 1.5rem; |
| } |
|
|
| .record-header { |
| display: flex; |
| align-items: flex-start; |
| justify-content: space-between; |
| gap: 1rem; |
| flex-wrap: wrap; |
| } |
|
|
| .record-title-group { |
| display: grid; |
| gap: 0.5rem; |
| } |
|
|
| .record-subtitle { |
| margin: 0; |
| text-transform: uppercase; |
| font-size: 0.75rem; |
| font-weight: 600; |
| letter-spacing: 0.1em; |
| color: var(--text-muted); |
| } |
|
|
| .question-title { |
| margin: 0; |
| font-size: 1.5rem; |
| font-weight: 700; |
| color: var(--text-primary); |
| letter-spacing: -0.01em; |
| line-height: 1.3; |
| } |
|
|
| .badge { |
| padding: 0.5rem 1rem; |
| border-radius: 999px; |
| font-size: 0.75rem; |
| font-weight: 700; |
| text-transform: uppercase; |
| letter-spacing: 0.05em; |
| background: var(--surface-muted); |
| color: var(--text-muted); |
| border: 1px solid var(--border-color); |
| } |
|
|
| .badge.valid { |
| background: var(--badge-valid-bg); |
| color: var(--badge-valid-text); |
| } |
|
|
| .badge.invalid { |
| background: var(--badge-invalid-bg); |
| color: var(--badge-invalid-text); |
| } |
|
|
| .meta-grid { |
| display: grid; |
| gap: 0.75rem; |
| grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); |
| } |
|
|
| .meta-chip { |
| display: grid; |
| gap: 0.375rem; |
| padding: 0.75rem 1rem; |
| border-radius: var(--radius-md); |
| border: 1px solid var(--border-color); |
| background: var(--surface-muted); |
| } |
|
|
| .meta-chip[data-empty="true"] { |
| opacity: 0.72; |
| border-style: dashed; |
| } |
|
|
| .meta-chip[data-empty="true"] .meta-value { |
| color: var(--text-muted); |
| font-style: italic; |
| } |
|
|
| .meta-label { |
| font-size: 0.7rem; |
| font-weight: 600; |
| text-transform: uppercase; |
| letter-spacing: 0.1em; |
| color: var(--text-muted); |
| } |
|
|
| .meta-value { |
| font-size: 1rem; |
| font-weight: 600; |
| color: var(--text-primary); |
| } |
|
|
| .record-grid { |
| display: grid; |
| gap: 1.25rem; |
| grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); |
| } |
|
|
| .block { |
| padding: 1.25rem; |
| border-radius: var(--radius-md); |
| border: 1px solid var(--border-color); |
| background: var(--surface-muted); |
| display: grid; |
| gap: 0.75rem; |
| } |
|
|
| .block h3 { |
| margin: 0; |
| font-size: 0.875rem; |
| font-weight: 700; |
| text-transform: uppercase; |
| letter-spacing: 0.05em; |
| color: var(--text-secondary); |
| } |
|
|
| .block--wide { |
| grid-column: 1 / -1; |
| background: var(--accent-soft); |
| border-color: var(--border-strong); |
| } |
|
|
| .text-block { |
| margin: 0; |
| line-height: 1.6; |
| white-space: pre-wrap; |
| } |
|
|
| .text-block.is-empty { |
| color: var(--text-muted); |
| font-style: italic; |
| } |
|
|
| .options-list { |
| margin: 0; |
| padding: 0; |
| list-style: none; |
| display: grid; |
| gap: 0.75rem; |
| } |
|
|
| .options-list li { |
| padding: 0.75rem 1rem; |
| border-radius: var(--radius-md); |
| border: 1px solid var(--border-color); |
| background: var(--surface-color); |
| box-shadow: var(--shadow-sm); |
| line-height: 1.5; |
| display: flex; |
| gap: 0.5rem; |
| align-items: baseline; |
| color: var(--text-primary); |
| } |
|
|
| .options-list li.is-correct { |
| border-color: var(--success-border); |
| background: var(--success-bg); |
| font-weight: 500; |
| } |
|
|
| .options-list .option-key { |
| font-weight: 600; |
| margin-right: 0.5rem; |
| color: var(--accent-strong); |
| flex-shrink: 0; |
| } |
|
|
| .options-list li .is-empty { |
| color: var(--text-muted); |
| font-style: italic; |
| } |
|
|
| .options-list.is-empty { |
| gap: 0; |
| } |
|
|
| .option-empty-message { |
| justify-content: center; |
| font-style: italic; |
| color: var(--text-muted); |
| background: var(--surface-muted); |
| border-style: dashed; |
| } |
|
|
| .definition-list { |
| margin: 0; |
| display: grid; |
| gap: 0.75rem; |
| } |
|
|
| .definition-list dt { |
| font-weight: 600; |
| font-size: 0.875rem; |
| color: var(--text-primary); |
| } |
|
|
| .definition-list dd { |
| margin: 0 0 0 0; |
| line-height: 1.6; |
| color: var(--text-secondary); |
| } |
|
|
| .hidden { |
| display: none !important; |
| } |
|
|
| @media (max-width: 960px) { |
| .app-shell { |
| flex-direction: column; |
| } |
|
|
| .sidebar { |
| width: 100%; |
| position: static; |
| } |
|
|
| .app-main { |
| padding: 1.5rem; |
| } |
| } |
|
|
| @media (max-width: 640px) { |
| .app-header, |
| .app-footer { |
| padding: 1.5rem; |
| } |
|
|
| .app-header h1 { |
| font-size: 1.5rem; |
| } |
|
|
| .app-main { |
| padding: 1rem; |
| } |
|
|
| .panel { |
| padding: 1.25rem; |
| } |
|
|
| .record-card { |
| padding: 1.5rem; |
| } |
|
|
| .status-header { |
| grid-template-columns: 1fr; |
| gap: 0.75rem; |
| } |
|
|
| .nav-buttons { |
| grid-template-columns: 1fr 1fr; |
| width: 100%; |
| } |
|
|
| .meta-grid { |
| grid-template-columns: 1fr; |
| } |
|
|
| .record-grid { |
| grid-template-columns: 1fr; |
| } |
|
|
| .record-subtitle { |
| font-size: 0.7rem; |
| } |
|
|
| .question-title { |
| font-size: 1.25rem; |
| } |
| } |
|
|