Files
Aether/frontend/src/style.css

1172 lines
31 KiB
CSS
Raw Normal View History

2025-12-10 20:52:44 +08:00
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Styrene A - 只保留常用字重 */
@font-face {
font-family: 'StyreneA';
font-weight: 400;
font-style: normal;
src: url('/fonts/StyreneA/StyreneA-Regular.woff2') format('woff2'),
url('/fonts/StyreneA/StyreneA-Regular.otf') format('opentype');
font-display: swap;
}
@font-face {
font-family: 'StyreneA';
font-weight: 500;
font-style: normal;
src: url('/fonts/StyreneA/StyreneA-Medium.woff2') format('woff2'),
url('/fonts/StyreneA/StyreneA-Medium.otf') format('opentype');
font-display: swap;
}
@font-face {
font-family: 'StyreneA';
font-weight: 700;
font-style: normal;
src: url('/fonts/StyreneA/StyreneA-Bold.woff2') format('woff2'),
url('/fonts/StyreneA/StyreneA-Bold.otf') format('opentype');
font-display: swap;
}
/* Tiempos Text - 只保留常用字重 */
@font-face {
font-family: 'TiemposText';
font-weight: 400;
font-style: normal;
src: url('/fonts/TiemposText/TiemposText-Regular.woff2') format('woff2'),
url('/fonts/TiemposText/TiemposText-Regular.otf') format('opentype');
font-display: swap;
}
@font-face {
font-family: 'TiemposText';
font-weight: 500;
font-style: normal;
src: url('/fonts/TiemposText/TiemposText-Medium.woff2') format('woff2'),
url('/fonts/TiemposText/TiemposText-Medium.otf') format('opentype');
font-display: swap;
}
@font-face {
font-family: 'TiemposText';
font-weight: 600;
font-style: normal;
src: url('/fonts/TiemposText/TiemposText-Semibold.woff2') format('woff2'),
url('/fonts/TiemposText/TiemposText-Semibold.otf') format('opentype');
font-display: swap;
}
@layer base {
:root {
/* Claude theme palette */
--slate-dark: #3d3929;
--slate-medium: #6c695c;
--slate-light: #cbc9c2;
/* Neutral tones */
--cloud-dark: #3d3d3a;
--cloud-medium: #e9e6dc;
--cloud-light: #f5f4ee;
/* Ivory accents */
--ivory-dark: #ede9de;
--ivory-medium: #e9e6dc;
--ivory-light: #faf9f5;
/* Warm accents */
--book-cloth: #c96442;
--kraft: #e4b2a0;
--manilla: #f4e0d9;
/* Functional colors */
--black: #1a1815;
--white: #ffffff;
--focus: rgba(201, 100, 66, 0.35);
--link: #75a9f2;
--error: #ef4444;
/* Typography */
--sans-serif: 'StyreneA', 'Helvetica', 'HarmonyOS Sans', 'SF Pro Display', 'Segoe UI', system-ui,
-apple-system, BlinkMacSystemFont, 'PingFang SC', 'Noto Sans SC', sans-serif;
--serif: 'TiemposText', 'STZhongsong', 'Fang Song', serif;
--monospace: 'Cascadia Code', 'Cascadia mono', 'Fira Code', 'MonoLisa Trial', 'MonaLisa',
'JetBrains Mono', sans-serif;
--font-sans: var(--sans-serif);
--font-serif: var(--serif);
--font-mono: var(--monospace);
--list-item-border-radius: 0.5rem;
/* Letter spacing */
--tracking-normal: 0em;
--tracking-tighter: calc(var(--tracking-normal) - 0.05em);
--tracking-tight: calc(var(--tracking-normal) - 0.025em);
--tracking-wide: calc(var(--tracking-normal) + 0.025em);
--tracking-wider: calc(var(--tracking-normal) + 0.05em);
--tracking-widest: calc(var(--tracking-normal) + 0.1em);
/* Custom aliases */
--color-black-soft: var(--slate-dark);
--color-primary: var(--book-cloth);
--color-primary-soft: var(--kraft);
--color-primary-mute: var(--manilla);
--color-text: var(--slate-dark);
--color-background: var(--ivory-light);
--color-background-soft: var(--ivory-medium);
--color-background-mute: var(--ivory-dark);
--navbar-background: var(--ivory-medium);
--navbar-background-mac: rgba(250, 249, 245, 0.55);
--chat-background: var(--ivory-light);
--chat-background-user: var(--ivory-medium);
--chat-background-assistant: var(--ivory-light);
--color-icon: var(--slate-dark);
--color-icon-white: var(--cloud-medium);
--color-border: rgba(61, 57, 41, 0.15);
--color-border-soft: rgba(61, 57, 41, 0.1);
--color-border-mute: rgba(61, 57, 41, 0.05);
--color-code-background: #e9e6dc;
--color-code-text: var(--slate-dark);
--command-panel-background: rgba(255, 252, 247, 0.95);
--command-panel-border-color: rgba(204, 120, 92, 0.32);
--command-panel-shadow-color: rgba(201, 100, 66, 0.2);
--config-panel-background: #fdf9f4;
--config-panel-border-color: rgba(61, 57, 41, 0.12);
--config-panel-shadow-color: rgba(61, 57, 41, 0.08);
--config-panel-header-background: rgba(252, 249, 243, 0.85);
--color-hover: var(--ivory-medium);
--color-active: var(--kraft);
--color-frame-border: var(--cloud-medium);
--color-group-background: var(--ivory-medium);
--color-reference: var(--cloud-medium);
--color-reference-text: var(--slate-dark);
--color-reference-background: var(--ivory-light);
--color-error: var(--error);
--color-link: var(--link);
--color-white: var(--white);
--input-container-background: var(--color-white);
--input-background: var(--color-background);
--input-shadow: rgba(61, 57, 41, 0.08);
/* Claude theme tokens */
color-scheme: light;
--background: oklch(0.9818 0.0054 95.0986);
--foreground: oklch(0.3438 0.0269 95.7226);
--card: oklch(0.9818 0.0054 95.0986);
--card-foreground: oklch(0.1908 0.002 106.5859);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.2671 0.0196 98.939);
--primary: oklch(0.6171 0.1375 39.0427);
--primary-foreground: oklch(1 0 0);
--secondary: oklch(0.9245 0.0138 92.9892);
--secondary-foreground: oklch(0.4334 0.0177 98.6048);
--muted: oklch(0.9341 0.0153 90.239);
--muted-foreground: oklch(0.6059 0.0075 97.4233);
--accent: oklch(0.9245 0.0138 92.9892);
--accent-foreground: oklch(0.2671 0.0196 98.939);
--destructive: oklch(0.1908 0.002 106.5859);
--destructive-foreground: oklch(1 0 0);
--border: oklch(0.8847 0.0069 97.3627);
--input: oklch(0.7621 0.0156 98.3528);
--ring: oklch(0.6171 0.1375 39.0427);
--radius: 0.5rem;
--chart-1: oklch(0.5583 0.1276 42.9956);
--chart-2: oklch(0.6898 0.1581 290.4107);
--chart-3: oklch(0.8816 0.0276 93.128);
--chart-4: oklch(0.8822 0.0403 298.1792);
--chart-5: oklch(0.5608 0.1348 42.0584);
--sidebar: oklch(0.9663 0.008 98.8792);
--sidebar-foreground: oklch(0.359 0.0051 106.6524);
--sidebar-primary: oklch(0.6171 0.1375 39.0427);
--sidebar-primary-foreground: oklch(0.9881 0 0);
--sidebar-accent: oklch(0.9245 0.0138 92.9892);
--sidebar-accent-foreground: oklch(0.325 0 0);
--sidebar-border: oklch(0.9401 0 0);
--sidebar-ring: oklch(0.7731 0 0);
--shadow-color: oklch(0 0 0);
--shadow-opacity: 0.1;
--shadow-blur: 3px;
--shadow-spread: 0px;
--shadow-offset-x: 0;
--shadow-offset-y: 1px;
--shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05);
--shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05);
--shadow-sm: 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 1px 2px -1px hsl(0 0% 0% / 0.1);
--shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 1px 2px -1px hsl(0 0% 0% / 0.1);
--shadow-md: 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 2px 4px -1px hsl(0 0% 0% / 0.1);
--shadow-lg: 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 4px 6px -1px hsl(0 0% 0% / 0.1);
--shadow-xl: 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 8px 10px -1px hsl(0 0% 0% / 0.1);
--shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25);
--shell-glass: rgba(250, 249, 245, 0.8);
--shell-border: rgba(61, 57, 41, 0.16);
--shell-shadow: 0 25px 65px rgba(201, 100, 66, 0.18);
--shell-sidebar-shadow: 0 45px 95px rgba(61, 57, 41, 0.12);
}
body[theme-mode='light'] {
--color-primary-rgb: 201, 100, 66;
--color-primary: var(--book-cloth);
--color-primary-soft: var(--kraft);
--color-primary-mute: var(--manilla);
--color-text: var(--slate-dark);
--input-container-background: var(--color-white);
--input-background: var(--color-background);
--input-shadow: rgba(61, 57, 41, 0.08);
}
body[theme-mode='light']::selection {
background-color: var(--book-cloth);
color: var(--ivory-light);
}
body[theme-mode='dark'],
.dark {
color-scheme: dark;
--color-primary-rgb: 217, 119, 87;
--slate-dark: #262624;
--slate-medium: #30302e;
--slate-light: #3e3e38;
--cloud-dark: #b7b5a9;
--cloud-medium: #c3c0b6;
--cloud-light: #e5e5e2;
--ivory-dark: #b7b5a9;
--ivory-medium: #e5e5e2;
--ivory-light: #faf9f5;
--book-cloth: #d97757;
--kraft: #ecbbab;
--manilla: #f7e4dd;
--color-text: var(--ivory-light);
--color-background: var(--slate-dark);
--color-background-soft: var(--slate-medium);
--color-background-mute: var(--slate-light);
--navbar-background: var(--slate-medium);
--navbar-background-mac: rgba(38, 38, 36, 0.6);
--chat-background: var(--slate-dark);
--chat-background-user: var(--book-cloth);
--chat-background-assistant: var(--slate-medium);
--color-primary: var(--book-cloth);
--color-primary-soft: var(--kraft);
--color-primary-mute: var(--manilla);
--color-icon: var(--cloud-light);
--color-icon-white: var(--cloud-medium);
--color-border: rgba(227, 224, 211, 0.16);
--color-border-soft: rgba(227, 224, 211, 0.12);
--color-border-mute: rgba(227, 224, 211, 0.08);
--color-code-background: var(--slate-medium);
--color-code-text: var(--ivory-light);
--command-panel-background: rgba(43, 40, 37, 0.95);
--command-panel-border-color: rgba(235, 219, 188, 0.24);
--command-panel-shadow-color: rgba(0, 0, 0, 0.55);
--config-panel-background: rgba(30, 28, 25, 0.92);
--config-panel-border-color: rgba(235, 219, 188, 0.18);
--config-panel-shadow-color: rgba(0, 0, 0, 0.45);
--config-panel-header-background: rgba(42, 39, 35, 0.75);
--color-hover: var(--slate-medium);
--color-active: var(--slate-light);
--color-frame-border: var(--slate-light);
--color-group-background: var(--slate-medium);
--color-reference: var(--slate-light);
--color-reference-text: var(--ivory-light);
--color-reference-background: var(--slate-dark);
--color-white: var(--ivory-light);
--input-container-background: var(--slate-medium);
--input-background: var(--slate-dark);
--input-shadow: rgba(0, 0, 0, 0.32);
--background: oklch(0.2679 0.0036 106.6427);
--foreground: oklch(0.8074 0.0142 93.0137);
--card: oklch(0.2679 0.0036 106.6427);
--card-foreground: oklch(0.9818 0.0054 95.0986);
--popover: oklch(0.3085 0.0035 106.6039);
--popover-foreground: oklch(0.9211 0.004 106.4781);
--primary: oklch(0.6724 0.1308 38.7559);
--primary-foreground: oklch(1 0 0);
--secondary: oklch(0.9818 0.0054 95.0986);
--secondary-foreground: oklch(0.3085 0.0035 106.6039);
--muted: oklch(0.2213 0.0038 106.707);
--muted-foreground: oklch(0.7713 0.0169 99.0657);
--accent: oklch(0.213 0.0078 95.4245);
--accent-foreground: oklch(0.9663 0.008 98.8792);
--destructive: oklch(0.6368 0.2078 25.3313);
--destructive-foreground: oklch(1 0 0);
--border: oklch(0.3618 0.0101 106.8928);
--input: oklch(0.4336 0.0113 100.2195);
--ring: oklch(0.6724 0.1308 38.7559);
--chart-1: oklch(0.5583 0.1276 42.9956);
--chart-2: oklch(0.6898 0.1581 290.4107);
--chart-3: oklch(0.213 0.0078 95.4245);
--chart-4: oklch(0.3074 0.0516 289.323);
--chart-5: oklch(0.5608 0.1348 42.0584);
--sidebar: oklch(0.2357 0.0024 67.7077);
--sidebar-foreground: oklch(0.8074 0.0142 93.0137);
--sidebar-primary: oklch(0.325 0 0);
--sidebar-primary-foreground: oklch(0.9881 0 0);
--sidebar-accent: oklch(0.168 0.002 106.6177);
--sidebar-accent-foreground: oklch(0.8074 0.0142 93.0137);
--sidebar-border: oklch(0.9401 0 0);
--sidebar-ring: oklch(0.7731 0 0);
--shell-glass: rgba(38, 38, 36, 0.68);
--shell-border: rgba(195, 192, 182, 0.18);
--shell-shadow: 0 25px 65px rgba(0, 0, 0, 0.5);
--shell-sidebar-shadow: 0 45px 95px rgba(0, 0, 0, 0.55);
}
body[theme-mode='dark']::selection,
.dark::selection {
background-color: var(--book-cloth);
color: var(--ivory-light);
}
body[theme-mode='light'] #content-container {
background-color: var(--ivory-light) !important;
}
body[theme-mode='dark'] #content-container,
.dark #content-container {
background-color: var(--slate-medium) !important;
}
body {
@apply bg-background text-foreground antialiased;
min-height: 100vh;
background-color: var(--background);
font-family: var(--font-sans);
color: var(--color-text);
letter-spacing: var(--tracking-normal);
transition:
background-color 0.35s ease,
color 0.35s ease;
}
* {
@apply border-border;
}
}
* {
font-variant-ligatures: normal;
}
/* Literary Tech 全局字体规则 */
/* 标题层级使用衬线体 */
h1,
h2,
h3,
h4,
h5,
h6,
.literary-heading {
font-family: var(--serif);
font-weight: 500;
letter-spacing: -0.015em;
}
/* 大标题特殊处理 */
h1 {
font-weight: 500;
letter-spacing: -0.02em;
}
/* 正文内容使用衬线体 */
.literary-body,
article p,
.prose p {
font-family: var(--serif);
line-height: 1.7;
letter-spacing: 0.005em;
}
/* UI 元素保持无衬线体 */
.literary-ui,
button,
input,
select,
label,
nav,
.btn,
[class*="button"] {
font-family: var(--sans-serif);
}
#app {
min-height: 100vh;
}
::selection {
background-color: var(--color-primary-soft);
color: var(--color-text);
}
.assistant-tab {
font-family: var(--serif) !important;
font-size: small !important;
}
.assistant-tab * {
transition: all 0.3s ease-in-out !important;
}
.ant-avatar {
box-shadow: 0 0 0 1px var(--color-border-soft) !important;
border-radius: 999rem !important;
}
#content-container {
font-family: var(--sans-serif);
}
.markdown {
font-family: var(--serif);
}
.markdown p {
line-height: 1.65em;
font-weight: 200;
}
.markdown h1,
.markdown h2,
.markdown h3,
.markdown h4 {
font-family: var(--serif);
font-weight: 500;
padding: 0.5rem 0;
text-align: center;
}
.markdown blockquote,
.markdown th {
font-family: var(--sans-serif);
}
.markdown a {
text-underline-offset: 0.1em;
text-decoration-color: var(--color-primary-soft);
text-decoration-thickness: 0.1em;
text-decoration-style: dashed;
}
.markdown a:hover {
text-decoration-style: solid;
}
.markdown table,
.markdown th,
.markdown td,
.markdown blockquote {
font-size: small;
font-family: var(--sans-serif);
}
code,
pre {
font-family: var(--monospace) !important;
}
:not(pre)>code {
background-color: transparent !important;
color: var(--color-code-text) !important;
padding: 0 !important;
border-radius: 0 !important;
white-space: nowrap !important;
font-weight: 500 !important;
margin: 0 !important;
}
.inputbar {
background-color: var(--color-background) !important;
}
.inputbar textarea {
font-size: 1rem;
font-family: var(--sans-serif);
}
.inputbar-container {
background-color: var(--color-background-soft) !important;
filter: drop-shadow(0 0 1.25rem hsl(0 0% 0% / 3.5%));
transition: all 0.3s ease-in-out;
}
.inputbar-container.focus {
filter: drop-shadow(0 0 1.25rem hsl(0 0% 0% / 7.5%));
}
.bubble .message-content-container {
border-radius: 1rem;
border: 0.7pt solid var(--color-border-soft);
}
.bubble .message-user .message-action-button:hover {
background-color: var(--color-background-mute);
}
.ant-btn,
.ant-input-outlined {
transition: border-color 0.3s ease, box-shadow 0.3s ease;
}
.ant-btn:focus,
.ant-btn:focus-visible,
.ant-input-outlined:focus,
.ant-input-outlined:focus-visible {
box-shadow: 0 0 0 2pt var(--focus);
border-color: var(--color-border-mute) !important;
}
.ant-btn:hover,
.ant-input-outlined:hover {
border-color: var(--color-border-soft) !important;
}
.footnotes {
background-color: var(--color-background-soft);
}
.ant-dropdown-menu {
border-style: solid;
border-width: 1px;
border-color: var(--color-border);
}
.ant-segmented-group * {
border-radius: 0.5rem !important;
}
.ant-dropdown-trigger {
--color-border: transparent !important;
transition: all 0.3s ease-in-out !important;
}
* {
--ant-color-primary-hover: var(--color-primary) !important;
--ant-color-primary: var(--color-primary) !important;
}
.ant-switch {
scale: 0.95;
background: var(--color-primary-mute) !important;
transition: all 0.3s ease-in-out;
}
.ant-switch.ant-switch-checked {
background: var(--book-cloth) !important;
}
.ant-switch:hover:not(.ant-switch-disabled) {
scale: 1;
}
.ant-select-selector {
border-color: var(--color-border-soft) !important;
transition: all 0.3s ease-in-out;
}
.ant-select-selector:hover {
border-color: var(--color-border) !important;
}
.ant-select-focused .ant-select-selector {
border-color: var(--color-primary) !important;
box-shadow: 0 0 0 2pt var(--focus) !important;
}
.ant-select-item-option {
margin-top: 2pt;
}
.ant-select-item-option-selected {
background-color: transparent !important;
}
.ant-select-item-option-active {
background-color: var(--color-active) !important;
border-color: var(--color-border-soft) !important;
}
.ant-slider {
margin: 5pt 0 !important;
padding-block: 0 !important;
height: 15pt !important;
}
.ant-slider .ant-slider-handle {
opacity: 0 !important;
}
.ant-slider .ant-slider-rail {
border-radius: 999rem !important;
height: 10pt !important;
background-color: var(--color-border-soft) !important;
}
.ant-slider .ant-slider-track {
border-radius: 999rem !important;
height: 10pt !important;
background-color: var(--color-primary) !important;
}
.ant-slider-step {
height: 10pt !important;
border-radius: 999rem !important;
overflow: hidden !important;
top: 0 !important;
}
.ant-slider-step span {
inset-block-start: 0 !important;
border-radius: 0 !important;
border-color: transparent !important;
background: var(--color-border-soft) !important;
width: 1em !important;
height: 10pt !important;
}
.ant-btn>div>span:nth-child(2) {
font-family: var(--serif) !important;
margin-top: 0.1em !important;
}
.ant-btn-variant-outlined:hover {
color: var(--color-primary) !important;
}
.ant-btn-variant-solid:not(:disabled) {
background-color: var(--color-black-soft) !important;
}
#app-sidebar div {
transition: all 0.1s ease-in-out !important;
}
#app-sidebar div.active {
background-color: var(--color-active) !important;
border: 0;
}
#app-sidebar div.active i,
#app-sidebar div.active span {
color: var(--color-primary);
}
/* ==========================================
Literary Tech / Wenren Geek Style
"Da Vinci manuscript meets modern IDE"
========================================== */
/* Paper texture overlay - 宣纸/磨砂玻璃质感 */
.literary-paper {
position: relative;
}
.literary-paper::before {
content: '';
position: absolute;
inset: 0;
background-image:
url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
opacity: 0.025;
pointer-events: none;
mix-blend-mode: overlay;
z-index: 1;
}
.dark .literary-paper::before,
body[theme-mode='dark'] .literary-paper::before {
opacity: 0.04;
mix-blend-mode: soft-light;
}
/* Blueprint-style precision borders - 工程蓝图细线条 */
.literary-border {
border-width: 1px;
border-style: solid;
border-color: rgba(61, 57, 41, 0.12);
box-shadow: none;
}
.dark .literary-border,
body[theme-mode='dark'] .literary-border {
border-color: rgba(250, 249, 245, 0.1);
}
.literary-border-accent {
border-width: 1px;
border-style: solid;
border-color: rgba(201, 100, 66, 0.25);
}
.dark .literary-border-accent,
body[theme-mode='dark'] .literary-border-accent {
border-color: rgba(217, 119, 87, 0.3);
}
/* Enhanced typography for literary style */
.literary-title {
font-family: var(--serif);
font-weight: 500;
letter-spacing: -0.02em;
line-height: 1.15;
color: var(--slate-dark);
}
.dark .literary-title,
body[theme-mode='dark'] .literary-title {
color: var(--ivory-light);
}
.literary-subtitle {
font-family: var(--serif);
font-weight: 400;
font-style: italic;
letter-spacing: 0.01em;
color: var(--slate-medium);
}
.dark .literary-subtitle,
body[theme-mode='dark'] .literary-subtitle {
color: var(--cloud-medium);
}
/* Monospace data zones - 等宽数据区 */
.literary-data {
font-family: var(--monospace);
font-size: 0.875rem;
letter-spacing: -0.01em;
background: rgba(61, 57, 41, 0.03);
border: 1px solid rgba(61, 57, 41, 0.08);
padding: 1rem;
}
.dark .literary-data,
body[theme-mode='dark'] .literary-data {
background: rgba(250, 249, 245, 0.03);
border-color: rgba(250, 249, 245, 0.08);
}
/* Manuscript card style */
.literary-card {
position: relative;
background: rgba(250, 249, 245, 0.7);
border: 1px solid rgba(61, 57, 41, 0.1);
border-radius: 0.375rem;
padding: 1.5rem;
transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.literary-card:hover {
border-color: rgba(201, 100, 66, 0.35);
}
.dark .literary-card,
body[theme-mode='dark'] .literary-card {
background: rgba(38, 38, 36, 0.6);
border-color: rgba(250, 249, 245, 0.08);
}
.dark .literary-card:hover,
body[theme-mode='dark'] .literary-card:hover {
border-color: rgba(217, 119, 87, 0.4);
}
/* Blueprint grid pattern for backgrounds */
.literary-grid {
background-image:
linear-gradient(rgba(61, 57, 41, 0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(61, 57, 41, 0.03) 1px, transparent 1px);
background-size: 24px 24px;
}
.dark .literary-grid,
body[theme-mode='dark'] .literary-grid {
background-image:
linear-gradient(rgba(250, 249, 245, 0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(250, 249, 245, 0.03) 1px, transparent 1px);
}
/* Accent line decorations - like technical drawings */
.literary-accent-line {
position: relative;
}
.literary-accent-line::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 3rem;
height: 2px;
background: var(--book-cloth);
}
/* Section divider */
.literary-divider {
height: 1px;
background: linear-gradient(to right,
transparent,
rgba(61, 57, 41, 0.15) 20%,
rgba(61, 57, 41, 0.15) 80%,
transparent);
margin: 2rem 0;
}
.dark .literary-divider,
body[theme-mode='dark'] .literary-divider {
background: linear-gradient(to right,
transparent,
rgba(250, 249, 245, 0.12) 20%,
rgba(250, 249, 245, 0.12) 80%,
transparent);
}
/* Manuscript badge/chip */
.literary-badge {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.375rem 0.75rem;
font-family: var(--monospace);
font-size: 0.6875rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.12em;
border: 1px solid rgba(201, 100, 66, 0.3);
color: var(--book-cloth);
background: transparent;
}
.dark .literary-badge,
body[theme-mode='dark'] .literary-badge {
border-color: rgba(217, 119, 87, 0.35);
color: var(--book-cloth);
}
/* Enhanced contrast surfaces */
.literary-surface-elevated {
background: var(--ivory-light);
border: 1px solid rgba(61, 57, 41, 0.08);
}
.dark .literary-surface-elevated,
body[theme-mode='dark'] .literary-surface-elevated {
background: var(--slate-medium);
border-color: rgba(250, 249, 245, 0.06);
}
.literary-surface-inset {
background: rgba(61, 57, 41, 0.025);
border: 1px solid rgba(61, 57, 41, 0.06);
}
.dark .literary-surface-inset,
body[theme-mode='dark'] .literary-surface-inset {
background: rgba(0, 0, 0, 0.15);
border-color: rgba(250, 249, 245, 0.04);
}
/* Technical annotation style */
.literary-annotation {
display: inline-flex;
align-items: center;
gap: 0.25rem;
font-family: var(--monospace);
font-size: 0.6875rem;
color: var(--slate-medium);
text-transform: uppercase;
letter-spacing: 0.08em;
}
.literary-annotation::before {
content: '//';
color: var(--book-cloth);
opacity: 0.6;
}
.dark .literary-annotation,
body[theme-mode='dark'] .literary-annotation {
color: var(--cloud-medium);
}
/* Ruler/measurement style decoration */
.literary-ruler {
position: relative;
padding-left: 2rem;
}
.literary-ruler::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 1px;
background: repeating-linear-gradient(to bottom,
var(--book-cloth) 0,
var(--book-cloth) 4px,
transparent 4px,
transparent 8px);
opacity: 0.5;
}
@layer components {
.app-shell {
@apply relative h-screen overflow-hidden;
}
/* Literary Tech: Paper texture overlay for app-shell */
.app-shell::before {
content: '';
position: absolute;
inset: 0;
background-image:
url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
opacity: 0.02;
pointer-events: none;
mix-blend-mode: overlay;
z-index: 0;
}
.dark .app-shell::before,
body[theme-mode='dark'] .app-shell::before {
opacity: 0.03;
mix-blend-mode: soft-light;
}
.app-shell__backdrop {
@apply absolute inset-0 -z-10 opacity-80;
}
.app-shell__body {
@apply relative flex h-screen;
}
.app-shell__sidebar {
/* Base styles - extended by component sidebarClass */
@apply flex-shrink-0;
}
/* 侧边栏导航滚动区域 */
.sidebar-nav-scroll {
@apply overflow-y-auto;
/* 隐藏滚动条但保留滚动功能 */
scrollbar-width: none;
-ms-overflow-style: none;
}
.sidebar-nav-scroll::-webkit-scrollbar {
display: none;
}
.app-shell__sidebar-card {
@apply rounded-2xl border p-3 flex-shrink-0;
background: rgba(250, 250, 247, 0.75);
border-color: rgba(145, 145, 141, 0.2);
/* Literary Tech: Remove inner shadow */
}
.dark .app-shell__sidebar-card,
body[theme-mode='dark'] .app-shell__sidebar-card {
background: rgba(38, 38, 37, 0.72);
border-color: rgba(250, 250, 247, 0.12);
}
.app-shell__content {
/* Fill remaining space, scroll independently */
@apply flex-1 min-w-0 h-screen overflow-y-auto flex flex-col;
}
.app-shell__main {
/* Main content area with padding */
@apply flex-1 px-4 py-6 sm:px-6 lg:px-8 lg:py-8;
}
.surface-glass {
@apply border rounded-3xl backdrop-blur-2xl;
background: rgba(250, 250, 247, 0.82);
border-color: rgba(145, 145, 141, 0.2);
/* Literary Tech: Remove glow shadow, use subtle border only */
box-shadow: none;
}
.dark .surface-glass,
body[theme-mode='dark'] .surface-glass {
background: rgba(38, 38, 37, 0.78);
border-color: rgba(250, 250, 247, 0.14);
}
.surface-glass.soft {
background: rgba(240, 238, 231, 0.68);
}
.shell-panel {
@apply px-5 py-6 transition-all duration-300;
}
.shell-chip {
@apply inline-flex items-center rounded-full border px-3 py-1 text-[10px] sm:text-[11px] font-semibold uppercase tracking-[0.3em] sm:tracking-[0.45em];
border-color: rgba(204, 120, 92, 0.35);
background: rgba(204, 120, 92, 0.12);
color: var(--color-primary);
/* Literary Tech: Remove inner shadow */
}
.dark .shell-chip,
body[theme-mode='dark'] .shell-chip {
border-color: rgba(250, 250, 247, 0.18);
background: rgba(36, 36, 36, 0.6);
color: var(--color-reference-text);
}
.shell-toolbar {
@apply flex flex-col gap-3;
}
.shell-toolbar__field {
@apply flex w-full items-center gap-2 rounded-2xl border px-3 py-2 text-sm;
background: rgba(250, 250, 247, 0.85);
border-color: rgba(145, 145, 141, 0.25);
}
.dark .shell-toolbar__field,
body[theme-mode='dark'] .shell-toolbar__field {
background: rgba(38, 38, 37, 0.65);
border-color: rgba(250, 250, 247, 0.14);
}
.sidebar-nav__link {
@apply flex items-center gap-3 rounded-2xl border px-4 py-3 text-sm font-semibold transition-all duration-200;
border-color: transparent;
}
.sidebar-nav__link--idle {
color: var(--slate-medium);
background: transparent;
}
.dark .sidebar-nav__link--idle,
body[theme-mode='dark'] .sidebar-nav__link--idle {
color: rgba(250, 250, 247, 0.75);
}
.sidebar-nav__link--idle:hover {
border-color: rgba(204, 120, 92, 0.3);
background: rgba(204, 120, 92, 0.15);
color: var(--color-primary);
}
.dark .sidebar-nav__link--idle:hover,
body[theme-mode='dark'] .sidebar-nav__link--idle:hover {
border-color: rgba(250, 250, 247, 0.18);
background: rgba(204, 120, 92, 0.22);
color: var(--color-reference-text);
}
.sidebar-nav__link--active {
border-color: rgba(204, 120, 92, 0.35);
background-color: rgba(204, 120, 92, 0.18);
color: var(--color-primary);
/* Literary Tech: Remove glow shadow */
}
.dark .sidebar-nav__link--active,
body[theme-mode='dark'] .sidebar-nav__link--active {
border-color: rgba(250, 250, 247, 0.18);
color: var(--color-reference-text);
background-color: rgba(204, 120, 92, 0.25);
}
.sidebar-nav__icon {
@apply flex h-10 w-10 items-center justify-center rounded-2xl transition-all;
background: rgba(250, 250, 247, 0.9);
color: var(--slate-medium);
}
.sidebar-nav__link:hover .sidebar-nav__icon {
background: rgba(204, 120, 92, 0.22);
color: var(--color-primary);
}
.dark .sidebar-nav__icon,
body[theme-mode='dark'] .sidebar-nav__icon {
background: rgba(38, 38, 37, 0.6);
color: rgba(250, 250, 247, 0.75);
}
.sidebar-nav__icon--active {
background-color: var(--color-primary);
color: var(--color-white);
/* Literary Tech: Remove glow shadow */
}
.dark .sidebar-nav__icon--active,
body[theme-mode='dark'] .sidebar-nav__icon--active {
background-color: var(--color-primary);
}
.sidebar-nav-enter-active,
.sidebar-nav-leave-active {
transition: all 0.18s ease;
}
.sidebar-nav-enter-from,
.sidebar-nav-leave-to {
opacity: 0;
transform: translateY(4px);
}
.sidebar-nav-move {
transition: transform 0.18s ease;
}
.sidebar-nav__label {
@apply leading-tight;
}
.sidebar-nav__description {
@apply text-[11px] font-normal;
color: var(--slate-medium);
}
.dark .sidebar-nav__description,
body[theme-mode='dark'] .sidebar-nav__description {
color: rgba(250, 250, 247, 0.7);
}
.app-shell__gradient {
@apply pointer-events-none absolute inset-0;
}
.app-shell__gradient--primary {
display: none;
}
.app-shell__gradient--accent {
display: none;
}
.sidebar-profile-card {
@apply mt-auto rounded-3xl p-5 text-white;
background-color: var(--book-cloth);
/* Literary Tech: Remove glow shadow */
}
.dark .sidebar-profile-card,
body[theme-mode='dark'] .sidebar-profile-card {
background-color: var(--book-cloth);
}
.scrollbar-hide {
scrollbar-width: none;
-ms-overflow-style: none;
}
.scrollbar-hide::-webkit-scrollbar {
display: none;
}
}