1379 lines
42 KiB
CSS
1379 lines
42 KiB
CSS
@import "tailwindcss";
|
||
@import "tw-animate-css";
|
||
|
||
@source "../node_modules/streamdown/dist/index.js";
|
||
|
||
/* Heading */
|
||
@source inline("text-{xs,sm,base,lg,xl,2xl,3xl,4xl,5xl,6xl}");
|
||
@source inline("font-{normal,medium,semibold,bold,extrabold}");
|
||
@source inline("leading-{none,tight,snug,normal,relaxed,loose}");
|
||
|
||
/* Spacing */
|
||
@source inline("m{t,b,l,r,x,y}-{0,1,2,3,4,5,6,8,10,12,16,20,24}");
|
||
@source inline("p{t,b,l,r,x,y}-{0,1,2,3,4,5,6,8,10,12,16,20,24}");
|
||
@source inline("space-{x,y}-{1,2,3,4,5,6,8}");
|
||
|
||
/* List */
|
||
@source inline("list-{disc,decimal,none,inside,outside}");
|
||
|
||
/* Text */
|
||
@source inline("text-{left,center,right,justify}");
|
||
@source inline("text-{slate,gray,zinc,neutral,stone}-{50,100,200,300,400,500,600,700,800,900,950}");
|
||
@source inline("italic");
|
||
@source inline("underline");
|
||
@source inline("line-through");
|
||
|
||
/* Code */
|
||
@source inline("font-mono");
|
||
@source inline("bg-{slate,gray,zinc,muted}-{50,100,200}");
|
||
@source inline("rounded{,-sm,-md,-lg,-xl}");
|
||
@source inline("border{,-2,-4}");
|
||
@source inline("border-{slate,gray,zinc,border}-{200,300}");
|
||
|
||
/* Blockquote */
|
||
@source inline("border-l-{2,4}");
|
||
@source inline("border-l-{slate,gray,primary}-{300,400,500}");
|
||
|
||
/* 战情大屏(dashboard-agent):时间线圆圈/虚线、FooterNote 左侧强调条等用到的
|
||
* 语义色边框——本项目边框色需显式 safelist,否则只生成宽度、颜色回退成灰色。
|
||
* 明、暗两套各一行。 */
|
||
@source inline("border-{red,emerald,sky,amber}-{200,300,400,500,600,700}");
|
||
@source inline("dark:border-{red,emerald,sky,amber}-{200,300,400,500,600,700}");
|
||
|
||
/* Link */
|
||
@source inline("text-{blue,primary,accent}-{500,600,700}");
|
||
@source inline("hover:text-{blue,primary,accent}-{600,700,800}");
|
||
@source inline("hover:underline");
|
||
|
||
/* Table */
|
||
@source inline("border-collapse");
|
||
@source inline("table-auto");
|
||
@source inline("w-full");
|
||
@source inline("divide-{x,y}");
|
||
@source inline("divide-{slate,gray,border}-{200,300}");
|
||
|
||
/* Image */
|
||
@source inline("max-w-{xs,sm,md,lg,xl,2xl,full}");
|
||
@source inline("h-auto");
|
||
@source inline("object-cover");
|
||
|
||
/* Horizontal Rule */
|
||
@source inline("border-t");
|
||
@source inline("border-{slate,gray,border}-{200,300}");
|
||
|
||
/* General */
|
||
@source inline("block");
|
||
@source inline("inline");
|
||
@source inline("inline-block");
|
||
@source inline("break-words");
|
||
@source inline("overflow-{auto,hidden,x-auto}");
|
||
@source inline("whitespace-pre-wrap");
|
||
|
||
/* Shadcn Colors */
|
||
@source inline("text-{foreground,muted-foreground,primary,secondary,accent}");
|
||
@source inline("bg-{background,muted,primary,secondary,accent}");
|
||
@source inline("border-{border,input}");
|
||
|
||
@custom-variant dark (&:is(.dark *));
|
||
|
||
@theme {
|
||
--font-sans:
|
||
"Noto Sans S Chinese", "Noto Sans SC", "Source Han Sans SC", "思源黑体",
|
||
"Microsoft YaHei", "PingFang SC", ui-sans-serif, system-ui, sans-serif,
|
||
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||
|
||
--animate-fade-in: fade-in 1.1s;
|
||
@keyframes fade-in {
|
||
0% {
|
||
opacity: 0;
|
||
}
|
||
100% {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
--animate-fade-in-up: fade-in-up 0.15s ease-in-out forwards;
|
||
@keyframes fade-in-up {
|
||
0% {
|
||
opacity: 0;
|
||
transform: translateY(1rem) scale(1.2);
|
||
}
|
||
100% {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
--animate-bouncing: bouncing 0.5s infinite alternate;
|
||
@keyframes bouncing {
|
||
to {
|
||
opacity: 0.1;
|
||
transform: translateY(-8px);
|
||
}
|
||
}
|
||
|
||
--animate-skeleton-entrance: skeleton-entrance 0.35s ease-out forwards;
|
||
@keyframes skeleton-entrance {
|
||
0% {
|
||
opacity: 0;
|
||
transform: scaleX(0);
|
||
}
|
||
100% {
|
||
opacity: 1;
|
||
transform: scaleX(1);
|
||
}
|
||
}
|
||
|
||
--animate-suggestion-in: suggestion-in 0.2s ease-out forwards;
|
||
@keyframes suggestion-in {
|
||
0% {
|
||
opacity: 0;
|
||
transform: translateY(-1.25rem);
|
||
}
|
||
100% {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
}
|
||
|
||
--animate-breathe-stop: breathe-stop 1.8s ease-in-out infinite;
|
||
@keyframes breathe-stop {
|
||
0%,
|
||
100% {
|
||
transform: scale(1);
|
||
box-shadow:
|
||
0 0 0 0 rgba(217, 33, 33, 0.14),
|
||
0 8px 24px -14px rgba(217, 33, 33, 0.35);
|
||
}
|
||
50% {
|
||
transform: scale(1.06);
|
||
box-shadow:
|
||
0 0 0 10px rgba(217, 33, 33, 0),
|
||
0 14px 32px -16px rgba(217, 33, 33, 0.45);
|
||
}
|
||
}
|
||
}
|
||
|
||
@theme inline {
|
||
--radius-sm: calc(var(--radius) - 4px);
|
||
--radius-md: calc(var(--radius) - 2px);
|
||
--radius-lg: var(--radius);
|
||
--radius-xl: calc(var(--radius) + 4px);
|
||
--radius-2xl: calc(var(--radius) + 8px);
|
||
--radius-3xl: calc(var(--radius) + 12px);
|
||
--radius-4xl: calc(var(--radius) + 16px);
|
||
--color-background: var(--background);
|
||
--color-foreground: var(--foreground);
|
||
--color-card: var(--card);
|
||
--color-card-foreground: var(--card-foreground);
|
||
--color-popover: var(--popover);
|
||
--color-popover-foreground: var(--popover-foreground);
|
||
--color-primary: var(--primary);
|
||
--color-primary-foreground: var(--primary-foreground);
|
||
--color-secondary: var(--secondary);
|
||
--color-secondary-foreground: var(--secondary-foreground);
|
||
--color-muted: var(--muted);
|
||
--color-muted-foreground: var(--muted-foreground);
|
||
--color-accent: var(--accent);
|
||
--color-accent-foreground: var(--accent-foreground);
|
||
--color-destructive: var(--destructive);
|
||
--color-border: var(--border);
|
||
--color-input: var(--input);
|
||
--color-ring: var(--ring);
|
||
--color-chart-1: var(--chart-1);
|
||
--color-chart-2: var(--chart-2);
|
||
--color-chart-3: var(--chart-3);
|
||
--color-chart-4: var(--chart-4);
|
||
--color-chart-5: var(--chart-5);
|
||
--color-sidebar: var(--sidebar);
|
||
--color-sidebar-foreground: var(--sidebar-foreground);
|
||
--color-sidebar-primary: var(--sidebar-primary);
|
||
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
||
--color-sidebar-accent: var(--sidebar-accent);
|
||
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
||
--color-sidebar-border: var(--sidebar-border);
|
||
--color-sidebar-ring: var(--sidebar-ring);
|
||
--animate-aurora: aurora 8s ease-in-out infinite alternate;
|
||
@keyframes aurora {
|
||
0% {
|
||
background-position: 0% 50%;
|
||
transform: rotate(-5deg) scale(0.9);
|
||
}
|
||
25% {
|
||
background-position: 50% 100%;
|
||
transform: rotate(5deg) scale(1.1);
|
||
}
|
||
50% {
|
||
background-position: 100% 50%;
|
||
transform: rotate(-3deg) scale(0.95);
|
||
}
|
||
75% {
|
||
background-position: 50% 0%;
|
||
transform: rotate(3deg) scale(1.05);
|
||
}
|
||
100% {
|
||
background-position: 0% 50%;
|
||
transform: rotate(-5deg) scale(0.9);
|
||
}
|
||
}
|
||
--animate-shine: shine var(--duration) infinite linear;
|
||
@keyframes shine {
|
||
0% {
|
||
background-position: 0% 0%;
|
||
}
|
||
50% {
|
||
background-position: 100% 100%;
|
||
}
|
||
to {
|
||
background-position: 0% 0%;
|
||
}
|
||
}
|
||
}
|
||
|
||
:root {
|
||
--workspace-brand: #f5222d;
|
||
--workspace-brand-foreground: #ffffff;
|
||
--brand-200: #feeded;
|
||
--brand-900: #cf1322;
|
||
--brand-950: #a8071a;
|
||
--radius: 0.75rem;
|
||
/* Keep the base design tokens in legacy color syntax. CSS custom
|
||
properties containing oklch() make every dependent Tailwind color rule
|
||
invalid in Chrome 109 and below. */
|
||
--background: #ffffff;
|
||
--foreground: #231716;
|
||
--card: #ffffff;
|
||
--card-foreground: #231716;
|
||
--popover: #ffffff;
|
||
--popover-foreground: #231716;
|
||
--primary: #be2323;
|
||
--primary-foreground: #fcfcfc;
|
||
--secondary: #f2f0ea;
|
||
--secondary-foreground: #513b38;
|
||
--muted: #f5f3ef;
|
||
--muted-foreground: #695958;
|
||
--accent: #ffedeb;
|
||
--accent-foreground: #7b2727;
|
||
--destructive: #e40014;
|
||
--border: #dfded8;
|
||
--input: #e0ded7;
|
||
--ring: rgba(190, 35, 35, 0.35);
|
||
--chart-1: #d94a32;
|
||
--chart-2: #188f95;
|
||
--chart-3: #4f6680;
|
||
--chart-4: #e8a72a;
|
||
--chart-5: #db8d16;
|
||
--sidebar: #fdfcfb;
|
||
--sidebar-foreground: #322524;
|
||
--sidebar-primary: #be2323;
|
||
--sidebar-primary-foreground: #fcfcfc;
|
||
--sidebar-accent: #fff6ec;
|
||
--sidebar-accent-foreground: #633a32;
|
||
--sidebar-border: #e8e4dd;
|
||
--sidebar-ring: rgba(190, 35, 35, 0.4);
|
||
|
||
/* Chrome 109 fallback channels for Tailwind opacity modifiers. */
|
||
--legacy-accent-rgb: 255 237 235;
|
||
--legacy-background-rgb: 255 255 255;
|
||
--legacy-border-rgb: 223 222 216;
|
||
--legacy-brand-200-rgb: 254 237 237;
|
||
--legacy-card-rgb: 255 255 255;
|
||
--legacy-destructive-rgb: 228 0 20;
|
||
--legacy-foreground-rgb: 35 23 22;
|
||
--legacy-input-rgb: 224 222 215;
|
||
--legacy-muted-rgb: 245 243 239;
|
||
--legacy-muted-foreground-rgb: 105 89 88;
|
||
--legacy-primary-rgb: 190 35 35;
|
||
--legacy-primary-foreground-rgb: 252 252 252;
|
||
--legacy-ring-rgb: 190 35 35;
|
||
--legacy-secondary-rgb: 242 240 234;
|
||
--legacy-sidebar-accent-rgb: 255 246 236;
|
||
--legacy-sidebar-border-rgb: 232 228 221;
|
||
--legacy-sidebar-foreground-rgb: 50 37 36;
|
||
--legacy-workspace-brand-rgb: 245 34 45;
|
||
}
|
||
|
||
.dark {
|
||
--workspace-brand: #3b82f6;
|
||
--workspace-brand-foreground: #ffffff;
|
||
--background: #0e172b;
|
||
--foreground: #eff2f5;
|
||
--card: #1a2539;
|
||
--card-foreground: #eff2f5;
|
||
--popover: #17243a;
|
||
--popover-foreground: #eff2f5;
|
||
--primary: #2b81ff;
|
||
--primary-foreground: #fcfcfc;
|
||
--secondary: #273346;
|
||
--secondary-foreground: #eff2f5;
|
||
--muted: #232e40;
|
||
--muted-foreground: #8e9aa4;
|
||
--accent: #283b5a;
|
||
--accent-foreground: #eff2f5;
|
||
--destructive: #ff6568;
|
||
--border: rgba(255, 255, 255, 0.12);
|
||
--input: rgba(255, 255, 255, 0.14);
|
||
--ring: rgba(43, 129, 255, 0.45);
|
||
--chart-1: #236bdb;
|
||
--chart-2: #51c49d;
|
||
--chart-3: #e8b02a;
|
||
--chart-4: #a65be5;
|
||
--chart-5: #e65a42;
|
||
--sidebar: #0d1830;
|
||
--sidebar-foreground: #e8ecee;
|
||
--sidebar-primary: #2b81ff;
|
||
--sidebar-primary-foreground: #fcfcfc;
|
||
--sidebar-accent: #1d2e49;
|
||
--sidebar-accent-foreground: #eff2f5;
|
||
--sidebar-border: rgba(255, 255, 255, 0.1);
|
||
--sidebar-ring: rgba(43, 129, 255, 0.45);
|
||
--legacy-accent-rgb: 40 59 90;
|
||
--legacy-background-rgb: 14 23 43;
|
||
--legacy-border-rgb: 255 255 255;
|
||
--legacy-card-rgb: 26 37 57;
|
||
--legacy-destructive-rgb: 255 101 104;
|
||
--legacy-foreground-rgb: 239 242 245;
|
||
--legacy-input-rgb: 255 255 255;
|
||
--legacy-muted-rgb: 35 46 64;
|
||
--legacy-muted-foreground-rgb: 142 154 164;
|
||
--legacy-primary-rgb: 43 129 255;
|
||
--legacy-primary-foreground-rgb: 252 252 252;
|
||
--legacy-ring-rgb: 43 129 255;
|
||
--legacy-secondary-rgb: 39 51 70;
|
||
--legacy-sidebar-accent-rgb: 29 46 73;
|
||
--legacy-sidebar-border-rgb: 255 255 255;
|
||
--legacy-sidebar-foreground-rgb: 232 236 238;
|
||
--legacy-workspace-brand-rgb: 59 130 246;
|
||
font-weight: 300;
|
||
}
|
||
|
||
/* 浅蓝色主题 —— 详见 docs/ui规范-浅蓝/浅蓝色ui规范.md。
|
||
第三套主题,由 next-themes 在 <html> 加 `.lightblue` 类触发。
|
||
只覆盖颜色 token(圆角/间距沿用 :root),实现整站换肤;
|
||
主色 #0062D9(ZS-002 深色基准),浅底 #EAF4FF,正文 #3D3D3D。 */
|
||
.lightblue {
|
||
--workspace-brand: #0062d9;
|
||
--workspace-brand-foreground: #ffffff;
|
||
--brand-200: #eaf4ff;
|
||
--brand-900: #0062d9;
|
||
--brand-950: #004ab3;
|
||
--background: #ffffff;
|
||
--foreground: #3d3d3d;
|
||
--card: #ffffff;
|
||
--card-foreground: #3d3d3d;
|
||
--popover: #ffffff;
|
||
--popover-foreground: #3d3d3d;
|
||
--primary: #0062d9;
|
||
--primary-foreground: #ffffff;
|
||
--secondary: #f4f9ff;
|
||
--secondary-foreground: #0056c6;
|
||
--muted: #f3f5f8;
|
||
--muted-foreground: #7f7f7f;
|
||
--accent: #eaf4ff;
|
||
--accent-foreground: #0062d9;
|
||
--destructive: #f5222d;
|
||
--border: #dbdbdb;
|
||
--input: #dbdbdb;
|
||
--ring: rgb(0 98 217 / 0.35);
|
||
--chart-1: #0062d9;
|
||
--chart-2: #1eb07f;
|
||
--chart-3: #ff9900;
|
||
--chart-4: #2f9acc;
|
||
--chart-5: #f5222d;
|
||
--sidebar: #f9fcff;
|
||
--sidebar-foreground: #3d3d3d;
|
||
--sidebar-primary: #0062d9;
|
||
--sidebar-primary-foreground: #ffffff;
|
||
--sidebar-accent: #eaf4ff;
|
||
--sidebar-accent-foreground: #0056c6;
|
||
--sidebar-border: #e6ebf2;
|
||
--sidebar-ring: rgb(0 98 217 / 0.4);
|
||
--legacy-accent-rgb: 234 244 255;
|
||
--legacy-background-rgb: 255 255 255;
|
||
--legacy-border-rgb: 219 219 219;
|
||
--legacy-brand-200-rgb: 234 244 255;
|
||
--legacy-card-rgb: 255 255 255;
|
||
--legacy-destructive-rgb: 245 34 45;
|
||
--legacy-foreground-rgb: 61 61 61;
|
||
--legacy-input-rgb: 219 219 219;
|
||
--legacy-muted-rgb: 243 245 248;
|
||
--legacy-muted-foreground-rgb: 127 127 127;
|
||
--legacy-primary-rgb: 0 98 217;
|
||
--legacy-primary-foreground-rgb: 255 255 255;
|
||
--legacy-ring-rgb: 0 98 217;
|
||
--legacy-secondary-rgb: 244 249 255;
|
||
--legacy-sidebar-accent-rgb: 234 244 255;
|
||
--legacy-sidebar-border-rgb: 230 235 242;
|
||
--legacy-sidebar-foreground-rgb: 61 61 61;
|
||
--legacy-workspace-brand-rgb: 0 98 217;
|
||
}
|
||
|
||
@layer base {
|
||
* {
|
||
@apply border-border outline-ring/50;
|
||
}
|
||
body {
|
||
@apply bg-background text-foreground;
|
||
}
|
||
|
||
/* 打通高度链:html/body/#root 取满父级高度,使下游用 h-full(100%) 的根布局
|
||
(PageRoutes 的 PageLayout)跟随容器尺寸而非视口。
|
||
- 全屏:100% 逐级解析到视口,与原先的 h-screen 等价,无视觉变化;
|
||
- 无界(wujie)等嵌套:wujie 会把子应用的 html/body 选择器作用到 <wujie-app>
|
||
容器,于是高度收缩到容器而非整屏 —— 这正是「高度对齐容器」所需。
|
||
只设 height、不设 overflow,因此不影响 Landing 等需要自然滚动的页面。 */
|
||
html,
|
||
body,
|
||
#root {
|
||
height: 100%;
|
||
}
|
||
|
||
/* 无界嵌入:Radix scroll-lock 可能误算 margin-right,留下右侧空白条 */
|
||
html.wujie-embed body {
|
||
margin-right: 0 !important;
|
||
padding-right: 0 !important;
|
||
}
|
||
|
||
[data-sidebar="menu-button"][data-active="true"] {
|
||
box-shadow: inset 3px 0 0 var(--primary);
|
||
font-weight: 600;
|
||
}
|
||
|
||
[data-sidebar="menu-button"][data-active="true"] svg {
|
||
color: var(--primary);
|
||
}
|
||
|
||
.container-md {
|
||
width: 100%;
|
||
@media (width >= 40rem) {
|
||
max-width: 40rem;
|
||
}
|
||
@media (width >= 48rem) {
|
||
max-width: 48rem;
|
||
}
|
||
@media (width >= 64rem) {
|
||
max-width: 64rem;
|
||
}
|
||
@media (width >= 80rem) {
|
||
max-width: 80rem;
|
||
}
|
||
}
|
||
|
||
.ambilight {
|
||
pointer-events: none;
|
||
opacity: 0;
|
||
transition: opacity 1s ease-in-out;
|
||
}
|
||
|
||
.ambilight:before,
|
||
.ambilight:after {
|
||
content: "";
|
||
pointer-events: none;
|
||
position: absolute;
|
||
left: 0;
|
||
top: 0;
|
||
background: linear-gradient(
|
||
45deg,
|
||
#fb0094,
|
||
#0000ff,
|
||
#00ff00,
|
||
#ffff00,
|
||
#ff0000,
|
||
#fb0094,
|
||
#0000ff,
|
||
#00ff00,
|
||
#ffff00,
|
||
#ff0000
|
||
);
|
||
background-size: 400%;
|
||
width: 100%;
|
||
height: 100%;
|
||
border-radius: 10px;
|
||
z-index: -1;
|
||
animation: ambilight 40s ease-in-out infinite;
|
||
}
|
||
|
||
.ambilight.enabled {
|
||
opacity: 1;
|
||
}
|
||
|
||
.dark .ambilight:before,
|
||
.dark .ambilight:after {
|
||
opacity: 0.85;
|
||
}
|
||
|
||
@keyframes ambilight {
|
||
0% {
|
||
background-position: 0 0;
|
||
}
|
||
50% {
|
||
background-position: 400% 0;
|
||
}
|
||
100% {
|
||
background-position: 0 0;
|
||
}
|
||
}
|
||
|
||
.ambilight:after {
|
||
filter: blur(60px);
|
||
}
|
||
|
||
.golden-text {
|
||
background: linear-gradient(135deg, #d19e1d 0%, #e9c665 50%, #e3a812 100%);
|
||
-webkit-background-clip: text;
|
||
background-clip: text;
|
||
-webkit-text-fill-color: transparent;
|
||
text-fill-color: transparent;
|
||
}
|
||
|
||
*::-webkit-scrollbar {
|
||
width: 10px;
|
||
height: 10px;
|
||
}
|
||
|
||
*::-webkit-scrollbar-track {
|
||
background: transparent;
|
||
}
|
||
|
||
*::-webkit-scrollbar-thumb {
|
||
border: 2px solid transparent;
|
||
border-radius: 999px;
|
||
background: linear-gradient(180deg, rgb(241 89 89 / 0.82), rgb(214 36 36 / 0.9))
|
||
padding-box;
|
||
}
|
||
|
||
.workspace-shell {
|
||
background: #ffffff;
|
||
}
|
||
|
||
.dark .workspace-shell {
|
||
background: var(--background);
|
||
}
|
||
|
||
/* 深色背景换成设计稿深蓝主题底图。background-color 作为图片加载前/超出
|
||
* 区域的回落底色。仅 .dark 生效,浅色模式不受影响。
|
||
* - .workspace-chat-bg:紧凑模式聊天页(ChatPage 在 compactChrome 下挂)
|
||
* - .canvas-writing-bg:AI 写作页(AIWritingPage 根容器)*/
|
||
.dark .workspace-chat-bg,
|
||
.dark .canvas-writing-bg {
|
||
background-color: var(--background);
|
||
background-image: url("../assets/img/layout-bg-theme-dark-blue.svg");
|
||
background-size: cover;
|
||
background-position: center top;
|
||
background-repeat: no-repeat;
|
||
background-attachment: fixed;
|
||
}
|
||
|
||
/* AI 写作「课题研究」左栏(ResearchSidebar,class=ai-research-sidebar)的深蓝适配。
|
||
* 该组件只为浅色写死了 slate/white,这里仅在 .dark 下统一改写为半透明深蓝玻璃面板 +
|
||
* 可读文字(对齐 .sidebar-contents:bg rgba(3,38,80,.8) + 蓝色发光边框),叠 backdrop
|
||
* 模糊让外壳 canvas-writing-bg 的深蓝底图朦胧透出。浅色模式不命中,原样式完全不变;
|
||
* 彩色图标 chip / rose 选中态作语义高亮,刻意不收进此表。 */
|
||
.dark .ai-research-sidebar {
|
||
background-color: rgba(3, 38, 80, 0.8) !important;
|
||
border-color: rgba(43, 143, 254, 0.45) !important;
|
||
color: #c5cfe0 !important;
|
||
box-shadow: none !important;
|
||
backdrop-filter: blur(12px);
|
||
}
|
||
.dark .ai-research-sidebar .bg-white {
|
||
background-color: rgba(255, 255, 255, 0.05) !important;
|
||
}
|
||
.dark .ai-research-sidebar
|
||
:is(.bg-slate-50, .bg-slate-50\/80, .bg-slate-50\/70, .bg-slate-100) {
|
||
background-color: rgba(255, 255, 255, 0.06) !important;
|
||
}
|
||
.dark .ai-research-sidebar
|
||
:is(.hover\:bg-slate-50:hover, .hover\:bg-slate-50\/70:hover) {
|
||
background-color: rgba(255, 255, 255, 0.09) !important;
|
||
}
|
||
.dark .ai-research-sidebar .focus\:bg-white:focus {
|
||
background-color: rgba(255, 255, 255, 0.1) !important;
|
||
}
|
||
.dark .ai-research-sidebar
|
||
:is(.border-slate-100, .border-slate-100\/80, .border-slate-200) {
|
||
border-color: rgba(43, 143, 254, 0.22) !important;
|
||
}
|
||
.dark .ai-research-sidebar .hover\:border-slate-200:hover {
|
||
border-color: rgba(43, 143, 254, 0.42) !important;
|
||
}
|
||
.dark .ai-research-sidebar :is(.text-slate-900, .text-slate-800, .text-slate-700) {
|
||
color: #e8edf5 !important;
|
||
}
|
||
.dark .ai-research-sidebar
|
||
:is(.text-slate-600, .text-slate-500, .text-slate-400, .text-slate-300) {
|
||
color: #8aa0c4 !important;
|
||
}
|
||
.dark .ai-research-sidebar
|
||
:is(
|
||
.hover\:text-slate-800:hover,
|
||
.hover\:text-slate-900:hover,
|
||
.hover\:text-slate-950:hover
|
||
) {
|
||
color: #e8edf5 !important;
|
||
}
|
||
/* 浅色投影在深底上发灰,去掉子元素的阴影 */
|
||
.dark .ai-research-sidebar [class*="shadow-"] {
|
||
box-shadow: none !important;
|
||
}
|
||
/* 模板图标 chip:浅彩底(*-50)深色下发白 → 改主题语义色 16% 透明软底 + 提亮图标
|
||
* (色值取自《深蓝色 UI 规范》§1.1.9 功能语义色 / §1.1.7 装饰色)。 */
|
||
.dark .ai-research-sidebar .bg-blue-50 {
|
||
background-color: rgba(22, 119, 255, 0.16) !important;
|
||
}
|
||
.dark .ai-research-sidebar .text-blue-600 {
|
||
color: #4096ff !important;
|
||
}
|
||
.dark .ai-research-sidebar .bg-violet-50 {
|
||
background-color: rgba(99, 136, 255, 0.16) !important;
|
||
}
|
||
.dark .ai-research-sidebar .text-violet-600 {
|
||
color: #6388ff !important;
|
||
}
|
||
.dark .ai-research-sidebar .bg-emerald-50 {
|
||
background-color: rgba(82, 196, 26, 0.16) !important;
|
||
}
|
||
.dark .ai-research-sidebar .text-emerald-600 {
|
||
color: #52c41a !important;
|
||
}
|
||
.dark .ai-research-sidebar .bg-cyan-50 {
|
||
background-color: rgba(19, 194, 194, 0.16) !important;
|
||
}
|
||
.dark .ai-research-sidebar .text-cyan-600 {
|
||
color: #36cfc9 !important;
|
||
}
|
||
.dark .ai-research-sidebar .bg-rose-50 {
|
||
background-color: rgba(245, 34, 45, 0.16) !important;
|
||
}
|
||
.dark .ai-research-sidebar .text-rose-600 {
|
||
color: #ff7875 !important;
|
||
}
|
||
/* 警告橙(amber):模板「周报」chip + 「笔记本服务暂不可用」提示,统一警告软底 +
|
||
* 警告色文字(§1.1.9:警告 #FAAD14 / 软底 rgba(250,173,20,0.16))。 */
|
||
.dark .ai-research-sidebar .bg-amber-50 {
|
||
background-color: rgba(250, 173, 20, 0.16) !important;
|
||
}
|
||
.dark .ai-research-sidebar :is(.text-amber-700, .text-amber-600) {
|
||
color: #faad14 !important;
|
||
}
|
||
|
||
/* 全量模式通用问答左栏(GeneralQaSidebar,class=gq-sidebar)的深蓝适配:深蓝(.dark)
|
||
* 主题下由扁平 bg-sidebar 改为「深蓝主题底图 + 半透明蓝罩」玻璃面板——与右侧主区
|
||
* workspace-chat-bg 同一张 fixed 底图(视口对齐、左右连续),叠一层蓝罩使其略深、读作
|
||
* 独立面板。内部元素已走语义 token,自适配。浅色 / 浅蓝主题不命中,仍用 sidebar token。 */
|
||
.dark .gq-sidebar {
|
||
background-color: transparent !important;
|
||
background-image: linear-gradient(
|
||
rgba(3, 38, 80, 0.72),
|
||
rgba(3, 38, 80, 0.72)
|
||
),
|
||
url("../assets/img/layout-bg-theme-dark-blue.svg");
|
||
background-size: cover, cover;
|
||
background-position: center top, center top;
|
||
background-repeat: no-repeat, no-repeat;
|
||
background-attachment: fixed, fixed;
|
||
}
|
||
|
||
/* 「大屏绘制智能体」独立页顶栏(DashboardAgentPage,class=dashboard-agent-topbar)深色
|
||
* 适配:顶栏只为浅色写死了 slate/white 渐变,深色(.dark)下统一改深蓝(《深蓝色 UI 规范》
|
||
* 卡片底 #122347 / 页面底 #0C1836 / 边框 #1A2F5A / 字体 #C5CFE0),仅作用于顶栏内,
|
||
* 不影响下方大屏/聊天区。浅色不命中,原样式不变。 */
|
||
.dark .dashboard-agent-topbar {
|
||
background-image: linear-gradient(to right, #122347, #0c1836) !important;
|
||
border-color: #1a2f5a !important;
|
||
}
|
||
.dark .dashboard-agent-topbar .text-slate-900 {
|
||
color: #e8edf5 !important;
|
||
}
|
||
.dark .dashboard-agent-topbar
|
||
:is(.text-slate-700, .hover\:text-slate-700:hover) {
|
||
color: #c5cfe0 !important;
|
||
}
|
||
.dark .dashboard-agent-topbar :is(.text-slate-500, .text-slate-400) {
|
||
color: #6e88b0 !important;
|
||
}
|
||
.dark .dashboard-agent-topbar .bg-white {
|
||
background-color: #1a2f5a !important;
|
||
}
|
||
.dark .dashboard-agent-topbar
|
||
:is(.bg-slate-50, .hover\:bg-slate-50:hover) {
|
||
background-color: #0c1836 !important;
|
||
}
|
||
.dark .dashboard-agent-topbar
|
||
:is(.border-slate-100, .border-slate-200) {
|
||
border-color: #1a2f5a !important;
|
||
}
|
||
|
||
/* 「大屏绘制智能体」战情大屏:**全页最小字号 16px**(仅命中本页 wrapper
|
||
* .dashboard-agent-fontscale —— 加在 DashboardAgentPage 根容器上,会包住其下的
|
||
* DashboardApp 顶部标题/导航 Tab/页脚 + 七个战情子页)。把 10/11/12/13px 统一抬到 16px、
|
||
* 14px(text-sm) 抬到 18px,保留「正文 16 / 卡片标题 18(再叠 bold) / 指标大数 ≥20」的层级,
|
||
* 看上去自然不错乱;text-xl/2xl/3xl 本就 ≥16,保持原样不动。
|
||
* 作用域严格限定本页:会商共享的 DashboardApp(无此 wrapper)与其它页面零影响。 */
|
||
.dashboard-agent-fontscale
|
||
:is(.text-\[10px\], .text-\[11px\], .text-xs, .text-\[13px\]) {
|
||
font-size: 16px !important;
|
||
line-height: 1.75 !important;
|
||
}
|
||
.dashboard-agent-fontscale .text-sm {
|
||
font-size: 18px !important;
|
||
line-height: 1.65 !important;
|
||
}
|
||
|
||
/* 语义色边框兜底:本项目 border-red/emerald/sky 等颜色类未被 Tailwind 生成时只剩宽度、
|
||
* 颜色回退成灰色(时间线圆圈/虚线、FooterNote 左侧强调条)。这里在本页作用域内**直接定义**
|
||
* 这些类的 border-color(用 Tailwind v4 颜色变量,带 hex 兜底),不依赖 @source 安全列表的
|
||
* 重新生成,改完即时生效。仅命中 .dashboard-agent-fontscale 子树,不影响其它页面。 */
|
||
.dashboard-agent-fontscale .border-red-200 { border-color: var(--color-red-200, #fecaca) !important; }
|
||
.dashboard-agent-fontscale .border-red-300 { border-color: var(--color-red-300, #fca5a5) !important; }
|
||
.dashboard-agent-fontscale .border-red-400 { border-color: var(--color-red-400, #f87171) !important; }
|
||
.dashboard-agent-fontscale .border-red-500 { border-color: var(--color-red-500, #ef4444) !important; }
|
||
.dashboard-agent-fontscale .border-emerald-500 { border-color: var(--color-emerald-500, #10b981) !important; }
|
||
.dashboard-agent-fontscale .border-sky-500 { border-color: var(--color-sky-500, #0ea5e9) !important; }
|
||
|
||
.workspace-panel {
|
||
border: 1px solid #f0d7d0;
|
||
background: #ffffff;
|
||
box-shadow:
|
||
0 32px 72px -46px rgb(98 63 42 / 0.35),
|
||
0 12px 28px -22px rgb(170 91 75 / 0.24);
|
||
}
|
||
|
||
.dark .workspace-panel {
|
||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||
background: var(--card);
|
||
box-shadow: none;
|
||
}
|
||
|
||
.workspace-user-bubble {
|
||
max-width: min(82%, 42rem);
|
||
border: 1px solid rgb(255 255 255 / 0.14);
|
||
border-radius: 1.6rem 1.6rem 0.5rem 1.6rem;
|
||
background: linear-gradient(135deg, #ff5b67 0%, #ef334d 58%, #df213e 100%);
|
||
color: white;
|
||
box-shadow:
|
||
0 22px 40px -28px rgb(215 39 55 / 0.72),
|
||
0 10px 20px -16px rgb(155 18 34 / 0.48);
|
||
}
|
||
|
||
.workspace-user-bubble a,
|
||
.workspace-user-bubble code {
|
||
color: inherit;
|
||
}
|
||
|
||
.workspace-user-bubble code {
|
||
background: rgb(255 255 255 / 0.18);
|
||
border-radius: 0.5rem;
|
||
padding: 0.1rem 0.35rem;
|
||
}
|
||
|
||
.workspace-assistant-card {
|
||
position: relative;
|
||
width: 100%;
|
||
border: 1px solid #f1d9d3;
|
||
border-radius: 1.75rem;
|
||
background: rgb(255 255 255 / 0.94);
|
||
box-shadow:
|
||
0 28px 48px -42px rgb(120 74 55 / 0.38),
|
||
0 6px 18px -14px rgb(165 93 73 / 0.2);
|
||
}
|
||
|
||
.workspace-assistant-card::before {
|
||
content: "";
|
||
position: absolute;
|
||
top: 1rem;
|
||
left: 1rem;
|
||
width: 0.45rem;
|
||
height: calc(100% - 2rem);
|
||
border-radius: 999px;
|
||
background: linear-gradient(180deg, rgb(255 110 110 / 0.92), rgb(233 45 45 / 0.15));
|
||
opacity: 0.88;
|
||
}
|
||
|
||
.workspace-assistant-card > * {
|
||
position: relative;
|
||
z-index: 1;
|
||
}
|
||
|
||
.workspace-assistant-card .prose,
|
||
.workspace-assistant-card [data-state] {
|
||
width: 100%;
|
||
}
|
||
|
||
.workspace-assistant-card .my-3 {
|
||
margin-block: 0.25rem;
|
||
}
|
||
|
||
.workspace-chat-toolbar {
|
||
border: 1px solid rgb(255 255 255 / 0.22);
|
||
background: rgb(255 255 255 / 0.14);
|
||
color: white;
|
||
backdrop-filter: blur(18px);
|
||
}
|
||
|
||
@keyframes sandbox-preview-enter {
|
||
0% {
|
||
opacity: 0;
|
||
transform: translateY(14px) scale(0.985);
|
||
}
|
||
100% {
|
||
opacity: 1;
|
||
transform: translateY(0) scale(1);
|
||
}
|
||
}
|
||
|
||
@keyframes sandbox-preview-glow {
|
||
0%,
|
||
100% {
|
||
box-shadow:
|
||
0 0 0 0 rgb(227 39 39 / 0),
|
||
0 8px 20px -16px rgb(227 39 39 / 0.1);
|
||
}
|
||
50% {
|
||
box-shadow:
|
||
0 0 0 8px rgb(227 39 39 / 0.08),
|
||
0 18px 34px -18px rgb(227 39 39 / 0.3);
|
||
}
|
||
}
|
||
|
||
@keyframes sandbox-preview-badge {
|
||
0%,
|
||
100% {
|
||
transform: translateY(0);
|
||
opacity: 0.88;
|
||
}
|
||
50% {
|
||
transform: translateY(-1px);
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
@keyframes sandbox-scroll-button-in {
|
||
0% {
|
||
opacity: 0;
|
||
transform: translateY(-45%) scale(0.96);
|
||
}
|
||
100% {
|
||
opacity: 1;
|
||
transform: translateY(-50%) scale(1);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
/* ─── Tiptap writing editor ─────────────────────────────────────────────── */
|
||
.tiptap-writing-editor .ProseMirror {
|
||
outline: none;
|
||
min-height: 320px;
|
||
caret-color: var(--primary);
|
||
padding-bottom: 6rem; /* ensure last paragraph isn't flush against the bottom */
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror p {
|
||
margin-bottom: 1rem;
|
||
line-height: 1.8;
|
||
font-size: 0.9375rem; /* 15px */
|
||
color: var(--foreground);
|
||
text-indent: 2em; /* 段落首行缩进 */
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror h1 {
|
||
font-size: 1.625rem;
|
||
font-weight: 700;
|
||
letter-spacing: -0.025em;
|
||
margin-top: 2rem;
|
||
margin-bottom: 0.75rem;
|
||
padding-bottom: 0.5rem;
|
||
border-bottom: 1px solid var(--border);
|
||
color: var(--foreground);
|
||
line-height: 1.25;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror h1:first-child {
|
||
margin-top: 0;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror h2 {
|
||
font-size: 1.25rem;
|
||
font-weight: 600;
|
||
letter-spacing: -0.015em;
|
||
margin-top: 1.75rem;
|
||
margin-bottom: 0.625rem;
|
||
color: var(--foreground);
|
||
line-height: 1.35;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror h3 {
|
||
font-size: 1.0625rem;
|
||
font-weight: 600;
|
||
letter-spacing: -0.01em;
|
||
margin-top: 1.25rem;
|
||
margin-bottom: 0.5rem;
|
||
color: var(--foreground);
|
||
line-height: 1.4;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror h2:first-child,
|
||
.tiptap-writing-editor .ProseMirror h3:first-child {
|
||
margin-top: 0;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror strong {
|
||
font-weight: 600;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror em {
|
||
font-style: italic;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror s {
|
||
text-decoration: line-through;
|
||
opacity: 0.6;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror ul {
|
||
list-style-type: disc;
|
||
margin-left: 1.5rem;
|
||
margin-bottom: 1rem;
|
||
font-size: 0.9375rem;
|
||
color: var(--foreground);
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror ol {
|
||
list-style-type: decimal;
|
||
margin-left: 1.5rem;
|
||
margin-bottom: 1rem;
|
||
font-size: 0.9375rem;
|
||
color: var(--foreground);
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror li {
|
||
line-height: 1.8;
|
||
margin-bottom: 0.25rem;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror li > p {
|
||
margin-bottom: 0.25rem;
|
||
text-indent: 0; /* 列表项内段落不缩进 */
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror blockquote {
|
||
border-left: 3px solid var(--border);
|
||
padding-left: 1rem;
|
||
margin: 1.25rem 0;
|
||
font-style: italic;
|
||
font-size: 0.9375rem;
|
||
color: var(--muted-foreground);
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror pre {
|
||
background: var(--muted);
|
||
border-radius: 0.5rem;
|
||
padding: 1rem 1.25rem;
|
||
margin: 1rem 0 1.25rem;
|
||
overflow-x: auto;
|
||
border: 1px solid var(--border);
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror pre code {
|
||
background: transparent;
|
||
padding: 0;
|
||
font-size: 0.8125rem; /* 13px */
|
||
font-family: ui-monospace, 'Cascadia Code', 'Fira Code', monospace;
|
||
color: var(--foreground);
|
||
line-height: 1.7;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror code {
|
||
background: var(--muted);
|
||
padding: 0.15rem 0.4rem;
|
||
border-radius: 0.25rem;
|
||
font-size: 0.8125rem;
|
||
font-family: ui-monospace, 'Cascadia Code', 'Fira Code', monospace;
|
||
color: var(--foreground);
|
||
border: 1px solid var(--border);
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror hr {
|
||
border: none;
|
||
border-top: 1px solid var(--border);
|
||
margin: 2rem 0;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror a {
|
||
color: var(--primary);
|
||
text-decoration: underline;
|
||
text-underline-offset: 3px;
|
||
text-decoration-thickness: 1px;
|
||
transition: opacity 0.15s;
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror a:hover {
|
||
opacity: 0.75;
|
||
}
|
||
|
||
/* Placeholder */
|
||
.tiptap-writing-editor .ProseMirror p.is-editor-empty:first-child {
|
||
text-indent: 0; /* 占位文案不缩进 */
|
||
}
|
||
|
||
.tiptap-writing-editor .ProseMirror p.is-editor-empty:first-child::before {
|
||
content: attr(data-placeholder);
|
||
color: var(--muted-foreground);
|
||
pointer-events: none;
|
||
float: left;
|
||
height: 0;
|
||
opacity: 0.6;
|
||
}
|
||
|
||
/* Selection highlight — use color-mix to avoid the background+opacity mismatch */
|
||
.tiptap-writing-editor .ProseMirror ::selection {
|
||
background: color-mix(in srgb, #f87171 35%, transparent);
|
||
}
|
||
|
||
/* AI rewrite — highlight the selected range while the menu / preview is open */
|
||
.ai-rewrite-highlight {
|
||
background: color-mix(in srgb, #fbbf24 30%, transparent);
|
||
border-radius: 2px;
|
||
transition: background 0.2s ease;
|
||
}
|
||
.dark .ai-rewrite-highlight {
|
||
background: color-mix(in srgb, #fbbf24 18%, transparent);
|
||
}
|
||
|
||
:root {
|
||
--container-width-xs: calc(var(--spacing) * 72);
|
||
--container-width-sm: calc(var(--spacing) * 144);
|
||
--container-width-md: calc(var(--spacing) * 204);
|
||
--container-width-lg: calc(var(--spacing) * 256);
|
||
--container-width-xl: calc(var(--spacing) * 280);
|
||
}
|
||
|
||
/* ── Landing 态输入框 Gemini 风格:旋转彩色描边 + 多色柔光阴影 ───────── */
|
||
/* 关键:::before 转动的彩色锥形渐变 + ::after 内嵌白板遮罩中央,只在 1.5px 边缘可见模糊彩光 */
|
||
.gemini-shadow {
|
||
box-shadow:
|
||
0 0 20px rgba(66, 133, 244, 0.10),
|
||
0 0 40px rgba(219, 68, 55, 0.05),
|
||
0 0 60px rgba(244, 180, 0, 0.05),
|
||
0 0 80px rgba(15, 157, 88, 0.05);
|
||
}
|
||
.dark .gemini-shadow {
|
||
box-shadow:
|
||
0 0 24px rgba(66, 133, 244, 0.20),
|
||
0 0 48px rgba(219, 68, 55, 0.10),
|
||
0 0 72px rgba(244, 180, 0, 0.10),
|
||
0 0 96px rgba(15, 157, 88, 0.10);
|
||
}
|
||
|
||
.gemini-gradient-border {
|
||
position: relative;
|
||
background: var(--background);
|
||
border-radius: 1.5rem;
|
||
z-index: 0;
|
||
overflow: hidden;
|
||
}
|
||
.gemini-gradient-border::before {
|
||
content: '';
|
||
position: absolute;
|
||
width: 200%;
|
||
height: 200%;
|
||
top: -50%;
|
||
left: -50%;
|
||
background: conic-gradient(
|
||
from 0deg,
|
||
#4285F4 0deg,
|
||
#DB4437 90deg,
|
||
#F4B400 180deg,
|
||
#0F9D58 270deg,
|
||
#4285F4 360deg
|
||
);
|
||
z-index: -2;
|
||
animation: gemini-rotate 4s linear infinite;
|
||
filter: blur(10px);
|
||
pointer-events: none;
|
||
}
|
||
.gemini-gradient-border::after {
|
||
content: '';
|
||
position: absolute;
|
||
inset: 2.5px;
|
||
background: var(--background);
|
||
border-radius: calc(1.5rem - 2px);
|
||
z-index: -1;
|
||
}
|
||
|
||
@keyframes gemini-rotate {
|
||
to {
|
||
transform: rotate(360deg);
|
||
}
|
||
}
|
||
|
||
* {
|
||
border-color: var(--border);
|
||
outline-color: var(--ring);
|
||
}
|
||
|
||
/* ─── 全局字号缩放(只改字号,不动布局)──────────────────────────────────
|
||
* 用户在「设置 → 外观 → 字号」里选的倍数由 FontScaleApplier 写到
|
||
* <html> 的 `--ui-font-scale`(默认 1)。这里只把 Tailwind 的 `--text-*`
|
||
* 字号 token 乘以该倍数 —— 间距 token(--spacing)原样不动,所以 padding /
|
||
* margin / gap / 宽高这些布局尺寸不随字号变化,避免放大字体把页面挤错位。
|
||
* 行高用 Tailwind 默认的无单位比值,会跟随字号等比变化(文字不会重叠)。
|
||
* 不在 @layer 内,优先级高于 Tailwind 的主题层变量,确保覆盖生效。 */
|
||
:root {
|
||
--ui-font-scale: 1;
|
||
|
||
--text-xs: calc(0.75rem * var(--ui-font-scale, 1));
|
||
--text-sm: calc(0.875rem * var(--ui-font-scale, 1));
|
||
--text-base: calc(1rem * var(--ui-font-scale, 1));
|
||
--text-lg: calc(1.125rem * var(--ui-font-scale, 1));
|
||
--text-xl: calc(1.25rem * var(--ui-font-scale, 1));
|
||
--text-2xl: calc(1.5rem * var(--ui-font-scale, 1));
|
||
--text-3xl: calc(1.875rem * var(--ui-font-scale, 1));
|
||
--text-4xl: calc(2.25rem * var(--ui-font-scale, 1));
|
||
--text-5xl: calc(3rem * var(--ui-font-scale, 1));
|
||
--text-6xl: calc(3.75rem * var(--ui-font-scale, 1));
|
||
--text-7xl: calc(4.5rem * var(--ui-font-scale, 1));
|
||
--text-8xl: calc(6rem * var(--ui-font-scale, 1));
|
||
--text-9xl: calc(8rem * var(--ui-font-scale, 1));
|
||
}
|
||
|
||
/* 没有显式 text-* 类的元素(继承自 body 的默认正文)也跟随缩放。
|
||
* 只设 font-size,不影响任何盒模型尺寸。 */
|
||
body {
|
||
font-size: calc(1rem * var(--ui-font-scale, 1));
|
||
}
|
||
|
||
/* Strategy 顶栏:浅色 / 深色背景图随 html.dark 切换 */
|
||
.strategy-app-header {
|
||
background-color: transparent;
|
||
background-image: url("../assets/img/red-header.png");
|
||
background-size: cover;
|
||
background-repeat: no-repeat;
|
||
background-position: center;
|
||
}
|
||
|
||
html.dark .strategy-app-header {
|
||
background-image: url("../assets/img/top-bg.svg");
|
||
background-size: cover;
|
||
}
|
||
|
||
/* 深色顶栏:居中「CM助手」标题,落在背景图中间的发光梯形基座上。
|
||
左右菜单分区各 flex-1 等宽,本元素居中即对齐背景图基座。 */
|
||
.header-center-title {
|
||
flex: 0 0 auto;
|
||
height: 64px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
/* 左右内边距随视口宽度等比缩放,与背景图基座的 background-size:cover 同步,
|
||
使两侧菜单在 1080p / 2K / 4K 下都贴齐发光基座边缘。
|
||
基准:1920 宽时 155px → 155/1920×100 ≈ 8.07vw。 */
|
||
padding: 0 8.07vw;
|
||
/* 文字略微上移,贴合基座视觉中心 */
|
||
transform: translateY(-6px);
|
||
font-family: "Source Han Sans SC", "Noto Sans SC", "Noto Sans S Chinese",
|
||
"Microsoft YaHei", sans-serif;
|
||
font-size: 26px;
|
||
font-weight: 700;
|
||
letter-spacing: 4px;
|
||
white-space: nowrap;
|
||
pointer-events: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.header-center-title__label {
|
||
/* 白→浅蓝→白 金属质感渐变文字 */
|
||
background: linear-gradient(
|
||
180deg,
|
||
#f9f9fa 0%,
|
||
#ffffff 15%,
|
||
#d8e5ff 49%,
|
||
#ffffff 89%,
|
||
#f8fafb 100%
|
||
);
|
||
-webkit-background-clip: text;
|
||
background-clip: text;
|
||
-webkit-text-fill-color: transparent;
|
||
color: transparent;
|
||
filter: drop-shadow(0 0 14px rgba(120, 200, 255, 0.35));
|
||
}
|
||
|
||
/* ── 浅蓝主题:覆盖散落在各处的红色硬编码(CSS 变量管不到的地方)────────── */
|
||
html.lightblue .strategy-app-header {
|
||
background-image: url("../assets/img/blue-header.png");
|
||
}
|
||
|
||
html.lightblue *::-webkit-scrollbar-thumb {
|
||
background: linear-gradient(180deg, rgb(85 166 254 / 0.82), rgb(0 98 217 / 0.9))
|
||
padding-box;
|
||
}
|
||
|
||
html.lightblue .workspace-panel {
|
||
border: 1px solid #d6e4f5;
|
||
box-shadow:
|
||
0 32px 72px -46px rgb(42 70 110 / 0.35),
|
||
0 12px 28px -22px rgb(75 120 180 / 0.24);
|
||
}
|
||
|
||
html.lightblue .workspace-user-bubble {
|
||
border: 1px solid rgb(255 255 255 / 0.14);
|
||
background: linear-gradient(135deg, #55a6fe 0%, #0079fe 58%, #0062d9 100%);
|
||
box-shadow:
|
||
0 22px 40px -28px rgb(0 98 217 / 0.55),
|
||
0 10px 20px -16px rgb(0 54 140 / 0.42);
|
||
}
|
||
|
||
html.lightblue .workspace-assistant-card {
|
||
border: 1px solid #d9e6f5;
|
||
}
|
||
|
||
html.lightblue .workspace-assistant-card::before {
|
||
background: linear-gradient(180deg, rgb(85 166 254 / 0.92), rgb(0 121 254 / 0.15));
|
||
}
|
||
|
||
html.lightblue .tiptap-writing-editor .ProseMirror ::selection {
|
||
background: color-mix(in srgb, #55a6fe 35%, transparent);
|
||
}
|
||
|
||
/* ── 来源上传弹窗:A系统基因库的分段单选条(custom-radio) ─────────────── */
|
||
/* 外层容器,模拟 nz-radio-group */
|
||
.custom-radio-group {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
font-size: 12px;
|
||
}
|
||
|
||
/* 单个按钮样式 */
|
||
.custom-radio-btn {
|
||
position: relative;
|
||
display: inline-block;
|
||
padding: 5px 16px;
|
||
line-height: 12px;
|
||
background: #fff;
|
||
border: 1px solid #d9d9d9;
|
||
cursor: pointer;
|
||
/* 除第一个外向左移 1px,实现边框重叠,消除双层边框 */
|
||
margin-left: -1px;
|
||
transition: all 0.1s ease;
|
||
user-select: none;
|
||
}
|
||
|
||
/* 第一个按钮:左侧圆角 */
|
||
.custom-radio-btn:first-child {
|
||
margin-left: 0;
|
||
border-radius: 4px 0 0 4px;
|
||
}
|
||
|
||
/* 最后一个按钮:右侧圆角 */
|
||
.custom-radio-btn:last-child {
|
||
border-radius: 0 4px 4px 0;
|
||
}
|
||
|
||
/* 悬浮状态 */
|
||
.custom-radio-btn:hover {
|
||
color: #1890ff;
|
||
z-index: 1;
|
||
}
|
||
|
||
/* 选中状态 */
|
||
.custom-radio-btn.active {
|
||
background-color: #e6f7ff;
|
||
border-color: #1890ff;
|
||
color: #1890ff;
|
||
z-index: 2;
|
||
}
|
||
|
||
/* --------------------------------------------------------------------------
|
||
* Legacy Chrome visual fallbacks
|
||
*
|
||
* Tailwind v4 deliberately uses color-mix() for `bg-primary/10` and similar
|
||
* opacity utilities. In Chrome versions without color-mix(), its generated
|
||
* fallback is the fully opaque primary color. That turns pale selected cards
|
||
* into solid red blocks and makes same-color icons disappear. Keep critical
|
||
* agent surfaces on classic rgba()/hex colours instead.
|
||
* -------------------------------------------------------------------------- */
|
||
.agent-avatar {
|
||
background-color: #feeded;
|
||
color: #cf1322;
|
||
box-shadow: inset 0 0 0 1px rgba(190, 35, 35, 0.15);
|
||
}
|
||
|
||
.dark .agent-avatar {
|
||
background-color: #1b355d;
|
||
color: #ffffff;
|
||
box-shadow: inset 0 0 0 1px rgba(91, 157, 255, 0.38);
|
||
}
|
||
|
||
.lightblue .agent-avatar {
|
||
background-color: #eaf4ff;
|
||
color: #0062d9;
|
||
box-shadow: inset 0 0 0 1px rgba(0, 98, 217, 0.16);
|
||
}
|
||
|
||
.agent-sidebar-card--active {
|
||
background-color: #feeded;
|
||
border-color: rgba(190, 35, 35, 0.5);
|
||
}
|
||
|
||
.dark .agent-sidebar-card--active {
|
||
background-color: #0b4fae;
|
||
border-color: #2b8ffe;
|
||
}
|
||
|
||
.lightblue .agent-sidebar-card--active {
|
||
background-color: #eaf4ff;
|
||
border-color: rgba(0, 98, 217, 0.5);
|
||
}
|
||
|
||
@supports not (color: oklch(1 0 0)) {
|
||
.bg-primary\/5 { background-color: rgba(190, 35, 35, 0.05); }
|
||
.bg-primary\/8 { background-color: rgba(190, 35, 35, 0.08); }
|
||
.bg-primary\/10 { background-color: rgba(190, 35, 35, 0.10); }
|
||
.bg-primary\/14 { background-color: rgba(190, 35, 35, 0.14); }
|
||
.bg-primary\/15 { background-color: rgba(190, 35, 35, 0.15); }
|
||
.bg-primary\/20 { background-color: rgba(190, 35, 35, 0.20); }
|
||
.bg-primary\/25 { background-color: rgba(190, 35, 35, 0.25); }
|
||
.bg-primary\/30 { background-color: rgba(190, 35, 35, 0.30); }
|
||
.bg-primary\/60 { background-color: rgba(190, 35, 35, 0.60); }
|
||
.bg-primary\/70 { background-color: rgba(190, 35, 35, 0.70); }
|
||
.bg-primary\/90 { background-color: rgba(190, 35, 35, 0.90); }
|
||
.border-primary\/15 { border-color: rgba(190, 35, 35, 0.15); }
|
||
.border-primary\/20 { border-color: rgba(190, 35, 35, 0.20); }
|
||
.border-primary\/25 { border-color: rgba(190, 35, 35, 0.25); }
|
||
.border-primary\/30 { border-color: rgba(190, 35, 35, 0.30); }
|
||
.border-primary\/35 { border-color: rgba(190, 35, 35, 0.35); }
|
||
.border-primary\/40 { border-color: rgba(190, 35, 35, 0.40); }
|
||
.border-primary\/50 { border-color: rgba(190, 35, 35, 0.50); }
|
||
.border-primary\/60 { border-color: rgba(190, 35, 35, 0.60); }
|
||
.ring-primary\/15 { --tw-ring-color: rgba(190, 35, 35, 0.15); }
|
||
.ring-primary\/20 { --tw-ring-color: rgba(190, 35, 35, 0.20); }
|
||
.ring-primary\/30 { --tw-ring-color: rgba(190, 35, 35, 0.30); }
|
||
.ring-primary\/40 { --tw-ring-color: rgba(190, 35, 35, 0.40); }
|
||
.ring-primary\/50 { --tw-ring-color: rgba(190, 35, 35, 0.50); }
|
||
.ring-primary\/60 { --tw-ring-color: rgba(190, 35, 35, 0.60); }
|
||
|
||
.dark .bg-primary\/5 { background-color: rgba(43, 129, 255, 0.05); }
|
||
.dark .bg-primary\/8 { background-color: rgba(43, 129, 255, 0.08); }
|
||
.dark .bg-primary\/10 { background-color: rgba(43, 129, 255, 0.10); }
|
||
.dark .bg-primary\/14 { background-color: rgba(43, 129, 255, 0.14); }
|
||
.dark .bg-primary\/15 { background-color: rgba(43, 129, 255, 0.15); }
|
||
.dark .bg-primary\/20 { background-color: rgba(43, 129, 255, 0.20); }
|
||
.dark .bg-primary\/25 { background-color: rgba(43, 129, 255, 0.25); }
|
||
.dark .bg-primary\/30 { background-color: rgba(43, 129, 255, 0.30); }
|
||
.dark .bg-primary\/60 { background-color: rgba(43, 129, 255, 0.60); }
|
||
.dark .bg-primary\/70 { background-color: rgba(43, 129, 255, 0.70); }
|
||
.dark .bg-primary\/90 { background-color: rgba(43, 129, 255, 0.90); }
|
||
|
||
.lightblue .bg-primary\/5 { background-color: rgba(0, 98, 217, 0.05); }
|
||
.lightblue .bg-primary\/8 { background-color: rgba(0, 98, 217, 0.08); }
|
||
.lightblue .bg-primary\/10 { background-color: rgba(0, 98, 217, 0.10); }
|
||
.lightblue .bg-primary\/14 { background-color: rgba(0, 98, 217, 0.14); }
|
||
.lightblue .bg-primary\/15 { background-color: rgba(0, 98, 217, 0.15); }
|
||
.lightblue .bg-primary\/20 { background-color: rgba(0, 98, 217, 0.20); }
|
||
.lightblue .bg-primary\/25 { background-color: rgba(0, 98, 217, 0.25); }
|
||
.lightblue .bg-primary\/30 { background-color: rgba(0, 98, 217, 0.30); }
|
||
.lightblue .bg-primary\/60 { background-color: rgba(0, 98, 217, 0.60); }
|
||
.lightblue .bg-primary\/70 { background-color: rgba(0, 98, 217, 0.70); }
|
||
.lightblue .bg-primary\/90 { background-color: rgba(0, 98, 217, 0.90); }
|
||
}
|