diff --git a/index.html b/index.html index c1529a1..6048656 100644 --- a/index.html +++ b/index.html @@ -30,12 +30,15 @@ tabindex="-1" hidden > -
  • 流光
  • -
  • 极光
  • -
  • 森林
  • -
  • 日落
  • +
  • Fluent
  • +
  • + Material You +
  • - 终端 + Terminal +
  • +
  • + Cyberpunk
  • diff --git a/main.js b/main.js index e5433be..b1d2027 100644 --- a/main.js +++ b/main.js @@ -85,7 +85,9 @@ const themeToggle = document.getElementById("themeToggle") const designThemeButton = document.getElementById("designThemeButton") const designThemeList = document.getElementById("designThemeList") -const DESIGN_THEMES = ["fluent", "aurora", "forest", "sunset", "terminal"] +const DESIGN_THEMES = ["fluent", "material-you", "terminal", "cyberpunk"] +const FORCED_DARK_DESIGN_THEMES = new Set(["terminal", "cyberpunk"]) +const THEME_BEFORE_FORCED_KEY = "themeBeforeForcedDark" // 获取保存的主题或系统偏好 function getInitialTheme() { @@ -108,11 +110,9 @@ function setTheme(theme) { // 切换主题 function toggleTheme() { - if ( - document.documentElement.getAttribute("data-design-theme") === "terminal" - ) { - return - } + const designTheme = + document.documentElement.getAttribute("data-design-theme") || "fluent" + if (FORCED_DARK_DESIGN_THEMES.has(designTheme)) return const currentTheme = document.documentElement.getAttribute("data-theme") || "light" const newTheme = currentTheme === "dark" ? "light" : "dark" @@ -136,20 +136,32 @@ function setDesignTheme(designTheme) { document.documentElement.setAttribute("data-design-theme", safeDesignTheme) localStorage.setItem("designTheme", safeDesignTheme) - if (safeDesignTheme === "terminal") { - if (previousDesignTheme !== "terminal") { + const willForceDark = FORCED_DARK_DESIGN_THEMES.has(safeDesignTheme) + const didForceDark = FORCED_DARK_DESIGN_THEMES.has(previousDesignTheme) + + if (willForceDark) { + if (!didForceDark) { const currentTheme = document.documentElement.getAttribute("data-theme") || "light" - localStorage.setItem("themeBeforeTerminal", currentTheme) + localStorage.setItem(THEME_BEFORE_FORCED_KEY, currentTheme) } setTheme("dark") - } else if (previousDesignTheme === "terminal") { - const restoreTheme = localStorage.getItem("themeBeforeTerminal") + } else if (didForceDark) { + const restoreTheme = + localStorage.getItem(THEME_BEFORE_FORCED_KEY) || + localStorage.getItem("themeBeforeTerminal") if (restoreTheme === "dark" || restoreTheme === "light") { setTheme(restoreTheme) } + localStorage.removeItem(THEME_BEFORE_FORCED_KEY) localStorage.removeItem("themeBeforeTerminal") } + + if (themeToggle) { + themeToggle.disabled = willForceDark + themeToggle.setAttribute("aria-disabled", willForceDark ? "true" : "false") + themeToggle.tabIndex = willForceDark ? -1 : 0 + } } function getDesignThemeLabel(designTheme) { @@ -159,10 +171,9 @@ function getDesignThemeLabel(designTheme) { if (optionEl) return optionEl.textContent?.trim() || "流光" const fallback = { fluent: "流光", - aurora: "极光", - forest: "森林", - sunset: "日落", + "material-you": "Material You", terminal: "终端", + cyberpunk: "Cyberpunk", } return fallback[designTheme] || "流光" } @@ -194,6 +205,16 @@ function getCurrentDesignTheme() { return document.documentElement.getAttribute("data-design-theme") || "fluent" } +const titleEl = document.querySelector(".title") +if (titleEl && !titleEl.dataset.text) { + titleEl.dataset.text = titleEl.textContent?.trim() || "" +} + +const subtitleEl = document.querySelector(".subtitle") +if (subtitleEl && !subtitleEl.dataset.text) { + subtitleEl.dataset.text = subtitleEl.textContent?.trim() || "" +} + // 初始化主题 const initialTheme = getInitialTheme() setTheme(initialTheme) diff --git a/public/备案图标.png b/public/备案图标.png deleted file mode 100644 index 2a13ba2..0000000 Binary files a/public/备案图标.png and /dev/null differ diff --git a/style.css b/style.css index ab24b83..89587ad 100644 --- a/style.css +++ b/style.css @@ -3,8 +3,8 @@ body { padding: 0; margin: 0; font-family: - -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, - Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Cantarell, + "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; min-height: 100vh; } @@ -48,54 +48,6 @@ body { --control-fg: #323130; } -html[data-design-theme="aurora"] { - --accent: #7c4dff; - --accent-rgb: 124, 77, 255; - --accent-2: #5e35b1; - --accent-3: #4527a0; - --accent-secondary-rgb: 0, 188, 212; - --page-gradient: linear-gradient( - 135deg, - #f3e5f5 0%, - #ede7f6 25%, - #e8eaf6 50%, - #e0f7fa 75%, - #e3f2fd 100% - ); -} - -html[data-design-theme="forest"] { - --accent: #2e7d32; - --accent-rgb: 46, 125, 50; - --accent-2: #1b5e20; - --accent-3: #0d3d14; - --accent-secondary-rgb: 0, 150, 136; - --page-gradient: linear-gradient( - 135deg, - #e8f5e9 0%, - #e3f2fd 25%, - #f1f8e9 50%, - #e0f2f1 75%, - #e8f5e9 100% - ); -} - -html[data-design-theme="sunset"] { - --accent: #ff6d00; - --accent-rgb: 255, 109, 0; - --accent-2: #f44336; - --accent-3: #8e24aa; - --accent-secondary-rgb: 255, 64, 129; - --page-gradient: linear-gradient( - 135deg, - #fff3e0 0%, - #ffe0b2 25%, - #fce4ec 50%, - #ede7f6 75%, - #e3f2fd 100% - ); -} - html[data-design-theme="terminal"] { color-scheme: dark; @@ -127,6 +79,80 @@ html[data-design-theme="terminal"] { --control-fg: var(--accent); } +html[data-design-theme="cyberpunk"] { + color-scheme: dark; + + --cyber-bg: #0a0a0f; + --cyber-fg: #e0e0e0; + --cyber-card: #12121a; + --cyber-muted: #1c1c2e; + --cyber-muted-fg: #6b7280; + --cyber-border: #2a2a3a; + --cyber-accent: #00ff88; + --cyber-accent-2: #ff00ff; + --cyber-accent-3: #00d4ff; + + --accent: var(--cyber-accent); + --accent-rgb: 0, 255, 136; + --accent-2: var(--cyber-accent-2); + --accent-3: var(--cyber-accent-3); + --accent-secondary-rgb: 255, 0, 255; + + --page-gradient: var(--cyber-bg); + --page-texture: + radial-gradient( + circle at 18% 22%, + rgba(var(--accent-rgb), 0.12) 0%, + transparent 55% + ), + radial-gradient( + circle at 82% 78%, + rgba(0, 212, 255, 0.1) 0%, + transparent 55% + ), + linear-gradient(rgba(0, 255, 136, 0.045) 1px, transparent 1px), + linear-gradient(90deg, rgba(0, 255, 136, 0.045) 1px, transparent 1px); + --title-gradient: linear-gradient( + 90deg, + var(--cyber-accent-2) 0%, + var(--cyber-accent-3) 45%, + var(--cyber-accent) 100% + ); + + --control-bg: rgba(10, 10, 15, 0.78); + --control-border: rgba(0, 255, 136, 0.28); + --control-inset: rgba(255, 255, 255, 0.04); + --control-fg: var(--cyber-fg); + + --box-shadow-neon: 0 0 5px #00ff88, 0 0 10px #00ff8840; + --box-shadow-neon-sm: 0 0 3px #00ff88, 0 0 6px #00ff8830; + --box-shadow-neon-lg: + 0 0 10px #00ff88, 0 0 20px #00ff8860, 0 0 40px #00ff8830; + --box-shadow-neon-secondary: 0 0 5px #ff00ff, 0 0 20px #ff00ff60; + --box-shadow-neon-tertiary: 0 0 5px #00d4ff, 0 0 20px #00d4ff60; + + --cyber-chamfer: polygon( + 0 12px, + 12px 0, + calc(100% - 12px) 0, + 100% 12px, + 100% calc(100% - 12px), + calc(100% - 12px) 100%, + 12px 100%, + 0 calc(100% - 12px) + ); + --cyber-chamfer-sm: polygon( + 0 8px, + 8px 0, + calc(100% - 8px) 0, + 100% 8px, + 100% calc(100% - 8px), + calc(100% - 8px) 100%, + 8px 100%, + 0 calc(100% - 8px) + ); +} + /* Fluent 2 柔和渐变背景 */ body { background: var(--page-gradient); @@ -215,7 +241,7 @@ a { } .design-theme-button::after { - content: "▾"; + content: "\25BE"; position: absolute; right: 14px; top: 50%; @@ -600,6 +626,64 @@ html[data-theme="dark"]:not([data-design-theme="terminal"]) } } +@keyframes cyberpunk-rgbShift { + 0%, + 100% { + text-shadow: + -2px 0 rgba(255, 0, 255, 0.65), + 2px 0 rgba(0, 212, 255, 0.65), + 0 0 18px rgba(0, 255, 136, 0.25); + } + 50% { + text-shadow: + 2px 0 rgba(255, 0, 255, 0.65), + -2px 0 rgba(0, 212, 255, 0.65), + 0 0 22px rgba(0, 255, 136, 0.3); + } +} + +@keyframes cyberpunk-glitch { + 0%, + 92%, + 100% { + clip-path: inset(0 0 0 0); + transform: translate3d(0, 0, 0); + opacity: 0.65; + } + 93% { + clip-path: inset(12% 0 72% 0); + transform: translate3d(-2px, 0, 0); + opacity: 0.95; + } + 94% { + clip-path: inset(58% 0 18% 0); + transform: translate3d(2px, 1px, 0); + } + 95% { + clip-path: inset(34% 0 52% 0); + transform: translate3d(-1px, -1px, 0); + } +} + +@keyframes cyberpunk-scanline { + 0% { + background-position: + 0 0, + 0 -220px; + } + 100% { + background-position: + 0 0, + 0 calc(100vh + 220px); + } +} + +@keyframes cyberpunk-blink { + 50% { + opacity: 0; + } +} + html[data-design-theme="terminal"] body { font-family: ui-monospace, "JetBrains Mono", "Fira Code", "VT323", Menlo, Consolas, @@ -670,7 +754,7 @@ html[data-design-theme="terminal"] .title { } html[data-design-theme="terminal"] .title::after { - content: "█"; + content: "\2588"; margin-left: 8px; animation: terminal-cursor-blink 1s step-end infinite; } @@ -714,6 +798,231 @@ html[data-design-theme="terminal"] .beian a:hover { text-shadow: none; } +html[data-design-theme="cyberpunk"] body { + font-family: + ui-monospace, "JetBrains Mono", "Fira Code", Menlo, Consolas, + "Liberation Mono", monospace; + letter-spacing: 0.02em; + color: var(--cyber-fg); +} + +html[data-design-theme="cyberpunk"] body::before { + background-size: + auto, + auto, + 50px 50px, + 50px 50px; +} + +html[data-design-theme="cyberpunk"] body::after { + content: ""; + position: fixed; + inset: 0; + pointer-events: none; + z-index: 0; + opacity: 0.55; + background: + repeating-linear-gradient( + 0deg, + transparent 0px, + transparent 2px, + rgba(0, 0, 0, 0.35) 2px, + rgba(0, 0, 0, 0.35) 4px + ), + linear-gradient( + 180deg, + transparent 0%, + rgba(0, 255, 136, 0.12) 50%, + transparent 100% + ); + background-size: + auto, + 100% 220px; + background-position: + 0 0, + 0 -220px; + animation: cyberpunk-scanline 9s linear infinite; +} + +html[data-design-theme="cyberpunk"] .theme-controls { + gap: 12px; +} + +html[data-design-theme="cyberpunk"] .design-theme-button, +html[data-design-theme="cyberpunk"] .theme-toggle { + border-radius: 0; + clip-path: var(--cyber-chamfer-sm); + backdrop-filter: none; + -webkit-backdrop-filter: none; + border: 1px solid rgba(var(--accent-rgb), 0.5); + background: rgba(10, 10, 15, 0.88); + box-shadow: var(--box-shadow-neon-sm); + text-transform: uppercase; + letter-spacing: 0.12em; +} + +html[data-design-theme="cyberpunk"] .design-theme-button:hover, +html[data-design-theme="cyberpunk"] .theme-toggle:hover { + border-color: rgba(var(--accent-rgb), 0.9); + box-shadow: var(--box-shadow-neon); + transform: translateY(-1px); +} + +html[data-design-theme="cyberpunk"] .design-theme-button:focus-visible, +html[data-design-theme="cyberpunk"] .theme-toggle:focus-visible { + outline: 2px solid rgba(var(--accent-rgb), 0.65); + outline-offset: 3px; + box-shadow: var(--box-shadow-neon); +} + +html[data-design-theme="cyberpunk"] .theme-toggle { + cursor: not-allowed; + opacity: 0.72; +} + +html[data-design-theme="cyberpunk"] .theme-icon-sun { + display: none; +} + +html[data-design-theme="cyberpunk"] .theme-icon-moon { + display: block; +} + +html[data-design-theme="cyberpunk"] .design-theme-list { + border-radius: 0; + clip-path: var(--cyber-chamfer); + background: rgba(10, 10, 15, 0.92); + border: 1px solid rgba(var(--accent-rgb), 0.45); + box-shadow: var(--box-shadow-neon-sm); + backdrop-filter: none; + -webkit-backdrop-filter: none; +} + +html[data-design-theme="cyberpunk"] .design-theme-list [role="option"] { + border-radius: 0; + clip-path: var(--cyber-chamfer-sm); + text-transform: uppercase; + letter-spacing: 0.14em; +} + +html[data-design-theme="cyberpunk"] .design-theme-list [role="option"]:hover, +html[data-design-theme="cyberpunk"] + .design-theme-list + [role="option"][aria-selected="true"] { + background: rgba(var(--accent-rgb), 0.14); + color: var(--cyber-fg); + box-shadow: inset 0 0 0 1px rgba(var(--accent-rgb), 0.55); +} + +html[data-design-theme="cyberpunk"] .title { + background: var(--title-gradient); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + color: transparent; + text-transform: uppercase; + letter-spacing: 0.08em; + position: relative; + filter: drop-shadow(0 0 14px rgba(0, 255, 136, 0.24)); + animation: cyberpunk-rgbShift 4.5s ease-in-out infinite; +} + +html[data-design-theme="cyberpunk"] .title::before, +html[data-design-theme="cyberpunk"] .title::after { + content: attr(data-text); + position: absolute; + left: 0; + top: 0; + width: 100%; + pointer-events: none; + opacity: 0.65; + mix-blend-mode: screen; +} + +html[data-design-theme="cyberpunk"] .title::before { + transform: translate3d(-2px, 0, 0); + color: rgba(255, 0, 255, 0.85); + animation: cyberpunk-glitch 6.2s steps(2, end) infinite; +} + +html[data-design-theme="cyberpunk"] .title::after { + transform: translate3d(2px, 0, 0); + color: rgba(0, 212, 255, 0.85); + animation: cyberpunk-glitch 5.3s steps(2, end) infinite reverse; +} + +html[data-design-theme="cyberpunk"] .subtitle { + color: var(--cyber-muted-fg); + letter-spacing: 0.14em; + text-transform: uppercase; +} + +html[data-design-theme="cyberpunk"] .subtitle::after { + content: "\2588"; + margin-left: 8px; + color: rgba(var(--accent-rgb), 0.85); + animation: cyberpunk-blink 1s step-end infinite; +} + +html[data-design-theme="cyberpunk"] .card { + border-radius: 0; + clip-path: var(--cyber-chamfer); + background: rgba(18, 18, 26, 0.92); + border: 1px solid rgba(42, 42, 58, 0.92); + box-shadow: + 0 0 0 1px rgba(var(--accent-rgb), 0.12), + 0 10px 28px rgba(0, 0, 0, 0.55), + var(--box-shadow-neon-sm); + backdrop-filter: none; + -webkit-backdrop-filter: none; + transform: translateY(0); + transition: all 120ms steps(4, end); +} + +html[data-design-theme="cyberpunk"] .card::before { + display: none; +} + +html[data-design-theme="cyberpunk"] .card h2 { + color: var(--cyber-fg); + text-transform: uppercase; + letter-spacing: 0.06em; +} + +html[data-design-theme="cyberpunk"] .card p { + color: var(--cyber-muted-fg); +} + +html[data-design-theme="cyberpunk"] .card:hover, +html[data-design-theme="cyberpunk"] .card:focus { + color: var(--cyber-fg); + border-color: rgba(var(--accent-rgb), 0.9); + transform: translateY(-1px); + box-shadow: + 0 0 0 1px rgba(var(--accent-rgb), 0.22), + 0 12px 34px rgba(0, 0, 0, 0.6), + var(--box-shadow-neon-lg); +} + +html[data-design-theme="cyberpunk"] .card:hover h2, +html[data-design-theme="cyberpunk"] .card:focus h2 { + color: var(--cyber-fg); +} + +html[data-design-theme="cyberpunk"] .card:hover p, +html[data-design-theme="cyberpunk"] .card:focus p { + color: rgba(224, 224, 224, 0.92); +} + +html[data-design-theme="cyberpunk"] .beian a { + color: rgba(224, 224, 224, 0.72); +} + +html[data-design-theme="cyberpunk"] .beian a:hover { + color: var(--cyber-accent); + text-shadow: 0 0 10px rgba(var(--accent-rgb), 0.28); +} + @media (max-width: 600px) { .grid { width: 100%; @@ -731,6 +1040,19 @@ html[data-design-theme="terminal"] .beian a:hover { } } +@media (prefers-reduced-motion: reduce) { + html[data-design-theme="cyberpunk"] body::after, + html[data-design-theme="cyberpunk"] .title, + html[data-design-theme="cyberpunk"] .title::before, + html[data-design-theme="cyberpunk"] .title::after, + html[data-design-theme="cyberpunk"] .subtitle::after, + html[data-design-theme="cyberpunk"] .card { + animation: none !important; + transition-duration: 0.01ms !important; + transform: none !important; + } +} + /* Fluent 2 深色模式 */ html[data-theme="dark"]:not([data-design-theme="terminal"]) { color-scheme: dark; @@ -769,30 +1091,6 @@ html[data-theme="dark"]:not([data-design-theme="terminal"]) body { color: #ffffff; } -html[data-theme="dark"][data-design-theme="aurora"] { - --accent: #b388ff; - --accent-rgb: 179, 136, 255; - --accent-2: #9575cd; - --accent-3: #7e57c2; - --accent-secondary-rgb: 77, 208, 225; -} - -html[data-theme="dark"][data-design-theme="forest"] { - --accent: #66bb6a; - --accent-rgb: 102, 187, 106; - --accent-2: #43a047; - --accent-3: #2e7d32; - --accent-secondary-rgb: 38, 166, 154; -} - -html[data-theme="dark"][data-design-theme="sunset"] { - --accent: #ffb74d; - --accent-rgb: 255, 183, 77; - --accent-2: #ff8a65; - --accent-3: #ce93d8; - --accent-secondary-rgb: 244, 143, 177; -} - html[data-theme="dark"]:not([data-design-theme="terminal"]) .card { background: rgba(30, 30, 30, 0.7); backdrop-filter: blur(20px) saturate(180%); @@ -853,3 +1151,296 @@ html[data-theme="dark"]:not([data-design-theme="terminal"]) .beian a { html[data-theme="dark"]:not([data-design-theme="terminal"]) .beian a:hover { color: var(--accent); } + +/* Material You (Material Design 3) */ +html[data-design-theme="material-you"] { + color-scheme: light; + + --md-bg: #fffbfe; + --md-on-bg: #1c1b1f; + --md-primary: #6750a4; + --md-on-primary: #ffffff; + --md-secondary-container: #e8def8; + --md-on-secondary-container: #1d192b; + --md-tertiary: #7d5260; + --md-surface-container: #f3edf7; + --md-surface-container-low: #e7e0ec; + --md-outline: #79747e; + --md-on-surface-variant: #49454f; + + --md-ease: cubic-bezier(0.2, 0, 0, 1); + + --accent: var(--md-primary); + --accent-rgb: 103, 80, 164; + --accent-2: var(--md-primary); + --accent-3: var(--md-primary); + --accent-secondary-rgb: 125, 82, 96; + + --page-gradient: + radial-gradient( + circle at 12% 18%, + rgba(var(--accent-rgb), 0.16) 0%, + transparent 56% + ), + radial-gradient( + circle at 88% 22%, + rgba(232, 222, 248, 0.92) 0%, + transparent 58% + ), + radial-gradient( + circle at 22% 90%, + rgba(125, 82, 96, 0.1) 0%, + transparent 52% + ), + var(--md-bg); + --page-texture: + radial-gradient( + circle at 18% 32%, + rgba(var(--accent-rgb), 0.1) 0%, + transparent 48% + ), + radial-gradient( + circle at 78% 76%, + rgba(125, 82, 96, 0.08) 0%, + transparent 50% + ); + --title-gradient: linear-gradient( + 135deg, + var(--md-primary) 0%, + rgba(103, 80, 164, 0.92) 40%, + var(--md-tertiary) 100% + ); + + --control-bg: rgba(243, 237, 247, 0.78); + --control-border: rgba(121, 116, 126, 0.35); + --control-inset: rgba(255, 255, 255, 0.7); + --control-fg: var(--md-on-bg); +} + +html[data-theme="dark"][data-design-theme="material-you"] { + color-scheme: dark; + + --md-bg: #1c1b1f; + --md-on-bg: #e6e1e5; + --md-primary: #d0bcff; + --md-on-primary: #381e72; + --md-secondary-container: #4a4458; + --md-on-secondary-container: #e8def8; + --md-tertiary: #efb8c8; + --md-surface-container: #211f26; + --md-surface-container-low: #1f1d24; + --md-outline: #938f99; + --md-on-surface-variant: #cac4d0; + + --accent: var(--md-primary); + --accent-rgb: 208, 188, 255; + --accent-2: var(--md-primary); + --accent-3: var(--md-primary); + --accent-secondary-rgb: 239, 184, 200; + + --page-gradient: + radial-gradient( + circle at 12% 18%, + rgba(var(--accent-rgb), 0.12) 0%, + transparent 56% + ), + radial-gradient( + circle at 88% 22%, + rgba(239, 184, 200, 0.1) 0%, + transparent 58% + ), + radial-gradient( + circle at 26% 92%, + rgba(232, 222, 248, 0.09) 0%, + transparent 55% + ), + var(--md-bg); + --page-texture: + radial-gradient( + circle at 18% 32%, + rgba(var(--accent-rgb), 0.08) 0%, + transparent 48% + ), + radial-gradient( + circle at 78% 76%, + rgba(239, 184, 200, 0.06) 0%, + transparent 50% + ); + --title-gradient: linear-gradient( + 135deg, + var(--md-primary) 0%, + rgba(208, 188, 255, 0.92) 45%, + var(--md-tertiary) 100% + ); + + --control-bg: rgba(33, 31, 38, 0.78); + --control-border: rgba(147, 143, 153, 0.35); + --control-inset: rgba(255, 255, 255, 0.06); + --control-fg: var(--md-on-bg); +} + +html[data-design-theme="material-you"] body { + color: var(--md-on-bg); +} + +html[data-design-theme="material-you"] body::after { + content: ""; + position: fixed; + inset: -20vh -20vw; + background: + radial-gradient( + circle at 24% 28%, + rgba(var(--accent-rgb), 0.22) 0%, + transparent 46% + ), + radial-gradient( + circle at 72% 34%, + rgba(232, 222, 248, 0.62) 0%, + transparent 52% + ), + radial-gradient( + circle at 78% 88%, + rgba(var(--accent-secondary-rgb), 0.18) 0%, + transparent 56% + ); + filter: blur(84px); + opacity: 0.65; + pointer-events: none; + z-index: 0; +} + +html[data-design-theme="material-you"] .design-theme-button, +html[data-design-theme="material-you"] .theme-toggle { + border-radius: 9999px; + transition: all 0.3s var(--md-ease); +} + +html[data-design-theme="material-you"] .design-theme-button::after { + content: "\25BE"; +} + +html[data-design-theme="material-you"] .design-theme-button:hover, +html[data-design-theme="material-you"] .theme-toggle:hover { + background: rgba(var(--accent-rgb), 0.1); + border-color: rgba(var(--accent-rgb), 0.35); + transform: translateY(-1px); + box-shadow: + 0 10px 26px rgba(var(--accent-rgb), 0.18), + 0 4px 10px rgba(0, 0, 0, 0.08), + inset 0 1px 0 rgba(255, 255, 255, 0.5); +} + +html[data-design-theme="material-you"] .design-theme-button:active, +html[data-design-theme="material-you"] .theme-toggle:active { + transform: scale(0.95); + transition: all 0.2s var(--md-ease); +} + +html[data-design-theme="material-you"] .design-theme-button:focus-visible, +html[data-design-theme="material-you"] .theme-toggle:focus-visible { + outline: 2px solid rgba(var(--accent-rgb), 0.5); + outline-offset: 3px; +} + +html[data-design-theme="material-you"] .design-theme-list { + background: rgba(243, 237, 247, 0.88); + border: 1px solid rgba(121, 116, 126, 0.24); + border-radius: 20px; + box-shadow: + 0 18px 40px rgba(0, 0, 0, 0.12), + 0 8px 18px rgba(0, 0, 0, 0.08), + inset 0 1px 0 rgba(255, 255, 255, 0.7); +} + +html[data-theme="dark"][data-design-theme="material-you"] .design-theme-list { + background: rgba(33, 31, 38, 0.9); + border: 1px solid rgba(147, 143, 153, 0.24); + box-shadow: + 0 18px 46px rgba(0, 0, 0, 0.52), + 0 8px 18px rgba(0, 0, 0, 0.36), + inset 0 1px 0 rgba(255, 255, 255, 0.06); +} + +html[data-design-theme="material-you"] .title { + font-weight: 500; + letter-spacing: -0.01em; +} + +html[data-design-theme="material-you"] .card { + background: rgba(243, 237, 247, 0.82); + border: none; + border-radius: 24px; + box-shadow: + 0 1px 2px rgba(0, 0, 0, 0.06), + 0 10px 22px rgba(var(--accent-rgb), 0.12); + transition: all 0.3s var(--md-ease); +} + +html[data-design-theme="material-you"] .card::before { + display: none; +} + +html[data-design-theme="material-you"] .card.pin { + background: rgba(231, 224, 236, 0.85); +} + +html[data-design-theme="material-you"] .card:hover, +html[data-design-theme="material-you"] .card:focus { + color: var(--accent); + transform: translateY(-2px) scale(1.02); + box-shadow: + 0 18px 46px rgba(var(--accent-rgb), 0.22), + 0 10px 22px rgba(0, 0, 0, 0.1); +} + +html[data-design-theme="material-you"] .card h2 { + color: var(--md-on-bg); + font-weight: 500; + transition: color 0.3s var(--md-ease); +} + +html[data-design-theme="material-you"] .card p { + color: var(--md-on-surface-variant); + transition: color 0.3s var(--md-ease); +} + +html[data-design-theme="material-you"] .card:hover p, +html[data-design-theme="material-you"] .card:focus p { + color: var(--md-on-bg); +} + +html[data-theme="dark"][data-design-theme="material-you"] .card { + background: rgba(33, 31, 38, 0.84); + box-shadow: + 0 1px 2px rgba(0, 0, 0, 0.3), + 0 14px 34px rgba(0, 0, 0, 0.4); +} + +html[data-theme="dark"][data-design-theme="material-you"] .card.pin { + background: rgba(31, 29, 36, 0.92); +} + +html[data-theme="dark"][data-design-theme="material-you"] .card:hover, +html[data-theme="dark"][data-design-theme="material-you"] .card:focus { + box-shadow: + 0 22px 60px rgba(0, 0, 0, 0.55), + 0 10px 26px rgba(var(--accent-rgb), 0.14); +} + +html[data-design-theme="material-you"] .beian a { + color: var(--md-on-surface-variant); +} + +html[data-design-theme="material-you"] .beian a:hover { + color: var(--accent); +} + +@media (prefers-reduced-motion: reduce) { + html[data-design-theme="material-you"] .card, + html[data-design-theme="material-you"] .design-theme-button, + html[data-design-theme="material-you"] .theme-toggle, + html[data-design-theme="material-you"] .theme-icon { + transition-duration: 0.01ms !important; + transform: none !important; + } +}