:root { --bg: #f4f6f9; --surface: #ffffff; --primary: #2563eb; --primary-hover: #1d4ed8; --danger: #dc2626; --danger-hover: #b91c1c; --success: #16a34a; --warning: #d97706; --text: #1e293b; --text-secondary: #64748b; --border: #e2e8f0; --radius: 8px; --shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.06); --shadow-lg: 0 4px 12px rgba(0,0,0,.1); --sidebar-width: 240px; --font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; /* Incomplete translation highlight (neutral, not yellow) */ --trans-missing-bg: #f8fafc; --trans-missing-bg-hover: #f1f5f9; --trans-missing-border: #cbd5e1; --trans-missing-accent: #64748b; --trans-missing-placeholder: #94a3b8; } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: var(--font); background: var(--bg); color: var(--text); line-height: 1.5; min-height: 100vh; } /* Layout */ .layout { display: flex; min-height: 100vh; } /* Sidebar */ .sidebar { width: var(--sidebar-width); background: var(--surface); border-right: 1px solid var(--border); display: flex; flex-direction: column; position: fixed; top: 0; left: 0; bottom: 0; z-index: 100; } .sidebar-brand { padding: 20px; border-bottom: 1px solid var(--border); font-weight: 700; font-size: 1.1rem; } .sidebar-brand small { display: block; font-weight: 400; font-size: .75rem; color: var(--text-secondary); } .sidebar-nav { flex: 1; padding: 12px 0; list-style: none; } .sidebar-nav a { display: flex; align-items: center; gap: 10px; padding: 10px 20px; color: var(--text-secondary); text-decoration: none; font-size: .9rem; transition: background .15s, color .15s; } .sidebar-nav a:hover, .sidebar-nav a.active { background: #f1f5f9; color: var(--primary); } .sidebar-nav a svg { width: 18px; height: 18px; flex-shrink: 0; } .sidebar-footer { padding: 16px 20px; border-top: 1px solid var(--border); font-size: .85rem; } .sidebar-footer .user-info { color: var(--text-secondary); margin-bottom: 8px; } /* Main content */ .main-content { margin-left: var(--sidebar-width); flex: 1; padding: 28px 32px; min-width: 0; } /* Cards */ .card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); padding: 24px; } /* Buttons */ .btn { display: inline-flex; align-items: center; gap: 6px; padding: 8px 16px; font-size: .875rem; font-weight: 500; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); color: var(--text); cursor: pointer; transition: background .15s, box-shadow .15s; text-decoration: none; line-height: 1.4; } .btn:hover { background: #f8fafc; box-shadow: var(--shadow); } .btn-primary { background: var(--primary); color: #fff; border-color: var(--primary); } .btn-primary:hover { background: var(--primary-hover); } .btn-danger { background: var(--danger); color: #fff; border-color: var(--danger); } .btn-danger:hover { background: var(--danger-hover); } .btn-sm { padding: 4px 10px; font-size: .8rem; } .btn-block { width: 100%; justify-content: center; } .btn-icon { padding: 6px; border: none; background: transparent; } .btn-icon:hover { background: #f1f5f9; border-radius: 4px; } /* Forms */ .form-group { margin-bottom: 16px; } .form-group label { display: block; font-size: .85rem; font-weight: 500; margin-bottom: 4px; color: var(--text-secondary); } .form-group input, .form-group select, .form-group textarea { width: 100%; padding: 8px 12px; border: 1px solid var(--border); border-radius: 6px; font-size: .9rem; font-family: var(--font); background: var(--surface); color: var(--text); transition: border-color .15s; } .form-group input:focus, .form-group select:focus, .form-group textarea:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37,99,235,.12); } .form-row { display: flex; gap: 12px; } .form-row .form-group { flex: 1; } /* Badges */ .badge { display: inline-block; padding: 2px 8px; font-size: .75rem; font-weight: 600; border-radius: 999px; text-transform: uppercase; letter-spacing: .03em; } .badge-draft { background: #f1f5f9; color: #64748b; } .badge-active { background: #dcfce7; color: #16a34a; } .badge-archived { background: #fef3c7; color: #d97706; } .badge-completed { background: #dcfce7; color: #16a34a; } .badge-in_progress { background: #dbeafe; color: #2563eb; } .badge-pending { background: #f1f5f9; color: #64748b; } /* Page header */ .page-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 24px; flex-wrap: wrap; gap: 12px; } .page-header h1 { font-size: 1.5rem; font-weight: 700; } .page-header .actions { display: flex; gap: 8px; } /* Questionnaire card grid */ .q-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; } .q-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px; box-shadow: var(--shadow); transition: box-shadow .2s, transform .2s; cursor: pointer; } .q-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-2px); } .q-card-header { display: flex; align-items: start; justify-content: space-between; margin-bottom: 12px; } .q-card-title { font-size: 1.05rem; font-weight: 600; } .q-card-meta { display: flex; gap: 16px; color: var(--text-secondary); font-size: .85rem; } .q-card-actions { display: flex; gap: 6px; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--border); } /* Tables — scroll inside wrapper so sticky headers stay visible */ .table-wrapper { overflow: auto; max-height: min(72vh, calc(100vh - 220px)); -webkit-overflow-scrolling: touch; } table.data-table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: .875rem; } table.data-table th, table.data-table td { padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--border); } table.data-table th { font-weight: 600; color: var(--text-secondary); font-size: .8rem; text-transform: uppercase; letter-spacing: .04em; background: #f8fafc; position: sticky; top: 0; z-index: 2; box-shadow: 0 1px 0 var(--border); } table.data-table tr:hover td { background: #f8fafc; } table.data-table tbody tr.row-test-data td { background: #fffde7; } table.data-table tbody tr.row-test-data:hover td { background: #fff9c4; } #qdb-table tbody tr.row-test-data td { background: #fffde7; } #qdb-table tbody tr.row-test-data:hover td { background: #fff9c4; } table.data-table .sticky-col { position: sticky; left: 0; z-index: 1; background: var(--surface); box-shadow: 2px 0 4px rgba(0, 0, 0, 0.06); } table.data-table thead th.sticky-col { z-index: 5; top: 0; background: #f8fafc; } table.data-table tbody tr.row-test-data td.sticky-col { background: #fffde7; } table.data-table tbody tr.row-test-data:hover td.sticky-col { background: #fff9c4; } th.sortable { cursor: pointer; user-select: none; } th.sortable::after { content: ' \2195'; opacity: .4; } th.sort-asc::after { content: ' \2191'; opacity: 1; } th.sort-desc::after { content: ' \2193'; opacity: 1; } /* Accordion / question list */ .question-list { list-style: none; } .question-item { border: 1px solid var(--border); border-radius: var(--radius); margin-bottom: 8px; background: var(--surface); } .question-header { display: flex; align-items: center; gap: 10px; padding: 12px 16px; cursor: pointer; user-select: none; } .question-header:hover { background: #f8fafc; } .drag-handle { cursor: grab; color: var(--text-secondary); font-size: 1.1rem; line-height: 1; } .drag-handle:active { cursor: grabbing; } .question-header .q-text { flex: 1; font-weight: 500; } .question-header .q-type { font-size: .8rem; color: var(--text-secondary); background: #f1f5f9; padding: 2px 8px; border-radius: 4px; } .question-body { display: none; padding: 0 16px 16px 42px; } .question-item.open .question-body { display: block; } .question-item.open .chevron { transform: rotate(90deg); } .chevron { transition: transform .2s; font-size: .8rem; color: var(--text-secondary); } /* Answer options inside a question */ .option-list { list-style: none; margin-top: 8px; } .option-item { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border: 1px solid var(--border); border-radius: 6px; margin-bottom: 4px; background: #fafbfc; font-size: .875rem; } .option-item .opt-text { flex: 1; } .option-item .opt-points { font-weight: 600; color: var(--primary); font-size: .8rem; background: #eff6ff; padding: 1px 6px; border-radius: 4px; } /* Translations panel */ .translations-panel { margin-top: 12px; padding: 12px; background: #f8fafc; border-radius: 6px; border: 1px solid var(--border); } .translations-panel h4 { font-size: .85rem; margin-bottom: 8px; color: var(--text-secondary); } .translation-row { display: flex; gap: 8px; align-items: center; margin-bottom: 6px; } .translation-row input[type="text"] { flex: 1; padding: 4px 8px; border: 1px solid var(--border); border-radius: 4px; font-size: .85rem; } .translation-row .lang-code { font-weight: 600; font-size: .8rem; width: 30px; text-transform: uppercase; color: var(--text-secondary); } /* Inline edit */ .inline-edit { border: 1px solid transparent; background: transparent; padding: 2px 4px; font: inherit; border-radius: 4px; width: 100%; transition: border-color .15s; } .inline-edit:hover { border-color: var(--border); } .inline-edit:focus { outline: none; border-color: var(--primary); background: var(--surface); box-shadow: 0 0 0 3px rgba(37,99,235,.1); } /* Login */ .login-wrapper { display: flex; align-items: center; justify-content: center; min-height: 100vh; padding: 20px; } .login-card { width: 100%; max-width: 400px; } .login-card h1 { font-size: 1.5rem; margin-bottom: 4px; } .login-card .subtitle { color: var(--text-secondary); font-size: .9rem; margin-bottom: 24px; } .error-text { color: var(--danger); font-size: .85rem; margin-top: 8px; } /* Toast */ #toastContainer { position: fixed; top: 20px; right: 20px; z-index: 9999; display: flex; flex-direction: column; gap: 8px; } .toast { padding: 12px 20px; border-radius: 8px; font-size: .875rem; box-shadow: var(--shadow-lg); opacity: 0; transform: translateX(40px); transition: opacity .3s, transform .3s; max-width: 360px; } .toast.show { opacity: 1; transform: translateX(0); } .toast-success { background: #dcfce7; color: #166534; border: 1px solid #bbf7d0; } .toast-error { background: #fee2e2; color: #991b1b; border: 1px solid #fecaca; } .toast-info { background: #dbeafe; color: #1e40af; border: 1px solid #bfdbfe; } /* Filter bar */ .filter-bar { display: flex; gap: 12px; align-items: center; margin-bottom: 16px; flex-wrap: wrap; } .filter-bar select, .filter-bar input { padding: 6px 10px; border: 1px solid var(--border); border-radius: 6px; font-size: .85rem; background: var(--surface); } .filter-bar input[type="search"], .filter-bar input[type="text"].filter-search { min-width: 180px; } .pagination-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 12px; font-size: .85rem; color: var(--text-secondary); } .pagination-bar .btn { min-width: 2.5rem; } .data-toolbar-hint { font-size: .8rem; color: var(--text-secondary); } #qdb-table th.col-key { font-size: .75rem; font-weight: 500; text-transform: none; letter-spacing: 0; max-width: 140px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } #qdb-table thead tr:nth-child(1) th[data-id] { font-size: .7rem; max-width: 120px; overflow: hidden; text-overflow: ellipsis; } /* Empty state */ .empty-state { text-align: center; padding: 60px 20px; color: var(--text-secondary); } .empty-state svg { margin-bottom: 16px; opacity: .4; } .empty-state h3 { margin-bottom: 8px; color: var(--text); } /* Dragging */ .question-item.dragging { opacity: .5; border-style: dashed; } .option-item.dragging { opacity: .5; border-style: dashed; } /* Loading spinner */ .spinner { display: inline-block; width: 20px; height: 20px; border: 2px solid var(--border); border-top-color: var(--primary); border-radius: 50%; animation: spin .6s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* Responsive */ @media (max-width: 768px) { .sidebar { transform: translateX(-100%); transition: transform .3s; } .sidebar.open { transform: translateX(0); } .main-content { margin-left: 0; padding: 16px; } .q-grid { grid-template-columns: 1fr; } } /* Role badges */ .badge-admin { background: #ede9fe; color: #6d28d9; } .badge-supervisor { background: #fce7f3; color: #be185d; } .badge-coach { background: #d1fae5; color: #065f46; } .badge-you { background: #dbeafe; color: #1d4ed8; font-size: .7rem; } /* Assignment page layout */ .assign-layout { display: grid; grid-template-columns: 220px 1fr; gap: 16px; align-items: start; } @media (max-width: 900px) { .assign-layout { grid-template-columns: 1fr; } } .assign-coaches { padding: 16px; } .assign-right { display: flex; flex-direction: column; gap: 16px; } .assign-clients-card { padding: 16px; } .assign-action-card { padding: 16px; } /* Coach list */ .coach-list { list-style: none; } .coach-list-item { padding: 10px 12px; border-radius: 6px; cursor: pointer; transition: background .15s; display: flex; flex-direction: column; gap: 2px; border: 1px solid transparent; margin-bottom: 4px; } .coach-list-item:hover { background: #f1f5f9; } .coach-list-item.active { background: #eff6ff; border-color: var(--primary); } .coach-name { font-weight: 600; font-size: .9rem; } .coach-supervisor { font-size: .8rem; color: var(--text-secondary); } .coach-client-count { font-size: .75rem; color: var(--primary); font-weight: 500; margin-top: 2px; } /* Selection info bar */ .selection-info { margin-top: 10px; padding: 8px 12px; background: #eff6ff; border: 1px solid #bfdbfe; border-radius: 6px; font-size: .875rem; color: #1e40af; } /* Tabs */ .tab-bar { display: flex; gap: 0; border-bottom: 2px solid var(--border); margin-bottom: 20px; } .tab-bar button { padding: 10px 20px; font-size: .9rem; font-weight: 500; background: none; border: none; border-bottom: 2px solid transparent; margin-bottom: -2px; cursor: pointer; color: var(--text-secondary); transition: color .15s, border-color .15s; } .tab-bar button:hover { color: var(--text); } .tab-bar button.active { color: var(--primary); border-bottom-color: var(--primary); } /* Metadata form in editor */ .meta-form { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; margin-bottom: 24px; } @media (max-width: 600px) { .meta-form { grid-template-columns: 1fr; } } /* Inline form cards (add/edit question, add/edit option) */ .inline-form-card { background: #f8fafc; border: 1px solid var(--border); border-radius: var(--radius); padding: 16px; margin-bottom: 12px; } .inline-form-card h4 { font-size: .9rem; font-weight: 600; margin-bottom: 12px; } .inline-form-card .form-group { margin-bottom: 10px; } /* Type select */ .type-select { width: 100%; padding: 8px 12px; border: 1px solid var(--border); border-radius: 6px; font-size: .9rem; font-family: var(--font); background: var(--surface); color: var(--text); } .type-select:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37,99,235,.12); } /* Checkbox label */ .checkbox-label { display: inline-flex; align-items: center; gap: 6px; font-size: .875rem; cursor: pointer; user-select: none; } .checkbox-label input[type="checkbox"] { width: 16px; height: 16px; accent-color: var(--primary); cursor: pointer; } /* Options builder (inside add-question form) */ .options-builder { border-top: 1px solid var(--border); margin-top: 12px; padding-top: 12px; } /* Pending options list (before question is saved) */ .pending-options-list { list-style: none; margin-bottom: 6px; } .pending-option-item { display: flex; align-items: center; gap: 8px; padding: 5px 10px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; margin-bottom: 4px; font-size: .875rem; } .pending-option-item .opt-text { flex: 1; } .pending-options-empty { font-size: .8rem; color: var(--text-secondary); padding: 4px 0 6px; font-style: italic; } /* Branch indicator on answer options */ .opt-branch { font-size: .75rem; font-weight: 600; color: #7c3aed; background: #ede9fe; padding: 1px 6px; border-radius: 4px; white-space: nowrap; } /* Config section inside question forms */ .config-section { border-top: 1px solid var(--border); margin-top: 12px; padding-top: 12px; } .config-section .form-group textarea { width: 100%; padding: 8px 12px; border: 1px solid var(--border); border-radius: 6px; font-family: var(--font); resize: vertical; } /* Condition details toggle */ .condition-details summary { list-style: none; } .condition-details summary::-webkit-details-marker { display: none; } .condition-details summary::before { content: '\25B6 '; font-size: .7rem; transition: transform .2s; display: inline-block; margin-right: 4px; } .condition-details[open] summary::before { transform: rotate(90deg); } /* ── Translations page ── */ .trans-page { padding: 20px 24px; } .trans-controls { display: flex; flex-wrap: wrap; gap: 16px 24px; margin-bottom: 16px; } .trans-control { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 200px; max-width: 360px; font-size: .85rem; color: var(--text-secondary); } .trans-control span { font-weight: 500; } .trans-select { padding: 8px 12px; border: 1px solid var(--border); border-radius: 6px; font-size: .9rem; font-family: var(--font); background: var(--surface); } .trans-select:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37,99,235,.12); } .trans-type-select { width: auto; min-width: 140px; flex-shrink: 0; } .trans-lang-panel { margin-bottom: 16px; padding: 12px 14px; background: #f8fafc; border: 1px solid var(--border); border-radius: var(--radius); } .trans-lang-panel summary { cursor: pointer; font-weight: 600; font-size: .9rem; color: var(--text); user-select: none; } .trans-lang-panel[open] summary { margin-bottom: 12px; } .trans-lang-panel .lang-chips { margin-bottom: 10px; } .trans-hint { padding: 24px 0; text-align: center; font-size: .9rem; } .text-muted { color: var(--text-secondary); } .required-mark { color: var(--danger); font-weight: 600; } .trans-list-header { display: grid; grid-template-columns: minmax(100px, 0.75fr) 1fr 1fr; gap: 12px; padding: 8px 14px; font-size: .75rem; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; color: var(--text-secondary); background: #f1f5f9; border: 1px solid var(--border); border-bottom: none; border-radius: var(--radius) var(--radius) 0 0; } .trans-qn-block { margin-bottom: 28px; padding-bottom: 8px; border-bottom: 1px solid var(--border); } .trans-qn-block:last-child { border-bottom: none; margin-bottom: 0; } .trans-qn-hidden { display: none !important; } .trans-qn-title { font-size: 1.05rem; font-weight: 600; color: var(--text); margin: 0 0 14px; } .trans-group { margin-bottom: 18px; } .trans-group-hidden { display: none !important; } .trans-group-title { font-size: .8rem; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; color: var(--text-secondary); margin: 0 0 8px; padding-bottom: 6px; border-bottom: 1px solid #e2e8f0; } .trans-groups-wrap .trans-list-header { margin-top: 0; } .trans-list-in-group { border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; } #transGroupedRoot { max-height: calc(100vh - 360px); overflow-y: auto; } .trans-list { border: 1px solid var(--border); border-radius: 0 0 var(--radius) var(--radius); max-height: calc(100vh - 360px); overflow-y: auto; } .trans-list-item { display: grid; grid-template-columns: minmax(100px, 0.75fr) 1fr 1fr; gap: 12px; align-items: center; padding: 10px 14px; border-bottom: 1px solid #f1f5f9; } .trans-list-item:last-child { border-bottom: none; } .trans-list-item:hover { background: #f8fafc; } .trans-list-item-missing { background: var(--trans-missing-bg); box-shadow: inset 3px 0 0 var(--trans-missing-accent); } .trans-list-item-missing:hover { background: var(--trans-missing-bg-hover); } .trans-list-key { display: flex; align-items: flex-start; gap: 6px; min-width: 0; } .trans-key-text { font-family: monospace; font-size: .8rem; line-height: 1.35; color: var(--text-secondary); word-break: break-word; } .trans-list-source { min-width: 0; } .trans-source-text { display: block; font-size: .9rem; line-height: 1.4; color: var(--text); word-break: break-word; } .lang-chip-fixed { background: #dbeafe; border-color: #93c5fd; } .trans-list-item .trans-cell-input { border: 1px solid var(--border); background: var(--surface); border-radius: 6px; padding: 8px 10px; } .trans-input-missing { border-color: var(--trans-missing-border) !important; background: var(--surface) !important; box-shadow: inset 0 0 0 1px rgba(100, 116, 139, 0.12); } .trans-input-missing::placeholder { color: var(--trans-missing-placeholder); font-style: normal; } @media (max-width: 768px) { .trans-list-header, .trans-list-item { grid-template-columns: 1fr; gap: 6px; } .trans-list-header { display: none; } .trans-list-item .trans-list-key::before { content: 'Key'; display: block; font-size: .7rem; font-weight: 600; text-transform: uppercase; color: var(--text-secondary); margin-bottom: 2px; } .trans-list-item .trans-list-source::before { content: 'German'; display: block; font-size: .7rem; font-weight: 600; text-transform: uppercase; color: var(--text-secondary); margin-bottom: 2px; } .trans-list-item .trans-cell-input[data-field="translation"] { margin-top: 4px; } } /* ── Language manager ── */ .lang-manager { background: #f8fafc; border: 1px solid var(--border); border-radius: var(--radius); padding: 14px 16px; margin-bottom: 20px; } .lang-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; } .lang-chip { display: inline-flex; align-items: center; gap: 6px; background: var(--surface); border: 1px solid var(--border); border-radius: 20px; padding: 4px 10px 4px 12px; font-size: .85rem; } .lang-chip strong { color: var(--primary); } .lang-chip-name { color: var(--text-secondary); } .lang-chip-remove { background: none; border: none; color: var(--text-secondary); font-size: 1.1rem; cursor: pointer; padding: 0 2px; line-height: 1; } .lang-chip-remove:hover { color: var(--danger); } .lang-add-row { display: flex; gap: 8px; align-items: center; } .lang-add-code { width: 80px; padding: 6px 10px; border: 1px solid var(--border); border-radius: 6px; font-size: .85rem; } .lang-add-name { width: 160px; padding: 6px 10px; border: 1px solid var(--border); border-radius: 6px; font-size: .85rem; } /* ── Translations toolbar ── */ .trans-toolbar { display: flex; gap: 16px; align-items: center; margin-bottom: 14px; flex-wrap: wrap; } .trans-search-wrap { flex: 1; min-width: 200px; } .trans-search-input { width: 100%; padding: 8px 12px; border: 1px solid var(--border); border-radius: 6px; font-size: .9rem; font-family: var(--font); } .trans-search-input:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37,99,235,.12); } .trans-filter-types { display: flex; gap: 12px; flex-shrink: 0; } /* ── Translations table ── */ .trans-table-wrapper { overflow-x: auto; border: 1px solid var(--border); border-radius: var(--radius); } .trans-table { width: 100%; border-collapse: collapse; font-size: .875rem; } .trans-table th { position: sticky; top: 0; background: #f1f5f9; font-weight: 600; text-align: left; padding: 8px 10px; border-bottom: 2px solid var(--border); white-space: nowrap; z-index: 1; } .trans-table td { padding: 2px 4px; } .trans-table tbody tr { border-bottom: 1px solid #f1f5f9; } .trans-table tbody tr:hover { background: #f8fafc; } .trans-row-hidden { display: none !important; } #tabContent-translations .trans-list, #tabContent-translations .trans-list-header { margin-top: 0; } .col-key { min-width: 180px; } .col-type { width: 50px; text-align: center; } .col-lang { min-width: 160px; } .cell-key { font-family: monospace; font-size: .82rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 280px; padding: 6px 10px !important; } .cell-type { text-align: center; padding: 6px 4px !important; } .trans-type-badge { display: inline-block; font-size: .7rem; font-weight: 700; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; letter-spacing: .3px; } .badge-q { background: #dbeafe; color: #1e40af; } .badge-opt { background: #e2e8f0; color: #475569; } .badge-app { background: #d1fae5; color: #065f46; } .badge-str { background: #ede9fe; color: #5b21b6; } .cell-trans { position: relative; } .cell-missing { background: var(--trans-missing-bg); } .trans-cell-input { width: 100%; padding: 5px 8px; border: 1px solid transparent; border-radius: 4px; font-size: .85rem; font-family: var(--font); background: transparent; transition: border-color .15s, background .15s; } .trans-cell-input:hover { border-color: var(--border); background: var(--surface); } .trans-cell-input:focus { outline: none; border-color: var(--primary); background: var(--surface); box-shadow: 0 0 0 2px rgba(37,99,235,.1); } .trans-cell-input::placeholder { color: var(--trans-missing-placeholder); font-style: normal; font-size: .8rem; } .trans-cell-input:not(.trans-input-missing)::placeholder { color: var(--text-secondary); } .trans-cell-input.save-flash { animation: saveFlash .4s ease; } @keyframes saveFlash { 0% { background: #dbeafe; } 100% { background: var(--surface); } } .trans-list-item .trans-cell-input.save-flash { animation: saveFlash .4s ease; } /* ── Stats bar ── */ .trans-stats { display: flex; justify-content: space-between; align-items: center; margin-top: 12px; font-size: .82rem; color: var(--text-secondary); } .trans-stats-progress { display: flex; align-items: center; gap: 8px; } .trans-progress-bar { width: 120px; height: 6px; background: #e2e8f0; border-radius: 3px; overflow: hidden; } .trans-progress-fill { display: block; height: 100%; background: var(--success); border-radius: 3px; transition: width .3s ease; } .field-hint { display: block; font-size: 0.8rem; color: var(--text-secondary); margin-top: 4px; } .field-hint code { font-size: 0.75rem; } .badge-warn { background: #fef3c7; color: #92400e; } .opt-key { font-size: 0.75rem; margin-right: 8px; color: var(--text-secondary); }