|
105 | 105 | --set-symbol-common-color: #000; |
106 | 106 | } |
107 | 107 |
|
| 108 | +/* Liquid Glass theme style (macOS-inspired). Orthogonal to light/dark: it only |
| 109 | + changes how surfaces render, not the color palette. Applied via |
| 110 | + data-theme-style="glass" on <html>; "classic" leaves everything untouched. */ |
| 111 | +html[data-theme-style="glass"] { |
| 112 | + --radius-selector: 2rem; |
| 113 | + --radius-field: 1rem; |
| 114 | + --radius-box: 1.5rem; |
| 115 | + --border: 1px; |
| 116 | + --glass-blur: 20px; |
| 117 | + --glass-surface: color-mix(in oklch, var(--color-base-100) 58%, transparent); |
| 118 | + --glass-surface-raised: color-mix(in oklch, var(--color-base-200) 52%, transparent); |
| 119 | + --glass-field: color-mix(in oklch, var(--color-base-100) 52%, transparent); |
| 120 | + --glass-border: color-mix(in oklch, var(--color-base-content) 16%, transparent); |
| 121 | + --glass-rim: color-mix(in oklch, white 45%, transparent); |
| 122 | + --glass-shadow: 0 12px 32px -12px rgb(0 0 0 / 0.22), 0 1px 2px rgb(0 0 0 / 0.06); |
| 123 | +} |
| 124 | + |
| 125 | +html[data-theme-style="glass"][data-theme="dark"] { |
| 126 | + --glass-surface: color-mix(in oklch, var(--color-base-200) 55%, transparent); |
| 127 | + --glass-surface-raised: color-mix(in oklch, var(--color-base-300) 48%, transparent); |
| 128 | + --glass-field: color-mix(in oklch, var(--color-base-200) 50%, transparent); |
| 129 | + --glass-border: color-mix(in oklch, white 12%, transparent); |
| 130 | + --glass-rim: color-mix(in oklch, white 14%, transparent); |
| 131 | + --glass-shadow: 0 16px 40px -12px rgb(0 0 0 / 0.55), 0 1px 2px rgb(0 0 0 / 0.35); |
| 132 | +} |
| 133 | + |
| 134 | +/* Ambient backdrop the glass refracts: soft claret/brass/grove pools derived |
| 135 | + from the active palette, fixed to the viewport like a desktop wallpaper. */ |
| 136 | +html[data-theme-style="glass"] body { |
| 137 | + background-color: var(--color-base-100); |
| 138 | + background-image: |
| 139 | + radial-gradient( |
| 140 | + 56rem 38rem at 14% -6%, |
| 141 | + color-mix(in oklch, var(--color-primary), var(--color-base-100) 72%), |
| 142 | + transparent 62% |
| 143 | + ), |
| 144 | + radial-gradient( |
| 145 | + 48rem 34rem at 104% 16%, |
| 146 | + color-mix(in oklch, var(--color-accent), var(--color-base-100) 74%), |
| 147 | + transparent 64% |
| 148 | + ), |
| 149 | + radial-gradient( |
| 150 | + 50rem 42rem at 28% 112%, |
| 151 | + color-mix(in oklch, var(--color-secondary), var(--color-base-100) 76%), |
| 152 | + transparent 62% |
| 153 | + ); |
| 154 | + background-attachment: fixed; |
| 155 | +} |
| 156 | + |
| 157 | +html[data-theme-style="glass"] .app-shell-root { |
| 158 | + background-color: transparent; |
| 159 | +} |
| 160 | + |
| 161 | +html[data-theme-style="glass"] :is(.card, .dropdown-content), |
| 162 | +html[data-theme-style="glass"] section[role="dialog"]:not(.fullscreen-printing-dialog) { |
| 163 | + background-color: var(--glass-surface); |
| 164 | + border-color: var(--glass-border); |
| 165 | + -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(160%); |
| 166 | + backdrop-filter: blur(var(--glass-blur)) saturate(160%); |
| 167 | + box-shadow: |
| 168 | + inset 0 1px 0 0 var(--glass-rim), |
| 169 | + var(--glass-shadow); |
| 170 | +} |
| 171 | + |
| 172 | +html[data-theme-style="glass"] .app-shell-header:not(.bg-transparent) { |
| 173 | + background-color: color-mix(in oklch, var(--color-base-100) 50%, transparent); |
| 174 | + border-bottom: 1px solid var(--glass-border); |
| 175 | + -webkit-backdrop-filter: blur(24px) saturate(170%); |
| 176 | + backdrop-filter: blur(24px) saturate(170%); |
| 177 | +} |
| 178 | + |
| 179 | +html[data-theme-style="glass"] :is(.input, .select, .textarea) { |
| 180 | + background-color: var(--glass-field); |
| 181 | + border-color: var(--glass-border); |
| 182 | + box-shadow: inset 0 1px 0 0 color-mix(in oklch, white 18%, transparent); |
| 183 | +} |
| 184 | + |
| 185 | +html[data-theme-style="glass"] :is(.btn-outline, .btn-ghost):hover { |
| 186 | + background-color: var(--glass-surface-raised); |
| 187 | +} |
| 188 | + |
| 189 | +/* Keep surfaces readable when translucency is unwanted or unsupported. */ |
| 190 | +@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) { |
| 191 | + html[data-theme-style="glass"] :is(.card, .dropdown-content, .input, .select, .textarea), |
| 192 | + html[data-theme-style="glass"] section[role="dialog"]:not(.fullscreen-printing-dialog), |
| 193 | + html[data-theme-style="glass"] .app-shell-header:not(.bg-transparent) { |
| 194 | + background-color: color-mix(in oklch, var(--color-base-100) 94%, transparent); |
| 195 | + } |
| 196 | +} |
| 197 | + |
| 198 | +@media (prefers-reduced-transparency: reduce) { |
| 199 | + html[data-theme-style="glass"] :is(.card, .dropdown-content, .input, .select, .textarea), |
| 200 | + html[data-theme-style="glass"] section[role="dialog"]:not(.fullscreen-printing-dialog), |
| 201 | + html[data-theme-style="glass"] .app-shell-header:not(.bg-transparent) { |
| 202 | + background-color: var(--color-base-100); |
| 203 | + -webkit-backdrop-filter: none; |
| 204 | + backdrop-filter: none; |
| 205 | + } |
| 206 | +} |
| 207 | + |
108 | 208 | .fullscreen-printing-dialog { |
109 | 209 | --card-modal-bg: color-mix(in oklch, var(--color-primary), var(--color-base-100) 88%); |
110 | 210 | --card-modal-fg: color-mix(in oklch, var(--color-primary), black 50%); |
|
0 commit comments