7a9a8b7819
Applies the FabledSword + Scribe iteration palette to theme.css end to end: indigo (#7c3aed) → dusty violet (#5B4A8A) accent, cool grey → Obsidian/Iron/Pewter dark surfaces, warm parchment (#F5F1E8) light mode, Inter body + JetBrains Mono code loaded alongside Fraunces, and neutral hairline scrollbars (chrome is structural, not branded). Adds the action token set (--color-action-primary Moss, --color-action-secondary Bronze, --color-action-destructive Oxblood, --color-action-ghost-border Pewter) but does not yet reclassify any buttons — surface-phase work. Buttons remain dusty-violet gradients in the meantime, by design. Removes deprecated --color-accent-warm; replaces concrete usages with --color-text-secondary (dates, flavor copy) or --color-warning (paused status). Sweeps hardcoded indigo literals in component scoped CSS so they don't bypass the token system. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
256 lines
7.7 KiB
CSS
256 lines
7.7 KiB
CSS
@import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,300..900&family=Inter:ital,wght@0,400;0,500;1,400&family=JetBrains+Mono:ital,wght@0,400;1,400&display=swap');
|
|
|
|
:root {
|
|
/* Light mode — warm parchment palette */
|
|
--color-bg: #F5F1E8;
|
|
--color-bg-secondary: #FBF8F0;
|
|
--color-bg-card: #FBF8F0;
|
|
--color-surface: #EFEAE0;
|
|
--color-text: #14171A;
|
|
--color-text-secondary: #5A5852;
|
|
--color-text-muted: #9A9890;
|
|
--color-border: #D9D6CE;
|
|
--color-input-border: #D9D6CE;
|
|
--color-primary: #5B4A8A;
|
|
--color-danger: #C04A1F;
|
|
--color-tag-bg: rgba(91, 74, 138, 0.12);
|
|
--color-tag-text: #5B4A8A;
|
|
--color-shadow: rgba(0, 0, 0, 0.08);
|
|
--color-toast-success: #4A5D3F;
|
|
--color-toast-error: #C04A1F;
|
|
--color-status-todo: #3F4651;
|
|
--color-status-todo-bg: rgba(63, 70, 81, 0.10);
|
|
--color-status-in-progress: #5B4A8A;
|
|
--color-status-in-progress-bg: rgba(91, 74, 138, 0.12);
|
|
--color-status-done: #4A5D3F;
|
|
--color-status-done-bg: rgba(74, 93, 63, 0.12);
|
|
--color-priority-low: #3D5A6E;
|
|
--color-priority-low-bg: rgba(61, 90, 110, 0.12);
|
|
--color-priority-medium: #8B6F1E;
|
|
--color-priority-medium-bg: rgba(139, 111, 30, 0.12);
|
|
--color-priority-high: #C04A1F;
|
|
--color-priority-high-bg: rgba(192, 74, 31, 0.12);
|
|
--color-wikilink: #5B4A8A;
|
|
--color-wikilink-bg: rgba(91, 74, 138, 0.12);
|
|
--color-overdue: #C04A1F;
|
|
--color-code-bg: #EBEDF0;
|
|
--color-code-inline-bg: #EBEDF0;
|
|
--color-table-stripe: rgba(20, 23, 26, 0.025);
|
|
--color-success: #4A5D3F;
|
|
--color-warning: #8B6F1E;
|
|
--color-input-bar-bg: #EFEAE0;
|
|
--color-input-bar-text: #14171A;
|
|
--color-input-bar-placeholder: rgba(20, 23, 26, 0.4);
|
|
--color-overlay: rgba(0, 0, 0, 0.45);
|
|
--color-bubble-user-bg: transparent;
|
|
--color-bubble-user-border: #D9D6CE;
|
|
--color-bubble-user-text: #5A5852;
|
|
--color-bubble-asst-shadow: 0 2px 14px rgba(91, 74, 138, 0.06), 0 1px 4px rgba(0, 0, 0, 0.05);
|
|
--color-primary-solid: #5B4A8A;
|
|
--color-primary-deep: #3F3560;
|
|
--gradient-cta: linear-gradient(135deg, var(--color-primary-solid), var(--color-primary-deep));
|
|
--glow-cta: 0 2px 10px rgba(91, 74, 138, 0.35);
|
|
--glow-cta-hover: 0 4px 20px rgba(91, 74, 138, 0.55);
|
|
--glow-soft: 0 0 16px rgba(91, 74, 138, 0.35);
|
|
--color-primary-faint: rgba(91, 74, 138, 0.08);
|
|
--color-primary-tint: rgba(91, 74, 138, 0.12);
|
|
--color-primary-wash: rgba(91, 74, 138, 0.20);
|
|
|
|
/* Action color set — Hybrid rule: action buttons use these, accent reserved for brand moments */
|
|
--color-action-primary: #4A5D3F;
|
|
--color-action-primary-hover: #5A6F4D;
|
|
--color-action-secondary: #8B7355;
|
|
--color-action-secondary-hover: #A0876A;
|
|
--color-action-destructive: #6B2118;
|
|
--color-action-destructive-hover: #7E2A1F;
|
|
--color-action-ghost-border: #3F4651;
|
|
|
|
--radius-sm: 6px;
|
|
--radius-md: 12px;
|
|
--radius-lg: 18px;
|
|
--radius-pill: 9999px;
|
|
--focus-ring: 0 0 0 2px rgba(91, 74, 138, 0.5);
|
|
/* Layout */
|
|
--page-max-width: 1200px;
|
|
--page-padding-x: 1rem;
|
|
--sidebar-width: 260px;
|
|
--chat-reading-width: min(1200px, 100%);
|
|
--chat-context-sidebar-width: 220px;
|
|
}
|
|
|
|
[data-theme="dark"] {
|
|
/* Dark mode — Obsidian / Iron / Pewter */
|
|
--color-bg: #14171A;
|
|
--color-bg-secondary: #1E2228;
|
|
--color-bg-card: #1E2228;
|
|
--color-surface: #2C313A;
|
|
--color-text: #E8E4D8;
|
|
--color-text-secondary: #C2BFB4;
|
|
--color-text-muted: #9C9A92;
|
|
--color-border: #3F4651;
|
|
--color-input-border: #3F4651;
|
|
--color-primary: #5B4A8A;
|
|
--color-danger: #C04A1F;
|
|
--color-tag-bg: rgba(91, 74, 138, 0.15);
|
|
--color-tag-text: #5B4A8A;
|
|
--color-shadow: rgba(0, 0, 0, 0.4);
|
|
--color-toast-success: #4A5D3F;
|
|
--color-toast-error: #C04A1F;
|
|
--color-status-todo: #3F4651;
|
|
--color-status-todo-bg: rgba(63, 70, 81, 0.18);
|
|
--color-status-in-progress: #5B4A8A;
|
|
--color-status-in-progress-bg: rgba(91, 74, 138, 0.18);
|
|
--color-status-done: #4A5D3F;
|
|
--color-status-done-bg: rgba(74, 93, 63, 0.18);
|
|
--color-priority-low: #3D5A6E;
|
|
--color-priority-low-bg: rgba(61, 90, 110, 0.18);
|
|
--color-priority-medium: #8B6F1E;
|
|
--color-priority-medium-bg: rgba(139, 111, 30, 0.18);
|
|
--color-priority-high: #C04A1F;
|
|
--color-priority-high-bg: rgba(192, 74, 31, 0.18);
|
|
--color-wikilink: #5B4A8A;
|
|
--color-wikilink-bg: rgba(91, 74, 138, 0.18);
|
|
--color-overdue: #C04A1F;
|
|
--color-code-bg: #14171A;
|
|
--color-code-inline-bg: #1E2228;
|
|
--color-table-stripe: rgba(255, 255, 255, 0.025);
|
|
--color-success: #4A5D3F;
|
|
--color-warning: #8B6F1E;
|
|
--color-input-bar-bg: #1E2228;
|
|
--color-input-bar-text: #E8E4D8;
|
|
--color-input-bar-placeholder: rgba(232, 228, 216, 0.35);
|
|
--color-overlay: rgba(0, 0, 0, 0.65);
|
|
--color-bubble-user-bg: transparent;
|
|
--color-bubble-user-border: #3F4651;
|
|
--color-bubble-user-text: #C2BFB4;
|
|
--color-bubble-asst-shadow: 0 4px 28px rgba(91, 74, 138, 0.14), 0 2px 8px rgba(0, 0, 0, 0.4);
|
|
--color-primary-solid: #5B4A8A;
|
|
--color-primary-deep: #3F3560;
|
|
--gradient-cta: linear-gradient(135deg, var(--color-primary-solid), var(--color-primary-deep));
|
|
--glow-cta: 0 2px 12px rgba(91, 74, 138, 0.45);
|
|
--glow-cta-hover: 0 4px 24px rgba(91, 74, 138, 0.65);
|
|
--glow-soft: 0 0 18px rgba(91, 74, 138, 0.4);
|
|
--color-primary-faint: rgba(91, 74, 138, 0.10);
|
|
--color-primary-tint: rgba(91, 74, 138, 0.14);
|
|
--color-primary-wash: rgba(91, 74, 138, 0.22);
|
|
|
|
/* Action color set — identical across themes */
|
|
--color-action-primary: #4A5D3F;
|
|
--color-action-primary-hover: #5A6F4D;
|
|
--color-action-secondary: #8B7355;
|
|
--color-action-secondary-hover: #A0876A;
|
|
--color-action-destructive: #6B2118;
|
|
--color-action-destructive-hover: #7E2A1F;
|
|
--color-action-ghost-border: #3F4651;
|
|
}
|
|
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
background: var(--color-bg);
|
|
color: var(--color-text);
|
|
font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont,
|
|
"Segoe UI", Roboto, sans-serif;
|
|
font-feature-settings: "cv11";
|
|
line-height: 1.5;
|
|
transition: background-color 0.2s, color 0.2s;
|
|
}
|
|
|
|
h1, h2 {
|
|
font-family: 'Fraunces', Georgia, serif;
|
|
font-optical-sizing: auto;
|
|
font-weight: 500;
|
|
line-height: 1.3;
|
|
}
|
|
|
|
h3 {
|
|
font-family: 'Inter', system-ui, sans-serif;
|
|
font-weight: 500;
|
|
line-height: 1.3;
|
|
}
|
|
|
|
code, pre, kbd, samp {
|
|
font-family: 'JetBrains Mono', ui-monospace, "SF Mono", Menlo, Consolas, monospace;
|
|
font-feature-settings: "liga", "calt";
|
|
}
|
|
|
|
::selection {
|
|
background: rgba(91, 74, 138, 0.3);
|
|
color: var(--color-text);
|
|
}
|
|
|
|
input:focus-visible,
|
|
textarea:focus-visible,
|
|
select:focus-visible,
|
|
button:focus-visible,
|
|
a:focus-visible {
|
|
outline: none;
|
|
box-shadow: var(--focus-ring);
|
|
border-radius: var(--radius-sm);
|
|
}
|
|
|
|
button:not(:disabled):active,
|
|
.btn:not(:disabled):active,
|
|
[role="button"]:not(:disabled):active {
|
|
transform: scale(0.97);
|
|
transition: transform 0.08s ease;
|
|
}
|
|
|
|
/* Responsive breakpoints: 480px (phone), 768px (tablet), 1024px (desktop) */
|
|
@media (max-width: 768px) {
|
|
.hide-mobile {
|
|
display: none !important;
|
|
}
|
|
button,
|
|
[role="button"],
|
|
.btn-new-conv,
|
|
.btn-send {
|
|
min-height: 44px;
|
|
}
|
|
}
|
|
@media (min-width: 769px) {
|
|
.hide-desktop {
|
|
display: none !important;
|
|
}
|
|
}
|
|
|
|
/* Neutral hairline scrollbars — chrome is structural, not branded */
|
|
::-webkit-scrollbar {
|
|
width: 4px;
|
|
height: 4px;
|
|
}
|
|
::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
::-webkit-scrollbar-thumb {
|
|
background: var(--color-border);
|
|
border-radius: 9999px;
|
|
}
|
|
::-webkit-scrollbar-thumb:hover {
|
|
background: var(--color-text-muted);
|
|
}
|
|
|
|
/* Floating inline assist button (teleported to body, cannot be scoped) */
|
|
.inline-assist-btn {
|
|
position: fixed;
|
|
z-index: 150;
|
|
transform: translateX(-50%);
|
|
background: var(--color-primary);
|
|
color: #fff;
|
|
border: none;
|
|
border-radius: 999px;
|
|
padding: 0.3rem 0.8rem;
|
|
font-size: 0.8rem;
|
|
cursor: pointer;
|
|
box-shadow: 0 2px 8px var(--color-shadow);
|
|
white-space: nowrap;
|
|
}
|
|
.inline-assist-btn:hover {
|
|
filter: brightness(1.1);
|
|
}
|