diff --git a/frontend/src/App.css b/frontend/src/App.css index b7e647c..37fcd47 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -2,7 +2,7 @@ .boot { display: flex; align-items: center; justify-content: center; - height: 100vh; color: #888; font-size: 14px; + height: 100vh; color: var(--c-gray-500); font-size: var(--text-md); } /* `100dvh` is the dynamic viewport height — adjusts as iOS Safari's @@ -17,47 +17,47 @@ .app { height: 100vh; height: 100dvh; display: flex; flex-direction: column; } .app-header { - height: 48px; flex-shrink: 0; - background: #1a1a1a; color: #fff; + height: var(--header-height); flex-shrink: 0; + background: var(--color-header-bg); color: var(--color-text-inverse); display: flex; align-items: center; justify-content: space-between; padding: 0 20px; } -.app-brand a { color: #fff; text-decoration: none; font-weight: 600; font-size: 14px; } -.header-right { display: flex; align-items: center; gap: 12px; font-size: 13px; } -.user-name { color: #ddd; } +.app-brand a { color: var(--c-white); text-decoration: none; font-weight: 600; font-size: var(--text-md); } +.header-right { display: flex; align-items: center; gap: 12px; font-size: var(--text-base); } +.user-name { color: var(--c-gray-300); } .user-role-badge { - font-size: 10px; font-weight: 700; + font-size: var(--text-2xs); font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; - padding: 2px 6px; border-radius: 4px; - background: rgba(255,255,255,0.15); + padding: 2px 6px; border-radius: var(--radius-sm); + background: var(--color-on-dark-soft); } -.role-owner { background: #b45309; } -.role-admin { background: #4338ca; } +.role-owner { background: var(--c-warning-accent); } +.role-admin { background: var(--c-accent-strong); } .btn-link { - color: #fff; text-decoration: none; - background: rgba(255,255,255,0.15); - border-radius: 6px; padding: 4px 10px; - font-size: 13px; + color: var(--c-white); text-decoration: none; + background: var(--color-on-dark-soft); + border-radius: var(--radius-md); padding: 4px 10px; + font-size: var(--text-base); } -.btn-link:hover { background: rgba(255,255,255,0.25); } +.btn-link:hover { background: var(--color-on-dark-hover); } .btn-signin-header { - color: #fff; text-decoration: none; - background: rgba(255,255,255,0.15); - border-radius: 6px; padding: 4px 10px; - font-size: 13px; + color: var(--c-white); text-decoration: none; + background: var(--color-on-dark-soft); + border-radius: var(--radius-md); padding: 4px 10px; + font-size: var(--text-base); display: inline-flex; align-items: center; gap: 6px; } -.btn-signin-header:hover { background: rgba(255,255,255,0.25); } +.btn-signin-header:hover { background: var(--color-on-dark-hover); } /* Beta chip — small uppercase tag sitting alongside a button label or * link. Renders well on both dark headers and light surfaces. */ .beta-chip { font-size: 9px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; - padding: 1px 5px; border-radius: 3px; - background: #b45309; color: #fff; + padding: 1px 5px; border-radius: var(--radius-sm); + background: var(--c-warning-accent); color: var(--c-white); line-height: 1.5; vertical-align: middle; } @@ -73,44 +73,44 @@ .catalog { width: 320px; flex-shrink: 0; - background: #fff; border-right: 1px solid #e5e5e5; + background: var(--c-white); border-right: 1px solid var(--c-gray-200); display: flex; flex-direction: column; overflow: hidden; } .catalog-search { padding: 12px 14px; - border-bottom: 1px solid #f0f0ee; + border-bottom: 1px solid var(--c-gray-150); } .catalog-search input { - width: 100%; border: 1px solid #e5e5e5; border-radius: 6px; - padding: 6px 10px; font-size: 13px; outline: none; + width: 100%; border: 1px solid var(--c-gray-200); border-radius: var(--radius-md); + padding: 6px 10px; font-size: var(--text-base); outline: none; } -.catalog-search input:focus { border-color: #1a1a1a; } +.catalog-search input:focus { border-color: var(--c-ink); } .catalog-controls { display: flex; align-items: center; gap: 8px; padding: 8px 14px; - border-bottom: 1px solid #f0f0ee; - font-size: 12px; color: #555; + border-bottom: 1px solid var(--c-gray-150); + font-size: var(--text-sm); color: var(--c-gray-500); } .catalog-controls select { - border: 1px solid #e5e5e5; border-radius: 4px; - font-size: 12px; padding: 2px 4px; + border: 1px solid var(--c-gray-200); border-radius: var(--radius-sm); + font-size: var(--text-sm); padding: 2px 4px; } .catalog-chips { display: flex; flex-wrap: wrap; gap: 4px; padding: 6px 14px 10px; - border-bottom: 1px solid #f0f0ee; + border-bottom: 1px solid var(--c-gray-150); } .chip { - font-size: 11px; - background: #f0f0ee; color: #444; - border: 1px solid transparent; border-radius: 999px; + font-size: var(--text-xs); + background: var(--c-gray-150); color: var(--c-gray-600); + border: 1px solid transparent; border-radius: var(--radius-pill); padding: 2px 9px; cursor: pointer; } -.chip.active { background: #1a1a1a; color: #fff; border-color: #1a1a1a; } +.chip.active { background: var(--c-ink); color: var(--c-white); border-color: var(--c-ink); } .catalog-list { flex: 1; overflow-y: auto; padding: 4px 0; } @@ -120,66 +120,66 @@ border: none; background: none; text-align: left; cursor: pointer; border-left: 3px solid transparent; width: 100%; } -.catalog-row:hover { background: #f7f7f5; } -.catalog-row.active { background: #f0f0ee; border-left-color: #1a1a1a; } +.catalog-row:hover { background: var(--c-gray-100); } +.catalog-row.active { background: var(--c-gray-150); border-left-color: var(--c-ink); } .catalog-row .row-top { display: flex; align-items: center; gap: 6px; } .row-id { - font-size: 10px; font-weight: 700; - color: #888; text-transform: uppercase; + font-size: var(--text-2xs); font-weight: 700; + color: var(--c-gray-500); text-transform: uppercase; letter-spacing: 0.04em; } -.row-id.super { color: #b45309; } -.row-title { font-size: 13px; margin-top: 2px; } -.catalog-row.is-super .row-title { color: #555; } -.row-tags { font-size: 11px; color: #999; margin-top: 2px; } +.row-id.super { color: var(--c-warning-accent); } +.row-title { font-size: var(--text-base); margin-top: 2px; } +.catalog-row.is-super .row-title { color: var(--c-gray-500); } +.row-tags { font-size: var(--text-xs); color: var(--c-gray-500); margin-top: 2px; } .catalog-pending { - border-top: 1px solid #f0f0ee; + border-top: 1px solid var(--c-gray-150); flex-shrink: 0; - background: #fafaf8; + background: var(--c-gray-50); } .pending-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 14px; - font-size: 11px; font-weight: 700; + font-size: var(--text-xs); font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; - color: #888; + color: var(--c-gray-500); cursor: pointer; background: none; border: none; width: 100%; text-align: left; } .pending-count { - background: #e5e5e5; color: #333; - border-radius: 999px; - padding: 1px 8px; font-size: 11px; + background: var(--c-gray-200); color: var(--c-gray-700); + border-radius: var(--radius-pill); + padding: 1px 8px; font-size: var(--text-xs); } .pending-list { padding: 2px 0 8px; } .pending-row { display: block; padding: 6px 14px; - font-size: 13px; color: #444; text-decoration: none; + font-size: var(--text-base); color: var(--c-gray-600); text-decoration: none; cursor: pointer; background: none; border: none; text-align: left; width: 100%; } -.pending-row:hover { background: #fff; color: #1a1a1a; } -.pending-row.active { background: #fff; color: #1a1a1a; } +.pending-row:hover { background: var(--c-white); color: var(--c-ink); } +.pending-row.active { background: var(--c-white); color: var(--c-ink); } .pending-row .pending-by { - font-size: 11px; color: #999; margin-top: 1px; + font-size: var(--text-xs); color: var(--c-gray-500); margin-top: 1px; } .catalog-footer { - border-top: 1px solid #e5e5e5; + border-top: 1px solid var(--c-gray-200); padding: 10px 14px; flex-shrink: 0; - background: #fff; + background: var(--c-white); } .btn-propose { width: 100%; - background: #1a1a1a; color: #fff; - border: none; border-radius: 6px; + background: var(--c-ink); color: var(--c-white); + border: none; border-radius: var(--radius-md); padding: 8px 12px; - font-size: 13px; font-weight: 600; + font-size: var(--text-base); font-weight: 600; cursor: pointer; } -.btn-propose:hover { background: #333; } +.btn-propose:hover { background: var(--c-gray-700); } .btn-propose:disabled { opacity: 0.5; cursor: default; } /* --- Main pane --- */ @@ -190,74 +190,74 @@ } .welcome { max-width: 640px; } -.welcome h1 { font-size: 22px; font-weight: 600; margin: 0 0 16px; } -.welcome p { line-height: 1.7; color: #444; } +.welcome h1 { font-size: var(--text-2xl); font-weight: 600; margin: 0 0 16px; } +.welcome p { line-height: 1.7; color: var(--c-gray-600); } /* --- RFC / Proposal view (read-only for slice 1) --- */ .entry-view { max-width: 720px; margin: 0 auto; } .entry-state-banner { - font-size: 12px; font-weight: 600; + font-size: var(--text-sm); font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; - color: #b45309; + color: var(--c-warning-accent); padding: 6px 10px; - background: #fffbeb; border: 1px solid #fde68a; - border-radius: 6px; + background: var(--c-warning-bg-soft); border: 1px solid #fde68a; + border-radius: var(--radius-md); display: inline-block; margin-bottom: 16px; } -.entry-state-banner.active { color: #166534; background: #f0fdf4; border-color: #bbf7d0; } -.entry-state-banner.declined { color: #991b1b; background: #fef2f2; border-color: #fecaca; } +.entry-state-banner.active { color: var(--c-success-fg); background: #f0fdf4; border-color: #bbf7d0; } +.entry-state-banner.declined { color: var(--c-danger-fg); background: var(--c-danger-bg); border-color: var(--c-danger-border); } .entry-state-banner.merged { color: #1e40af; background: #eff6ff; border-color: #bfdbfe; } -.entry-title { font-size: 26px; font-weight: 700; margin: 0 0 8px; } -.entry-meta { font-size: 12px; color: #999; margin-bottom: 24px; } +.entry-title { font-size: var(--text-3xl); font-weight: 700; margin: 0 0 8px; } +.entry-meta { font-size: var(--text-sm); color: var(--c-gray-500); margin-bottom: 24px; } .entry-meta .entry-tag { display: inline-block; - background: #f0f0ee; color: #555; - padding: 1px 8px; border-radius: 999px; + background: var(--c-gray-150); color: var(--c-gray-500); + padding: 1px 8px; border-radius: var(--radius-pill); margin-right: 4px; } .entry-body { - font-size: 15px; line-height: 1.75; color: #1a1a1a; + font-size: var(--text-lg); line-height: 1.75; color: var(--c-ink); } .entry-body h1, .entry-body h2, .entry-body h3 { font-weight: 600; } -.entry-body h1 { font-size: 22px; margin-top: 24px; } -.entry-body h2 { font-size: 17px; margin-top: 20px; } -.entry-body h3 { font-size: 15px; margin-top: 16px; } +.entry-body h1 { font-size: var(--text-2xl); margin-top: 24px; } +.entry-body h2 { font-size: var(--text-xl); margin-top: 20px; } +.entry-body h3 { font-size: var(--text-lg); margin-top: 16px; } .entry-body p { margin: 0 0 12px; } .entry-body ul, .entry-body ol { padding-left: 24px; } -.entry-body code { background: #f0f0ee; padding: 1px 5px; border-radius: 3px; font-size: 13px; } +.entry-body code { background: var(--c-gray-150); padding: 1px 5px; border-radius: var(--radius-sm); font-size: var(--text-base); } .entry-actions { display: flex; gap: 8px; margin: 16px 0 24px; padding-bottom: 24px; - border-bottom: 1px solid #e5e5e5; + border-bottom: 1px solid var(--c-gray-200); } .btn-primary { - background: #166534; color: #fff; - border: none; border-radius: 6px; + background: var(--c-success-fg); color: var(--c-white); + border: none; border-radius: var(--radius-md); padding: 7px 14px; - font-size: 13px; font-weight: 600; + font-size: var(--text-base); font-weight: 600; cursor: pointer; } .btn-primary:hover { background: #14532d; } .btn-primary:disabled { opacity: 0.5; cursor: default; } .btn-secondary { - background: #fff; color: #1a1a1a; - border: 1px solid #d4d4d4; border-radius: 6px; + background: var(--c-white); color: var(--c-ink); + border: 1px solid var(--c-gray-300); border-radius: var(--radius-md); padding: 7px 14px; - font-size: 13px; font-weight: 600; + font-size: var(--text-base); font-weight: 600; cursor: pointer; } -.btn-secondary:hover { background: #f7f7f5; } +.btn-secondary:hover { background: var(--c-gray-100); } .btn-danger { - background: #fff; color: #991b1b; - border: 1px solid #fecaca; border-radius: 6px; + background: var(--c-white); color: var(--c-danger-fg); + border: 1px solid var(--c-danger-border); border-radius: var(--radius-md); padding: 7px 14px; - font-size: 13px; font-weight: 600; + font-size: var(--text-base); font-weight: 600; cursor: pointer; } -.btn-danger:hover { background: #fef2f2; } +.btn-danger:hover { background: var(--c-danger-bg); } /* --- Modals --- */ @@ -268,8 +268,8 @@ z-index: 100; } .modal { - background: #fff; - border-radius: 10px; + background: var(--c-white); + border-radius: var(--radius-xl); box-shadow: 0 12px 40px rgba(0,0,0,0.15); width: 560px; max-width: calc(100vw - 40px); max-height: calc(100vh - 80px); @@ -277,13 +277,13 @@ } .modal-header { padding: 18px 20px; - border-bottom: 1px solid #f0f0ee; + border-bottom: 1px solid var(--c-gray-150); display: flex; align-items: center; justify-content: space-between; } -.modal-header h2 { margin: 0; font-size: 17px; font-weight: 600; } +.modal-header h2 { margin: 0; font-size: var(--text-xl); font-weight: 600; } .modal-close { - background: none; border: none; font-size: 22px; cursor: pointer; - color: #999; line-height: 1; padding: 0; + background: none; border: none; font-size: var(--text-2xl); cursor: pointer; + color: var(--c-gray-500); line-height: 1; padding: 0; } .modal-body { padding: 20px; @@ -292,30 +292,30 @@ } .modal-body label { display: block; - font-size: 12px; font-weight: 600; - color: #555; + font-size: var(--text-sm); font-weight: 600; + color: var(--c-gray-500); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 4px; } .modal-body input, .modal-body textarea { width: 100%; - border: 1px solid #d4d4d4; border-radius: 6px; + border: 1px solid var(--c-gray-300); border-radius: var(--radius-md); padding: 8px 10px; - font-size: 14px; font-family: inherit; + font-size: var(--text-md); font-family: inherit; outline: none; margin-bottom: 14px; } -.modal-body input:focus, .modal-body textarea:focus { border-color: #1a1a1a; } +.modal-body input:focus, .modal-body textarea:focus { border-color: var(--c-ink); } .modal-body textarea { resize: vertical; min-height: 100px; } .field-help { - font-size: 12px; color: #999; + font-size: var(--text-sm); color: var(--c-gray-500); margin-top: -10px; margin-bottom: 14px; } .field-error { - font-size: 12px; color: #991b1b; + font-size: var(--text-sm); color: var(--c-danger-fg); margin-top: -10px; margin-bottom: 14px; } .modal-actions { - border-top: 1px solid #f0f0ee; + border-top: 1px solid var(--c-gray-150); padding: 14px 20px; display: flex; justify-content: flex-end; gap: 10px; } @@ -329,28 +329,28 @@ padding: 40px; text-align: center; } -.landing h1 { font-size: 28px; font-weight: 700; margin: 0 0 8px; } -.landing .subtitle { font-size: 16px; color: #666; margin: 0 0 28px; } +.landing h1 { font-size: var(--text-3xl); font-weight: 700; margin: 0 0 8px; } +.landing .subtitle { font-size: var(--text-lg); color: var(--c-gray-500); margin: 0 0 28px; } .landing .pitch { max-width: 540px; - line-height: 1.7; color: #333; - font-size: 15px; + line-height: 1.7; color: var(--c-gray-700); + font-size: var(--text-lg); margin: 0 0 28px; } .landing .btn-signin { - background: #1a1a1a; color: #fff; - border: none; border-radius: 8px; + background: var(--c-ink); color: var(--c-white); + border: none; border-radius: var(--radius-lg); padding: 10px 20px; - font-size: 14px; font-weight: 600; + font-size: var(--text-md); font-weight: 600; text-decoration: none; } -.landing .btn-signin:hover { background: #333; } +.landing .btn-signin:hover { background: var(--c-gray-700); } .landing .secondary-link { margin-top: 14px; - font-size: 13px; - color: #666; text-decoration: none; + font-size: var(--text-base); + color: var(--c-gray-500); text-decoration: none; } -.landing .secondary-link:hover { color: #1a1a1a; text-decoration: underline; } +.landing .secondary-link:hover { color: var(--c-ink); text-decoration: underline; } /* --- v0.7.0: email + one-time-code sign-in (§6.2) --- */ @@ -366,36 +366,36 @@ gap: 14px; } .otc-login h1 { - font-size: 22px; + font-size: var(--text-2xl); font-weight: 600; margin: 0 0 4px; } .otc-login .otc-hint { - color: #555; - font-size: 14px; + color: var(--c-gray-500); + font-size: var(--text-md); line-height: 1.5; margin: 0; } .otc-login input { width: 100%; padding: 10px 12px; - font-size: 15px; - border: 1px solid #ddd; - border-radius: 6px; + font-size: var(--text-lg); + border: 1px solid var(--c-gray-300); + border-radius: var(--radius-md); box-sizing: border-box; } .otc-login input:focus { outline: none; - border-color: #1a1a1a; + border-color: var(--c-ink); } .otc-login button[type="submit"] { - background: #1a1a1a; color: #fff; - border: none; border-radius: 6px; + background: var(--c-ink); color: var(--c-white); + border: none; border-radius: var(--radius-md); padding: 10px 18px; - font-size: 14px; font-weight: 600; + font-size: var(--text-md); font-weight: 600; cursor: pointer; } -.otc-login button[type="submit"]:hover:not(:disabled) { background: #333; } +.otc-login button[type="submit"]:hover:not(:disabled) { background: var(--c-gray-700); } .otc-login button[type="submit"]:disabled { opacity: 0.5; cursor: not-allowed; } .otc-login form { display: flex; flex-direction: column; @@ -406,61 +406,61 @@ } .otc-login .btn-link-quiet { background: none; border: none; - color: #666; font-size: 13px; + color: var(--c-gray-500); font-size: var(--text-base); cursor: pointer; padding: 0; } -.otc-login .btn-link-quiet:hover { color: #1a1a1a; text-decoration: underline; } +.otc-login .btn-link-quiet:hover { color: var(--c-ink); text-decoration: underline; } /* v0.8.0 — labels + textarea for the first-OTC profile capture step. */ .otc-field-label { - font-size: 12px; color: #666; + font-size: var(--text-sm); color: var(--c-gray-500); margin: 8px 0 -4px; font-weight: 600; } .otc-login textarea { width: 100%; padding: 10px 12px; - font-size: 15px; - border: 1px solid #ddd; - border-radius: 6px; + font-size: var(--text-lg); + border: 1px solid var(--c-gray-300); + border-radius: var(--radius-md); box-sizing: border-box; font-family: inherit; resize: vertical; } .otc-login textarea:focus { outline: none; - border-color: #1a1a1a; + border-color: var(--c-ink); } .otc-shortcut-hint { - color: #888; font-size: 12px; margin: 4px 0 0; + color: var(--c-gray-500); font-size: var(--text-sm); margin: 4px 0 0; } .otc-shortcut-hint kbd { - background: #f0f0ee; border: 1px solid #ddd; border-radius: 3px; - padding: 1px 5px; font-size: 11px; font-family: inherit; + background: var(--c-gray-150); border: 1px solid var(--c-gray-300); border-radius: var(--radius-sm); + padding: 1px 5px; font-size: var(--text-xs); font-family: inherit; } .otc-status { - color: #555; font-size: 13px; - background: #f7f6f0; + color: var(--c-gray-500); font-size: var(--text-base); + background: var(--c-gray-100); border-left: 3px solid #cfc8a8; padding: 8px 12px; margin: 4px 0 0; } .otc-fallback { - font-size: 12px; color: #777; + font-size: var(--text-sm); color: var(--c-gray-500); margin: 16px 0 0; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; } .otc-fallback a, .otc-fallback .otc-fallback-link { - color: #666; text-decoration: none; + color: var(--c-gray-500); text-decoration: none; } -.otc-fallback a:hover { color: #1a1a1a; text-decoration: underline; } -.otc-fallback-sep { color: #ccc; } +.otc-fallback a:hover { color: var(--c-ink); text-decoration: underline; } +.otc-fallback-sep { color: var(--c-gray-300); } /* v0.11.0 — "trust this device for 30 days" checkbox on the verify step. Sits above the action row, padded so it doesn't crowd the passcode/code input. */ .otc-trust-device { display: flex; align-items: center; gap: 8px; - font-size: 13px; color: #444; + font-size: var(--text-base); color: var(--c-gray-600); margin: 8px 0 4px; cursor: pointer; user-select: none; @@ -476,41 +476,41 @@ .device-list-item { display: flex; align-items: center; justify-content: space-between; gap: 12px; - border: 1px solid #eee; border-radius: 6px; + border: 1px solid var(--c-gray-200); border-radius: var(--radius-md); padding: 10px 12px; margin: 0 0 8px; - background: #fafafa; + background: var(--c-gray-50); } .device-list-item .device-meta { flex: 1; min-width: 0; } .device-list-item .device-ua { - font-size: 13px; color: #1a1a1a; + font-size: var(--text-base); color: var(--c-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .device-list-item .device-stamps { - font-size: 12px; color: #777; + font-size: var(--text-sm); color: var(--c-gray-500); margin-top: 2px; } .device-list-item button { - font-size: 12px; padding: 4px 10px; - border: 1px solid #ccc; border-radius: 4px; + font-size: var(--text-sm); padding: 4px 10px; + border: 1px solid var(--c-gray-300); border-radius: var(--radius-sm); background: white; cursor: pointer; } .device-list-item button:hover:not(:disabled) { - background: #f5f5f5; + background: var(--c-gray-100); } .device-revoke-all { margin-top: 8px; - font-size: 13px; padding: 6px 12px; - border: 1px solid #cb6a6a; border-radius: 4px; + font-size: var(--text-base); padding: 6px 12px; + border: 1px solid #cb6a6a; border-radius: var(--radius-sm); background: white; color: #cb6a6a; cursor: pointer; } .device-revoke-all:hover:not(:disabled) { - background: #fff5f5; + background: var(--c-danger-bg); } .device-empty { - font-size: 13px; color: #777; - background: #fafafa; border: 1px solid #eee; border-radius: 6px; + font-size: var(--text-base); color: var(--c-gray-500); + background: var(--c-gray-50); border: 1px solid var(--c-gray-200); border-radius: var(--radius-md); padding: 12px; } @@ -525,35 +525,35 @@ max-width: 560px; text-align: center; } -.beta-pending h1 { font-size: 24px; margin: 0 0 16px; } -.beta-pending p { font-size: 15px; line-height: 1.6; color: #333; margin: 0 0 14px; } +.beta-pending h1 { font-size: var(--text-2xl); margin: 0 0 16px; } +.beta-pending p { font-size: var(--text-lg); line-height: 1.6; color: var(--c-gray-700); margin: 0 0 14px; } .beta-pending-contact { - background: #fafafa; border: 1px solid #eee; border-radius: 8px; + background: var(--c-gray-50); border: 1px solid var(--c-gray-200); border-radius: var(--radius-lg); padding: 14px 18px; - color: #444; + color: var(--c-gray-600); } .beta-pending-actions { margin-top: 24px; display: flex; gap: 18px; justify-content: center; align-items: center; } .beta-pending-actions .btn-primary { - background: #1a1a1a; color: #fff; - border-radius: 8px; padding: 9px 18px; - font-size: 14px; font-weight: 600; text-decoration: none; + background: var(--c-ink); color: var(--c-white); + border-radius: var(--radius-lg); padding: 9px 18px; + font-size: var(--text-md); font-weight: 600; text-decoration: none; } -.beta-pending-actions .btn-primary:hover { background: #333; } -.btn-link-quiet { color: #666; text-decoration: none; font-size: 13px; } -.btn-link-quiet:hover { color: #1a1a1a; text-decoration: underline; } +.beta-pending-actions .btn-primary:hover { background: var(--c-gray-700); } +.btn-link-quiet { color: var(--c-gray-500); text-decoration: none; font-size: var(--text-base); } +.btn-link-quiet:hover { color: var(--c-ink); text-decoration: underline; } /* v0.8.0 — thin "your beta access is in review" banner. Shown on every page (other than /beta-pending itself, which carries the larger form of the message). Sits just under the app header so it doesn't compete with the catalog rail. */ .pending-access-banner { - background: #fff8e0; + background: var(--c-warning-bg-soft); border-bottom: 1px solid #e6dca0; color: #4a3f00; - font-size: 13px; + font-size: var(--text-base); padding: 8px 16px; text-align: center; } @@ -580,45 +580,45 @@ .rfc-breadcrumb { display: flex; align-items: center; gap: 8px; padding: 10px 16px; - border-bottom: 1px solid #e5e5e5; - background: #fafafa; - font-size: 13px; color: #555; + border-bottom: 1px solid var(--c-gray-200); + background: var(--c-gray-50); + font-size: var(--text-base); color: var(--c-gray-500); flex-shrink: 0; } .breadcrumb-label { - font-size: 11px; font-weight: 700; text-transform: uppercase; - letter-spacing: 0.05em; color: #888; + font-size: var(--text-xs); font-weight: 700; text-transform: uppercase; + letter-spacing: 0.05em; color: var(--c-gray-500); } -.breadcrumb-sep { color: #ccc; } -.breadcrumb-meta { color: #999; font-size: 12px; } +.breadcrumb-sep { color: var(--c-gray-300); } +.breadcrumb-meta { color: var(--c-gray-500); font-size: var(--text-sm); } .breadcrumb-actions { margin-left: auto; display: flex; gap: 8px; align-items: center; } .btn-mode-toggle { - font-size: 12px; font-weight: 600; - padding: 4px 12px; border-radius: 999px; - border: 1px solid #d4d4d4; background: #fff; color: #444; + font-size: var(--text-sm); font-weight: 600; + padding: 4px 12px; border-radius: var(--radius-pill); + border: 1px solid var(--c-gray-300); background: var(--c-white); color: var(--c-gray-600); cursor: pointer; } -.btn-mode-toggle.discuss { background: #fff; color: #444; } -.btn-mode-toggle.contribute { background: #1a1a1a; color: #fff; border-color: #1a1a1a; } +.btn-mode-toggle.discuss { background: var(--c-white); color: var(--c-gray-600); } +.btn-mode-toggle.contribute { background: var(--c-ink); color: var(--c-white); border-color: var(--c-ink); } .btn-start-contribution-header { - background: #1a1a1a; color: #fff; - border: none; border-radius: 6px; - padding: 5px 12px; font-size: 12px; font-weight: 600; + background: var(--c-ink); color: var(--c-white); + border: none; border-radius: var(--radius-md); + padding: 5px 12px; font-size: var(--text-sm); font-weight: 600; cursor: pointer; } .branch-dropdown { position: relative; } .branch-dropdown-trigger { - background: none; border: 1px solid transparent; border-radius: 5px; - padding: 3px 8px; font-weight: 600; color: #1a1a1a; font-size: 13px; + background: none; border: 1px solid transparent; border-radius: var(--radius-md); + padding: 3px 8px; font-weight: 600; color: var(--c-ink); font-size: var(--text-base); cursor: pointer; } -.branch-dropdown-trigger:hover { border-color: #e5e5e5; } +.branch-dropdown-trigger:hover { border-color: var(--c-gray-200); } .branch-dropdown-menu { position: absolute; top: 100%; left: 0; margin-top: 4px; - background: #fff; border: 1px solid #e5e5e5; border-radius: 8px; + background: var(--c-white); border: 1px solid var(--c-gray-200); border-radius: var(--radius-lg); box-shadow: 0 4px 20px rgba(0,0,0,0.08); z-index: 50; min-width: 240px; padding: 4px; } @@ -626,13 +626,13 @@ display: flex; align-items: center; gap: 8px; width: 100%; padding: 6px 10px; background: none; border: none; cursor: pointer; text-align: left; - font-size: 13px; border-radius: 5px; + font-size: var(--text-base); border-radius: var(--radius-md); } -.branch-dropdown-item:hover { background: #f5f5f5; } -.branch-dropdown-item.active { background: #f0f0ee; font-weight: 600; } +.branch-dropdown-item:hover { background: var(--c-gray-100); } +.branch-dropdown-item.active { background: var(--c-gray-150); font-weight: 600; } .branch-name { flex: 1; } -.branch-creator { font-size: 11px; color: #999; } -.branch-private-icon { font-size: 10px; } +.branch-creator { font-size: var(--text-xs); color: var(--c-gray-500); } +.branch-private-icon { font-size: var(--text-2xs); } .rfc-body { flex: 1; display: flex; overflow: hidden; } @@ -642,30 +642,30 @@ flex: 1; min-width: 0; display: flex; flex-direction: column; overflow: hidden; position: relative; - background: #fff; + background: var(--c-white); } .discuss-mode-banner { padding: 8px 16px; - background: #fffbeb; border-bottom: 1px solid #fde68a; - color: #92400e; font-size: 12px; + background: var(--c-warning-bg-soft); border-bottom: 1px solid #fde68a; + color: var(--c-warning-fg); font-size: var(--text-sm); } -.discuss-mode-banner.muted { background: #f0f0ee; color: #666; border-color: #e5e5e5; } +.discuss-mode-banner.muted { background: var(--c-gray-150); color: var(--c-gray-500); border-color: var(--c-gray-200); } .editor-toolbar { display: flex; align-items: center; gap: 12px; padding: 8px 16px; - border-bottom: 1px solid #f0f0ee; - background: #fafafa; - font-size: 12px; color: #777; + border-bottom: 1px solid var(--c-gray-150); + background: var(--c-gray-50); + font-size: var(--text-sm); color: var(--c-gray-500); } .btn-review-toggle { - background: #fff; color: #1a1a1a; - border: 1px solid #d4d4d4; border-radius: 5px; - padding: 4px 10px; font-size: 12px; font-weight: 600; cursor: pointer; + background: var(--c-white); color: var(--c-ink); + border: 1px solid var(--c-gray-300); border-radius: var(--radius-md); + padding: 4px 10px; font-size: var(--text-sm); font-weight: 600; cursor: pointer; } -.btn-review-toggle.active { background: #1a1a1a; color: #fff; border-color: #1a1a1a; } -.editor-toolbar-hint { color: #999; font-size: 11px; } +.btn-review-toggle.active { background: var(--c-ink); color: var(--c-white); border-color: var(--c-ink); } +.editor-toolbar-hint { color: var(--c-gray-500); font-size: var(--text-xs); } .editor-wrapper { flex: 1; overflow-y: auto; @@ -692,13 +692,13 @@ display: flex; flex-direction: column; overflow: hidden; } -.editor-split-raw { border-right: 1px solid #e5e5e5; } -.editor-split-preview { background: #fff; overflow-y: auto; } +.editor-split-raw { border-right: 1px solid var(--c-gray-200); } +.editor-split-preview { background: var(--c-white); overflow-y: auto; } .editor-split-preview .markdown-preview { padding: 24px 32px; } /* ── Markdown preview (Phase 2 render pane) ──────────────────────────── */ .markdown-preview { - font-size: 15px; line-height: 1.75; color: #1a1a1a; + font-size: var(--text-lg); line-height: 1.75; color: var(--c-ink); max-width: 720px; margin: 0 auto; outline: none; } @@ -706,28 +706,28 @@ flex: 1; overflow-y: auto; padding: 32px 48px; } -.markdown-preview h1 { font-size: 22px; font-weight: 700; margin: 24px 0 12px; } -.markdown-preview h2 { font-size: 17px; font-weight: 600; margin: 20px 0 8px; } -.markdown-preview h3 { font-size: 15px; font-weight: 600; margin: 16px 0 6px; } +.markdown-preview h1 { font-size: var(--text-2xl); font-weight: 700; margin: 24px 0 12px; } +.markdown-preview h2 { font-size: var(--text-xl); font-weight: 600; margin: 20px 0 8px; } +.markdown-preview h3 { font-size: var(--text-lg); font-weight: 600; margin: 16px 0 6px; } .markdown-preview p { margin: 0 0 12px; } .markdown-preview ul, .markdown-preview ol { padding-left: 24px; } .markdown-preview code { - background: #f0f0ee; padding: 1px 5px; border-radius: 3px; font-size: 13px; + background: var(--c-gray-150); padding: 1px 5px; border-radius: var(--radius-sm); font-size: var(--text-base); } .markdown-preview pre { - background: #f6f6f4; padding: 12px 16px; border-radius: 6px; - overflow-x: auto; font-size: 13px; line-height: 1.5; + background: var(--c-gray-100); padding: 12px 16px; border-radius: var(--radius-md); + overflow-x: auto; font-size: var(--text-base); line-height: 1.5; } .markdown-preview pre code { background: none; padding: 0; } .markdown-preview blockquote { margin: 0 0 12px; padding: 4px 14px; - border-left: 3px solid #d4d4d4; color: #555; + border-left: 3px solid var(--c-gray-300); color: var(--c-gray-500); } .markdown-preview table { border-collapse: collapse; margin: 0 0 12px; } .markdown-preview th, .markdown-preview td { - border: 1px solid #e5e5e5; padding: 6px 10px; + border: 1px solid var(--c-gray-200); padding: 6px 10px; } -.markdown-preview th { background: #fafafa; font-weight: 600; } +.markdown-preview th { background: var(--c-gray-50); font-weight: 600; } /* Mermaid placeholder shown until the lazy-loaded module resolves. The .mermaid-block container is preserved so future authoring tools @@ -738,15 +738,15 @@ } .markdown-preview .mermaid-block svg { max-width: 100%; height: auto; } .markdown-preview .mermaid-placeholder { - background: #f6f6f4; color: #777; - padding: 12px 16px; border-radius: 6px; - font-size: 12px; line-height: 1.5; + background: var(--c-gray-100); color: var(--c-gray-500); + padding: 12px 16px; border-radius: var(--radius-md); + font-size: var(--text-sm); line-height: 1.5; text-align: left; white-space: pre-wrap; } .markdown-preview .mermaid-error { - background: #fee2e2; color: #991b1b; - padding: 10px 14px; border-radius: 6px; - font-size: 12px; line-height: 1.5; + background: var(--c-danger-bg); color: var(--c-danger-fg); + padding: 10px 14px; border-radius: var(--radius-md); + font-size: var(--text-sm); line-height: 1.5; text-align: left; white-space: pre-wrap; } @@ -764,29 +764,29 @@ toolbar toggle. Hovering surfaces a ChangeTooltip with the source message and reason. */ .markdown-preview .tracked-delete { - background: #fee2e2; color: #991b1b; text-decoration: line-through; - border-radius: 2px; padding: 1px 2px; cursor: pointer; + background: var(--c-danger-bg); color: var(--c-danger-fg); text-decoration: line-through; + border-radius: var(--radius-xs); padding: 1px 2px; cursor: pointer; margin-right: 2px; } .markdown-preview .tracked-insert { - background: #dcfce7; color: #166534; - border-radius: 2px; padding: 1px 2px; cursor: pointer; + background: var(--c-success-bg); color: var(--c-success-fg); + border-radius: var(--radius-xs); padding: 1px 2px; cursor: pointer; } .cm-source-editor .cm-editor { flex: 1; min-height: 0; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; - font-size: 13px; line-height: 1.6; - background: #fff; + font-size: var(--text-base); line-height: 1.6; + background: var(--c-white); } .cm-source-editor .cm-editor.cm-focused { outline: none; } .cm-source-editor .cm-scroller { padding: 24px 0; } .cm-source-editor .cm-content { padding: 0 32px; max-width: 880px; } .cm-source-editor .cm-gutters { - background: #fafafa; border-right: 1px solid #f0f0ee; color: #b0b0b0; + background: var(--c-gray-50); border-right: 1px solid var(--c-gray-150); color: var(--c-gray-400); } -.cm-source-editor .cm-activeLineGutter { background: #f3f4f6; color: #555; } -.cm-source-editor .cm-activeLine { background: #fafbfc; } +.cm-source-editor .cm-activeLineGutter { background: var(--c-gray-100); color: var(--c-gray-500); } +.cm-source-editor .cm-activeLine { background: var(--c-gray-50); } /* §8.10 paragraph-margin marker (Phase 4) — gutter accent on lines that differ from the open-session baseline (last server-confirmed @@ -806,55 +806,55 @@ } .readonly-bar { - border-top: 1px solid #e5e5e5; + border-top: 1px solid var(--c-gray-200); padding: 10px 16px; text-align: center; - font-size: 13px; color: #888; background: #fafafa; + font-size: var(--text-base); color: var(--c-gray-500); background: var(--c-gray-50); } -.readonly-bar a { color: #1a1a1a; font-weight: 600; } +.readonly-bar a { color: var(--c-ink); font-weight: 600; } /* ── Prompt bar ──────────────────────────────────────────────────────── */ .prompt-bar { - border-top: 1px solid #e5e5e5; - background: #fff; + border-top: 1px solid var(--c-gray-200); + background: var(--c-white); padding: 12px 48px; flex-shrink: 0; } .selection-badge { - font-size: 12px; color: #5b5bd6; + font-size: var(--text-sm); color: var(--c-accent); margin-bottom: 8px; display: flex; align-items: center; gap: 6px; } -.selection-icon { font-size: 10px; } +.selection-icon { font-size: var(--text-2xs); } .prompt-row { display: flex; gap: 10px; align-items: flex-end; max-width: 720px; margin: 0 auto; } .prompt-input { - flex: 1; border: 1px solid #e5e5e5; border-radius: 8px; - padding: 9px 13px; font-size: 14px; font-family: inherit; + flex: 1; border: 1px solid var(--c-gray-200); border-radius: var(--radius-lg); + padding: 9px 13px; font-size: var(--text-md); font-family: inherit; resize: none; line-height: 1.5; outline: none; min-height: 40px; max-height: 120px; } -.prompt-input:focus { border-color: #1a1a1a; } +.prompt-input:focus { border-color: var(--c-ink); } .prompt-submit { - background: #1a1a1a; color: #fff; border: none; - border-radius: 8px; padding: 9px 16px; - font-size: 13px; font-weight: 600; cursor: pointer; + background: var(--c-ink); color: var(--c-white); border: none; + border-radius: var(--radius-lg); padding: 9px 16px; + font-size: var(--text-base); font-weight: 600; cursor: pointer; height: 40px; } -.prompt-submit:disabled { background: #ccc; cursor: default; } +.prompt-submit:disabled { background: var(--c-gray-300); cursor: default; } /* ── Model picker ──────────────────────────────────────────────────── */ .model-picker { display: flex; gap: 4px; padding: 0 4px; flex-shrink: 0; } .model-pill { display: flex; align-items: center; gap: 5px; - padding: 4px 10px; border-radius: 20px; - font-size: 12px; font-weight: 600; - border: 1px solid #e5e5e5; background: none; color: #666; + padding: 4px 10px; border-radius: var(--radius-pill); + font-size: var(--text-sm); font-weight: 600; + border: 1px solid var(--c-gray-200); background: none; color: var(--c-gray-500); cursor: pointer; } -.model-pill:hover { border-color: #aaa; color: #333; } +.model-pill:hover { border-color: var(--c-gray-400); color: var(--c-gray-700); } .model-pill.active { font-weight: 700; } .model-dot { width: 7px; height: 7px; border-radius: 50%; } @@ -862,37 +862,37 @@ .selection-tooltip { position: fixed; z-index: 100; - background: #fff; border: 1px solid #e5e5e5; - border-radius: 10px; + background: var(--c-white); border: 1px solid var(--c-gray-200); + border-radius: var(--radius-xl); box-shadow: 0 4px 20px rgba(0,0,0,0.12); padding: 8px 10px; width: max-content; min-width: 320px; max-width: 480px; display: flex; flex-direction: column; gap: 6px; } .selection-tooltip-quote { - font-size: 11px; color: #888; font-style: italic; + font-size: var(--text-xs); color: var(--c-gray-500); font-style: italic; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .selection-tooltip-tabs { display: flex; gap: 4px; } .selection-tooltip-tab { background: none; border: 1px solid transparent; - font-size: 12px; padding: 3px 10px; border-radius: 6px; - cursor: pointer; color: #666; + font-size: var(--text-sm); padding: 3px 10px; border-radius: var(--radius-md); + cursor: pointer; color: var(--c-gray-500); } -.selection-tooltip-tab.active { background: #1a1a1a; color: #fff; } +.selection-tooltip-tab.active { background: var(--c-ink); color: var(--c-white); } .selection-tooltip-input-row { display: flex; gap: 6px; align-items: center; } .selection-tooltip-input { - flex: 1; border: 1px solid #e5e5e5; border-radius: 6px; - padding: 6px 10px; font-size: 13px; font-family: inherit; outline: none; - background: #f9f9f9; + flex: 1; border: 1px solid var(--c-gray-200); border-radius: var(--radius-md); + padding: 6px 10px; font-size: var(--text-base); font-family: inherit; outline: none; + background: var(--c-gray-50); } -.selection-tooltip-input:focus { border-color: #1a1a1a; background: #fff; } +.selection-tooltip-input:focus { border-color: var(--c-ink); background: var(--c-white); } .selection-tooltip-btn { - background: #1a1a1a; color: #fff; - border: none; border-radius: 6px; - padding: 6px 12px; font-size: 13px; font-weight: 600; cursor: pointer; + background: var(--c-ink); color: var(--c-white); + border: none; border-radius: var(--radius-md); + padding: 6px 12px; font-size: var(--text-base); font-weight: 600; cursor: pointer; } -.selection-tooltip-btn:disabled { background: #ccc; cursor: default; } +.selection-tooltip-btn:disabled { background: var(--c-gray-300); cursor: default; } /* ── Right panel (chat + change panel) ───────────────────────────────── */ @@ -903,11 +903,11 @@ below restores the inline three-column layout. */ .right-panel { position: fixed; - top: 48px; right: 0; bottom: 0; + top: var(--header-height); right: 0; bottom: 0; width: min(420px, 92vw); - border-left: 1px solid #e5e5e5; + border-left: 1px solid var(--c-gray-200); display: flex; flex-direction: column; - overflow: hidden; background: #fff; + overflow: hidden; background: var(--c-white); transform: translateX(100%); transition: transform 150ms ease; z-index: 30; @@ -916,7 +916,7 @@ .right-panel.drawer-open { transform: translateX(0); } .right-panel-backdrop { - position: fixed; inset: 48px 0 0 0; + position: fixed; inset: var(--header-height) 0 0 0; background: rgba(0,0,0,0.2); z-index: 29; opacity: 0; @@ -933,16 +933,16 @@ .btn-chat-drawer-toggle { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; - background: #fff; color: #1a1a1a; - border: 1px solid #d4d4d4; border-radius: 5px; - padding: 4px 10px; font-size: 12px; font-weight: 600; cursor: pointer; + background: var(--c-white); color: var(--c-ink); + border: 1px solid var(--c-gray-300); border-radius: var(--radius-md); + padding: 4px 10px; font-size: var(--text-sm); font-weight: 600; cursor: pointer; } -.btn-chat-drawer-toggle.active { background: #1a1a1a; color: #fff; border-color: #1a1a1a; } +.btn-chat-drawer-toggle.active { background: var(--c-ink); color: var(--c-white); border-color: var(--c-ink); } .btn-chat-drawer-toggle .badge { - font-size: 10px; padding: 1px 6px; - background: #b45309; color: #fff; border-radius: 10px; + font-size: var(--text-2xs); padding: 1px 6px; + background: var(--c-warning-accent); color: var(--c-white); border-radius: var(--radius-xl); } -.btn-chat-drawer-toggle.active .badge { background: #fff; color: #1a1a1a; } +.btn-chat-drawer-toggle.active .badge { background: var(--c-white); color: var(--c-ink); } /* When the drawer is open at narrow widths, scoot the editor toolbar's content left so the Chat toggle button is not hidden under the drawer. @@ -977,25 +977,25 @@ } .chat-header { padding: 10px 14px; - border-bottom: 1px solid #f0f0ee; - background: #fafafa; + border-bottom: 1px solid var(--c-gray-150); + background: var(--c-gray-50); display: flex; flex-direction: column; gap: 4px; } .chat-header-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; } -.chat-header-title { font-size: 12px; color: #555; } +.chat-header-title { font-size: var(--text-sm); color: var(--c-gray-500); } .chat-fork-link { background: none; border: none; padding: 0; - font-size: 11px; color: #5b5bd6; cursor: pointer; + font-size: var(--text-xs); color: var(--c-accent); cursor: pointer; } .chat-thread-disclosure { - font-size: 11px; color: #888; + font-size: var(--text-xs); color: var(--c-gray-500); display: flex; gap: 4px; align-items: center; } -.chat-thread-flag-count { color: #b45309; } +.chat-thread-flag-count { color: var(--c-warning-accent); } .chat-filter-clear { margin-left: auto; background: none; border: none; cursor: pointer; - font-size: 11px; color: #5b5bd6; + font-size: var(--text-xs); color: var(--c-accent); } .chat-messages { flex: 1; overflow-y: auto; @@ -1007,7 +1007,7 @@ align-items: center; justify-content: center; text-align: center; padding: 24px; } -.chat-empty p { font-size: 13px; color: #999; line-height: 1.6; max-width: 240px; } +.chat-empty p { font-size: var(--text-base); color: var(--c-gray-500); line-height: 1.6; max-width: 240px; } .chat-message { display: flex; flex-direction: column; gap: 3px; } .chat-message.user { align-items: flex-end; } @@ -1018,37 +1018,37 @@ .chat-bubble { max-width: 92%; - padding: 8px 11px; border-radius: 14px; - font-size: 13px; line-height: 1.55; + padding: 8px 11px; border-radius: var(--radius-xl); + font-size: var(--text-base); line-height: 1.55; white-space: pre-wrap; word-break: break-word; } .chat-message.user .chat-bubble { - background: #1a1a1a; color: #fff; border-bottom-right-radius: 4px; + background: var(--c-ink); color: var(--c-white); border-bottom-right-radius: 4px; } .chat-message.assistant .chat-bubble { - background: #f3f4f6; color: #1a1a1a; border-bottom-left-radius: 4px; + background: var(--c-gray-100); color: var(--c-ink); border-bottom-left-radius: 4px; } .chat-message.streaming .chat-bubble { opacity: 0.85; } -.chat-thinking { color: #999; font-style: italic; } +.chat-thinking { color: var(--c-gray-500); font-style: italic; } .chat-cursor { display: inline-block; width: 2px; height: 12px; - background: #7c3aed; margin-left: 2px; vertical-align: middle; + background: var(--c-violet); margin-left: 2px; vertical-align: middle; animation: blink 0.75s step-end infinite; } @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } } .chat-quote { - font-size: 11px; color: #888; font-style: italic; - border-left: 2px solid #d1d5db; padding-left: 7px; margin-bottom: 3px; + font-size: var(--text-xs); color: var(--c-gray-500); font-style: italic; + border-left: 2px solid var(--c-gray-300); padding-left: 7px; margin-bottom: 3px; max-width: 92%; align-self: flex-end; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .chat-anchor-preview { - font-size: 10px; color: #888; font-style: italic; + font-size: var(--text-2xs); color: var(--c-gray-500); font-style: italic; } .chat-model-label { - font-size: 11px; font-weight: 700; + font-size: var(--text-xs); font-weight: 700; display: flex; align-items: center; gap: 4px; padding-left: 2px; } .chat-model-dot { width: 6px; height: 6px; border-radius: 50%; } @@ -1056,73 +1056,73 @@ .chat-change-hint { align-self: flex-start; background: none; border: none; padding: 0; - font-size: 11px; color: #7c3aed; font-weight: 600; + font-size: var(--text-xs); color: var(--c-violet); font-weight: 600; cursor: pointer; } -.chat-change-hint.discuss { color: #b45309; } +.chat-change-hint.discuss { color: var(--c-warning-accent); } .chat-change-hint-cta { background: none; border: none; padding: 0; - color: #5b5bd6; font-weight: 600; cursor: pointer; text-decoration: underline; + color: var(--c-accent); font-weight: 600; cursor: pointer; text-decoration: underline; } .chat-system-bubble { - font-size: 11px; color: #888; font-style: italic; - border-top: 1px dashed #e5e5e5; padding-top: 8px; + font-size: var(--text-xs); color: var(--c-gray-500); font-style: italic; + border-top: 1px dashed var(--c-gray-200); padding-top: 8px; } .chat-flag-row { display: flex; gap: 8px; padding: 8px 10px; - background: #fff7ed; border: 1px solid #fdba74; border-radius: 8px; + background: var(--c-warning-bg-soft); border: 1px solid #fdba74; border-radius: var(--radius-lg); } -.chat-flag-icon { color: #c2410c; font-size: 14px; } +.chat-flag-icon { color: #c2410c; font-size: var(--text-md); } .chat-flag-content { flex: 1; } -.chat-flag-author { font-size: 11px; font-weight: 700; color: #9a3412; } -.chat-flag-text { font-size: 13px; color: #1a1a1a; margin-top: 2px; } +.chat-flag-author { font-size: var(--text-xs); font-weight: 700; color: #9a3412; } +.chat-flag-text { font-size: var(--text-base); color: var(--c-ink); margin-top: 2px; } .chat-flag-resolve { margin-top: 6px; background: none; border: 1px solid #fdba74; - border-radius: 5px; padding: 2px 8px; - font-size: 11px; color: #c2410c; cursor: pointer; + border-radius: var(--radius-md); padding: 2px 8px; + font-size: var(--text-xs); color: #c2410c; cursor: pointer; } /* ── Change panel ──────────────────────────────────────────────── */ .change-panel { - border-top: 1px solid #e5e5e5; + border-top: 1px solid var(--c-gray-200); display: flex; flex-direction: column; overflow: hidden; flex-shrink: 0; max-height: 50%; } .change-panel-header { padding: 12px 14px; - font-size: 13px; font-weight: 600; - border-bottom: 1px solid #f0f0ee; + font-size: var(--text-base); font-weight: 600; + border-bottom: 1px solid var(--c-gray-150); display: flex; align-items: center; gap: 8px; } .badge { - background: #b45309; color: #fff; - font-size: 11px; padding: 2px 7px; border-radius: 10px; + background: var(--c-warning-accent); color: var(--c-white); + font-size: var(--text-xs); padding: 2px 7px; border-radius: var(--radius-xl); } .change-list { flex: 1; overflow-y: auto; padding: 8px; } .change-group-label { - font-size: 10px; font-weight: 700; + font-size: var(--text-2xs); font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; - color: #aaa; padding: 8px 6px 4px; + color: var(--c-gray-400); padding: 8px 6px 4px; } -.change-group-label.muted { color: #ccc; } +.change-group-label.muted { color: var(--c-gray-300); } .change-item { - border-radius: 8px; + border-radius: var(--radius-lg); padding: 10px; margin-bottom: 8px; - border: 1px solid #e5e5e5; - font-size: 13px; + border: 1px solid var(--c-gray-200); + font-size: var(--text-base); } -.change-item.type-claude { border-left: 3px solid #5b5bd6; } -.change-item.type-manual { border-left: 3px solid #888; } +.change-item.type-claude { border-left: 3px solid var(--c-accent); } +.change-item.type-manual { border-left: 3px solid var(--c-gray-500); } .change-item.state-accepted { opacity: 0.5; } .change-item.state-declined { opacity: 0.4; } -.change-item.stale { border-color: #fbbf24; background: #fffbeb; } +.change-item.stale { border-color: #fbbf24; background: var(--c-warning-bg-soft); } .change-item.focused { animation: change-focus-flash 1.8s ease forwards; } @@ -1135,23 +1135,23 @@ display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; } -.change-author { font-weight: 600; font-size: 12px; } +.change-author { font-weight: 600; font-size: var(--text-sm); } .change-state-badge { - font-size: 10px; padding: 2px 7px; border-radius: 10px; + font-size: var(--text-2xs); padding: 2px 7px; border-radius: var(--radius-xl); font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; } -.change-state-badge.pending { background: #fef3c7; color: #92400e; } -.change-state-badge.accepted { background: #dcfce7; color: #166534; } -.change-state-badge.declined { background: #f1f5f9; color: #94a3b8; } -.change-state-badge.stale { background: #fef3c7; color: #92400e; } -.change-label { color: #444; margin-bottom: 6px; line-height: 1.4; } +.change-state-badge.pending { background: var(--c-warning-bg); color: var(--c-warning-fg); } +.change-state-badge.accepted { background: var(--c-success-bg); color: var(--c-success-fg); } +.change-state-badge.declined { background: #f1f5f9; color: var(--c-gray-400); } +.change-state-badge.stale { background: var(--c-warning-bg); color: var(--c-warning-fg); } +.change-label { color: var(--c-gray-600); margin-bottom: 6px; line-height: 1.4; } .change-stale-banner { - font-size: 11px; color: #92400e; - background: #fef3c7; border-radius: 4px; + font-size: var(--text-xs); color: var(--c-warning-fg); + background: var(--c-warning-bg); border-radius: var(--radius-sm); padding: 4px 8px; margin-bottom: 6px; } .change-manual-status { - font-size: 11px; color: #888; + font-size: var(--text-xs); color: var(--c-gray-500); display: flex; align-items: center; justify-content: space-between; margin-top: 6px; } @@ -1168,121 +1168,121 @@ display: flex; flex-direction: column; gap: 6px; } .change-manual-diff-block { - font-size: 12px; line-height: 1.6; - background: #f9fafb; border-radius: 4px; - padding: 6px 8px; border: 1px solid #e5e5e5; + font-size: var(--text-sm); line-height: 1.6; + background: var(--c-gray-50); border-radius: var(--radius-sm); + padding: 6px 8px; border: 1px solid var(--c-gray-200); white-space: pre-wrap; word-break: break-word; } .change-manual-diff .manual-diff-insert { - background: #dcfce7; color: #166534; - border-radius: 2px; padding: 1px 2px; + background: var(--c-success-bg); color: var(--c-success-fg); + border-radius: var(--radius-xs); padding: 1px 2px; } .change-manual-diff .manual-diff-delete { - background: #fee2e2; color: #991b1b; + background: var(--c-danger-bg); color: var(--c-danger-fg); text-decoration: line-through; - border-radius: 2px; padding: 1px 2px; + border-radius: var(--radius-xs); padding: 1px 2px; } .btn-save-now { - background: none; border: 1px solid #d4d4d4; - border-radius: 4px; padding: 2px 8px; - font-size: 11px; font-weight: 600; cursor: pointer; + background: none; border: 1px solid var(--c-gray-300); + border-radius: var(--radius-sm); padding: 2px 8px; + font-size: var(--text-xs); font-weight: 600; cursor: pointer; } .change-source-link { background: none; border: none; padding: 0; - font-size: 11px; color: #5b5bd6; cursor: pointer; + font-size: var(--text-xs); color: var(--c-accent); cursor: pointer; display: block; margin-top: 4px; } .change-actions { display: flex; gap: 6px; margin-top: 8px; flex-wrap: wrap; } .btn-accept { - background: #166534; color: #fff; - border: none; border-radius: 5px; - padding: 5px 10px; font-size: 12px; font-weight: 600; cursor: pointer; + background: var(--c-success-fg); color: var(--c-white); + border: none; border-radius: var(--radius-md); + padding: 5px 10px; font-size: var(--text-sm); font-weight: 600; cursor: pointer; } .btn-edit { - background: none; border: 1px solid #c4b5fd; color: #7c3aed; - border-radius: 5px; padding: 5px 10px; font-size: 12px; font-weight: 600; cursor: pointer; + background: none; border: 1px solid #c4b5fd; color: var(--c-violet); + border-radius: var(--radius-md); padding: 5px 10px; font-size: var(--text-sm); font-weight: 600; cursor: pointer; } .btn-decline { - background: none; border: 1px solid #e5e5e5; - border-radius: 5px; padding: 5px 10px; font-size: 12px; cursor: pointer; + background: none; border: 1px solid var(--c-gray-200); + border-radius: var(--radius-md); padding: 5px 10px; font-size: var(--text-sm); cursor: pointer; } .btn-reask { - background: none; border: 1px solid #fbbf24; color: #92400e; - border-radius: 5px; padding: 5px 10px; font-size: 12px; font-weight: 600; cursor: pointer; + background: none; border: 1px solid #fbbf24; color: var(--c-warning-fg); + border-radius: var(--radius-md); padding: 5px 10px; font-size: var(--text-sm); font-weight: 600; cursor: pointer; } .diff-edit-textarea { - width: 100%; font-size: 12px; font-family: inherit; + width: 100%; font-size: var(--text-sm); font-family: inherit; line-height: 1.5; border: 1px solid #c4b5fd; - border-radius: 4px; padding: 6px; resize: vertical; + border-radius: var(--radius-sm); padding: 6px; resize: vertical; } .inline-diff { - font-size: 12px; line-height: 1.7; - background: #f9fafb; border-radius: 4px; + font-size: var(--text-sm); line-height: 1.7; + background: var(--c-gray-50); border-radius: var(--radius-sm); padding: 8px 10px; white-space: pre-wrap; word-break: break-word; - border: 1px solid #e5e5e5; + border: 1px solid var(--c-gray-200); } .diff-word-add { - background: #dcfce7; color: #166534; - border-radius: 2px; padding: 1px 1px; + background: var(--c-success-bg); color: var(--c-success-fg); + border-radius: var(--radius-xs); padding: 1px 1px; } .diff-word-remove { - background: #fee2e2; color: #991b1b; + background: var(--c-danger-bg); color: var(--c-danger-fg); text-decoration: line-through; - border-radius: 2px; padding: 1px 1px; + border-radius: var(--radius-xs); padding: 1px 1px; } -.text-fade { color: #aaa; } +.text-fade { color: var(--c-gray-400); } .expand-toggle { display: block; margin-top: 5px; background: none; border: none; padding: 0; - font-size: 11px; font-weight: 600; color: #7c3aed; + font-size: var(--text-xs); font-weight: 600; color: var(--c-violet); cursor: pointer; text-decoration: underline; } .change-stub { display: flex; align-items: center; gap: 6px; - font-size: 11px; color: #888; - padding: 4px 6px; border-bottom: 1px solid #f5f5f5; + font-size: var(--text-xs); color: var(--c-gray-500); + padding: 4px 6px; border-bottom: 1px solid var(--c-gray-100); } -.change-stub .stub-author { font-weight: 600; color: #555; } +.change-stub .stub-author { font-weight: 600; color: var(--c-gray-500); } .change-stub .stub-badge { - font-size: 9px; padding: 1px 5px; border-radius: 8px; + font-size: 9px; padding: 1px 5px; border-radius: var(--radius-lg); } -.change-stub .stub-badge.accepted { background: #dcfce7; color: #166534; } -.change-stub .stub-badge.declined { background: #f1f5f9; color: #94a3b8; } -.change-stub .stub-reason { flex: 1; color: #777; } +.change-stub .stub-badge.accepted { background: var(--c-success-bg); color: var(--c-success-fg); } +.change-stub .stub-badge.declined { background: #f1f5f9; color: var(--c-gray-400); } +.change-stub .stub-reason { flex: 1; color: var(--c-gray-500); } .change-stub .stub-source-link { background: none; border: none; padding: 0; - font-size: 11px; color: #5b5bd6; cursor: pointer; + font-size: var(--text-xs); color: var(--c-accent); cursor: pointer; } .contribution-cta { - border-top: 1px solid #e5e5e5; - background: #fafafa; + border-top: 1px solid var(--c-gray-200); + background: var(--c-gray-50); padding: 16px; text-align: center; } .contribution-cta-count { - font-size: 13px; font-weight: 600; color: #1a1a1a; + font-size: var(--text-base); font-weight: 600; color: var(--c-ink); } .contribution-cta-desc { - font-size: 12px; color: #666; margin: 6px 0 12px; + font-size: var(--text-sm); color: var(--c-gray-500); margin: 6px 0 12px; } .btn-start-contribution { - background: #1a1a1a; color: #fff; - border: none; border-radius: 6px; + background: var(--c-ink); color: var(--c-white); + border: none; border-radius: var(--radius-md); padding: 8px 14px; - font-size: 13px; font-weight: 600; cursor: pointer; + font-size: var(--text-base); font-weight: 600; cursor: pointer; } /* ── ChangeTooltip (shared between the Phase 3 preview-pane overlay and the §8.10 hover affordance) ─────────────────────────────────── */ .diff-tooltip { - background: #fff; border: 1px solid #e5e5e5; - border-radius: 8px; padding: 10px 12px; + background: var(--c-white); border: 1px solid var(--c-gray-200); + border-radius: var(--radius-lg); padding: 10px 12px; box-shadow: 0 6px 24px rgba(0,0,0,0.12); - max-width: 320px; font-size: 12px; + max-width: 320px; font-size: var(--text-sm); z-index: 200; } .diff-tooltip-header { @@ -1290,92 +1290,92 @@ margin-bottom: 6px; } .diff-tooltip-badge { - font-size: 10px; padding: 2px 7px; border-radius: 8px; + font-size: var(--text-2xs); padding: 2px 7px; border-radius: var(--radius-lg); font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; } -.diff-tooltip-badge--manual { background: #f1f5f9; color: #475569; } -.diff-tooltip-badge--edited { background: #faf5ff; color: #7c3aed; } +.diff-tooltip-badge--manual { background: #f1f5f9; color: var(--c-gray-600); } +.diff-tooltip-badge--edited { background: #faf5ff; color: var(--c-violet); } .diff-tooltip-prompt { - border-top: 1px solid #f0f0ee; + border-top: 1px solid var(--c-gray-150); padding-top: 6px; - font-size: 11px; color: #444; + font-size: var(--text-xs); color: var(--c-gray-600); } .diff-tooltip-quote { - font-style: italic; color: #888; margin-bottom: 4px; + font-style: italic; color: var(--c-gray-500); margin-bottom: 4px; } .diff-tooltip-reason { - border-top: 1px solid #f0f0ee; + border-top: 1px solid var(--c-gray-150); padding-top: 6px; margin-top: 6px; - color: #555; + color: var(--c-gray-500); } .diff-tooltip-reason-label { display: inline-block; font-size: 9px; font-weight: 700; - color: #888; text-transform: uppercase; letter-spacing: 0.04em; + color: var(--c-gray-500); text-transform: uppercase; letter-spacing: 0.04em; margin-right: 6px; } .diff-tooltip-no-context { - font-size: 11px; color: #aaa; font-style: italic; + font-size: var(--text-xs); color: var(--c-gray-400); font-style: italic; } /* ── Slice 3: the §10 PR flow surfaces ─────────────────────────────── */ .pr-modal { max-width: 640px; } .pr-modal-warning { - background: #fef3c7; border: 1px solid #fbbf24; - padding: 10px 12px; border-radius: 6px; margin-bottom: 14px; - font-size: 12px; line-height: 1.5; + background: var(--c-warning-bg); border: 1px solid #fbbf24; + padding: 10px 12px; border-radius: var(--radius-md); margin-bottom: 14px; + font-size: var(--text-sm); line-height: 1.5; } .pr-modal-warning p { margin: 0 0 6px 0; } .modal-label { - display: block; font-size: 11px; font-weight: 600; - color: #555; margin: 10px 0 4px; text-transform: uppercase; + display: block; font-size: var(--text-xs); font-weight: 600; + color: var(--c-gray-500); margin: 10px 0 4px; text-transform: uppercase; letter-spacing: 0.04em; } .modal-input, .modal-textarea { - width: 100%; padding: 7px 10px; font-size: 13px; - border: 1px solid #d1d5db; border-radius: 4px; box-sizing: border-box; + width: 100%; padding: 7px 10px; font-size: var(--text-base); + border: 1px solid var(--c-gray-300); border-radius: var(--radius-sm); box-sizing: border-box; font-family: inherit; } .modal-textarea { resize: vertical; min-height: 100px; } -.btn-open-pr { background: #1a1a1a; color: #fff; border: none; - padding: 4px 10px; border-radius: 4px; font-size: 12px; cursor: pointer; } -.btn-open-pr:hover { background: #333; } +.btn-open-pr { background: var(--c-ink); color: var(--c-white); border: none; + padding: 4px 10px; border-radius: var(--radius-sm); font-size: var(--text-sm); cursor: pointer; } +.btn-open-pr:hover { background: var(--c-gray-700); } /* PR view header strip + two-column body */ .pr-view { display: flex; flex-direction: column; height: 100%; } .pr-header { display: grid; grid-template-columns: 1fr auto; gap: 16px; - padding: 14px 18px; border-bottom: 1px solid #e5e7eb; - background: #fafafa; + padding: 14px 18px; border-bottom: 1px solid var(--c-gray-200); + background: var(--c-gray-50); } .pr-header-left { min-width: 0; } -.pr-breadcrumb { font-size: 11px; color: #666; margin-bottom: 6px; } -.pr-breadcrumb a { color: #5b5bd6; text-decoration: none; } +.pr-breadcrumb { font-size: var(--text-xs); color: var(--c-gray-500); margin-bottom: 6px; } +.pr-breadcrumb a { color: var(--c-accent); text-decoration: none; } .pr-breadcrumb a:hover { text-decoration: underline; } -.pr-title { font-size: 18px; margin: 0 0 6px 0; } -.pr-description { font-size: 13px; color: #444; margin: 0 0 6px 0; line-height: 1.55; } +.pr-title { font-size: var(--text-xl); margin: 0 0 6px 0; } +.pr-description { font-size: var(--text-base); color: var(--c-gray-600); margin: 0 0 6px 0; line-height: 1.55; } .pr-header-edit { display: flex; flex-direction: column; gap: 8px; } .pr-header-right { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; - font-size: 12px; + font-size: var(--text-sm); } .pr-state-banner { - padding: 3px 10px; border-radius: 12px; - font-size: 11px; font-weight: 600; text-transform: uppercase; + padding: 3px 10px; border-radius: var(--radius-xl); + font-size: var(--text-xs); font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; } -.pr-state-banner.open { background: #dcfce7; color: #14532d; } +.pr-state-banner.open { background: var(--c-success-bg); color: #14532d; } .pr-state-banner.merged { background: #ddd6fe; color: #4c1d95; } -.pr-state-banner.withdrawn { background: #fef3c7; color: #78350f; } -.pr-state-banner.closed { background: #e5e7eb; color: #374151; } -.pr-counts { display: flex; gap: 12px; font-size: 11px; color: #555; } -.pr-count-flags { color: #b45309; font-weight: 600; font-size: 13px; } -.pr-supersedes { font-size: 11px; color: #6b7280; } -.pr-supersedes a { color: #5b5bd6; text-decoration: none; } +.pr-state-banner.withdrawn { background: var(--c-warning-bg); color: #78350f; } +.pr-state-banner.closed { background: var(--c-gray-200); color: var(--c-gray-700); } +.pr-counts { display: flex; gap: 12px; font-size: var(--text-xs); color: var(--c-gray-500); } +.pr-count-flags { color: var(--c-warning-accent); font-weight: 600; font-size: var(--text-base); } +.pr-supersedes { font-size: var(--text-xs); color: var(--c-gray-500); } +.pr-supersedes a { color: var(--c-accent); text-decoration: none; } .pr-conflict-banner { - background: #fee2e2; border: 1px solid #fca5a5; - padding: 10px 12px; border-radius: 6px; - font-size: 12px; line-height: 1.5; max-width: 320px; + background: var(--c-danger-bg); border: 1px solid var(--c-danger-border); + padding: 10px 12px; border-radius: var(--radius-md); + font-size: var(--text-sm); line-height: 1.5; max-width: 320px; } .pr-conflict-banner p { margin: 0 0 8px 0; } .pr-actions { display: flex; gap: 8px; } @@ -1384,204 +1384,204 @@ .diff-mode-toolbar { display: flex; gap: 12px; align-items: center; - padding: 6px 12px; border-bottom: 1px solid #f0f0ee; - font-size: 12px; + padding: 6px 12px; border-bottom: 1px solid var(--c-gray-150); + font-size: var(--text-sm); } .diff-mode-toolbar .btn-link.active { - font-weight: 600; color: #1a1a1a; + font-weight: 600; color: var(--c-ink); } .pr-diff-accent { margin-left: auto; - font-size: 11px; color: #5b5bd6; font-weight: 600; + font-size: var(--text-xs); color: var(--c-accent); font-weight: 600; } -.diff-pane { flex: 1; overflow: auto; font-family: 'SF Mono', Monaco, monospace; font-size: 12px; } -.diff-pane.diff-split { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: #e5e7eb; } -.diff-col { background: #fff; overflow: auto; } +.diff-pane { flex: 1; overflow: auto; font-family: 'SF Mono', Monaco, monospace; font-size: var(--text-sm); } +.diff-pane.diff-split { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: var(--c-gray-200); } +.diff-col { background: var(--c-white); overflow: auto; } .diff-col-header { - padding: 4px 10px; background: #f3f4f6; font-weight: 600; - font-size: 11px; color: #555; border-bottom: 1px solid #e5e7eb; + padding: 4px 10px; background: var(--c-gray-100); font-weight: 600; + font-size: var(--text-xs); color: var(--c-gray-500); border-bottom: 1px solid var(--c-gray-200); } .diff-row { display: flex; padding: 1px 8px; white-space: pre-wrap; word-break: break-word; line-height: 1.5; } -.diff-row.diff-equal { color: #374151; } -.diff-row.diff-del { background: #fee2e2; color: #7f1d1d; } -.diff-row.diff-add { background: #dcfce7; color: #14532d; } -.diff-row.diff-empty { background: #f9fafb; color: #d1d5db; } +.diff-row.diff-equal { color: var(--c-gray-700); } +.diff-row.diff-del { background: var(--c-danger-bg); color: #7f1d1d; } +.diff-row.diff-add { background: var(--c-success-bg); color: #14532d; } +.diff-row.diff-empty { background: var(--c-gray-50); color: var(--c-gray-300); } .diff-marker { width: 16px; opacity: 0.5; user-select: none; } .diff-text { flex: 1; } /* PR conversation — chat + review interleaved */ .pr-conversation { padding: 10px 12px; overflow-y: auto; } .pr-conv-disclosure { - display: flex; gap: 12px; font-size: 11px; color: #6b7280; - padding-bottom: 6px; border-bottom: 1px solid #f0f0ee; margin-bottom: 10px; + display: flex; gap: 12px; font-size: var(--text-xs); color: var(--c-gray-500); + padding-bottom: 6px; border-bottom: 1px solid var(--c-gray-150); margin-bottom: 10px; } -.thread-disclosure strong { color: #1a1a1a; } +.thread-disclosure strong { color: var(--c-ink); } .chat-feed { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 12px; } .chat-msg { display: flex; flex-direction: column; gap: 4px; - padding: 8px 10px; border-radius: 6px; background: #f9fafb; - font-size: 12px; line-height: 1.55; + padding: 8px 10px; border-radius: var(--radius-md); background: var(--c-gray-50); + font-size: var(--text-sm); line-height: 1.55; } -.chat-msg-review { background: #ede9fe; border-left: 3px solid #7c3aed; } -.chat-msg-flag { background: #fef3c7; border-left: 3px solid #d97706; } +.chat-msg-review { background: #ede9fe; border-left: 3px solid var(--c-violet); } +.chat-msg-flag { background: var(--c-warning-bg); border-left: 3px solid #d97706; } .chat-msg-new { box-shadow: 0 0 0 2px #c7d2fe; } -.chat-msg-header { display: flex; align-items: center; gap: 6px; font-size: 11px; color: #6b7280; } +.chat-msg-header { display: flex; align-items: center; gap: 6px; font-size: var(--text-xs); color: var(--c-gray-500); } .chat-msg-badge { - font-size: 9px; font-weight: 700; padding: 1px 5px; border-radius: 3px; + font-size: 9px; font-weight: 700; padding: 1px 5px; border-radius: var(--radius-sm); text-transform: uppercase; letter-spacing: 0.04em; } -.chat-msg-badge.review { background: #7c3aed; color: #fff; } -.chat-msg-badge.flag { background: #d97706; color: #fff; } -.chat-msg-author { font-weight: 600; color: #1a1a1a; } -.chat-msg-new-pip { color: #5b5bd6; } +.chat-msg-badge.review { background: var(--c-violet); color: var(--c-white); } +.chat-msg-badge.flag { background: #d97706; color: var(--c-white); } +.chat-msg-author { font-weight: 600; color: var(--c-ink); } +.chat-msg-new-pip { color: var(--c-accent); } .chat-msg-quote { - background: #fff; border-left: 2px solid #d1d5db; - padding: 4px 8px; font-size: 11px; color: #6b7280; + background: var(--c-white); border-left: 2px solid var(--c-gray-300); + padding: 4px 8px; font-size: var(--text-xs); color: var(--c-gray-500); margin: 0; white-space: pre-wrap; } .chat-msg-body { white-space: pre-wrap; } .pr-review-composer { - border-top: 1px solid #e5e7eb; padding: 10px 12px; - background: #fafafa; + border-top: 1px solid var(--c-gray-200); padding: 10px 12px; + background: var(--c-gray-50); } -.pr-review-quote { font-size: 11px; color: #6b7280; margin-bottom: 6px; } -.pr-review-quote pre { background: #fff; padding: 4px 8px; border-radius: 4px; margin: 4px 0 0 0; } +.pr-review-quote { font-size: var(--text-xs); color: var(--c-gray-500); margin-bottom: 6px; } +.pr-review-quote pre { background: var(--c-white); padding: 4px 8px; border-radius: var(--radius-sm); margin: 4px 0 0 0; } /* ── Slice 5: §13 graduation dialog ──────────────────────────────────── */ .modal-wide { width: min(720px, 92vw); } -.modal-intro { margin: 0 0 16px 0; font-size: 13px; color: #4b5563; line-height: 1.55; } +.modal-intro { margin: 0 0 16px 0; font-size: var(--text-base); color: var(--c-gray-600); line-height: 1.55; } .form-row { display: flex; flex-direction: column; gap: 4px; margin-bottom: 14px; } -.form-row label { font-weight: 600; font-size: 12px; color: #1a1a1a; } +.form-row label { font-weight: 600; font-size: var(--text-sm); color: var(--c-ink); } .form-row input, .form-row textarea { - font: inherit; padding: 6px 8px; border: 1px solid #d1d5db; border-radius: 4px; + font: inherit; padding: 6px 8px; border: 1px solid var(--c-gray-300); border-radius: var(--radius-sm); } -.field-help { font-size: 11px; color: #6b7280; margin: 2px 0 0 0; } -.field-error { font-size: 12px; color: #b91c1c; margin: 4px 0 0 0; } +.field-help { font-size: var(--text-xs); color: var(--c-gray-500); margin: 2px 0 0 0; } +.field-error { font-size: var(--text-sm); color: var(--c-danger-fg-strong); margin: 4px 0 0 0; } .owner-list { display: flex; flex-wrap: wrap; gap: 6px; min-height: 28px; padding: 4px 0; } -.owner-empty { font-size: 12px; color: #6b7280; font-style: italic; } +.owner-empty { font-size: var(--text-sm); color: var(--c-gray-500); font-style: italic; } .owner-chip { display: inline-flex; align-items: center; gap: 4px; - background: #eef2ff; color: #3730a3; padding: 2px 8px; border-radius: 99px; - font-size: 12px; + background: #eef2ff; color: #3730a3; padding: 2px 8px; border-radius: var(--radius-pill); + font-size: var(--text-sm); } .owner-chip-x { - background: none; border: none; cursor: pointer; color: #6b7280; - font-size: 14px; line-height: 1; padding: 0 2px; + background: none; border: none; cursor: pointer; color: var(--c-gray-500); + font-size: var(--text-md); line-height: 1; padding: 0 2px; } -.owner-chip-x:hover { color: #b91c1c; } +.owner-chip-x:hover { color: var(--c-danger-fg-strong); } .owner-picker { display: flex; gap: 6px; margin-top: 6px; } .owner-picker input { flex: 1; } -.precondition-block { margin-top: 12px; padding: 10px; background: #fef2f2; border-radius: 6px; border: 1px solid #fecaca; } +.precondition-block { margin-top: 12px; padding: 10px; background: var(--c-danger-bg); border-radius: var(--radius-md); border: 1px solid var(--c-danger-border); } .precondition-toggle { - background: none; border: none; cursor: pointer; color: #b91c1c; font-weight: 600; - font-size: 13px; padding: 0; + background: none; border: none; cursor: pointer; color: var(--c-danger-fg-strong); font-weight: 600; + font-size: var(--text-base); padding: 0; } .precondition-popover { margin-top: 8px; display: flex; flex-direction: column; gap: 8px; } .precondition-row { display: flex; justify-content: space-between; align-items: center; - background: #fff; padding: 8px 10px; border-radius: 4px; border: 1px solid #f3f4f6; + background: var(--c-white); padding: 8px 10px; border-radius: var(--radius-sm); border: 1px solid var(--c-gray-100); } -.precondition-row-meta { font-size: 11px; color: #6b7280; } -.precondition-row-actions a { color: #5b5bd6; } -.precondition-help { font-size: 11px; color: #6b7280; margin: 4px 0 0 0; font-style: italic; } +.precondition-row-meta { font-size: var(--text-xs); color: var(--c-gray-500); } +.precondition-row-actions a { color: var(--c-accent); } +.precondition-help { font-size: var(--text-xs); color: var(--c-gray-500); margin: 4px 0 0 0; font-style: italic; } .btn-graduate { margin-left: 6px; } .step-stack { display: flex; flex-direction: column; gap: 6px; margin: 12px 0; } .step-row { display: grid; grid-template-columns: 24px 1fr auto; gap: 10px; align-items: center; - padding: 8px 10px; border-radius: 6px; background: #f9fafb; border: 1px solid #f3f4f6; + padding: 8px 10px; border-radius: var(--radius-md); background: var(--c-gray-50); border: 1px solid var(--c-gray-100); } .step-row.step-running { background: #eff6ff; border-color: #bfdbfe; } .step-row.step-done { background: #f0fdf4; border-color: #bbf7d0; } -.step-row.step-failed { background: #fef2f2; border-color: #fecaca; } +.step-row.step-failed { background: var(--c-danger-bg); border-color: var(--c-danger-border); } .step-row.step-not-reached { opacity: 0.45; } .step-marker { display: inline-block; width: 16px; height: 16px; border-radius: 50%; - background: #d1d5db; + background: var(--c-gray-300); } -.step-marker-pending { background: #d1d5db; } +.step-marker-pending { background: var(--c-gray-300); } .step-marker-running { background: #3b82f6; animation: pulse 1s ease-in-out infinite; } .step-marker-done { background: #10b981; } .step-marker-failed { background: #ef4444; } -.step-marker-not-reached { background: #e5e7eb; } +.step-marker-not-reached { background: var(--c-gray-200); } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } } -.step-label { font-weight: 600; font-size: 13px; color: #1a1a1a; } -.step-detail { font-size: 11px; color: #6b7280; margin-top: 2px; } +.step-label { font-weight: 600; font-size: var(--text-base); color: var(--c-ink); } +.step-detail { font-size: var(--text-xs); color: var(--c-gray-500); margin-top: 2px; } .step-status-pill { - font-size: 10px; font-weight: 700; padding: 2px 6px; border-radius: 3px; + font-size: var(--text-2xs); font-weight: 700; padding: 2px 6px; border-radius: var(--radius-sm); text-transform: uppercase; letter-spacing: 0.04em; } -.pill-pending { background: #e5e7eb; color: #4b5563; } -.pill-running { background: #3b82f6; color: #fff; } -.pill-done { background: #10b981; color: #fff; } -.pill-failed { background: #ef4444; color: #fff; } -.pill-not-reached { background: #e5e7eb; color: #9ca3af; } +.pill-pending { background: var(--c-gray-200); color: var(--c-gray-600); } +.pill-running { background: #3b82f6; color: var(--c-white); } +.pill-done { background: #10b981; color: var(--c-white); } +.pill-failed { background: #ef4444; color: var(--c-white); } +.pill-not-reached { background: var(--c-gray-200); color: var(--c-gray-400); } .rollback-divider { - margin: 10px 0 6px 0; font-size: 11px; text-transform: uppercase; - letter-spacing: 0.06em; color: #b91c1c; font-weight: 700; + margin: 10px 0 6px 0; font-size: var(--text-xs); text-transform: uppercase; + letter-spacing: 0.06em; color: var(--c-danger-fg-strong); font-weight: 700; } .what-happened { - margin-top: 14px; padding: 12px; background: #fef2f2; - border: 1px solid #fecaca; border-radius: 6px; + margin-top: 14px; padding: 12px; background: var(--c-danger-bg); + border: 1px solid var(--c-danger-border); border-radius: var(--radius-md); } -.what-happened h3 { margin: 0 0 6px 0; font-size: 14px; color: #991b1b; } -.what-happened p { margin: 0 0 6px 0; font-size: 13px; color: #4b5563; line-height: 1.55; } +.what-happened h3 { margin: 0 0 6px 0; font-size: var(--text-md); color: var(--c-danger-fg); } +.what-happened p { margin: 0 0 6px 0; font-size: var(--text-base); color: var(--c-gray-600); line-height: 1.55; } .graduation-complete { margin-top: 14px; padding: 12px; background: #f0fdf4; - border: 1px solid #bbf7d0; border-radius: 6px; + border: 1px solid #bbf7d0; border-radius: var(--radius-md); } -.graduation-complete h3 { margin: 0 0 6px 0; font-size: 14px; color: #166534; } -.graduation-complete p { margin: 0; font-size: 13px; color: #14532d; line-height: 1.55; } +.graduation-complete h3 { margin: 0 0 6px 0; font-size: var(--text-md); color: var(--c-success-fg); } +.graduation-complete p { margin: 0; font-size: var(--text-base); color: #14532d; line-height: 1.55; } -.modal-progress-note { font-size: 12px; color: #6b7280; } +.modal-progress-note { font-size: var(--text-sm); color: var(--c-gray-500); } .modal-error { - padding: 8px 12px; background: #fef2f2; color: #991b1b; - border-top: 1px solid #fecaca; font-size: 12px; + padding: 8px 12px; background: var(--c-danger-bg); color: var(--c-danger-fg); + border-top: 1px solid var(--c-danger-border); font-size: var(--text-sm); } .rfc-error-banner { - padding: 8px 12px; background: #fef2f2; color: #991b1b; - border-bottom: 1px solid #fecaca; font-size: 12px; + padding: 8px 12px; background: var(--c-danger-bg); color: var(--c-danger-fg); + border-bottom: 1px solid var(--c-danger-border); font-size: var(--text-sm); } .branch-dropdown-section { - font-size: 10px; text-transform: uppercase; letter-spacing: 0.06em; - color: #6b7280; padding: 8px 10px 4px 10px; font-weight: 700; + font-size: var(--text-2xs); text-transform: uppercase; letter-spacing: 0.06em; + color: var(--c-gray-500); padding: 8px 10px 4px 10px; font-weight: 700; } .branch-dropdown-item.pre-graduation { - font-style: italic; color: #4b5563; + font-style: italic; color: var(--c-gray-600); } .branch-dropdown-item.pre-graduation .branch-meta { - font-size: 10px; color: #9ca3af; margin-left: auto; + font-size: var(--text-2xs); color: var(--c-gray-400); margin-left: auto; } /* ---- §15 / Slice 6: inbox, badge, toasts ---- */ .inbox-trigger { - position: relative; background: transparent; border: 1px solid #e5e7eb; - border-radius: 6px; padding: 4px 10px; cursor: pointer; font-size: 16px; + position: relative; background: transparent; border: 1px solid var(--c-gray-200); + border-radius: var(--radius-md); padding: 4px 10px; cursor: pointer; font-size: var(--text-lg); margin-right: 12px; } -.inbox-trigger:hover { background: #f9fafb; } +.inbox-trigger:hover { background: var(--c-gray-50); } .inbox-trigger .badge { position: absolute; top: -6px; right: -6px; - background: #dc2626; color: white; font-size: 10px; - border-radius: 999px; padding: 1px 5px; font-weight: 700; + background: #dc2626; color: white; font-size: var(--text-2xs); + border-radius: var(--radius-pill); padding: 1px 5px; font-weight: 700; min-width: 16px; text-align: center; } @@ -1591,22 +1591,22 @@ padding-top: 60px; z-index: 100; } .inbox-panel { - background: white; border: 1px solid #e5e7eb; border-radius: 8px; + background: white; border: 1px solid var(--c-gray-200); border-radius: var(--radius-lg); width: 720px; max-width: 90vw; max-height: 80vh; display: flex; flex-direction: column; box-shadow: 0 12px 32px rgba(0,0,0,0.18); } .inbox-header { display: flex; align-items: center; justify-content: space-between; - padding: 12px 16px; border-bottom: 1px solid #e5e7eb; + padding: 12px 16px; border-bottom: 1px solid var(--c-gray-200); } -.inbox-header h2 { margin: 0; font-size: 16px; } +.inbox-header h2 { margin: 0; font-size: var(--text-lg); } .inbox-filters { display: flex; gap: 8px; flex-wrap: wrap; - padding: 10px 16px; border-bottom: 1px solid #f3f4f6; align-items: center; + padding: 10px 16px; border-bottom: 1px solid var(--c-gray-100); align-items: center; } .inbox-filters .chip { - font-size: 12px; padding: 4px 8px; background: #f9fafb; - border: 1px solid #e5e7eb; border-radius: 999px; + font-size: var(--text-sm); padding: 4px 8px; background: var(--c-gray-50); + border: 1px solid var(--c-gray-200); border-radius: var(--radius-pill); display: inline-flex; align-items: center; gap: 4px; } .inbox-filters .chip input[type=checkbox] { margin-right: 2px; } @@ -1614,40 +1614,40 @@ .inbox-body { overflow-y: auto; flex: 1; } .inbox-list { list-style: none; margin: 0; padding: 0; } -.inbox-row { border-bottom: 1px solid #f3f4f6; } -.inbox-row.unread { background: #fffbeb; } +.inbox-row { border-bottom: 1px solid var(--c-gray-100); } +.inbox-row.unread { background: var(--c-warning-bg-soft); } .inbox-row-link { display: flex; align-items: center; gap: 10px; padding: 10px 16px; text-decoration: none; color: inherit; } -.inbox-row-link:hover { background: #f9fafb; } +.inbox-row-link:hover { background: var(--c-gray-50); } .inbox-cat { font-size: 9px; text-transform: uppercase; letter-spacing: 0.05em; - padding: 2px 6px; border-radius: 4px; font-weight: 700; + padding: 2px 6px; border-radius: var(--radius-sm); font-weight: 700; } -.inbox-cat.cat-personal-direct { background: #fef3c7; color: #92400e; } +.inbox-cat.cat-personal-direct { background: var(--c-warning-bg); color: var(--c-warning-fg); } .inbox-cat.cat-structural { background: #dbeafe; color: #1e40af; } -.inbox-cat.cat-churn { background: #f3f4f6; color: #4b5563; } -.inbox-summary { flex: 1; font-size: 13px; } +.inbox-cat.cat-churn { background: var(--c-gray-100); color: var(--c-gray-600); } +.inbox-summary { flex: 1; font-size: var(--text-base); } .inbox-bundle-count { - font-size: 11px; color: #6b7280; - background: #f3f4f6; padding: 1px 6px; border-radius: 999px; + font-size: var(--text-xs); color: var(--c-gray-500); + background: var(--c-gray-100); padding: 1px 6px; border-radius: var(--radius-pill); } -.inbox-when { font-size: 11px; color: #9ca3af; } +.inbox-when { font-size: var(--text-xs); color: var(--c-gray-400); } .toast-host { position: fixed; right: 16px; bottom: 16px; display: flex; flex-direction: column; gap: 8px; z-index: 200; } .toast { - padding: 10px 14px; background: white; border: 1px solid #e5e7eb; - border-left: 4px solid #6b7280; border-radius: 6px; - box-shadow: 0 4px 12px rgba(0,0,0,0.08); font-size: 13px; + padding: 10px 14px; background: white; border: 1px solid var(--c-gray-200); + border-left: 4px solid var(--c-gray-500); border-radius: var(--radius-md); + box-shadow: 0 4px 12px rgba(0,0,0,0.08); font-size: var(--text-base); max-width: 360px; cursor: pointer; } .toast.cat-personal-direct { border-left-color: #d97706; } .toast.cat-structural { border-left-color: #2563eb; } -.toast.cat-churn { border-left-color: #6b7280; } +.toast.cat-churn { border-left-color: var(--c-gray-500); } /* ── Slice 7: §14 chrome + /settings/notifications + /admin ──────────── */ @@ -1655,12 +1655,12 @@ Admin entrypoints. The header's job is to be invisible until the user reaches for it, so these read as quiet text links rather than buttons. */ .header-about, .header-settings, .header-admin { - color: #ddd; text-decoration: none; - font-size: 12px; letter-spacing: 0.02em; - padding: 4px 8px; border-radius: 4px; + color: var(--c-gray-300); text-decoration: none; + font-size: var(--text-sm); letter-spacing: 0.02em; + padding: 4px 8px; border-radius: var(--radius-sm); } .header-about:hover, .header-settings:hover, .header-admin:hover { - color: #fff; background: rgba(255,255,255,0.08); + color: var(--c-white); background: rgba(255,255,255,0.08); } .header-admin { color: #fbbf24; /* admin link sits a notch warmer to signal authority */ @@ -1670,7 +1670,7 @@ markdown styling; the header is a thin chrome strip. */ .chrome-pane { flex: 1; min-width: 0; overflow: auto; - padding: 0; background: #fff; + padding: 0; background: var(--c-white); } .philosophy-page { @@ -1680,50 +1680,50 @@ .philosophy-header { display: flex; align-items: center; gap: 12px; padding: 12px 0 18px; - border-bottom: 1px solid #f0f0ee; + border-bottom: 1px solid var(--c-gray-150); margin-bottom: 28px; } .philosophy-back { border: none; background: none; cursor: pointer; - color: #4b5563; font-size: 13px; - padding: 4px 8px; border-radius: 4px; + color: var(--c-gray-600); font-size: var(--text-base); + padding: 4px 8px; border-radius: var(--radius-sm); } -.philosophy-back:hover { background: #f3f4f6; color: #111; } +.philosophy-back:hover { background: var(--c-gray-100); color: var(--c-gray-900); } .philosophy-title { - font-size: 13px; color: #6b7280; + font-size: var(--text-base); color: var(--c-gray-500); text-transform: uppercase; letter-spacing: 0.08em; } .philosophy-signin { margin-left: auto; - font-size: 13px; color: #4b5563; text-decoration: none; + font-size: var(--text-base); color: var(--c-gray-600); text-decoration: none; } -.philosophy-signin:hover { color: #111; text-decoration: underline; } +.philosophy-signin:hover { color: var(--c-gray-900); text-decoration: underline; } .philosophy-body h1 { - font-size: 28px; font-weight: 700; margin: 0 0 24px; + font-size: var(--text-3xl); font-weight: 700; margin: 0 0 24px; letter-spacing: -0.01em; } .philosophy-body h2 { - font-size: 19px; font-weight: 600; margin: 36px 0 12px; - color: #111; + font-size: var(--text-xl); font-weight: 600; margin: 36px 0 12px; + color: var(--c-gray-900); } .philosophy-body h3 { - font-size: 15px; font-weight: 600; margin: 24px 0 10px; + font-size: var(--text-lg); font-weight: 600; margin: 24px 0 10px; } .philosophy-body p { - margin: 0 0 16px; line-height: 1.65; font-size: 15px; color: #1f2937; + margin: 0 0 16px; line-height: 1.65; font-size: var(--text-lg); color: var(--c-gray-800); } -.philosophy-body em { color: #4b5563; font-style: italic; } -.philosophy-body strong { color: #111; } +.philosophy-body em { color: var(--c-gray-600); font-style: italic; } +.philosophy-body strong { color: var(--c-gray-900); } .philosophy-body ul, .philosophy-body ol { margin: 0 0 20px; padding-left: 24px; } .philosophy-body li { margin-bottom: 8px; line-height: 1.6; } .philosophy-body hr { - border: none; border-top: 1px solid #e5e7eb; margin: 32px 0; + border: none; border-top: 1px solid var(--c-gray-200); margin: 32px 0; } .philosophy-body code { - background: #f3f4f6; padding: 1px 5px; border-radius: 3px; + background: var(--c-gray-100); padding: 1px 5px; border-radius: var(--radius-sm); font-size: 0.92em; } @@ -1738,13 +1738,13 @@ list-style: none; padding: 0; margin: 48px 0 0; text-align: left; display: flex; flex-direction: column; gap: 18px; - border-top: 1px solid #e5e7eb; padding-top: 32px; + border-top: 1px solid var(--c-gray-200); padding-top: 32px; max-width: 540px; } .landing-deck li { - font-size: 14px; line-height: 1.6; color: #374151; + font-size: var(--text-md); line-height: 1.6; color: var(--c-gray-700); } -.landing-deck strong { color: #111; } +.landing-deck strong { color: var(--c-gray-900); } /* Attribution line below the deck — names Wiggleverse RFC as the underlying software, so a reader can tell this instance (OHM, run @@ -1752,11 +1752,11 @@ .landing-attribution { max-width: 540px; margin: 32px 0 0; padding-top: 24px; - border-top: 1px solid #f0f0ee; - font-size: 12px; line-height: 1.6; color: #888; + border-top: 1px solid var(--c-gray-150); + font-size: var(--text-sm); line-height: 1.6; color: var(--c-gray-500); text-align: center; } -.landing-attribution strong { color: #555; font-weight: 600; } +.landing-attribution strong { color: var(--c-gray-500); font-weight: 600; } /* /settings/notifications */ .settings-page { @@ -1764,97 +1764,97 @@ padding: 24px 32px 64px; } .settings-header h1 { - margin: 0 0 6px; font-size: 24px; font-weight: 700; letter-spacing: -0.01em; + margin: 0 0 6px; font-size: var(--text-2xl); font-weight: 700; letter-spacing: -0.01em; } .settings-sub { - color: #6b7280; font-size: 13px; margin: 0 0 24px; + color: var(--c-gray-500); font-size: var(--text-base); margin: 0 0 24px; line-height: 1.5; } .settings-section { - border: 1px solid #e5e7eb; border-radius: 8px; - padding: 20px 24px; margin-bottom: 16px; background: #fff; + border: 1px solid var(--c-gray-200); border-radius: var(--radius-lg); + padding: 20px 24px; margin-bottom: 16px; background: var(--c-white); } .settings-section h2 { - margin: 0 0 4px; font-size: 15px; font-weight: 600; + margin: 0 0 4px; font-size: var(--text-lg); font-weight: 600; } .settings-section-body { display: flex; flex-direction: column; gap: 12px; } .settings-row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; } .quiet-hours-row label { display: flex; flex-direction: column; gap: 4px; - font-size: 12px; color: #6b7280; + font-size: var(--text-sm); color: var(--c-gray-500); } .quiet-hours-row input, .quiet-hours-row select { - border: 1px solid #d1d5db; border-radius: 6px; - padding: 6px 10px; font-size: 13px; - background: white; color: #111; + border: 1px solid var(--c-gray-300); border-radius: var(--radius-md); + padding: 6px 10px; font-size: var(--text-base); + background: white; color: var(--c-gray-900); } -.settings-note { font-size: 12px; color: #6b7280; margin: 0; } -.settings-note.warning { color: #b91c1c; } +.settings-note { font-size: var(--text-sm); color: var(--c-gray-500); margin: 0; } +.settings-note.warning { color: var(--c-danger-fg-strong); } .toggle-row { display: flex; align-items: flex-start; gap: 12px; cursor: pointer; padding: 10px 0; - border-top: 1px solid #f3f4f6; + border-top: 1px solid var(--c-gray-100); } .toggle-row:first-child { border-top: none; padding-top: 0; } .toggle-row.disabled { cursor: not-allowed; opacity: 0.6; } .toggle-row input[type=checkbox] { margin-top: 3px; } .toggle-text { display: flex; flex-direction: column; gap: 2px; } -.toggle-label { font-size: 14px; font-weight: 500; color: #111; } -.toggle-desc { font-size: 12px; color: #6b7280; line-height: 1.5; } +.toggle-label { font-size: var(--text-md); font-weight: 500; color: var(--c-gray-900); } +.toggle-desc { font-size: var(--text-sm); color: var(--c-gray-500); line-height: 1.5; } .btn-primary { - background: #111; color: #fff; border: none; - padding: 7px 14px; border-radius: 6px; font-size: 13px; cursor: pointer; + background: var(--c-gray-900); color: var(--c-white); border: none; + padding: 7px 14px; border-radius: var(--radius-md); font-size: var(--text-base); cursor: pointer; } -.btn-primary:hover { background: #333; } -.btn-primary:disabled { background: #9ca3af; cursor: not-allowed; } +.btn-primary:hover { background: var(--c-gray-700); } +.btn-primary:disabled { background: var(--c-gray-400); cursor: not-allowed; } .btn-link-muted { background: none; border: none; cursor: pointer; - color: #6b7280; font-size: 12px; padding: 4px 6px; + color: var(--c-gray-500); font-size: var(--text-sm); padding: 4px 6px; } -.btn-link-muted:hover { color: #111; text-decoration: underline; } +.btn-link-muted:hover { color: var(--c-gray-900); text-decoration: underline; } .settings-table, .admin-table { width: 100%; border-collapse: collapse; - font-size: 13px; + font-size: var(--text-base); } .settings-table th, .admin-table th { text-align: left; padding: 6px 8px; - font-size: 11px; text-transform: uppercase; - color: #6b7280; letter-spacing: 0.05em; font-weight: 600; - border-bottom: 1px solid #e5e7eb; + font-size: var(--text-xs); text-transform: uppercase; + color: var(--c-gray-500); letter-spacing: 0.05em; font-weight: 600; + border-bottom: 1px solid var(--c-gray-200); } .settings-table td, .admin-table td { - padding: 8px 8px; border-bottom: 1px solid #f3f4f6; + padding: 8px 8px; border-bottom: 1px solid var(--c-gray-100); } -.settings-table select { font-size: 13px; padding: 3px 6px; } +.settings-table select { font-size: var(--text-base); padding: 3px 6px; } .set-by { - font-size: 10px; text-transform: uppercase; letter-spacing: 0.05em; - padding: 2px 6px; border-radius: 4px; font-weight: 600; + font-size: var(--text-2xs); text-transform: uppercase; letter-spacing: 0.05em; + padding: 2px 6px; border-radius: var(--radius-sm); font-weight: 600; } -.set-by-auto { background: #f3f4f6; color: #6b7280; } +.set-by-auto { background: var(--c-gray-100); color: var(--c-gray-500); } .set-by-explicit { background: #dbeafe; color: #1e40af; } .mutes-list { list-style: none; padding: 0; margin: 8px 0 0; } .mutes-row { display: flex; align-items: center; gap: 10px; - padding: 6px 8px; border-bottom: 1px solid #f3f4f6; - font-size: 13px; + padding: 6px 8px; border-bottom: 1px solid var(--c-gray-100); + font-size: var(--text-base); } -.mute-handle { font-weight: 500; color: #111; } -.mute-when { font-size: 11px; margin-left: auto; } +.mute-handle { font-weight: 500; color: var(--c-gray-900); } +.mute-when { font-size: var(--text-xs); margin-left: auto; } .mute-typeahead { position: relative; } .mute-typeahead input { width: 100%; box-sizing: border-box; - border: 1px solid #d1d5db; border-radius: 6px; - padding: 7px 10px; font-size: 13px; outline: none; + border: 1px solid var(--c-gray-300); border-radius: var(--radius-md); + padding: 7px 10px; font-size: var(--text-base); outline: none; } -.mute-typeahead input:focus { border-color: #111; } +.mute-typeahead input:focus { border-color: var(--c-gray-900); } .mute-typeahead-results { position: absolute; top: 100%; left: 0; right: 0; - background: white; border: 1px solid #d1d5db; border-radius: 6px; + background: white; border: 1px solid var(--c-gray-300); border-radius: var(--radius-md); box-shadow: 0 4px 12px rgba(0,0,0,0.08); margin-top: 4px; padding: 4px 0; z-index: 10; list-style: none; @@ -1863,9 +1863,9 @@ display: flex; gap: 10px; align-items: center; width: 100%; padding: 6px 10px; background: none; border: none; text-align: left; cursor: pointer; - font-size: 13px; + font-size: var(--text-base); } -.mute-typeahead-results button:hover { background: #f9fafb; } +.mute-typeahead-results button:hover { background: var(--c-gray-50); } /* /admin */ .admin-page { @@ -1874,11 +1874,11 @@ } .admin-rail { width: 220px; flex-shrink: 0; - background: #f9fafb; border-right: 1px solid #e5e7eb; + background: var(--c-gray-50); border-right: 1px solid var(--c-gray-200); padding: 24px 16px; } .admin-rail h2 { - font-size: 13px; color: #6b7280; + font-size: var(--text-base); color: var(--c-gray-500); text-transform: uppercase; letter-spacing: 0.08em; margin: 0 0 12px; } @@ -1886,13 +1886,13 @@ .admin-rail li { margin-bottom: 2px; } .admin-rail-link { display: block; padding: 6px 10px; - font-size: 13px; color: #374151; text-decoration: none; - border-radius: 4px; + font-size: var(--text-base); color: var(--c-gray-700); text-decoration: none; + border-radius: var(--radius-sm); } -.admin-rail-link:hover { background: #f3f4f6; } -.admin-rail-link.active { background: #111; color: #fff; } +.admin-rail-link:hover { background: var(--c-gray-100); } +.admin-rail-link.active { background: var(--c-gray-900); color: var(--c-white); } .admin-rail-note { - font-size: 11px; color: #6b7280; line-height: 1.5; + font-size: var(--text-xs); color: var(--c-gray-500); line-height: 1.5; } .admin-content { flex: 1; min-width: 0; @@ -1900,12 +1900,12 @@ overflow: auto; } .admin-tab-header h2 { - margin: 0 0 4px; font-size: 18px; font-weight: 700; + margin: 0 0 4px; font-size: var(--text-xl); font-weight: 700; } -.admin-tab-header p { margin: 0 0 24px; font-size: 13px; } +.admin-tab-header p { margin: 0 0 24px; font-size: var(--text-base); } .admin-section-h { - font-size: 13px; text-transform: uppercase; - letter-spacing: 0.05em; color: #6b7280; + font-size: var(--text-base); text-transform: uppercase; + letter-spacing: 0.05em; color: var(--c-gray-500); margin: 24px 0 8px; } @@ -1913,12 +1913,12 @@ display: flex; gap: 8px; margin-bottom: 18px; flex-wrap: wrap; } .audit-filters input, .audit-filters select { - border: 1px solid #d1d5db; border-radius: 6px; - padding: 5px 9px; font-size: 13px; background: white; + border: 1px solid var(--c-gray-300); border-radius: var(--radius-md); + padding: 5px 9px; font-size: var(--text-base); background: white; } .audit-table code { - font-size: 11px; background: #f3f4f6; - padding: 1px 5px; border-radius: 3px; + font-size: var(--text-xs); background: var(--c-gray-100); + padding: 1px 5px; border-radius: var(--radius-sm); } .allowlist-add { @@ -1926,27 +1926,27 @@ align-items: center; } .allowlist-add input[type="email"] { - border: 1px solid #d1d5db; border-radius: 6px; - padding: 6px 10px; font-size: 13px; min-width: 240px; + border: 1px solid var(--c-gray-300); border-radius: var(--radius-md); + padding: 6px 10px; font-size: var(--text-base); min-width: 240px; } .allowlist-add input[type="text"] { - border: 1px solid #d1d5db; border-radius: 6px; - padding: 6px 10px; font-size: 13px; flex: 1; min-width: 200px; + border: 1px solid var(--c-gray-300); border-radius: var(--radius-md); + padding: 6px 10px; font-size: var(--text-base); flex: 1; min-width: 200px; } .allowlist-add .btn-primary { - background: #1a1a1a; color: #fff; - border: none; border-radius: 6px; - padding: 6px 14px; font-size: 13px; font-weight: 600; + background: var(--c-ink); color: var(--c-white); + border: none; border-radius: var(--radius-md); + padding: 6px 14px; font-size: var(--text-base); font-weight: 600; cursor: pointer; } -.allowlist-add .btn-primary:hover:not(:disabled) { background: #333; } +.allowlist-add .btn-primary:hover:not(:disabled) { background: var(--c-gray-700); } .allowlist-add .btn-primary:disabled { opacity: 0.5; cursor: not-allowed; } .user-cell { display: flex; flex-direction: column; gap: 1px; } -.user-handle { font-weight: 500; color: #111; } +.user-handle { font-weight: 500; color: var(--c-gray-900); } .mute-toggle { display: inline-flex; align-items: center; gap: 6px; - font-size: 13px; cursor: pointer; + font-size: var(--text-base); cursor: pointer; } /* v0.9.0 — admin user-management surface (roadmap item #7). */ @@ -1955,53 +1955,53 @@ } .admin-chip { display: inline-flex; align-items: center; gap: 6px; - background: #fff; border: 1px solid #d1d5db; border-radius: 999px; - padding: 4px 12px; font-size: 12px; color: #374151; cursor: pointer; + background: var(--c-white); border: 1px solid var(--c-gray-300); border-radius: var(--radius-pill); + padding: 4px 12px; font-size: var(--text-sm); color: var(--c-gray-700); cursor: pointer; } -.admin-chip:hover { background: #f9fafb; } +.admin-chip:hover { background: var(--c-gray-50); } .admin-chip.active { - background: #111; color: #fff; border-color: #111; + background: var(--c-gray-900); color: var(--c-white); border-color: var(--c-gray-900); } .admin-chip-count { - font-size: 11px; opacity: 0.7; + font-size: var(--text-xs); opacity: 0.7; } .admin-users-table td { vertical-align: top; padding-top: 10px; padding-bottom: 10px; } .permission-cell { display: flex; flex-direction: column; gap: 4px; } .permission-actions { display: flex; gap: 6px; } .permission-badge { display: inline-block; - font-size: 11px; font-weight: 600; - padding: 2px 8px; border-radius: 999px; + font-size: var(--text-xs); font-weight: 600; + padding: 2px 8px; border-radius: var(--radius-pill); text-transform: uppercase; letter-spacing: 0.04em; width: max-content; } .permission-badge-pending { - background: #fef3c7; color: #92400e; + background: var(--c-warning-bg); color: var(--c-warning-fg); } .permission-badge-granted { - background: #dcfce7; color: #166534; + background: var(--c-success-bg); color: var(--c-success-fg); } .permission-badge-revoked { - background: #fee2e2; color: #991b1b; + background: var(--c-danger-bg); color: var(--c-danger-fg); } -.permission-decided { font-size: 11px; } +.permission-decided { font-size: var(--text-xs); } .user-row-reason td { - background: #fffbeb; border-top: none !important; + background: var(--c-warning-bg-soft); border-top: none !important; padding: 0 16px 12px !important; } .user-reason-block { border-left: 3px solid #f59e0b; - padding: 8px 12px; font-size: 13px; - background: #fffbeb; + padding: 8px 12px; font-size: var(--text-base); + background: var(--c-warning-bg-soft); } -.user-reason-block strong { display: block; margin-bottom: 4px; color: #92400e; } -.user-reason-block p { margin: 0; white-space: pre-wrap; color: #374151; } +.user-reason-block strong { display: block; margin-bottom: 4px; color: var(--c-warning-fg); } +.user-reason-block p { margin: 0; white-space: pre-wrap; color: var(--c-gray-700); } .grad-queue { list-style: none; padding: 0; margin: 8px 0 24px; } -.grad-queue li { padding: 8px 0; border-bottom: 1px solid #f3f4f6; } -.grad-queue-link { color: #111; text-decoration: none; font-size: 14px; } +.grad-queue li { padding: 8px 0; border-bottom: 1px solid var(--c-gray-100); } +.grad-queue-link { color: var(--c-gray-900); text-decoration: none; font-size: var(--text-md); } .grad-queue-link:hover strong { text-decoration: underline; } -.muted { color: #6b7280; } -.error { color: #b91c1c; } +.muted { color: var(--c-gray-500); } +.error { color: var(--c-danger-fg-strong); } /* v0.5.0 — PR-less per-RFC discussion panel (RFCDiscussionPanel.jsx). Visual neighbor of .chat-panel but distinct: discussion lives on the @@ -2014,25 +2014,25 @@ } .discussion-header { padding: 10px 14px; - border-bottom: 1px solid #f0f0ee; - background: #fafafa; + border-bottom: 1px solid var(--c-gray-150); + background: var(--c-gray-50); display: flex; flex-direction: column; gap: 4px; } -.discussion-header-title { font-size: 12px; color: #555; font-weight: 600; } -.discussion-header-meta { font-size: 11px; color: #888; } +.discussion-header-title { font-size: var(--text-sm); color: var(--c-gray-500); font-weight: 600; } +.discussion-header-meta { font-size: var(--text-xs); color: var(--c-gray-500); } .discussion-thread-tabs { display: flex; gap: 4px; flex-wrap: wrap; padding: 6px 14px; - border-bottom: 1px solid #f0f0ee; - background: #fcfcfb; + border-bottom: 1px solid var(--c-gray-150); + background: var(--c-gray-150); } .discussion-thread-tab { - background: #fff; border: 1px solid #e5e5e0; cursor: pointer; - font-size: 11px; color: #555; - padding: 3px 8px; border-radius: 999px; + background: var(--c-white); border: 1px solid var(--c-gray-200); cursor: pointer; + font-size: var(--text-xs); color: var(--c-gray-500); + padding: 3px 8px; border-radius: var(--radius-pill); } .discussion-thread-tab.active { - background: #eef2ff; border-color: #5b5bd6; color: #3737a0; + background: #eef2ff; border-color: var(--c-accent); color: #3737a0; } .discussion-thread-tab.resolved { opacity: 0.6; } .discussion-messages { @@ -2045,50 +2045,50 @@ text-align: center; padding: 24px; } .discussion-empty p { - font-size: 13px; color: #999; line-height: 1.6; max-width: 280px; + font-size: var(--text-base); color: var(--c-gray-500); line-height: 1.6; max-width: 280px; } .discussion-error { - background: #fee; border: 1px solid #fcc; color: #b91c1c; - padding: 8px 10px; border-radius: 4px; font-size: 12px; + background: var(--c-danger-bg); border: 1px solid var(--c-danger-border); color: var(--c-danger-fg-strong); + padding: 8px 10px; border-radius: var(--radius-sm); font-size: var(--text-sm); } .discussion-message { display: flex; flex-direction: column; gap: 3px; } .discussion-message-meta { - display: flex; gap: 8px; font-size: 11px; color: #888; + display: flex; gap: 8px; font-size: var(--text-xs); color: var(--c-gray-500); } -.discussion-message-author { color: #5b5bd6; font-weight: 500; } +.discussion-message-author { color: var(--c-accent); font-weight: 500; } .discussion-message-quote { - font-size: 11px; color: #666; font-style: italic; - border-left: 2px solid #ddd; padding-left: 8px; margin-bottom: 2px; + font-size: var(--text-xs); color: var(--c-gray-500); font-style: italic; + border-left: 2px solid var(--c-gray-300); padding-left: 8px; margin-bottom: 2px; } .discussion-message-body { - font-size: 13px; color: #222; line-height: 1.5; + font-size: var(--text-base); color: var(--c-gray-800); line-height: 1.5; white-space: pre-wrap; word-wrap: break-word; - background: #f7f7f5; padding: 8px 10px; border-radius: 6px; + background: var(--c-gray-100); padding: 8px 10px; border-radius: var(--radius-md); } .discussion-message.system .discussion-system-bubble { - font-size: 12px; color: #888; font-style: italic; + font-size: var(--text-sm); color: var(--c-gray-500); font-style: italic; text-align: center; padding: 4px 0; } .discussion-composer { - border-top: 1px solid #f0f0ee; + border-top: 1px solid var(--c-gray-150); padding: 10px 14px; - background: #fafafa; + background: var(--c-gray-50); display: flex; flex-direction: column; gap: 6px; } .discussion-composer-textarea { width: 100%; resize: vertical; min-height: 60px; - font-family: inherit; font-size: 13px; - border: 1px solid #ddd; border-radius: 4px; + font-family: inherit; font-size: var(--text-base); + border: 1px solid var(--c-gray-300); border-radius: var(--radius-sm); padding: 6px 8px; } .discussion-composer-textarea:focus { - outline: none; border-color: #5b5bd6; + outline: none; border-color: var(--c-accent); } .discussion-composer-actions { display: flex; gap: 8px; align-items: center; justify-content: flex-end; } .discussion-readonly { - font-size: 12px; color: #666; padding: 4px 0; + font-size: var(--text-sm); color: var(--c-gray-500); padding: 4px 0; } /* §14.5 — cookie consent banner (v0.13.0) */ @@ -2096,8 +2096,8 @@ position: fixed; left: 0; right: 0; bottom: 0; z-index: 1000; - background: #fff; - border-top: 1px solid #d1d5db; + background: var(--c-white); + border-top: 1px solid var(--c-gray-300); box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.08); padding: 20px 24px; } @@ -2106,10 +2106,10 @@ display: flex; flex-direction: column; gap: 12px; } .cookie-consent-title { - margin: 0; font-size: 16px; font-weight: 700; color: #111; + margin: 0; font-size: var(--text-lg); font-weight: 700; color: var(--c-gray-900); } .cookie-consent-intro { - margin: 0; font-size: 13px; color: #4b5563; line-height: 1.5; + margin: 0; font-size: var(--text-base); color: var(--c-gray-600); line-height: 1.5; } .cookie-consent-choices { border: none; padding: 0; margin: 0; @@ -2117,29 +2117,29 @@ } .cookie-consent-choice { display: flex; gap: 10px; align-items: flex-start; - padding: 10px 12px; border-radius: 6px; - border: 1px solid #e5e7eb; + padding: 10px 12px; border-radius: var(--radius-md); + border: 1px solid var(--c-gray-200); cursor: pointer; } .cookie-consent-choice.is-selected { - border-color: #111; background: #f9fafb; + border-color: var(--c-gray-900); background: var(--c-gray-50); } .cookie-consent-choice input[type=radio] { margin-top: 3px; } .cookie-consent-choice-text { display: flex; flex-direction: column; gap: 2px; } .cookie-consent-choice-label { - font-size: 13px; font-weight: 600; color: #111; + font-size: var(--text-base); font-weight: 600; color: var(--c-gray-900); } .cookie-consent-choice-desc { - font-size: 12px; color: #6b7280; line-height: 1.5; + font-size: var(--text-sm); color: var(--c-gray-500); line-height: 1.5; } .cookie-consent-links { - margin: 0; font-size: 12px; color: #6b7280; + margin: 0; font-size: var(--text-sm); color: var(--c-gray-500); } -.cookie-consent-links a { color: #111; text-decoration: underline; } +.cookie-consent-links a { color: var(--c-gray-900); text-decoration: underline; } .cookie-consent-error { - margin: 0; font-size: 12px; color: #b91c1c; + margin: 0; font-size: var(--text-sm); color: var(--c-danger-fg-strong); } .cookie-consent-actions { display: flex; gap: 8px; justify-content: flex-end; @@ -2157,41 +2157,41 @@ } .policy-header { display: flex; align-items: center; gap: 12px; - padding: 20px 0; border-bottom: 1px solid #f3f4f6; + padding: 20px 0; border-bottom: 1px solid var(--c-gray-100); margin-bottom: 24px; } .policy-back { background: none; border: none; cursor: pointer; - color: #6b7280; font-size: 13px; padding: 4px 8px; + color: var(--c-gray-500); font-size: var(--text-base); padding: 4px 8px; } -.policy-back:hover { color: #111; } -.policy-title { font-size: 13px; font-weight: 600; color: #6b7280; } -.policy-body { line-height: 1.7; color: #111; } -.policy-body h1 { font-size: 26px; margin: 0 0 6px; font-weight: 700; } -.policy-body .policy-subtitle { color: #6b7280; margin: 0 0 24px; font-size: 14px; } -.policy-body h2 { font-size: 16px; margin: 28px 0 8px; font-weight: 600; } +.policy-back:hover { color: var(--c-gray-900); } +.policy-title { font-size: var(--text-base); font-weight: 600; color: var(--c-gray-500); } +.policy-body { line-height: 1.7; color: var(--c-gray-900); } +.policy-body h1 { font-size: var(--text-3xl); margin: 0 0 6px; font-weight: 700; } +.policy-body .policy-subtitle { color: var(--c-gray-500); margin: 0 0 24px; font-size: var(--text-md); } +.policy-body h2 { font-size: var(--text-lg); margin: 28px 0 8px; font-weight: 600; } .policy-body p { margin: 0 0 12px; } .policy-body ul { margin: 0 0 16px; padding-left: 22px; } .policy-body li { margin-bottom: 6px; } .policy-body code { - background: #f3f4f6; padding: 1px 5px; border-radius: 3px; - font-family: ui-monospace, monospace; font-size: 12px; + background: var(--c-gray-100); padding: 1px 5px; border-radius: var(--radius-sm); + font-family: ui-monospace, monospace; font-size: var(--text-sm); } .policy-body .policy-footnote { - margin-top: 24px; font-size: 12px; color: #6b7280; + margin-top: 24px; font-size: var(--text-sm); color: var(--c-gray-500); } .policy-table { width: 100%; border-collapse: collapse; - font-size: 13px; margin: 8px 0 16px; + font-size: var(--text-base); margin: 8px 0 16px; } .policy-table th, .policy-table td { text-align: left; padding: 8px 10px; - border-bottom: 1px solid #f3f4f6; + border-bottom: 1px solid var(--c-gray-100); vertical-align: top; } .policy-table th { - font-size: 11px; text-transform: uppercase; - color: #6b7280; letter-spacing: 0.05em; font-weight: 600; + font-size: var(--text-xs); text-transform: uppercase; + color: var(--c-gray-500); letter-spacing: 0.05em; font-weight: 600; } /* ────────────────────────────────────────────────────────────────── @@ -2217,31 +2217,31 @@ .docs-header { display: flex; align-items: center; gap: 12px; padding: 12px 24px 12px 16px; - border-bottom: 1px solid #f0f0ee; + border-bottom: 1px solid var(--c-gray-150); flex-shrink: 0; } .docs-back, .docs-drawer-toggle { border: none; background: none; cursor: pointer; - color: #4b5563; font-size: 13px; - padding: 4px 8px; border-radius: 4px; + color: var(--c-gray-600); font-size: var(--text-base); + padding: 4px 8px; border-radius: var(--radius-sm); } .docs-back:hover, .docs-drawer-toggle:hover { - background: #f3f4f6; color: #111; + background: var(--c-gray-100); color: var(--c-gray-900); } .docs-drawer-toggle { display: none; - font-size: 18px; + font-size: var(--text-xl); line-height: 1; } .docs-title { - font-size: 13px; color: #6b7280; + font-size: var(--text-base); color: var(--c-gray-500); text-transform: uppercase; letter-spacing: 0.08em; } .docs-signin { margin-left: auto; - font-size: 13px; color: #4b5563; text-decoration: none; + font-size: var(--text-base); color: var(--c-gray-600); text-decoration: none; } -.docs-signin:hover { color: #111; text-decoration: underline; } +.docs-signin:hover { color: var(--c-gray-900); text-decoration: underline; } .docs-body { flex: 1; min-height: 0; @@ -2252,18 +2252,18 @@ .docs-nav { flex-shrink: 0; width: 260px; - border-right: 1px solid #f0f0ee; + border-right: 1px solid var(--c-gray-150); padding: 24px 20px; overflow-y: auto; - background: #fafaf9; + background: var(--c-gray-50); } .docs-nav-inner { display: flex; flex-direction: column; gap: 24px; } .docs-nav-section { display: flex; flex-direction: column; gap: 8px; } .docs-nav-section-label { - font-size: 11px; font-weight: 600; + font-size: var(--text-xs); font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; - color: #6b7280; + color: var(--c-gray-500); } .docs-nav-list { list-style: none; padding: 0; margin: 0; @@ -2271,14 +2271,14 @@ } .docs-nav-list a { display: block; - padding: 6px 10px; border-radius: 4px; - color: #1f2937; text-decoration: none; - font-size: 14px; line-height: 1.4; + padding: 6px 10px; border-radius: var(--radius-sm); + color: var(--c-gray-800); text-decoration: none; + font-size: var(--text-md); line-height: 1.4; word-break: break-word; } -.docs-nav-list a:hover { background: #f0f0ee; } +.docs-nav-list a:hover { background: var(--c-gray-150); } .docs-nav-list a.active { - background: #e7e5e4; color: #111; font-weight: 600; + background: var(--c-gray-200); color: var(--c-gray-900); font-weight: 600; } /* v0.20.0 — nested transcript rows under each session row. The parent @@ -2288,23 +2288,23 @@ .docs-nav-list--children { list-style: none; padding: 0; margin: 2px 0 8px 14px; display: flex; flex-direction: column; gap: 2px; - border-left: 1px solid #e5e7eb; + border-left: 1px solid var(--c-gray-200); } .docs-nav-list--children a { padding: 4px 10px; - font-size: 13px; color: #4b5563; + font-size: var(--text-base); color: var(--c-gray-600); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } .docs-nav-list--children a.active { - background: #e7e5e4; color: #111; font-weight: 600; + background: var(--c-gray-200); color: var(--c-gray-900); font-weight: 600; } .docs-nav-skeleton .skeleton-row { display: block; height: 14px; margin: 8px 10px; - background: linear-gradient(90deg, #f0f0ee 25%, #e7e5e4 50%, #f0f0ee 75%); + background: linear-gradient(90deg, var(--c-gray-150) 25%, var(--c-gray-200) 50%, var(--c-gray-150) 75%); background-size: 200% 100%; - border-radius: 4px; + border-radius: var(--radius-sm); animation: docs-skeleton-shimmer 1.2s ease-in-out infinite; } @keyframes docs-skeleton-shimmer { @@ -2314,17 +2314,17 @@ .docs-nav-error { padding: 8px 10px; - font-size: 13px; color: #9a3412; - background: #fff7ed; border: 1px solid #fed7aa; border-radius: 4px; + font-size: var(--text-base); color: #9a3412; + background: var(--c-warning-bg-soft); border: 1px solid #fed7aa; border-radius: var(--radius-sm); display: flex; flex-direction: column; gap: 6px; } .docs-nav-error button { align-self: flex-start; - background: #fff; border: 1px solid #fed7aa; - color: #9a3412; font-size: 12px; - padding: 4px 8px; border-radius: 4px; cursor: pointer; + background: var(--c-white); border: 1px solid #fed7aa; + color: #9a3412; font-size: var(--text-sm); + padding: 4px 8px; border-radius: var(--radius-sm); cursor: pointer; } -.docs-nav-error button:hover { background: #fff7ed; } +.docs-nav-error button:hover { background: var(--c-warning-bg-soft); } .docs-content { flex: 1; min-width: 0; @@ -2337,15 +2337,15 @@ margin: 0 auto; } .docs-article-title { - font-size: 28px; font-weight: 700; margin: 0 0 24px; + font-size: var(--text-3xl); font-weight: 700; margin: 0 0 24px; letter-spacing: -0.01em; - color: #111; + color: var(--c-gray-900); } -.docs-breadcrumbs { margin: 0 0 16px; font-size: 13px; } +.docs-breadcrumbs { margin: 0 0 16px; font-size: var(--text-base); } .docs-breadcrumbs a { - color: #4b5563; text-decoration: none; + color: var(--c-gray-600); text-decoration: none; } -.docs-breadcrumbs a:hover { color: #111; text-decoration: underline; } +.docs-breadcrumbs a:hover { color: var(--c-gray-900); text-decoration: underline; } .docs-session-files { list-style: none; padding: 0; margin: 0; @@ -2353,23 +2353,23 @@ } .docs-session-files a { display: block; - padding: 10px 14px; border-radius: 6px; - background: #fafaf9; border: 1px solid #f0f0ee; - color: #1f2937; text-decoration: none; + padding: 10px 14px; border-radius: var(--radius-md); + background: var(--c-gray-50); border: 1px solid var(--c-gray-150); + color: var(--c-gray-800); text-decoration: none; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; - font-size: 13px; word-break: break-all; + font-size: var(--text-base); word-break: break-all; } .docs-session-files a:hover { - background: #f3f4f6; border-color: #e5e7eb; + background: var(--c-gray-100); border-color: var(--c-gray-200); } /* v0.20.0 — session-overview body. Replaces the per-session body transcript-link list; transcripts are now picked from the left nav. The body just states the count + the nav hint. */ .docs-session-overview { - padding: 16px; border-radius: 6px; - background: #fafaf9; border: 1px solid #f0f0ee; - font-size: 14px; line-height: 1.6; color: #4b5563; + padding: 16px; border-radius: var(--radius-md); + background: var(--c-gray-50); border: 1px solid var(--c-gray-150); + font-size: var(--text-md); line-height: 1.6; color: var(--c-gray-600); } /* v0.20.0 — spec article header (title + "View source" link sit on @@ -2381,26 +2381,26 @@ } .docs-article-header .docs-article-title { margin: 0; } .docs-source-link { - font-size: 13px; color: #4b5563; text-decoration: none; - padding: 4px 10px; border-radius: 4px; border: 1px solid #e5e7eb; - background: #fafaf9; + font-size: var(--text-base); color: var(--c-gray-600); text-decoration: none; + padding: 4px 10px; border-radius: var(--radius-sm); border: 1px solid var(--c-gray-200); + background: var(--c-gray-50); white-space: nowrap; } -.docs-source-link:hover { background: #f3f4f6; color: #111; } +.docs-source-link:hover { background: var(--c-gray-100); color: var(--c-gray-900); } .docs-empty, .docs-error { - padding: 16px; border-radius: 6px; - background: #fafaf9; border: 1px solid #f0f0ee; - font-size: 14px; line-height: 1.6; color: #4b5563; + padding: 16px; border-radius: var(--radius-md); + background: var(--c-gray-50); border: 1px solid var(--c-gray-150); + font-size: var(--text-md); line-height: 1.6; color: var(--c-gray-600); } -.docs-error { background: #fef2f2; border-color: #fecaca; color: #991b1b; } +.docs-error { background: var(--c-danger-bg); border-color: var(--c-danger-border); color: var(--c-danger-fg); } .docs-error button { margin-top: 10px; - background: #fff; border: 1px solid #fecaca; - color: #991b1b; font-size: 13px; - padding: 6px 12px; border-radius: 4px; cursor: pointer; + background: var(--c-white); border: 1px solid var(--c-danger-border); + color: var(--c-danger-fg); font-size: var(--text-base); + padding: 6px 12px; border-radius: var(--radius-sm); cursor: pointer; } -.docs-error button:hover { background: #fef2f2; } +.docs-error button:hover { background: var(--c-danger-bg); } .docs-drawer-scrim { display: none; @@ -2432,3 +2432,58 @@ } .docs-content { padding: 16px 18px 64px; } } + +/* ────────────────────────────────────────────────────────────────── + v0.21.0 / roadmap item #31 — interaction polish layer. + + Appended (not interleaved) so it touches no existing selector's + declarations: it only ADDS a coherent transition vocabulary to the + interactive surfaces that already carry hover/active/focus states, + and a single consistent keyboard-focus ring. Colors/durations come + from the token module, so reduced-motion collapses transitions to + 0ms automatically. Nothing here changes resting-state appearance. + ────────────────────────────────────────────────────────────────── */ + +/* Subtle transitions on the interactive surfaces that already react to + hover. Limited to color/background/border/box-shadow/opacity so layout + never animates. */ +button, +a, +input, +textarea, +select, +.chip, +.model-pill, +.catalog-row, +.pending-row, +.branch-dropdown-trigger, +.branch-dropdown-item, +.selection-tooltip-tab, +.admin-chip, +.admin-rail-link, +.docs-nav-list a, +.inbox-row-link, +.toggle-row { + transition: + color var(--motion-base) var(--ease-out), + background-color var(--motion-base) var(--ease-out), + border-color var(--motion-base) var(--ease-out), + box-shadow var(--motion-base) var(--ease-out), + opacity var(--motion-base) var(--ease-out); +} + +/* One consistent keyboard-focus ring across all interactive controls. + :focus-visible only — it never shows on mouse/touch, so it does not + alter the existing pointer-driven hover look. The few inputs that set + their own border-color on :focus keep that; this just guarantees a + visible ring for keyboard users on every control. */ +button:focus-visible, +a:focus-visible, +input:focus-visible, +textarea:focus-visible, +select:focus-visible, +[role="button"]:focus-visible { + outline: 2px solid var(--color-focus-ring); + outline-offset: 2px; + border-radius: var(--radius-sm); +} diff --git a/frontend/src/index.css b/frontend/src/index.css index 577dc32..f1af352 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -1,8 +1,7 @@ :root { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", - Arial, sans-serif; - color: #1a1a1a; - background: #fafaf8; + font-family: var(--font-sans); + color: var(--color-text); + background: var(--color-bg); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }