/* 鍏ㄥ眬CSS鍙橀噺 - 缁熶竴閰嶈壊鏂规 */ :root { /* 涓昏壊璋?*/ --primary: #3b82f6; --primary-hover: #2563eb; --primary-light: rgba(59, 130, 246, 0.1); --primary-border: rgba(59, 130, 246, 0.2); /* 鎴愬姛鑹?*/ --success: #10b981; --success-hover: #059669; --success-light: rgba(16, 185, 129, 0.1); --success-border: rgba(16, 185, 129, 0.2); /* 璀﹀憡鑹?*/ --warning: #f59e0b; --warning-hover: #d97706; --warning-light: rgba(245, 158, 11, 0.1); --warning-border: rgba(245, 158, 11, 0.2); /* 閿欒鑹?*/ --error: #ef4444; --error-hover: #dc2626; --error-light: rgba(239, 68, 68, 0.1); --error-border: rgba(239, 68, 68, 0.2); /* 淇℃伅鑹?*/ --info: #3b82f6; --info-hover: #2563eb; --info-light: rgba(59, 130, 246, 0.1); --info-border: rgba(59, 130, 246, 0.2); /* 鑳屾櫙鑹?*/ --bg-primary: #111111; --bg-secondary: #1a1a1a; --bg-tertiary: #2a2a2a; --bg-quaternary: #3a3a3a; --bg-hover: #1f1f1f; /* 鏂囧瓧棰滆壊 */ --text-primary: #ffffff; --text-secondary: #cccccc; --text-tertiary: #888888; --text-quaternary: #666666; --text-disabled: #444444; /* 杈规棰滆壊 */ --border-primary: #1f1f1f; --border-secondary: #2a2a2a; --border-tertiary: #3a3a3a; --border-quaternary: #4a4a4a; /* 闃村奖 */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1); --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1); --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1); /* 鍦嗚 */ --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px; --radius-xl: 12px; --radius-2xl: 16px; /* 闂磋窛 */ --spacing-xs: 4px; --spacing-sm: 8px; --spacing-md: 12px; --spacing-lg: 16px; --spacing-xl: 20px; --spacing-2xl: 24px; --spacing-3xl: 32px; /* 瀛椾綋澶у皬 */ --text-xs: 12px; --text-sm: 14px; --text-base: 16px; --text-lg: 18px; --text-xl: 20px; --text-2xl: 24px; --text-3xl: 30px; /* 瀛椾綋绮楃粏 */ --font-normal: 400; --font-medium: 500; --font-semibold: 600; --font-bold: 700; /* 杩囨浮鍔ㄧ敾 */ --transition-fast: 0.15s ease; --transition-normal: 0.2s ease; --transition-slow: 0.3s ease; /* Z-index灞傜骇 */ --z-dropdown: 100; --z-sticky: 200; --z-fixed: 300; --z-modal-backdrop: 400; --z-modal: 500; --z-popover: 600; --z-tooltip: 700; --z-toast: 800; /* 鐗规畩鐘舵€侀鑹?*/ --status-pending: #fbbf24; --status-pending-light: rgba(251, 191, 36, 0.1); --status-approved: #10b981; --status-approved-light: rgba(16, 185, 129, 0.1); --status-played: #6b7280; --status-played-light: rgba(107, 114, 128, 0.1); /* 鎶曠エ鐩稿叧棰滆壊 */ --vote-heart: #ef4444; --vote-heart-hover: #dc2626; --vote-count: var(--text-tertiary); /* 鎷栨嫿鐘舵€侀鑹?*/ --drag-over: var(--primary-light); --drag-over-border: var(--primary); --dragging-opacity: 0.5; /* 琛ㄦ牸棰滆壊 */ --table-header-bg: var(--bg-tertiary); --table-row-hover: var(--bg-hover); --table-border: var(--border-secondary); --table-selected: var(--primary-light); /* 鍗$墖棰滆壊 */ --card-bg: var(--bg-secondary); --card-border: var(--border-secondary); --card-hover-border: var(--border-tertiary); --card-shadow: var(--shadow-md); /* 鎸夐挳棰滆壊 */ --btn-primary-bg: var(--primary); --btn-primary-hover: var(--primary-hover); --btn-primary-text: var(--text-primary); --btn-primary-border: var(--primary-border); --btn-secondary-bg: #3a3a3a; --btn-secondary-hover: #4a4a4a; --btn-secondary-text: var(--text-primary); --btn-secondary-border: #555555; --btn-success-bg: var(--success); --btn-success-hover: var(--success-hover); --btn-success-text: var(--text-primary); --btn-success-border: var(--success-border); --btn-warning-bg: var(--warning); --btn-warning-hover: var(--warning-hover); --btn-warning-text: var(--text-primary); --btn-warning-border: var(--warning-border); --btn-error-bg: var(--error); --btn-error-hover: var(--error-hover); --btn-error-text: var(--text-primary); --btn-error-border: var(--error-border); --btn-disabled-bg: var(--bg-tertiary); --btn-disabled-text: var(--text-disabled); /* 杈撳叆妗嗛鑹?*/ --input-bg: var(--bg-tertiary); --input-border: var(--border-tertiary); --input-border-focus: var(--primary); --input-text: var(--text-primary); --input-placeholder: var(--text-quaternary); --input-shadow-focus: 0 0 0 3px var(--primary-light); /* 妯℃€佹棰滆壊 */ --modal-backdrop: rgba(0, 0, 0, 0.7); --modal-bg: var(--bg-secondary); --modal-border: var(--border-secondary); --modal-header-border: var(--border-secondary); --modal-footer-border: var(--border-secondary); /* 閫氱煡棰滆壊 */ --notification-success-bg: var(--success-light); --notification-success-border: var(--success-border); --notification-success-text: var(--success); --notification-warning-bg: var(--warning-light); --notification-warning-border: var(--warning-border); --notification-warning-text: var(--warning); --notification-error-bg: var(--error-light); --notification-error-border: var(--error-border); --notification-error-text: var(--error); --notification-info-bg: var(--info-light); --notification-info-border: var(--info-border); --notification-info-text: var(--info); /* 鍔犺浇鍔ㄧ敾棰滆壊 */ --spinner-primary: var(--primary); --spinner-secondary: var(--bg-tertiary); /* 婊氬姩鏉¢鑹?*/ --scrollbar-track: var(--bg-tertiary); --scrollbar-thumb: var(--bg-quaternary); --scrollbar-thumb-hover: #4a4a4a; } :root[data-theme='light'], :root[data-theme='ClassicLight'], :root[data-theme='ModernLight'] { --bg-primary: #f8fafc; --bg-secondary: #f1f5f9; --bg-tertiary: #e2e8f0; --bg-quaternary: #cbd5e1; --bg-hover: #e2e8f0; --text-primary: #0f172a; --text-secondary: #334155; --text-tertiary: #475569; --text-quaternary: #64748b; --text-disabled: #94a3b8; --border-primary: #e2e8f0; --border-secondary: #cbd5e1; --border-tertiary: #94a3b8; --border-quaternary: #64748b; --modal-backdrop: rgba(0, 0, 0, 0.4); --scrollbar-thumb-hover: #94a3b8; --btn-secondary-bg: #f1f5f9; --btn-secondary-hover: #e2e8f0; --btn-secondary-text: #0f172a; --btn-secondary-border: #cbd5e1; --card-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); } :root[data-theme='ClassicLight'] { --primary: #1e40af; --primary-hover: #1e3a8a; --primary-light: rgba(30, 64, 175, 0.08); --primary-border: rgba(30, 64, 175, 0.15); --bg-primary: #ffffff; --bg-secondary: #f5f7fa; --bg-tertiary: #edf0f5; --bg-quaternary: #d9dee7; --bg-hover: #f0f3f8; --success: #059669; --success-hover: #047857; --success-light: rgba(5, 150, 105, 0.08); --success-border: rgba(5, 150, 105, 0.15); --warning: #d97706; --warning-hover: #b45309; --warning-light: rgba(217, 119, 6, 0.08); --warning-border: rgba(217, 119, 6, 0.15); --error: #dc2626; --error-hover: #b91c1c; --error-light: rgba(220, 38, 38, 0.08); --error-border: rgba(220, 38, 38, 0.15); --info: #2563eb; --info-hover: #1d4ed8; --info-light: rgba(37, 99, 235, 0.08); --info-border: rgba(37, 99, 235, 0.15); --text-primary: #1a2332; --text-secondary: #4a5568; --text-tertiary: #6b7280; --text-quaternary: #9ca3af; --text-disabled: #c5cbd3; --border-primary: #e5e7eb; --border-secondary: #d1d5db; --border-tertiary: #9ca3af; --border-quaternary: #6b7280; --input-bg: #ffffff; --input-border: #d1d5db; --input-border-focus: #1e40af; --input-text: #1a2332; --input-placeholder: #9ca3af; --input-shadow-focus: 0 0 0 3px rgba(30, 64, 175, 0.1); --card-bg: #ffffff; --card-border: #e5e7eb; --card-hover-border: #d1d5db; --table-header-bg: #f5f7fa; --table-row-hover: #f9fafb; --table-border: #e5e7eb; --table-selected: rgba(30, 64, 175, 0.06); --scrollbar-track: #f1f5f9; --scrollbar-thumb: #cbd5e1; --scrollbar-thumb-hover: #94a3b8; --status-pending: #ca8a04; --status-pending-light: rgba(202, 138, 4, 0.08); --status-approved: #059669; --status-approved-light: rgba(5, 150, 105, 0.08); --status-played: #6b7280; --status-played-light: rgba(107, 114, 128, 0.08); --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.04); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.06), 0 2px 4px -2px rgba(0, 0, 0, 0.04); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.06), 0 4px 6px -4px rgba(0, 0, 0, 0.04); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.06), 0 8px 10px -6px rgba(0, 0, 0, 0.04); --radius-sm: 3px; --radius-md: 5px; --radius-lg: 6px; --radius-xl: 8px; --radius-2xl: 10px; } :root[data-theme='ModernLight'] { --primary: #4f46e5; --primary-hover: #4338ca; --primary-light: rgba(79, 70, 229, 0.1); --primary-border: rgba(79, 70, 229, 0.2); --bg-primary: #fafafa; --bg-secondary: #f4f4f5; --bg-tertiary: #e4e4e7; --bg-quaternary: #d4d4d8; --bg-hover: #eeeeef; --success: #16a34a; --success-hover: #15803d; --success-light: rgba(22, 163, 74, 0.1); --success-border: rgba(22, 163, 74, 0.2); --warning: #ea580c; --warning-hover: #c2410c; --warning-light: rgba(234, 88, 12, 0.1); --warning-border: rgba(234, 88, 12, 0.2); --error: #e11d48; --error-hover: #be123c; --error-light: rgba(225, 29, 72, 0.1); --error-border: rgba(225, 29, 72, 0.2); --info: #0ea5e9; --info-hover: #0284c7; --info-light: rgba(14, 165, 233, 0.1); --info-border: rgba(14, 165, 233, 0.2); --text-primary: #09090b; --text-secondary: #3f3f46; --text-tertiary: #71717a; --text-quaternary: #a1a1aa; --text-disabled: #d4d4d8; --border-primary: #e4e4e7; --border-secondary: #d4d4d8; --border-tertiary: #a1a1aa; --border-quaternary: #71717a; --input-bg: #ffffff; --input-border: #e4e4e7; --input-border-focus: #4f46e5; --input-text: #09090b; --input-placeholder: #a1a1aa; --input-shadow-focus: 0 0 0 3px rgba(79, 70, 229, 0.12); --card-bg: #ffffff; --card-border: #e4e4e7; --card-hover-border: #d4d4d8; --table-header-bg: #f4f4f5; --table-row-hover: #fafafa; --table-border: #e4e4e7; --table-selected: rgba(79, 70, 229, 0.08); --scrollbar-track: #f4f4f5; --scrollbar-thumb: #d4d4d8; --scrollbar-thumb-hover: #a1a1aa; --status-pending: #eab308; --status-pending-light: rgba(234, 179, 8, 0.12); --status-approved: #22c55e; --status-approved-light: rgba(34, 197, 94, 0.12); --status-played: #71717a; --status-played-light: rgba(113, 113, 122, 0.12); --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.03); --shadow-md: 0 2px 8px -2px rgba(0, 0, 0, 0.05), 0 1px 3px 0 rgba(0, 0, 0, 0.03); --shadow-lg: 0 8px 24px -4px rgba(0, 0, 0, 0.06), 0 2px 8px -4px rgba(0, 0, 0, 0.04); --shadow-xl: 0 16px 40px -8px rgba(0, 0, 0, 0.08), 0 4px 16px -8px rgba(0, 0, 0, 0.05); --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px; --radius-xl: 10px; --radius-2xl: 12px; } /* 娣辫壊涓婚鐗瑰畾璋冩暣 */ @media (prefers-color-scheme: dark) { :root { /* 鍦ㄦ繁鑹叉ā寮忎笅鍙互杩涜寰皟 */ } } /* 楂樺姣斿害妯″紡鏀寔 */ @media (prefers-contrast: high) { :root { --border-primary: #444444; --border-secondary: #555555; --border-tertiary: #666666; --text-tertiary: #aaaaaa; --text-quaternary: #888888; } } /* 鍑忓皯鍔ㄧ敾妯″紡鏀寔 */ @media (prefers-reduced-motion: reduce) { :root { --transition-fast: 0s; --transition-normal: 0s; --transition-slow: 0s; } } /* 鍏ㄥ眬婊氬姩鏉℃牱寮?*/ * { scrollbar-width: thin; scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track); } *::-webkit-scrollbar { width: 8px; height: 8px; } *::-webkit-scrollbar-track { background: var(--scrollbar-track); } *::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: var(--radius-md); } *::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-thumb-hover); } /* 鍏ㄥ眬閫夋嫨鏂囨湰鏍峰紡 */ ::selection { background: var(--primary-light); color: var(--text-primary); } /* 鍏ㄥ眬鐒︾偣鏍峰紡 */ *:focus { outline: 2px solid var(--primary); outline-offset: 2px; } *:focus:not(:focus-visible) { outline: none; } /* 鍏ㄥ眬绂佺敤鐘舵€佹牱寮?*/ *:disabled { cursor: not-allowed; opacity: 0.6; } /* 鍏ㄥ眬閾炬帴鏍峰紡 */ a { color: var(--primary); text-decoration: none; transition: color var(--transition-normal); } a:hover { color: var(--primary-hover); } /* 鍏ㄥ眬鎸夐挳閲嶇疆 */ button { border: none; background: none; cursor: pointer; font-family: inherit; } * { -webkit-tap-highlight-color: transparent; } button, a, input, textarea { -webkit-tap-highlight-color: transparent; } @media (hover: none) and (pointer: coarse) { *:focus { outline: none !important; } button, a { -webkit-user-select: none; user-select: none; } } /* 鍏ㄥ眬杈撳叆妗嗛噸缃?*/ input, textarea, select { font-family: inherit; font-size: inherit; } /* 鍏ㄥ眬鍥剧墖鏍峰紡 */ img { max-width: 100%; height: auto; } /* 鍏ㄥ眬琛ㄦ牸鏍峰紡 */ table { border-collapse: collapse; width: 100%; } /* 鍏ㄥ眬浠g爜鏍峰紡 */ code, pre { font-family: 'Fira Code', 'Monaco', 'Consolas', monospace; background: var(--bg-tertiary); border-radius: var(--radius-sm); } code { padding: 2px 4px; font-size: 0.875em; } pre { padding: var(--spacing-lg); overflow-x: auto; } pre code { padding: 0; background: none; }