edgepress 2026.10.12 → 2026.10.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +12 -2
  2. package/config.yml +171 -171
  3. package/content/assets/edgepress/brand/sources/export-manifest.json +181 -181
  4. package/content/assets/edgepress-markdown-guide.svg +21 -21
  5. package/content/guides/markdown-media.md +38 -0
  6. package/content/guides/product-demos.md +30 -30
  7. package/content/pages/deployment/en.json +1 -1
  8. package/content/posts/2026-09-24-edgepress-release-2026-9-1/en.md +1 -1
  9. package/content/posts/2026-09-24-edgepress-release-2026-9-1/zh-cn.md +1 -1
  10. package/languages/base/en.json +98 -98
  11. package/languages/packs/zh-CN.json +98 -98
  12. package/package.json +90 -90
  13. package/src/assets.js +187 -186
  14. package/src/browser-audit.js +158 -158
  15. package/src/build.js +293 -291
  16. package/src/cli.js +364 -364
  17. package/src/content.js +233 -233
  18. package/src/data-saver.js +3 -3
  19. package/src/generators.js +414 -420
  20. package/src/i18n.js +86 -86
  21. package/src/markdown.js +195 -160
  22. package/src/page-check.js +1 -1
  23. package/src/plugin-api.js +77 -77
  24. package/src/report-visuals.js +642 -642
  25. package/src/revision-cards.js +30 -30
  26. package/src/rss.js +100 -0
  27. package/src/theme.js +4 -4
  28. package/src/video-metadata.js +36 -0
  29. package/static/edgepress/fonts/faces.css +2217 -2217
  30. package/static/edgepress/media-viewer.js +67 -10
  31. package/static/edgepress/project-demo.js +83 -83
  32. package/static/edgepress/search.js +84 -84
  33. package/tests/assets-runtime.test.mjs +26 -26
  34. package/tests/audit.test.mjs +142 -142
  35. package/tests/brand-regression.test.mjs +110 -110
  36. package/tests/document-package.test.mjs +2 -2
  37. package/tests/embed-syntax.test.mjs +68 -68
  38. package/tests/image-viewer.test.mjs +36 -36
  39. package/tests/markdown-media.test.mjs +119 -0
  40. package/tests/oembed-layout.test.mjs +6 -1
  41. package/tests/project-demo.test.mjs +73 -73
  42. package/tests/release-version.test.mjs +28 -0
  43. package/tests/rss.test.mjs +54 -0
  44. package/tests/video-metadata.test.mjs +28 -0
  45. package/tests/writing.test.mjs +83 -83
  46. package/themes/atelier/assets/style.css +340 -340
  47. package/themes/default/assets/style.css +371 -371
  48. package/themes/default/layouts/partials/head.html +1 -1
  49. package/themes/folio/assets/style.css +515 -515
  50. package/themes/folio/theme.json +5 -5
  51. package/themes/signal/assets/style.css +332 -332
  52. package/tools/README.md +10 -10
  53. package/tools/assets/generate-brand-assets.py +160 -160
  54. package/tools/assets/video-preview.mjs +15 -0
  55. package/tools/recordings/demo-workbench.mjs +53 -53
  56. package/tools/recordings/desktop-recording.mjs +70 -70
  57. package/tools/recordings/vm-desktop.mjs +59 -59
@@ -1,516 +1,516 @@
1
- :root{
2
- color-scheme:light dark;
3
- --canvas:#faf9f6;
4
- --surface:#fff;
5
- --surface-soft:#f1f0ec;
6
- --ink:#20201d;
7
- --muted:#686862;
8
- --line:rgba(29,29,31,.12);
9
- --accent:#292922;
10
- --accent-hover:#62624c;
11
- --button-bg:#20201d;
12
- --button-hover:#404037;
13
- --accent-soft:#eeede6;
14
- --warning:#a44d00;
15
- --warning-soft:#fff2df;
16
- --success:#18794e;
17
- --success-soft:#e9f7ef;
18
- --radius-small:3px;
19
- --radius-card:3px;
20
- --content-width:1440px;
21
- --shadow:none;
22
- font-family:var(--edgepress-font-sans);
23
- font-synthesis:none;
24
- text-rendering:optimizeLegibility;
25
- -webkit-font-smoothing:antialiased;
26
- -moz-osx-font-smoothing:grayscale
27
- }
28
- @media(prefers-color-scheme:dark){
29
- :root{
30
- --canvas:#171715;
31
- --surface:#22221f;
32
- --surface-soft:#292925;
33
- --ink:#f3f1ea;
34
- --muted:#b6b5ab;
35
- --line:rgba(245,245,247,.13);
36
- --accent:#e6dec1;
37
- --accent-hover:#fff1c9;
38
- --accent-soft:#34342b;
39
- --warning:#ffb45f;
40
- --warning-soft:#352616;
41
- --success:#62d49a;
42
- --success-soft:#153025;
43
- --shadow:0 18px 48px rgba(0,0,0,.24)
44
- }
45
- }
46
- *,*::before,*::after{box-sizing:border-box}
47
- html{min-width:0;scroll-behavior:auto;scroll-padding-top:90px;background:var(--canvas)}
48
- body{display:flex;flex-direction:column;min-width:0;max-width:none;min-height:100vh;margin:0;background:var(--canvas);color:var(--ink);font:400 16px/1.65 -apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI","PingFang SC","PingFang TC","Microsoft YaHei","Noto Sans CJK SC","Microsoft JhengHei",sans-serif}
49
- a{color:var(--accent);text-decoration:none;text-underline-offset:.2em}
50
- a:hover{color:var(--accent-hover);text-decoration:underline}
51
- a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid var(--accent);outline-offset:4px;border-radius:5px}
52
- button,input,select{font:inherit}
53
- img,video,iframe{max-width:100%;height:auto}
54
- p{margin:0 0 1em}
55
- h1,h2,h3,h4{color:var(--ink);font-weight:650;letter-spacing:-.035em;line-height:1.18}
56
- h1{font-size:clamp(2.4rem,5.5vw,4.5rem);letter-spacing:-.05em;line-height:1.12;text-wrap:balance}
57
- h2{font-size:clamp(1.7rem,3.5vw,2.5rem)}
58
- h3{font-size:clamp(1.2rem,2.1vw,1.55rem)}
59
- .site-shell{display:flex;flex:1;min-height:100vh;min-height:100svh;flex-direction:column}
60
- .skip-link{position:fixed;top:12px;left:12px;z-index:2000;transform:translateY(-160%);padding:11px 16px;border-radius:999px;background:var(--ink);color:var(--canvas);font-weight:650;box-shadow:var(--shadow)}
61
- .skip-link:focus{transform:translateY(0);color:var(--canvas)}
62
- .site-header{position:sticky;top:0;z-index:100;border-bottom:1px solid var(--line);background:rgba(250,250,252,.82);backdrop-filter:saturate(180%) blur(18px);-webkit-backdrop-filter:saturate(180%) blur(18px)}
63
- @media(prefers-color-scheme:dark){.site-header{background:rgba(16,16,18,.82)}}
64
- .header-inner{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:26px;width:min(calc(100% - 48px),var(--content-width));min-height:66px;margin-inline:auto}
65
- .brand{display:inline-flex;align-items:center;gap:10px;min-width:0;color:var(--ink);font-size:.94rem;font-weight:680;letter-spacing:-.025em;white-space:nowrap}
66
- .brand:hover{color:var(--ink);text-decoration:none}
67
- .brand-mark{display:block;width:30px;height:30px;flex:none;color:var(--button-bg)}
68
- .primary-navigation{display:flex;align-items:center;justify-content:center;gap:clamp(12px,2.2vw,28px);min-width:0}
69
- .primary-navigation a,.primary-navigation .navigation-select,.footer-navigation a,.footer-navigation .navigation-select{display:inline-flex;align-items:center;min-height:44px;color:var(--muted);font-size:.87rem;font-weight:520;white-space:nowrap}
70
- .primary-navigation a:hover,.primary-navigation .navigation-select:hover,.footer-navigation a:hover,.footer-navigation .navigation-select:hover{color:var(--ink);text-decoration:none}
71
- .primary-navigation a[aria-current="page"]{color:var(--ink);font-weight:650}
72
- .primary-navigation .navigation-icon,.footer-navigation .navigation-icon{display:none}
73
- .primary-navigation a[href$="/search/"] .navigation-icon,.footer-navigation .navigation-icon{display:block;width:17px;height:17px;flex:none;margin-right:6px;}
74
- .locale-nav{justify-self:end;min-width:0}
75
- .locale-nav select{max-width:150px;min-height:40px;padding:6px 30px 6px 12px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);font-size:.84rem;cursor:pointer}
76
- .site-main{flex:1 0 auto;width:min(calc(100% - 48px),var(--content-width));min-width:0;margin-inline:auto;padding:clamp(40px,6.5vw,82px) 0 clamp(76px,10vw,132px)}
77
- .page-builder{display:grid;gap:clamp(24px,4vw,44px);min-width:0}
78
- .page-title{width:100%;max-width:1040px;margin:0 auto}
79
- .page-title h1{margin:0}
80
- .hero-block{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,.72fr);align-items:center;gap:clamp(28px,6vw,80px);min-width:0;padding:clamp(32px,7vw,88px);border:1px solid var(--line);border-radius:32px;background:radial-gradient(ellipse at 90% 12%,rgba(0,113,227,.105),transparent 37%),var(--surface);box-shadow:var(--shadow)}
81
- .hero-block:not(.hero-block--split){display:block}
82
- .hero-main,.hero-aside{min-width:0}
83
- .hero-block h1,.hero-block h2{max-width:22ch;margin:0 0 20px;font-size:clamp(2.5rem,6vw,4.8rem);letter-spacing:-.045em;line-height:1.12;text-wrap:balance}
84
- .hero-block h2{font-size:clamp(2.1rem,4.2vw,3.5rem)}
85
- .hero-block--banner{overflow:hidden;padding:clamp(32px,5vw,60px) 0 0;background:#f5f5f7;box-shadow:none}
86
- .hero-block--banner .hero-main{padding-inline:clamp(24px,5vw,60px);text-align:center}
87
- .hero-block--banner h1,.hero-block--banner .hero-copy{margin-inline:auto}
88
- .hero-block--banner .hero-main>p:last-child{margin-bottom:0}
89
- .hero-banner{display:block;width:min(100%,680px);height:auto;max-height:450px;margin:24px auto 0;object-fit:contain}
90
- @media(prefers-color-scheme:dark){.hero-block--banner{background:#1c1c1e}}
91
- .eyebrow{margin:0 0 15px;color:var(--accent);font-size:.78rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase}
92
- .hero-copy{max-width:58ch;margin:0 0 26px;color:var(--muted);font-size:clamp(1.05rem,1.9vw,1.25rem);line-height:1.55}
93
- .hero-highlights{display:grid;gap:10px;margin:0;padding:0;list-style:none}
94
- .hero-highlights li{padding:15px 18px;border:1px solid var(--line);border-radius:var(--radius-small);background:var(--surface);font-size:.94rem;font-weight:550}
95
- .hero-mascot,.hero-mascot-picture{display:block;width:min(100%,260px);height:auto;margin-inline:auto;object-fit:contain}
96
- .button{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:46px;padding:10px 22px;border:1px solid var(--button-bg);border-radius:999px;background:var(--button-bg);color:#fff;font-size:.94rem;font-weight:600;line-height:1.3;transition:background .18s ease,transform .18s ease}
97
- .button::after{content:"→";font-size:1.15em}
98
- .button:hover{border-color:var(--button-hover);background:var(--button-hover);color:#fff;text-decoration:none;transform:translateY(-1px)}
99
- .button:focus-visible{outline-color:var(--ink)}
100
- .page-builder-row{display:grid;gap:clamp(16px,2vw,24px);align-items:stretch;min-width:0;width:100%}
101
- .page-builder-row[data-columns="1"]{grid-template-columns:minmax(0,1fr)}
102
- .page-builder-row[data-columns="2"]{grid-template-columns:repeat(2,minmax(0,1fr))}
103
- .page-builder-row[data-columns="3"]{grid-template-columns:repeat(3,minmax(0,1fr))}
104
- .page-builder-row[data-columns="4"]{grid-template-columns:repeat(4,minmax(0,1fr))}
105
- .page-builder-cell{min-width:0}
106
- .page-builder-cell>.page-section:only-child{height:100%}
107
- .page-section{min-width:0;margin:0;padding:clamp(24px,4vw,42px);border:1px solid transparent;border-radius:var(--radius-card)}
108
- .page-section--plain{padding-inline:0}
109
- .page-section--soft{border-color:var(--line);background:var(--surface)}
110
- .page-section--accent{background:var(--accent-soft)}
111
- .page-section--dark{background:#1d1d1f;color:#fff}
112
- .page-section--dark h2,.page-section--dark h3,.page-section--dark a{color:#fff}
113
- .page-section--dark .text-widget,.page-section--dark .section-intro{color:#d2d2d7}
114
- .section-inner{width:100%;margin-inline:auto}
115
- .section-inner--default{max-width:900px}
116
- .section-inner--wide{max-width:1120px}
117
- .section-inner--narrow{max-width:680px}
118
- .section-inner>h2,.feature-section>h2,.latest-posts>h2,.cta-block h2,.faq-block>h2{margin:0 0 14px}
119
- .section-intro{max-width:68ch;margin:0 0 24px;color:var(--muted);font-size:1.05rem}
120
- .text-widget{max-width:72ch;color:var(--muted);font-size:1.035rem;line-height:1.85}
121
- .text-widget p:last-child{margin-bottom:0}
122
- .content-heading{margin:1.6em 0 .5em}
123
- .display-text{font-size:clamp(2rem,6vw,4.5rem);line-height:1.04;letter-spacing:-.06em}
124
- .display-text--serif{font-family:var(--edgepress-font-serif);font-weight:500}
125
- .display-text--mono{font-family:var(--edgepress-font-mono);letter-spacing:-.07em}
126
- .display-text--accent{color:var(--accent)}
127
- .display-text--outline{-webkit-text-stroke:1px currentColor;color:transparent}
128
- .feature-section{margin:18px 0 0}
129
- .feature-section>h2{font-size:clamp(1.4rem,2.5vw,1.9rem)}
130
- .feature-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:20px}
131
- .feature-card,.steps-widget li,.post-card,.privacy-service-list li{min-width:0;padding:clamp(21px,3vw,30px);border:1px solid var(--line);border-radius:22px;background:var(--surface);box-shadow:0 5px 20px rgba(29,29,31,.025)}
132
- .feature-card h3,.steps-widget h4{margin:0 0 10px}
133
- .feature-card p,.steps-widget li p{margin-bottom:0;color:var(--muted)}
134
- .feature-card{transition:transform .2s ease,border-color .2s ease,box-shadow .2s ease}
135
- .feature-card:has(a):hover,.feature-card:focus-within{transform:translateY(-3px);border-color:var(--accent);box-shadow:var(--shadow)}
136
- .feature-card h3 a{color:var(--ink)}
137
- .feature-card h3 a:hover{color:var(--accent);text-decoration:none}
138
- .feature-card h3 a::after{display:inline-block;margin-left:.5em;color:var(--accent);font-size:.85em;content:"↗"}
139
- .feature-icon{display:block;width:48px;height:48px;padding:11px;margin:0 0 22px;border-radius:14px;background:var(--accent-soft);color:var(--accent);}
140
- .link-list ul{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));gap:12px;margin:0;padding:0;list-style:none}
141
- .link-list li{min-width:0;padding:17px 19px;border:1px solid var(--line);border-radius:18px;background:var(--surface)}
142
- .link-list li>a{font-weight:650}
143
- .link-list li p{margin:.4em 0 0;color:var(--muted);font-size:.93rem}
144
- .steps-widget ol{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:14px;margin:0;padding:0;list-style:none;counter-reset:step}
145
- .steps-widget li{counter-increment:step}
146
- .steps-widget li::before{display:block;margin-bottom:11px;color:var(--accent);font-size:.8rem;font-weight:700;letter-spacing:.1em;content:counter(step,decimal-leading-zero)}
147
- .code-widget{min-width:0;margin:18px 0}
148
- .code-widget figcaption{margin:0 0 8px;font-size:.9rem;font-weight:650}
149
- pre,.code-widget pre,.steps-widget pre{max-width:100%;overflow:auto;overscroll-behavior-inline:contain;padding:18px;border:1px solid var(--line);border-radius:18px;background:#1d1d1f;color:#f5f5f7;font: .9rem/1.65 var(--edgepress-font-mono);white-space:pre-wrap;overflow-wrap:anywhere}
150
- pre code{font:inherit;white-space:inherit}
151
- .table-widget{max-width:100%;margin:18px 0;overflow-x:auto;border:1px solid var(--line);border-radius:18px;background:var(--surface)}
152
- .table-widget table{width:100%;min-width:560px;border-collapse:collapse}
153
- .table-widget caption{padding:14px;text-align:left;font-weight:650}
154
- .table-widget th,.table-widget td{padding:11px 14px;border-top:1px solid var(--line);text-align:left;vertical-align:top}
155
- .table-widget th{background:var(--surface-soft);font-weight:650}
156
- .notice-widget{padding:19px 22px;border:1px solid var(--line);border-radius:18px;background:var(--surface-soft)}
157
- .notice-widget h3{margin:0 0 6px;font-size:1.05rem}
158
- .notice-widget p{margin:0}
159
- .notice-widget--warning{border-color:rgba(164,77,0,.25);background:var(--warning-soft);color:var(--warning)}
160
- .notice-widget--success{border-color:rgba(24,121,78,.25);background:var(--success-soft);color:var(--success)}
161
- .media-text-block{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:clamp(22px,5vw,54px)}
162
- .media-text-block,.media-text-block>*{min-width:0}
163
- .media-text-block--right figure{order:2}
164
- .media-text-block figure{margin:0}
165
- .media-text-block img,.media-text-block video{display:block;width:100%;max-height:620px;border-radius:22px;object-fit:cover}
166
- .media-text-block figcaption{margin-top:9px;color:var(--muted);font-size:.9rem}
167
- .media-text-copy{max-width:62ch}
168
- .media-text-copy h2{font-size:clamp(1.6rem,3.2vw,2.6rem)}
169
- .image-block{margin:0}
170
- .image-block img{display:block;width:100%;border-radius:24px}
171
- .image-block figcaption,.quote-block figcaption{margin-top:8px;color:var(--muted);font-size:.9rem}
172
- .quote-block{margin:20px 0;padding:clamp(24px,4vw,42px);border-radius:24px;background:var(--accent-soft)}
173
- .quote-block blockquote{margin:0;font-size:clamp(1.25rem,2.4vw,1.8rem);letter-spacing:-.025em;line-height:1.45}
174
- .quote-block blockquote p{margin:0}
175
- .cta-block{padding:clamp(25px,5vw,50px);border:1px solid var(--line);border-radius:28px;background:var(--surface);box-shadow:var(--shadow)}
176
- .cta-block p{color:var(--muted)}
177
- .cta-block .button{color:#fff}
178
- .faq-block details{padding:17px 0;border-bottom:1px solid var(--line)}
179
- .faq-block summary{color:var(--ink);font-weight:650;cursor:pointer}
180
- .faq-block details>div,.faq-block details>p{color:var(--muted)}
181
- .post-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,310px),1fr));gap:20px}
182
- .latest-posts .post-list{grid-template-columns:repeat(2,minmax(0,1fr))}
183
- .latest-posts>h2{margin-bottom:24px}
184
- .latest-posts .post-list .post-card:first-child{grid-column:1/-1;padding:clamp(24px,4vw,42px);background:var(--accent-soft);border-color:transparent}
185
- .latest-posts .post-card:first-child h3{max-width:36ch;font-size:clamp(1.5rem,2.7vw,2rem)}
186
- .latest-posts .post-card:first-child .post-excerpt{max-width:78ch}
187
- .archive-post-list{gap:24px;margin-top:20px}
188
- .post-card{margin:0}
189
- .post-card h2,.post-card h3{margin:0 0 9px;font-size:1.25rem;letter-spacing:-.025em;line-height:1.3}
190
- .post-card h2 a,.post-card h3 a{color:var(--ink)}
191
- .post-card h2 a:hover,.post-card h3 a:hover{color:var(--accent);text-decoration:none}
192
- .meta{display:flex;flex-wrap:wrap;gap:.25em .5em;margin:0 0 10px;color:var(--muted);font-size:.84rem}
193
- .post-excerpt{color:var(--muted);font-size:.94rem;line-height:1.6}
194
- .post-excerpt p{margin:.35rem 0 0}
195
- .post-excerpt p:first-child{margin-top:0}
196
- .post{max-width:860px;margin-inline:auto}
197
- .post>header{margin:0 0 30px}
198
- .post>header h1{margin:0 0 20px;font-size:clamp(2.1rem,4.8vw,3.65rem);line-height:1.2}
199
- .post-content{max-width:72ch;margin-inline:auto;color:var(--ink);font-size:1.08rem;line-height:1.9;overflow-wrap:anywhere}
200
- .post-content>p{margin-bottom:1.35em}
201
- .post-content li+li{margin-top:.45em}
202
- html[lang^="zh"] h1,html[lang^="zh"] h2,html[lang^="zh"] h3{letter-spacing:-.015em;line-height:1.3}
203
- html[lang^="zh"] .post-content{max-width:42em}
204
- .post-content h2{margin:2.1em 0 .7em;padding-top:.7em;border-top:1px solid var(--line);font-size:clamp(1.55rem,3vw,2.15rem)}
205
- .post-content h3{margin:1.7em 0 .55em;font-size:1.35rem}
206
- .post-content img,.post-content video{display:block;height:auto;max-width:100%;border-radius:20px}
207
- .post-content table{display:block;width:100%;max-width:100%;overflow:auto;border-collapse:collapse;overscroll-behavior-inline:contain}
208
- .post-content th,.post-content td{padding:9px 12px;border:1px solid var(--line);text-align:left;vertical-align:top}
209
- .post-content th{background:var(--surface-soft)}
210
- .post-content blockquote{margin:1.5em 0;padding:4px 0 4px 20px;border-left:3px solid var(--accent);color:var(--muted)}
211
- .post-content blockquote p:last-child{margin-bottom:0}
212
- .post-video{margin:1.5em 0}
213
- .post-video video{width:100%;background:#000}
214
- .post-tags{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:30px 0 0;padding-top:18px;border-top:1px solid var(--line);color:var(--muted);font-size:.9rem}
215
- .post-tags ul{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}
216
- .post-tags a{display:inline-flex;padding:4px 11px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-weight:550}
217
- .pagination{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin:24px 0}
218
- .pagination a{display:inline-flex;align-items:center;min-height:44px;padding:9px 15px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-weight:600}
219
- .pagination a:hover{border-color:var(--accent);text-decoration:none}
220
- .pagination-pages{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}
221
- .pagination-pages a,.pagination-current{display:inline-flex;min-width:44px;min-height:44px;align-items:center;justify-content:center;padding:9px 12px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-weight:600}
222
- .pagination-current{border-color:var(--button-bg);background:var(--button-bg);color:#fff}
223
- .pagination-ellipsis{padding:0 4px;color:var(--muted)}
224
- .latest-posts-pagination{justify-content:flex-start;gap:16px}
225
- .latest-posts-pagination a:last-child{margin-left:auto}
226
- .page-links ul{display:flex;flex-wrap:wrap;gap:10px;margin:0;padding:0;list-style:none}
227
- .page-links a{display:inline-flex;min-height:42px;align-items:center;padding:8px 14px;border:1px solid var(--line);border-radius:999px;background:var(--surface)}
228
- .intro{max-width:900px;margin:0 auto 42px;text-align:center}
229
- .intro h1{margin:0 0 16px}
230
- .intro p{max-width:65ch;margin-inline:auto;color:var(--muted);font-size:1.16rem}
231
- .local-search-page{max-width:820px;margin-inline:auto;padding:clamp(24px,5vw,48px);border:1px solid var(--line);border-radius:var(--radius-card);background:var(--surface)}
232
- .local-search-page h1{font-size:clamp(2.3rem,5vw,3.8rem)}
233
- .local-search-form label{display:block;margin-bottom:9px;font-weight:650}
234
- .local-search-controls{display:flex;gap:10px;min-width:0}
235
- .local-search-controls input{flex:1 1 auto;min-width:0;min-height:48px;padding:10px 14px;border:1px solid var(--line);border-radius:14px;background:var(--canvas);color:var(--ink)}
236
- .local-search-controls button{flex:0 0 auto;min-height:48px;padding:10px 18px;border:0;border-radius:999px;background:var(--button-bg);color:#fff;font-weight:650;cursor:pointer}
237
- .local-search-hint,.local-search-results time{color:var(--muted);font-size:.9rem}
238
- .local-search-results{padding-inline-start:1.4rem}
239
- .local-search-results>li{padding:14px 0;border-top:1px solid var(--line)}
240
- .local-search-results h2{margin:0;font-size:1.2rem}
241
- .local-search-results p{margin:6px 0 0}
242
- .error-page{max-width:760px;margin:5vh auto;padding:clamp(32px,7vw,76px);border:1px solid var(--line);border-radius:32px;background:var(--surface);text-align:center;box-shadow:var(--shadow)}
243
- .error-code{margin:0;color:var(--accent);font-size:clamp(5rem,16vw,10rem);font-weight:700;line-height:.9;letter-spacing:-.09em}
244
- .privacy-controller-inline{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:0}
245
- .privacy-controller-inline span{min-width:0;overflow-wrap:anywhere}
246
- .privacy-controller-details{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));gap:12px}
247
- .privacy-controller-details>div{padding:15px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}
248
- .privacy-controller-details dt{color:var(--muted);font-size:.85rem;font-weight:650}
249
- .privacy-controller-details dd{margin:4px 0 0;overflow-wrap:anywhere}
250
- .privacy-service-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));gap:12px;margin:0;padding:0;list-style:none}
251
- .privacy-service-list h3{margin:0 0 8px;font-size:1.1rem}
252
- .privacy-service-list p{margin:5px 0;color:var(--muted);font-size:.91rem}
253
- .privacy-service-list li{padding:18px}
254
- .privacy-services-empty{padding:16px;border:1px dashed var(--line);border-radius:16px;color:var(--muted)}
255
- .privacy-vendor-link{display:inline-block;margin-top:4px}
256
- .markdown-video{margin:1.5rem 0}
257
- .markdown-video video{display:block;width:100%;border-radius:20px;background:#000}
258
- .markdown-video figcaption{margin-top:8px;color:var(--muted);font-size:.9rem}
259
- .markdown-task-status{display:inline-block;min-width:1.35em;font-weight:700}
260
- .code-copy-block{max-width:100%;margin:1.25em 0;overflow:hidden;border:1px solid var(--line);border-radius:18px;background:#1d1d1f}
261
- .code-copy-block pre{margin:0;border:0;border-radius:0}
262
- .code-copy-toolbar{display:flex;justify-content:flex-end;padding:8px 10px;background:#262629}
263
- .code-copy-button{min-height:38px;padding:6px 13px;border:1px solid rgba(255,255,255,.35);border-radius:999px;background:transparent;color:#fff;font:600 .86rem/1.3 var(--edgepress-font-sans);cursor:pointer}
264
- .code-copy-button:hover{background:#3a3a3c}
265
- .code-copy-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
266
- .post-toc-widget{position:fixed;inset-inline-end:max(16px,env(safe-area-inset-right));inset-block-end:calc(max(16px,env(safe-area-inset-bottom)) + 56px);z-index:950;max-width:calc(100vw - 32px);color:var(--ink);font:14px/1.5 var(--edgepress-font-sans)}
267
- .post-toc-widget[hidden]{display:none}
268
- .post-toc-toggle{display:inline-flex;align-items:center;gap:8px;min-height:46px;padding:9px 15px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);font:inherit;font-weight:650;box-shadow:var(--shadow);cursor:pointer}
269
- .post-toc-toggle .icon-library{width:18px;height:18px;flex:none}
270
- .post-toc-panel{position:absolute;inset-inline-end:0;inset-block-end:calc(100% + 10px);display:grid;gap:9px;width:min(23rem,calc(100vw - 32px));max-height:min(60vh,32rem);overflow:auto;overscroll-behavior:contain;padding:16px;border:1px solid var(--line);border-radius:20px;background:var(--surface);box-shadow:0 16px 45px rgba(0,0,0,.18)}
271
- .post-toc-panel[hidden]{display:none}
272
- .post-toc-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}
273
- .post-toc-heading h2{margin:0;font-size:1rem;letter-spacing:0}
274
- .post-toc-close{display:grid;place-items:center;width:42px;height:42px;flex:none;border:1px solid var(--line);border-radius:50%;background:var(--canvas);color:var(--ink);font:inherit;font-size:1.35rem;line-height:1;cursor:pointer}
275
- .post-toc-panel ol{margin:0;padding-inline-start:0;list-style:none}
276
- .post-toc-panel li{padding:3px 0;overflow-wrap:anywhere}
277
- .post-toc-panel .post-toc-level-3{padding-inline-start:1rem}
278
- .post-toc-panel .post-toc-level-4,.post-toc-panel .post-toc-level-5,.post-toc-panel .post-toc-level-6{padding-inline-start:2rem}
279
- .site-footer{border-top:1px solid var(--line);background:var(--surface-soft)}
280
- .footer-inner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px 24px;width:min(calc(100% - 48px),var(--content-width));min-height:82px;margin-inline:auto;padding:12px 0}
281
- .footer-copy{margin:0;color:var(--muted);font-size:.84rem;font-weight:600;letter-spacing:.02em}
282
- .footer-navigation{display:flex;align-items:center;flex-wrap:wrap;gap:5px 20px}
283
- .footer-navigation a{min-height:40px;font-size:.84rem}
284
- .site-header--hidden,.brand--hidden,.primary-navigation--hidden,.locale-nav--hidden,.site-footer--hidden,.footer-copy--hidden,.footer-navigation--hidden{display:none!important}
285
- .privacy-manager{position:fixed;inset-inline-end:max(16px,env(safe-area-inset-right));inset-block-end:max(16px,env(safe-area-inset-bottom));z-index:1000;display:grid;align-content:end;gap:8px;box-sizing:border-box;width:min(30rem,calc(100vw - 32px));max-height:calc(100dvh - 32px);color:var(--ink);font:13px/1.5 var(--edgepress-font-sans);pointer-events:none;isolation:isolate}
286
- .privacy-manager *{box-sizing:border-box}
287
- .privacy-manager>*{min-width:0;pointer-events:auto}
288
- .privacy-manager .privacy-settings-button,.privacy-manager .privacy-panel button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:0;min-height:46px;max-width:100%;padding:9px 15px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);font:inherit;font-weight:650;line-height:1.25;text-align:center;overflow-wrap:anywhere;cursor:pointer}
289
- .privacy-manager .privacy-settings-button{order:1;justify-self:end;box-shadow:var(--shadow)}
290
- .privacy-manager .privacy-panel{position:relative;order:0;display:grid;gap:10px;width:100%;max-height:min(66vh,42rem);max-height:min(66dvh,42rem);overflow:auto;overscroll-behavior:contain;padding:17px;border:1px solid var(--line);border-radius:22px;background:var(--surface);color:var(--ink);box-shadow:0 16px 48px rgba(0,0,0,.2)}
291
- .privacy-manager .privacy-panel[hidden]{display:none}
292
- .privacy-manager .privacy-panel h2{margin:0;padding-inline-end:46px;font-size:1.1rem;line-height:1.3}
293
- .privacy-manager .privacy-panel p{margin:0;overflow-wrap:anywhere}
294
- .privacy-manager .privacy-panel .privacy-close{position:absolute;inset-block-start:7px;inset-inline-end:7px;width:44px;min-width:44px;min-height:44px;padding:8px;border-radius:50%}
295
- .privacy-manager .privacy-panel .privacy-close .icon-library,.privacy-manager .icon-library{width:19px;height:19px;flex:none}
296
- .privacy-manager .privacy-intro,.privacy-manager .privacy-essential,.privacy-manager .privacy-controller{color:var(--muted)}
297
- .privacy-manager .privacy-service-settings{display:grid;gap:8px;min-width:0}
298
- .privacy-manager .privacy-service-setting{display:grid;gap:5px;min-width:0;padding:11px;border:1px solid var(--line);border-radius:15px;background:var(--canvas)}
299
- .privacy-manager .privacy-service-toggle{display:grid;grid-template-columns:minmax(0,1fr) 44px;align-items:center;gap:8px;min-width:0;cursor:pointer}
300
- .privacy-manager .privacy-service-toggle input{position:relative;grid-column:2;grid-row:1;width:44px;height:26px;margin:0;appearance:none;border:1px solid var(--line);border-radius:999px;background:#b8b8bd;cursor:pointer}
301
- .privacy-manager .privacy-service-toggle input::before{position:absolute;inset-block-start:3px;inset-inline-start:3px;width:18px;height:18px;border-radius:50%;background:#fff;content:"";transition:transform .16s ease}
302
- .privacy-manager .privacy-service-toggle input:checked{border-color:var(--accent);background:var(--accent)}
303
- .privacy-manager .privacy-service-toggle input:checked::before{transform:translateX(18px)}
304
- .privacy-manager .privacy-service-toggle input:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
305
- .privacy-manager .privacy-service-toggle-text{grid-column:1;grid-row:1;display:grid;gap:3px;min-width:0;overflow-wrap:anywhere}
306
- .privacy-manager .privacy-service-toggle-text strong{font-size:.94rem}
307
- .privacy-manager .privacy-service-purpose{color:var(--muted);font-size:.85rem;line-height:1.4}
308
- .privacy-manager .privacy-details{min-width:0;margin:0;border-top:1px solid var(--line)}
309
- .privacy-manager .privacy-details>summary{padding:8px 1px 0;font-size:.86rem;font-weight:650;cursor:pointer}
310
- .privacy-manager .privacy-service-disclosures{display:grid;gap:6px;margin:8px 0 0;font-size:.81rem;line-height:1.4}
311
- .privacy-manager .privacy-service-disclosures>div{display:grid;grid-template-columns:minmax(5.3rem,.38fr) minmax(0,1fr);gap:8px;min-width:0}
312
- .privacy-manager .privacy-service-disclosures dt{color:var(--muted);font-weight:650}
313
- .privacy-manager .privacy-service-disclosures dd{min-width:0;margin:0;overflow-wrap:anywhere}
314
- .privacy-manager .privacy-service-disclosures a,.privacy-manager .privacy-policy-link{overflow-wrap:anywhere}
315
- .privacy-manager .privacy-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
316
- .privacy-manager .privacy-panel .privacy-accept,.privacy-manager .privacy-panel .privacy-reject{border-color:var(--button-bg);background:var(--button-bg);color:#fff}
317
- .privacy-manager .privacy-panel .privacy-accept:hover:not(:disabled),.privacy-manager .privacy-panel .privacy-reject:hover:not(:disabled){filter:brightness(.94)}
318
- .privacy-manager .privacy-panel .privacy-save{grid-column:1/-1;background:transparent}
319
- .privacy-manager .privacy-panel button:disabled{opacity:.55;cursor:not-allowed}
320
- .privacy-manager .privacy-footer{display:grid;gap:5px;padding-block-start:9px;border-top:1px solid var(--line);font-size:.81rem}
321
- .privacy-manager .privacy-controller{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 7px}
322
- .privacy-manager .privacy-controller a{overflow-wrap:anywhere}
323
- .privacy-manager .privacy-policy-link{width:fit-content;max-width:100%;font-size:.86rem}
324
- .privacy-manager .privacy-empty{padding:10px;border:1px dashed var(--line);border-radius:12px;color:var(--muted)}
325
- .privacy-manager .privacy-policy-link:focus-visible,.privacy-manager .privacy-settings-button:focus-visible,.privacy-manager .privacy-panel button:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
326
- .post-content h2[id],.post-content h3[id],.post-content h4[id],.post-content h5[id],.post-content h6[id]{scroll-margin-top:90px}
327
- .post-content a,.post-content code,.meta,.tags{overflow-wrap:anywhere}
328
- .post-content pre,.code-widget pre,.steps-widget pre{white-space:pre-wrap;overflow-wrap:anywhere;word-break:normal}
329
- @media(max-width:880px){
330
- .header-inner{grid-template-columns:auto auto;gap:0 16px;padding-block:8px}
331
- .primary-navigation{grid-column:1/-1;grid-row:2;justify-content:flex-start;overflow-x:auto;overscroll-behavior-inline:contain;scrollbar-width:none}
332
- .primary-navigation::-webkit-scrollbar{display:none}
333
- .locale-nav{grid-column:2;grid-row:1}
334
- .page-builder-row[data-columns="3"],.page-builder-row[data-columns="4"]{grid-template-columns:repeat(2,minmax(0,1fr))}
335
- }
336
- @media(max-width:620px){
337
- .header-inner,.footer-inner{width:calc(100% - 32px)}
338
- .site-main{width:calc(100% - 32px);padding-top:32px}
339
- .primary-navigation{gap:18px}
340
- .primary-navigation a,.primary-navigation .navigation-select{min-height:44px;font-size:.84rem}
341
- .locale-nav select{max-width:128px;min-height:40px}
342
- .hero-block{grid-template-columns:minmax(0,1fr);padding:30px 24px;border-radius:25px}
343
- .hero-block h1{font-size:clamp(2.3rem,10vw,3.5rem)}
344
- .hero-block h2{font-size:clamp(1.9rem,8vw,2.6rem)}
345
- .hero-block--banner{padding:32px 0 0}
346
- .hero-banner{max-height:none}
347
- .hero-block--split{align-items:start}
348
- .page-builder-row[data-columns="2"],.page-builder-row[data-columns="3"],.page-builder-row[data-columns="4"]{grid-template-columns:minmax(0,1fr)}
349
- .latest-posts .post-list{grid-template-columns:minmax(0,1fr)}
350
- .page-section{padding:23px;border-radius:22px}
351
- .page-section--plain{padding-inline:0}
352
- .media-text-block{grid-template-columns:minmax(0,1fr)}
353
- .media-text-block--right figure{order:0}
354
- .local-search-controls{align-items:stretch;flex-direction:column}
355
- .local-search-controls button{min-height:46px}
356
- .footer-inner{align-items:flex-start;flex-direction:column;justify-content:center;padding:18px 0}
357
- .footer-navigation{gap:2px 15px}
358
- .post-toc-widget{inset-inline-end:max(12px,env(safe-area-inset-right));inset-block-end:calc(max(12px,env(safe-area-inset-bottom)) + 56px)}
359
- .post-toc-panel{max-height:min(58vh,30rem)}
360
- .privacy-manager{inset-inline-start:max(12px,env(safe-area-inset-left));inset-inline-end:max(12px,env(safe-area-inset-right));inset-block-end:max(12px,env(safe-area-inset-bottom));width:auto;max-width:none}
361
- .privacy-manager .privacy-panel{max-height:min(66dvh,40rem);padding:14px}
362
- }
363
- @media(prefers-reduced-motion:reduce){
364
- html{scroll-behavior:auto}
365
- *,*::before,*::after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}
366
- }
367
-
368
- /* Raster artwork and predictable spacing for generated page elements. */
369
- .icon-library{display:inline-block;width:24px;height:24px;flex:none;object-fit:contain;vertical-align:middle}
370
- .navigation-icon{width:20px;height:20px}
371
- .feature-icon{width:32px;height:32px}
372
- .post-toc-toggle .icon-library,.privacy-manager .icon-library{width:20px;height:20px}
373
- .privacy-manager .privacy-accept .icon-library,.privacy-manager .privacy-reject .icon-library{filter:brightness(0) invert(1)}
374
- .page-builder-cell{display:grid;align-content:start;gap:clamp(16px,2.5vw,28px)}
375
- .page-builder-cell>*,.section-inner>*{min-width:0;margin-block:0}
376
- .section-inner{display:grid;gap:16px}
377
- .post-list{display:grid;gap:clamp(16px,2.5vw,24px)}
378
- .archive-post-list{margin-block:24px}
379
- .post-list>.post-card{margin:0}
380
- .post-card .meta{margin-block:8px;line-height:1.6}
381
- .latest-posts>h2,.feature-section>h2{margin-block:0 16px}
382
- .pagination:not(.latest-posts-pagination){align-items:center;justify-content:center;gap:12px}
383
- .pagination-pages{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}
384
- .pagination-pages a,.pagination-current{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:var(--panel,var(--paper,var(--surface)));color:var(--ink);font-weight:600;text-decoration:none}
385
- .pagination-current{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);font-weight:800}
386
- .pagination-ellipsis{padding-inline:4px;color:var(--muted)}
387
- .hero-block--banner{grid-template-columns:minmax(0,1fr);gap:24px}
388
- .hero-banner{display:block;width:min(100%,680px);height:auto;max-height:460px;margin:0 auto;object-fit:contain}
389
- .hero-block--banner .hero-aside{max-width:100%}
390
-
391
- .page-section--dark .icon-library{filter:brightness(0) invert(1)}
392
- @media(prefers-color-scheme:dark){.icon-library{filter:brightness(0) invert(1)}}
393
-
394
- .brand-mark{width:36px;height:36px;object-fit:contain;border-radius:50%;background:#f8efdc;padding:2px}
395
- .hero-mascot,.hero-mascot-picture{width:min(100%,320px);max-height:240px}
396
- .hero-banner-picture{display:block;margin-top:24px}
397
-
398
- /* Journal metadata and accessible project navigation. */
399
- .navigation-select[hidden] { display: none; }
400
- .navigation-select { display: inline-flex; align-items: center; gap: .42em; max-width: 100%; color: var(--accent); }
401
- .navigation-select select { font: inherit; color: inherit; background: transparent; border: 0; border-radius: 0; padding: .25rem 0; min-height: 44px; max-width: 100%; field-sizing: content; cursor: pointer; }
402
- .primary-navigation a { min-height: 44px; }
403
- .navigation-select option { color: CanvasText; background: Canvas; }
404
- .navigation-select select:focus-visible { outline: 2px solid currentColor; outline-offset: 3px; }
405
- .post-byline { display: flex; align-items: center; flex-wrap: wrap; gap: .7rem 1.2rem; margin-block: 1rem; }
406
- .post-byline .post-author { display: inline-flex; align-items: center; gap: .55rem; }
407
- .author-avatar { width: 40px; height: 40px; flex: 0 0 40px; border-radius: 50%; object-fit: cover; }
408
- .post-tags { display: flex; align-items: center; flex-wrap: wrap; gap: .45rem; margin-block: 1rem 1.5rem; }
409
- .post-tag { display: inline-block; max-width: 100%; overflow-wrap: anywhere; border: 1px solid currentColor; border-radius: 1rem; padding: .15rem .6rem; font-size: .85em; }
410
-
411
-
412
-
413
-
414
- .post-pinned{display:inline-block;font-size:.78rem;font-weight:600;padding:.15rem .5rem;border:1px solid currentColor;border-radius:.35rem;margin:.25rem 0}
415
-
416
- .post-changes{margin:1.5rem 0;border:1px solid var(--line);border-radius:12px;overflow:hidden;color:var(--ink)}
417
- .post-changes summary{cursor:pointer;font-weight:650;padding:1rem;min-height:44px;background:var(--surface,var(--panel,var(--paper,transparent)))}
418
- .post-changes summary:focus-visible{outline:3px solid var(--accent);outline-offset:-3px}
419
- .post-changes-list{display:grid;gap:1rem;padding:1rem}
420
- .post-change-passage{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:1rem}
421
- .post-change-side{min-width:0;padding:1rem;border:1px solid var(--line);border-radius:10px;background:var(--surface,var(--panel,var(--paper,transparent)))}
422
- .post-change-after{border-inline-start:4px solid var(--accent);background:color-mix(in srgb,var(--accent) 7%,transparent)}
423
- .post-change-label{font-weight:650;margin:0 0 .75rem;font-size:.9rem;color:var(--muted,var(--ink))}
424
- .post-change-content{overflow-wrap:anywhere;font-size:.95rem;line-height:1.7}
425
- .post-change-content>:first-child{margin-top:0}.post-change-content>:last-child{margin-bottom:0}
426
- .post-change-heading{font-weight:650;font-size:1.1rem;margin:.5rem 0}
427
- .post-change-content img{max-width:100%;height:auto}.post-change-content pre{overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere}
428
-
429
-
430
- /* Folio: a reading spread, with Lumen's shared component geometry. */
431
- :root{--serif:var(--edgepress-font-serif)}
432
- @media(prefers-color-scheme:dark){:root{--button-bg:#e6dec1;--button-hover:#f5eacd;--accent:#e6dec1;--accent-hover:#fff1c9;--accent-soft:#34342b}}
433
- .site-header{position:relative;background:var(--canvas);backdrop-filter:none;-webkit-backdrop-filter:none}
434
- .header-inner{grid-template-columns:auto minmax(0,1fr) auto auto;gap:28px;width:min(calc(100% - 96px),var(--content-width));min-height:76px}
435
- .brand{font-family:var(--serif);font-size:2.6rem;font-weight:600;letter-spacing:-.05em;line-height:1.2}
436
- .brand-description{min-width:0;max-width:54ch;margin:0;white-space:normal;color:var(--muted);font-size:.9rem;line-height:1.6;text-wrap:pretty;overflow-wrap:anywhere}
437
- .primary-navigation{justify-content:flex-end;gap:28px}
438
- .primary-navigation a{position:relative;color:var(--ink);font-size:.88rem;font-weight:400;padding-block:15px}
439
- .primary-navigation .navigation-icon{display:none!important}
440
- .primary-navigation a[aria-current="page"]::after{content:"";position:absolute;bottom:-16px;left:0;right:0;height:2px;background:var(--ink)}
441
- .locale-nav{padding-left:28px;border-left:1px solid var(--line)}
442
- .locale-nav select{border:0;border-radius:0;background:transparent;font-size:.87rem}
443
- .site-main{width:min(calc(100% - 96px),var(--content-width));padding-top:42px}
444
- .page-builder{gap:44px}
445
- h1,h2,h3,.display-text--serif{font-family:var(--serif);font-weight:700;font-synthesis:weight}
446
- .hero-block{display:block;padding:16px 0 32px;border:0;border-radius:0;background:transparent;box-shadow:none}
447
- .hero-main{max-width:920px}
448
- .hero-block h1,.hero-block h2,html[lang^="zh"] .hero-block h1{max-width:20ch;margin:0 0 22px;font-size:clamp(2.5rem,4.3vw,4.1rem);font-weight:700;line-height:1.17;letter-spacing:-.03em;text-wrap:pretty}
449
- .hero-block .eyebrow{margin-bottom:14px;font-size:.88rem;font-weight:500;letter-spacing:.04em;color:var(--ink)}
450
- .hero-copy{max-width:52ch;margin-bottom:28px;font-size:1.13rem;line-height:1.7}
451
- .hero-main>p:last-child{margin-bottom:0}
452
- .button{border-radius:0;font-weight:500}
453
- .hero-main:has(.button)::after{content:"";display:block;width:40px;border-top:1px solid var(--ink);margin-top:24px}
454
- .hero-block--split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:48px}
455
- .hero-block--banner,.hero-block--banner:not(.hero-block--split){display:grid;grid-template-columns:minmax(0,.75fr) minmax(0,1fr);align-items:center;gap:clamp(28px,5vw,64px);padding:0;background:transparent;overflow:visible}
456
- .hero-block--banner .hero-main{padding:0;text-align:left}
457
- .hero-block--banner h1,.hero-block--banner .hero-copy{margin-inline:0}
458
- .hero-banner,.hero-banner-picture{display:block;width:100%;height:auto;max-height:none;margin:0;min-width:0;object-fit:contain}
459
- .hero-block--banner .hero-aside{grid-column:1/-1;grid-row:2}
460
- .latest-posts>h2,.feature-section>h2{font-size:1.6rem;margin-bottom:24px}
461
- .post-list,.latest-posts .post-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:32px}
462
- .post-card,.latest-posts .post-list .post-card:first-child{grid-column:auto;padding:22px 0 0;border:0;border-top:1px solid var(--line);border-radius:0;background:transparent;box-shadow:none}
463
- .post-card h2,.post-card h3,.latest-posts .post-card:first-child h3{max-width:30ch;font-size:1.5rem;line-height:1.4;letter-spacing:-.01em}
464
- .post-list:has(>.post-card:only-child){max-width:900px}
465
- .meta{font-size:.85rem;line-height:1.65}
466
- .post-excerpt{max-width:66ch;font-size:1rem;line-height:1.7}
467
- .post{max-width:880px}
468
- .post>header h1{font-size:clamp(2.15rem,4.1vw,3.65rem);line-height:1.3}
469
- .post-content{max-width:70ch;font-size:1.1rem;line-height:1.95}
470
- .post-content h2{font-size:1.9rem}.post-content h3{font-size:1.45rem;line-height:1.5}
471
- .post-content img,.post-content video,.image-block img,.media-text-block img,.media-text-block video{height:auto;max-height:none;object-fit:contain;border-radius:0}
472
- .image-block figcaption,.media-text-block figcaption,.markdown-video figcaption{font-size:.9rem;line-height:1.65}
473
- .hero-mascot,.hero-mascot-picture{max-height:none}
474
- .image-block,.code-widget{margin:0;min-width:0}
475
- .page-section,.cta-block,.quote-block,.error-page,.local-search-page,.notice-widget,.privacy-controller-details>div{border-radius:0;box-shadow:none}
476
- .page-section--soft,.cta-block,.quote-block{background:var(--surface-soft)}
477
- .error-page{border:0}.local-search-page{border:0;background:transparent;padding-inline:0}
478
- .footer-inner{width:min(calc(100% - 96px),var(--content-width))}.site-footer{background:transparent}
479
- .post-toc-toggle,.post-toc-close,.privacy-manager .privacy-settings-button,.privacy-manager .privacy-panel button{border-radius:3px}
480
- .privacy-manager .privacy-panel,.post-toc-panel{border-radius:6px}
481
- .button,.cta-block .button,.local-search-controls button,.pagination-current,.privacy-manager .privacy-panel .privacy-accept,.privacy-manager .privacy-panel .privacy-reject{color:var(--canvas)}
482
- @media(max-width:1100px){.header-inner{grid-template-columns:auto minmax(0,1fr) auto}.brand-description{grid-column:1/-1;grid-row:2;max-width:none;padding-bottom:12px}.primary-navigation{grid-column:2;grid-row:1;justify-content:flex-end}.locale-nav{grid-column:3;grid-row:1}}
483
- @media(max-width:880px){.header-inner{grid-template-columns:minmax(0,1fr) auto;gap:0 20px;padding-block:12px}.primary-navigation{grid-column:1/-1;grid-row:2;justify-content:flex-start}.locale-nav{grid-column:2;grid-row:1;padding-left:12px}.brand-description{grid-row:3;padding-bottom:0}.primary-navigation a[aria-current="page"]::after{bottom:0}.hero-block--banner,.hero-block--banner:not(.hero-block--split),.hero-block--split{grid-template-columns:minmax(0,1fr)}.hero-block--banner .hero-main{max-width:700px}.hero-block--banner .hero-aside{grid-row:auto}}
484
- @media(max-width:620px){.header-inner,.site-main,.footer-inner{width:calc(100% - 40px)}.header-inner{padding-top:14px}.brand{font-size:2.25rem}.site-main{padding-top:28px}.primary-navigation{gap:26px}.primary-navigation a{padding-block:12px}.locale-nav select{max-width:120px;padding-left:0}.hero-block{padding:0 0 8px}.hero-block h1,html[lang^="zh"] .hero-block h1{font-size:clamp(2.15rem,9vw,3rem);line-height:1.3}.hero-copy{font-size:1rem}.hero-block--banner{gap:26px}.page-builder{gap:36px}.post-list,.latest-posts .post-list{grid-template-columns:minmax(0,1fr);gap:26px}.post-content{font-size:1.04rem}.post-content h2{font-size:1.5rem}.post-content h3{font-size:1.3rem}}
485
-
486
- .post-content a{text-decoration:underline;text-underline-offset:.18em}.post-byline time{font-variant-numeric:tabular-nums}
487
- @media(max-width:600px){.post-byline>time,.post-byline .post-updated{flex-basis:100%;min-width:0}.post-byline time[data-date-only="false"],.post-updated{min-block-size:3.2em;line-height:1.6}}
488
-
489
- /* Embed consent, status and controls inherit the surrounding website palette. */
490
- .edgepress-oembed{width:100%;min-width:0;margin:1.5rem 0;padding:clamp(14px,3vw,24px);border:1px solid var(--line);border-radius:16px;background:var(--surface,var(--panel,var(--paper,transparent)));color:var(--ink);overflow-wrap:anywhere}
491
- .edgepress-oembed>figcaption{font:inherit;font-weight:650;margin:0 0 .75rem}
492
- .edgepress-oembed [data-oembed-notice]{color:var(--muted,var(--ink));font-size:.9rem;line-height:1.6;margin:.5rem 0 1rem}
493
- .edgepress-oembed [data-oembed-load]{appearance:none;font:inherit;font-weight:650;min-height:44px;padding:10px 18px;margin:0 12px 12px 0;border:1px solid var(--accent);border-radius:10px;background:var(--accent);color:var(--paper);cursor:pointer;transition:filter .15s,transform .15s}
494
- .edgepress-oembed [data-oembed-load]:hover{filter:brightness(1.1);transform:translateY(-1px)}
495
- .edgepress-oembed [data-oembed-load]:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
496
- .edgepress-oembed[aria-busy=true] [data-oembed-load]{pointer-events:none;opacity:.6}
497
- .edgepress-oembed>a{display:inline-flex;align-items:center;min-height:44px;color:var(--accent);font-size:.9rem}
498
- .edgepress-oembed [data-oembed-status],.oembed-content{min-width:0;max-width:100%}
499
- .edgepress-oembed [data-oembed-status]{min-height:clamp(160px,calc((100vw - 48px)*.75),480px);position:relative}
500
- .edgepress-oembed .oembed-placeholder{aspect-ratio:var(--oembed-ratio,4/3);min-height:160px;border-radius:10px;background:linear-gradient(110deg,color-mix(in srgb,var(--surface,var(--paper,#fff)) 78%,var(--accent) 22%),color-mix(in srgb,var(--surface,var(--paper,#fff)) 92%,var(--accent) 8%),color-mix(in srgb,var(--surface,var(--paper,#fff)) 78%,var(--accent) 22%));background-size:200% 100%}
501
- .edgepress-oembed.is-loading .oembed-placeholder{animation:edgepress-oembed-shimmer 1.4s linear infinite}
502
- .edgepress-oembed[data-loaded=true] [data-oembed-status]{min-height:0}.edgepress-oembed[data-loaded=true] .oembed-placeholder{display:none}
503
- @keyframes edgepress-oembed-shimmer{to{background-position:-200% 0}}
504
- .edgepress-oembed iframe,.edgepress-oembed img,.edgepress-oembed blockquote{max-width:100%;margin-inline:auto;border-radius:10px}
505
- .edgepress-oembed[data-loaded=true]>[data-oembed-notice]{margin-bottom:.25rem}
506
- .oembed-caption{white-space:pre-wrap}
507
- .post-change-content img{display:block;width:100%;height:auto;max-height:420px;object-fit:contain;background:var(--surface,var(--panel,var(--paper,transparent)));border-radius:8px}
508
- @media(prefers-reduced-motion:reduce){.edgepress-oembed [data-oembed-load]{transition:none}}
509
- @media(prefers-reduced-motion:reduce){.edgepress-oembed.is-loading .oembed-placeholder{animation:none}}
510
-
511
- .project-demo{position:relative;min-width:0}.project-demo img{display:block;width:100%;height:auto;border-radius:12px}.project-demo-media{position:relative}.project-demo-media video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;border-radius:12px}.project-demo-media.is-ready img{visibility:hidden}.project-demo [hidden]{display:none!important}.project-demo button{display:inline-flex;align-items:center;justify-content:center;min-height:44px;margin-top:12px;padding:10px 18px;border:1px solid var(--accent);border-radius:999px;background:var(--surface,var(--panel,var(--paper,transparent)));color:var(--ink);font:inherit;font-weight:650;cursor:pointer}.project-demo button:focus-visible{outline:3px solid var(--accent);outline-offset:4px}.project-demo button:disabled{cursor:wait;opacity:.7}.project-demo-status{display:block;min-height:1.4em;color:var(--ink);font-size:.9rem;margin-top:6px}
512
-
513
- .table-widget:focus-visible{outline:3px solid var(--accent);outline-offset:4px}
514
-
515
- .project-demo-seek{display:block;width:100%;min-height:44px;margin:4px 0;accent-color:var(--accent);cursor:pointer}.project-demo-seek:focus-visible{outline:3px solid var(--accent);outline-offset:3px}.project-demo-time{display:block;font-variant-numeric:tabular-nums;color:var(--ink);line-height:1.5}.project-demo-seek:disabled{cursor:wait;opacity:.5}
1
+ :root{
2
+ color-scheme:light dark;
3
+ --canvas:#faf9f6;
4
+ --surface:#fff;
5
+ --surface-soft:#f1f0ec;
6
+ --ink:#20201d;
7
+ --muted:#686862;
8
+ --line:rgba(29,29,31,.12);
9
+ --accent:#292922;
10
+ --accent-hover:#62624c;
11
+ --button-bg:#20201d;
12
+ --button-hover:#404037;
13
+ --accent-soft:#eeede6;
14
+ --warning:#a44d00;
15
+ --warning-soft:#fff2df;
16
+ --success:#18794e;
17
+ --success-soft:#e9f7ef;
18
+ --radius-small:3px;
19
+ --radius-card:3px;
20
+ --content-width:1440px;
21
+ --shadow:none;
22
+ font-family:var(--edgepress-font-sans);
23
+ font-synthesis:none;
24
+ text-rendering:optimizeLegibility;
25
+ -webkit-font-smoothing:antialiased;
26
+ -moz-osx-font-smoothing:grayscale
27
+ }
28
+ @media(prefers-color-scheme:dark){
29
+ :root{
30
+ --canvas:#171715;
31
+ --surface:#22221f;
32
+ --surface-soft:#292925;
33
+ --ink:#f3f1ea;
34
+ --muted:#b6b5ab;
35
+ --line:rgba(245,245,247,.13);
36
+ --accent:#e6dec1;
37
+ --accent-hover:#fff1c9;
38
+ --accent-soft:#34342b;
39
+ --warning:#ffb45f;
40
+ --warning-soft:#352616;
41
+ --success:#62d49a;
42
+ --success-soft:#153025;
43
+ --shadow:0 18px 48px rgba(0,0,0,.24)
44
+ }
45
+ }
46
+ *,*::before,*::after{box-sizing:border-box}
47
+ html{min-width:0;scroll-behavior:auto;scroll-padding-top:90px;background:var(--canvas)}
48
+ body{display:flex;flex-direction:column;min-width:0;max-width:none;min-height:100vh;margin:0;background:var(--canvas);color:var(--ink);font:400 16px/1.65 -apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI","PingFang SC","PingFang TC","Microsoft YaHei","Noto Sans CJK SC","Microsoft JhengHei",sans-serif}
49
+ a{color:var(--accent);text-decoration:none;text-underline-offset:.2em}
50
+ a:hover{color:var(--accent-hover);text-decoration:underline}
51
+ a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid var(--accent);outline-offset:4px;border-radius:5px}
52
+ button,input,select{font:inherit}
53
+ img,video,iframe{max-width:100%;height:auto}
54
+ p{margin:0 0 1em}
55
+ h1,h2,h3,h4{color:var(--ink);font-weight:650;letter-spacing:-.035em;line-height:1.18}
56
+ h1{font-size:clamp(2.4rem,5.5vw,4.5rem);letter-spacing:-.05em;line-height:1.12;text-wrap:balance}
57
+ h2{font-size:clamp(1.7rem,3.5vw,2.5rem)}
58
+ h3{font-size:clamp(1.2rem,2.1vw,1.55rem)}
59
+ .site-shell{display:flex;flex:1;min-height:100vh;min-height:100svh;flex-direction:column}
60
+ .skip-link{position:fixed;top:12px;left:12px;z-index:2000;transform:translateY(-160%);padding:11px 16px;border-radius:999px;background:var(--ink);color:var(--canvas);font-weight:650;box-shadow:var(--shadow)}
61
+ .skip-link:focus{transform:translateY(0);color:var(--canvas)}
62
+ .site-header{position:sticky;top:0;z-index:100;border-bottom:1px solid var(--line);background:rgba(250,250,252,.82);backdrop-filter:saturate(180%) blur(18px);-webkit-backdrop-filter:saturate(180%) blur(18px)}
63
+ @media(prefers-color-scheme:dark){.site-header{background:rgba(16,16,18,.82)}}
64
+ .header-inner{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:26px;width:min(calc(100% - 48px),var(--content-width));min-height:66px;margin-inline:auto}
65
+ .brand{display:inline-flex;align-items:center;gap:10px;min-width:0;color:var(--ink);font-size:.94rem;font-weight:680;letter-spacing:-.025em;white-space:nowrap}
66
+ .brand:hover{color:var(--ink);text-decoration:none}
67
+ .brand-mark{display:block;width:30px;height:30px;flex:none;color:var(--button-bg)}
68
+ .primary-navigation{display:flex;align-items:center;justify-content:center;gap:clamp(12px,2.2vw,28px);min-width:0}
69
+ .primary-navigation a,.primary-navigation .navigation-select,.footer-navigation a,.footer-navigation .navigation-select{display:inline-flex;align-items:center;min-height:44px;color:var(--muted);font-size:.87rem;font-weight:520;white-space:nowrap}
70
+ .primary-navigation a:hover,.primary-navigation .navigation-select:hover,.footer-navigation a:hover,.footer-navigation .navigation-select:hover{color:var(--ink);text-decoration:none}
71
+ .primary-navigation a[aria-current="page"]{color:var(--ink);font-weight:650}
72
+ .primary-navigation .navigation-icon,.footer-navigation .navigation-icon{display:none}
73
+ .primary-navigation a[href$="/search/"] .navigation-icon,.footer-navigation .navigation-icon{display:block;width:17px;height:17px;flex:none;margin-right:6px;}
74
+ .locale-nav{justify-self:end;min-width:0}
75
+ .locale-nav select{max-width:150px;min-height:40px;padding:6px 30px 6px 12px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);font-size:.84rem;cursor:pointer}
76
+ .site-main{flex:1 0 auto;width:min(calc(100% - 48px),var(--content-width));min-width:0;margin-inline:auto;padding:clamp(40px,6.5vw,82px) 0 clamp(76px,10vw,132px)}
77
+ .page-builder{display:grid;gap:clamp(24px,4vw,44px);min-width:0}
78
+ .page-title{width:100%;max-width:1040px;margin:0 auto}
79
+ .page-title h1{margin:0}
80
+ .hero-block{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,.72fr);align-items:center;gap:clamp(28px,6vw,80px);min-width:0;padding:clamp(32px,7vw,88px);border:1px solid var(--line);border-radius:32px;background:radial-gradient(ellipse at 90% 12%,rgba(0,113,227,.105),transparent 37%),var(--surface);box-shadow:var(--shadow)}
81
+ .hero-block:not(.hero-block--split){display:block}
82
+ .hero-main,.hero-aside{min-width:0}
83
+ .hero-block h1,.hero-block h2{max-width:22ch;margin:0 0 20px;font-size:clamp(2.5rem,6vw,4.8rem);letter-spacing:-.045em;line-height:1.12;text-wrap:balance}
84
+ .hero-block h2{font-size:clamp(2.1rem,4.2vw,3.5rem)}
85
+ .hero-block--banner{overflow:hidden;padding:clamp(32px,5vw,60px) 0 0;background:#f5f5f7;box-shadow:none}
86
+ .hero-block--banner .hero-main{padding-inline:clamp(24px,5vw,60px);text-align:center}
87
+ .hero-block--banner h1,.hero-block--banner .hero-copy{margin-inline:auto}
88
+ .hero-block--banner .hero-main>p:last-child{margin-bottom:0}
89
+ .hero-banner{display:block;width:min(100%,680px);height:auto;max-height:450px;margin:24px auto 0;object-fit:contain}
90
+ @media(prefers-color-scheme:dark){.hero-block--banner{background:#1c1c1e}}
91
+ .eyebrow{margin:0 0 15px;color:var(--accent);font-size:.78rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase}
92
+ .hero-copy{max-width:58ch;margin:0 0 26px;color:var(--muted);font-size:clamp(1.05rem,1.9vw,1.25rem);line-height:1.55}
93
+ .hero-highlights{display:grid;gap:10px;margin:0;padding:0;list-style:none}
94
+ .hero-highlights li{padding:15px 18px;border:1px solid var(--line);border-radius:var(--radius-small);background:var(--surface);font-size:.94rem;font-weight:550}
95
+ .hero-mascot,.hero-mascot-picture{display:block;width:min(100%,260px);height:auto;margin-inline:auto;object-fit:contain}
96
+ .button{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:46px;padding:10px 22px;border:1px solid var(--button-bg);border-radius:999px;background:var(--button-bg);color:#fff;font-size:.94rem;font-weight:600;line-height:1.3;transition:background .18s ease,transform .18s ease}
97
+ .button::after{content:"→";font-size:1.15em}
98
+ .button:hover{border-color:var(--button-hover);background:var(--button-hover);color:#fff;text-decoration:none;transform:translateY(-1px)}
99
+ .button:focus-visible{outline-color:var(--ink)}
100
+ .page-builder-row{display:grid;gap:clamp(16px,2vw,24px);align-items:stretch;min-width:0;width:100%}
101
+ .page-builder-row[data-columns="1"]{grid-template-columns:minmax(0,1fr)}
102
+ .page-builder-row[data-columns="2"]{grid-template-columns:repeat(2,minmax(0,1fr))}
103
+ .page-builder-row[data-columns="3"]{grid-template-columns:repeat(3,minmax(0,1fr))}
104
+ .page-builder-row[data-columns="4"]{grid-template-columns:repeat(4,minmax(0,1fr))}
105
+ .page-builder-cell{min-width:0}
106
+ .page-builder-cell>.page-section:only-child{height:100%}
107
+ .page-section{min-width:0;margin:0;padding:clamp(24px,4vw,42px);border:1px solid transparent;border-radius:var(--radius-card)}
108
+ .page-section--plain{padding-inline:0}
109
+ .page-section--soft{border-color:var(--line);background:var(--surface)}
110
+ .page-section--accent{background:var(--accent-soft)}
111
+ .page-section--dark{background:#1d1d1f;color:#fff}
112
+ .page-section--dark h2,.page-section--dark h3,.page-section--dark a{color:#fff}
113
+ .page-section--dark .text-widget,.page-section--dark .section-intro{color:#d2d2d7}
114
+ .section-inner{width:100%;margin-inline:auto}
115
+ .section-inner--default{max-width:900px}
116
+ .section-inner--wide{max-width:1120px}
117
+ .section-inner--narrow{max-width:680px}
118
+ .section-inner>h2,.feature-section>h2,.latest-posts>h2,.cta-block h2,.faq-block>h2{margin:0 0 14px}
119
+ .section-intro{max-width:68ch;margin:0 0 24px;color:var(--muted);font-size:1.05rem}
120
+ .text-widget{max-width:72ch;color:var(--muted);font-size:1.035rem;line-height:1.85}
121
+ .text-widget p:last-child{margin-bottom:0}
122
+ .content-heading{margin:1.6em 0 .5em}
123
+ .display-text{font-size:clamp(2rem,6vw,4.5rem);line-height:1.04;letter-spacing:-.06em}
124
+ .display-text--serif{font-family:var(--edgepress-font-serif);font-weight:500}
125
+ .display-text--mono{font-family:var(--edgepress-font-mono);letter-spacing:-.07em}
126
+ .display-text--accent{color:var(--accent)}
127
+ .display-text--outline{-webkit-text-stroke:1px currentColor;color:transparent}
128
+ .feature-section{margin:18px 0 0}
129
+ .feature-section>h2{font-size:clamp(1.4rem,2.5vw,1.9rem)}
130
+ .feature-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:20px}
131
+ .feature-card,.steps-widget li,.post-card,.privacy-service-list li{min-width:0;padding:clamp(21px,3vw,30px);border:1px solid var(--line);border-radius:22px;background:var(--surface);box-shadow:0 5px 20px rgba(29,29,31,.025)}
132
+ .feature-card h3,.steps-widget h4{margin:0 0 10px}
133
+ .feature-card p,.steps-widget li p{margin-bottom:0;color:var(--muted)}
134
+ .feature-card{transition:transform .2s ease,border-color .2s ease,box-shadow .2s ease}
135
+ .feature-card:has(a):hover,.feature-card:focus-within{transform:translateY(-3px);border-color:var(--accent);box-shadow:var(--shadow)}
136
+ .feature-card h3 a{color:var(--ink)}
137
+ .feature-card h3 a:hover{color:var(--accent);text-decoration:none}
138
+ .feature-card h3 a::after{display:inline-block;margin-left:.5em;color:var(--accent);font-size:.85em;content:"↗"}
139
+ .feature-icon{display:block;width:48px;height:48px;padding:11px;margin:0 0 22px;border-radius:14px;background:var(--accent-soft);color:var(--accent);}
140
+ .link-list ul{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));gap:12px;margin:0;padding:0;list-style:none}
141
+ .link-list li{min-width:0;padding:17px 19px;border:1px solid var(--line);border-radius:18px;background:var(--surface)}
142
+ .link-list li>a{font-weight:650}
143
+ .link-list li p{margin:.4em 0 0;color:var(--muted);font-size:.93rem}
144
+ .steps-widget ol{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:14px;margin:0;padding:0;list-style:none;counter-reset:step}
145
+ .steps-widget li{counter-increment:step}
146
+ .steps-widget li::before{display:block;margin-bottom:11px;color:var(--accent);font-size:.8rem;font-weight:700;letter-spacing:.1em;content:counter(step,decimal-leading-zero)}
147
+ .code-widget{min-width:0;margin:18px 0}
148
+ .code-widget figcaption{margin:0 0 8px;font-size:.9rem;font-weight:650}
149
+ pre,.code-widget pre,.steps-widget pre{max-width:100%;overflow:auto;overscroll-behavior-inline:contain;padding:18px;border:1px solid var(--line);border-radius:18px;background:#1d1d1f;color:#f5f5f7;font: .9rem/1.65 var(--edgepress-font-mono);white-space:pre-wrap;overflow-wrap:anywhere}
150
+ pre code{font:inherit;white-space:inherit}
151
+ .table-widget{max-width:100%;margin:18px 0;overflow-x:auto;border:1px solid var(--line);border-radius:18px;background:var(--surface)}
152
+ .table-widget table{width:100%;min-width:560px;border-collapse:collapse}
153
+ .table-widget caption{padding:14px;text-align:left;font-weight:650}
154
+ .table-widget th,.table-widget td{padding:11px 14px;border-top:1px solid var(--line);text-align:left;vertical-align:top}
155
+ .table-widget th{background:var(--surface-soft);font-weight:650}
156
+ .notice-widget{padding:19px 22px;border:1px solid var(--line);border-radius:18px;background:var(--surface-soft)}
157
+ .notice-widget h3{margin:0 0 6px;font-size:1.05rem}
158
+ .notice-widget p{margin:0}
159
+ .notice-widget--warning{border-color:rgba(164,77,0,.25);background:var(--warning-soft);color:var(--warning)}
160
+ .notice-widget--success{border-color:rgba(24,121,78,.25);background:var(--success-soft);color:var(--success)}
161
+ .media-text-block{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:clamp(22px,5vw,54px)}
162
+ .media-text-block,.media-text-block>*{min-width:0}
163
+ .media-text-block--right figure{order:2}
164
+ .media-text-block figure{margin:0}
165
+ .media-text-block img,.media-text-block video{display:block;width:100%;max-height:620px;border-radius:22px;object-fit:cover}
166
+ .media-text-block figcaption{margin-top:9px;color:var(--muted);font-size:.9rem}
167
+ .media-text-copy{max-width:62ch}
168
+ .media-text-copy h2{font-size:clamp(1.6rem,3.2vw,2.6rem)}
169
+ .image-block{margin:0}
170
+ .image-block img{display:block;width:100%;border-radius:24px}
171
+ .image-block figcaption,.quote-block figcaption{margin-top:8px;color:var(--muted);font-size:.9rem}
172
+ .quote-block{margin:20px 0;padding:clamp(24px,4vw,42px);border-radius:24px;background:var(--accent-soft)}
173
+ .quote-block blockquote{margin:0;font-size:clamp(1.25rem,2.4vw,1.8rem);letter-spacing:-.025em;line-height:1.45}
174
+ .quote-block blockquote p{margin:0}
175
+ .cta-block{padding:clamp(25px,5vw,50px);border:1px solid var(--line);border-radius:28px;background:var(--surface);box-shadow:var(--shadow)}
176
+ .cta-block p{color:var(--muted)}
177
+ .cta-block .button{color:#fff}
178
+ .faq-block details{padding:17px 0;border-bottom:1px solid var(--line)}
179
+ .faq-block summary{color:var(--ink);font-weight:650;cursor:pointer}
180
+ .faq-block details>div,.faq-block details>p{color:var(--muted)}
181
+ .post-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,310px),1fr));gap:20px}
182
+ .latest-posts .post-list{grid-template-columns:repeat(2,minmax(0,1fr))}
183
+ .latest-posts>h2{margin-bottom:24px}
184
+ .latest-posts .post-list .post-card:first-child{grid-column:1/-1;padding:clamp(24px,4vw,42px);background:var(--accent-soft);border-color:transparent}
185
+ .latest-posts .post-card:first-child h3{max-width:36ch;font-size:clamp(1.5rem,2.7vw,2rem)}
186
+ .latest-posts .post-card:first-child .post-excerpt{max-width:78ch}
187
+ .archive-post-list{gap:24px;margin-top:20px}
188
+ .post-card{margin:0}
189
+ .post-card h2,.post-card h3{margin:0 0 9px;font-size:1.25rem;letter-spacing:-.025em;line-height:1.3}
190
+ .post-card h2 a,.post-card h3 a{color:var(--ink)}
191
+ .post-card h2 a:hover,.post-card h3 a:hover{color:var(--accent);text-decoration:none}
192
+ .meta{display:flex;flex-wrap:wrap;gap:.25em .5em;margin:0 0 10px;color:var(--muted);font-size:.84rem}
193
+ .post-excerpt{color:var(--muted);font-size:.94rem;line-height:1.6}
194
+ .post-excerpt p{margin:.35rem 0 0}
195
+ .post-excerpt p:first-child{margin-top:0}
196
+ .post{max-width:860px;margin-inline:auto}
197
+ .post>header{margin:0 0 30px}
198
+ .post>header h1{margin:0 0 20px;font-size:clamp(2.1rem,4.8vw,3.65rem);line-height:1.2}
199
+ .post-content{max-width:72ch;margin-inline:auto;color:var(--ink);font-size:1.08rem;line-height:1.9;overflow-wrap:anywhere}
200
+ .post-content>p{margin-bottom:1.35em}
201
+ .post-content li+li{margin-top:.45em}
202
+ html[lang^="zh"] h1,html[lang^="zh"] h2,html[lang^="zh"] h3{letter-spacing:-.015em;line-height:1.3}
203
+ html[lang^="zh"] .post-content{max-width:42em}
204
+ .post-content h2{margin:2.1em 0 .7em;padding-top:.7em;border-top:1px solid var(--line);font-size:clamp(1.55rem,3vw,2.15rem)}
205
+ .post-content h3{margin:1.7em 0 .55em;font-size:1.35rem}
206
+ .post-content img,.post-content video{display:block;height:auto;max-width:100%;border-radius:20px}
207
+ .post-content table{display:block;width:100%;max-width:100%;overflow:auto;border-collapse:collapse;overscroll-behavior-inline:contain}
208
+ .post-content th,.post-content td{padding:9px 12px;border:1px solid var(--line);text-align:left;vertical-align:top}
209
+ .post-content th{background:var(--surface-soft)}
210
+ .post-content blockquote{margin:1.5em 0;padding:4px 0 4px 20px;border-left:3px solid var(--accent);color:var(--muted)}
211
+ .post-content blockquote p:last-child{margin-bottom:0}
212
+ .post-video{margin:1.5em 0}
213
+ .post-video video{width:100%;background:#000}
214
+ .post-tags{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:30px 0 0;padding-top:18px;border-top:1px solid var(--line);color:var(--muted);font-size:.9rem}
215
+ .post-tags ul{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}
216
+ .post-tags a{display:inline-flex;padding:4px 11px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-weight:550}
217
+ .pagination{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin:24px 0}
218
+ .pagination a{display:inline-flex;align-items:center;min-height:44px;padding:9px 15px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-weight:600}
219
+ .pagination a:hover{border-color:var(--accent);text-decoration:none}
220
+ .pagination-pages{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}
221
+ .pagination-pages a,.pagination-current{display:inline-flex;min-width:44px;min-height:44px;align-items:center;justify-content:center;padding:9px 12px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-weight:600}
222
+ .pagination-current{border-color:var(--button-bg);background:var(--button-bg);color:#fff}
223
+ .pagination-ellipsis{padding:0 4px;color:var(--muted)}
224
+ .latest-posts-pagination{justify-content:flex-start;gap:16px}
225
+ .latest-posts-pagination a:last-child{margin-left:auto}
226
+ .page-links ul{display:flex;flex-wrap:wrap;gap:10px;margin:0;padding:0;list-style:none}
227
+ .page-links a{display:inline-flex;min-height:42px;align-items:center;padding:8px 14px;border:1px solid var(--line);border-radius:999px;background:var(--surface)}
228
+ .intro{max-width:900px;margin:0 auto 42px;text-align:center}
229
+ .intro h1{margin:0 0 16px}
230
+ .intro p{max-width:65ch;margin-inline:auto;color:var(--muted);font-size:1.16rem}
231
+ .local-search-page{max-width:820px;margin-inline:auto;padding:clamp(24px,5vw,48px);border:1px solid var(--line);border-radius:var(--radius-card);background:var(--surface)}
232
+ .local-search-page h1{font-size:clamp(2.3rem,5vw,3.8rem)}
233
+ .local-search-form label{display:block;margin-bottom:9px;font-weight:650}
234
+ .local-search-controls{display:flex;gap:10px;min-width:0}
235
+ .local-search-controls input{flex:1 1 auto;min-width:0;min-height:48px;padding:10px 14px;border:1px solid var(--line);border-radius:14px;background:var(--canvas);color:var(--ink)}
236
+ .local-search-controls button{flex:0 0 auto;min-height:48px;padding:10px 18px;border:0;border-radius:999px;background:var(--button-bg);color:#fff;font-weight:650;cursor:pointer}
237
+ .local-search-hint,.local-search-results time{color:var(--muted);font-size:.9rem}
238
+ .local-search-results{padding-inline-start:1.4rem}
239
+ .local-search-results>li{padding:14px 0;border-top:1px solid var(--line)}
240
+ .local-search-results h2{margin:0;font-size:1.2rem}
241
+ .local-search-results p{margin:6px 0 0}
242
+ .error-page{max-width:760px;margin:5vh auto;padding:clamp(32px,7vw,76px);border:1px solid var(--line);border-radius:32px;background:var(--surface);text-align:center;box-shadow:var(--shadow)}
243
+ .error-code{margin:0;color:var(--accent);font-size:clamp(5rem,16vw,10rem);font-weight:700;line-height:.9;letter-spacing:-.09em}
244
+ .privacy-controller-inline{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:0}
245
+ .privacy-controller-inline span{min-width:0;overflow-wrap:anywhere}
246
+ .privacy-controller-details{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));gap:12px}
247
+ .privacy-controller-details>div{padding:15px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}
248
+ .privacy-controller-details dt{color:var(--muted);font-size:.85rem;font-weight:650}
249
+ .privacy-controller-details dd{margin:4px 0 0;overflow-wrap:anywhere}
250
+ .privacy-service-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));gap:12px;margin:0;padding:0;list-style:none}
251
+ .privacy-service-list h3{margin:0 0 8px;font-size:1.1rem}
252
+ .privacy-service-list p{margin:5px 0;color:var(--muted);font-size:.91rem}
253
+ .privacy-service-list li{padding:18px}
254
+ .privacy-services-empty{padding:16px;border:1px dashed var(--line);border-radius:16px;color:var(--muted)}
255
+ .privacy-vendor-link{display:inline-block;margin-top:4px}
256
+ .markdown-video{margin:1.5rem 0}
257
+ .markdown-video video{display:block;width:100%;border-radius:20px;background:#000}
258
+ .markdown-video figcaption{margin-top:8px;color:var(--muted);font-size:.9rem}
259
+ .markdown-task-status{display:inline-block;min-width:1.35em;font-weight:700}
260
+ .code-copy-block{max-width:100%;margin:1.25em 0;overflow:hidden;border:1px solid var(--line);border-radius:18px;background:#1d1d1f}
261
+ .code-copy-block pre{margin:0;border:0;border-radius:0}
262
+ .code-copy-toolbar{display:flex;justify-content:flex-end;padding:8px 10px;background:#262629}
263
+ .code-copy-button{min-height:38px;padding:6px 13px;border:1px solid rgba(255,255,255,.35);border-radius:999px;background:transparent;color:#fff;font:600 .86rem/1.3 var(--edgepress-font-sans);cursor:pointer}
264
+ .code-copy-button:hover{background:#3a3a3c}
265
+ .code-copy-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
266
+ .post-toc-widget{position:fixed;inset-inline-end:max(16px,env(safe-area-inset-right));inset-block-end:calc(max(16px,env(safe-area-inset-bottom)) + 56px);z-index:950;max-width:calc(100vw - 32px);color:var(--ink);font:14px/1.5 var(--edgepress-font-sans)}
267
+ .post-toc-widget[hidden]{display:none}
268
+ .post-toc-toggle{display:inline-flex;align-items:center;gap:8px;min-height:46px;padding:9px 15px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);font:inherit;font-weight:650;box-shadow:var(--shadow);cursor:pointer}
269
+ .post-toc-toggle .icon-library{width:18px;height:18px;flex:none}
270
+ .post-toc-panel{position:absolute;inset-inline-end:0;inset-block-end:calc(100% + 10px);display:grid;gap:9px;width:min(23rem,calc(100vw - 32px));max-height:min(60vh,32rem);overflow:auto;overscroll-behavior:contain;padding:16px;border:1px solid var(--line);border-radius:20px;background:var(--surface);box-shadow:0 16px 45px rgba(0,0,0,.18)}
271
+ .post-toc-panel[hidden]{display:none}
272
+ .post-toc-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}
273
+ .post-toc-heading h2{margin:0;font-size:1rem;letter-spacing:0}
274
+ .post-toc-close{display:grid;place-items:center;width:42px;height:42px;flex:none;border:1px solid var(--line);border-radius:50%;background:var(--canvas);color:var(--ink);font:inherit;font-size:1.35rem;line-height:1;cursor:pointer}
275
+ .post-toc-panel ol{margin:0;padding-inline-start:0;list-style:none}
276
+ .post-toc-panel li{padding:3px 0;overflow-wrap:anywhere}
277
+ .post-toc-panel .post-toc-level-3{padding-inline-start:1rem}
278
+ .post-toc-panel .post-toc-level-4,.post-toc-panel .post-toc-level-5,.post-toc-panel .post-toc-level-6{padding-inline-start:2rem}
279
+ .site-footer{border-top:1px solid var(--line);background:var(--surface-soft)}
280
+ .footer-inner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px 24px;width:min(calc(100% - 48px),var(--content-width));min-height:82px;margin-inline:auto;padding:12px 0}
281
+ .footer-copy{margin:0;color:var(--muted);font-size:.84rem;font-weight:600;letter-spacing:.02em}
282
+ .footer-navigation{display:flex;align-items:center;flex-wrap:wrap;gap:5px 20px}
283
+ .footer-navigation a{min-height:40px;font-size:.84rem}
284
+ .site-header--hidden,.brand--hidden,.primary-navigation--hidden,.locale-nav--hidden,.site-footer--hidden,.footer-copy--hidden,.footer-navigation--hidden{display:none!important}
285
+ .privacy-manager{position:fixed;inset-inline-end:max(16px,env(safe-area-inset-right));inset-block-end:max(16px,env(safe-area-inset-bottom));z-index:1000;display:grid;align-content:end;gap:8px;box-sizing:border-box;width:min(30rem,calc(100vw - 32px));max-height:calc(100dvh - 32px);color:var(--ink);font:13px/1.5 var(--edgepress-font-sans);pointer-events:none;isolation:isolate}
286
+ .privacy-manager *{box-sizing:border-box}
287
+ .privacy-manager>*{min-width:0;pointer-events:auto}
288
+ .privacy-manager .privacy-settings-button,.privacy-manager .privacy-panel button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:0;min-height:46px;max-width:100%;padding:9px 15px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);font:inherit;font-weight:650;line-height:1.25;text-align:center;overflow-wrap:anywhere;cursor:pointer}
289
+ .privacy-manager .privacy-settings-button{order:1;justify-self:end;box-shadow:var(--shadow)}
290
+ .privacy-manager .privacy-panel{position:relative;order:0;display:grid;gap:10px;width:100%;max-height:min(66vh,42rem);max-height:min(66dvh,42rem);overflow:auto;overscroll-behavior:contain;padding:17px;border:1px solid var(--line);border-radius:22px;background:var(--surface);color:var(--ink);box-shadow:0 16px 48px rgba(0,0,0,.2)}
291
+ .privacy-manager .privacy-panel[hidden]{display:none}
292
+ .privacy-manager .privacy-panel h2{margin:0;padding-inline-end:46px;font-size:1.1rem;line-height:1.3}
293
+ .privacy-manager .privacy-panel p{margin:0;overflow-wrap:anywhere}
294
+ .privacy-manager .privacy-panel .privacy-close{position:absolute;inset-block-start:7px;inset-inline-end:7px;width:44px;min-width:44px;min-height:44px;padding:8px;border-radius:50%}
295
+ .privacy-manager .privacy-panel .privacy-close .icon-library,.privacy-manager .icon-library{width:19px;height:19px;flex:none}
296
+ .privacy-manager .privacy-intro,.privacy-manager .privacy-essential,.privacy-manager .privacy-controller{color:var(--muted)}
297
+ .privacy-manager .privacy-service-settings{display:grid;gap:8px;min-width:0}
298
+ .privacy-manager .privacy-service-setting{display:grid;gap:5px;min-width:0;padding:11px;border:1px solid var(--line);border-radius:15px;background:var(--canvas)}
299
+ .privacy-manager .privacy-service-toggle{display:grid;grid-template-columns:minmax(0,1fr) 44px;align-items:center;gap:8px;min-width:0;cursor:pointer}
300
+ .privacy-manager .privacy-service-toggle input{position:relative;grid-column:2;grid-row:1;width:44px;height:26px;margin:0;appearance:none;border:1px solid var(--line);border-radius:999px;background:#b8b8bd;cursor:pointer}
301
+ .privacy-manager .privacy-service-toggle input::before{position:absolute;inset-block-start:3px;inset-inline-start:3px;width:18px;height:18px;border-radius:50%;background:#fff;content:"";transition:transform .16s ease}
302
+ .privacy-manager .privacy-service-toggle input:checked{border-color:var(--accent);background:var(--accent)}
303
+ .privacy-manager .privacy-service-toggle input:checked::before{transform:translateX(18px)}
304
+ .privacy-manager .privacy-service-toggle input:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
305
+ .privacy-manager .privacy-service-toggle-text{grid-column:1;grid-row:1;display:grid;gap:3px;min-width:0;overflow-wrap:anywhere}
306
+ .privacy-manager .privacy-service-toggle-text strong{font-size:.94rem}
307
+ .privacy-manager .privacy-service-purpose{color:var(--muted);font-size:.85rem;line-height:1.4}
308
+ .privacy-manager .privacy-details{min-width:0;margin:0;border-top:1px solid var(--line)}
309
+ .privacy-manager .privacy-details>summary{padding:8px 1px 0;font-size:.86rem;font-weight:650;cursor:pointer}
310
+ .privacy-manager .privacy-service-disclosures{display:grid;gap:6px;margin:8px 0 0;font-size:.81rem;line-height:1.4}
311
+ .privacy-manager .privacy-service-disclosures>div{display:grid;grid-template-columns:minmax(5.3rem,.38fr) minmax(0,1fr);gap:8px;min-width:0}
312
+ .privacy-manager .privacy-service-disclosures dt{color:var(--muted);font-weight:650}
313
+ .privacy-manager .privacy-service-disclosures dd{min-width:0;margin:0;overflow-wrap:anywhere}
314
+ .privacy-manager .privacy-service-disclosures a,.privacy-manager .privacy-policy-link{overflow-wrap:anywhere}
315
+ .privacy-manager .privacy-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
316
+ .privacy-manager .privacy-panel .privacy-accept,.privacy-manager .privacy-panel .privacy-reject{border-color:var(--button-bg);background:var(--button-bg);color:#fff}
317
+ .privacy-manager .privacy-panel .privacy-accept:hover:not(:disabled),.privacy-manager .privacy-panel .privacy-reject:hover:not(:disabled){filter:brightness(.94)}
318
+ .privacy-manager .privacy-panel .privacy-save{grid-column:1/-1;background:transparent}
319
+ .privacy-manager .privacy-panel button:disabled{opacity:.55;cursor:not-allowed}
320
+ .privacy-manager .privacy-footer{display:grid;gap:5px;padding-block-start:9px;border-top:1px solid var(--line);font-size:.81rem}
321
+ .privacy-manager .privacy-controller{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 7px}
322
+ .privacy-manager .privacy-controller a{overflow-wrap:anywhere}
323
+ .privacy-manager .privacy-policy-link{width:fit-content;max-width:100%;font-size:.86rem}
324
+ .privacy-manager .privacy-empty{padding:10px;border:1px dashed var(--line);border-radius:12px;color:var(--muted)}
325
+ .privacy-manager .privacy-policy-link:focus-visible,.privacy-manager .privacy-settings-button:focus-visible,.privacy-manager .privacy-panel button:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
326
+ .post-content h2[id],.post-content h3[id],.post-content h4[id],.post-content h5[id],.post-content h6[id]{scroll-margin-top:90px}
327
+ .post-content a,.post-content code,.meta,.tags{overflow-wrap:anywhere}
328
+ .post-content pre,.code-widget pre,.steps-widget pre{white-space:pre-wrap;overflow-wrap:anywhere;word-break:normal}
329
+ @media(max-width:880px){
330
+ .header-inner{grid-template-columns:auto auto;gap:0 16px;padding-block:8px}
331
+ .primary-navigation{grid-column:1/-1;grid-row:2;justify-content:flex-start;overflow-x:auto;overscroll-behavior-inline:contain;scrollbar-width:none}
332
+ .primary-navigation::-webkit-scrollbar{display:none}
333
+ .locale-nav{grid-column:2;grid-row:1}
334
+ .page-builder-row[data-columns="3"],.page-builder-row[data-columns="4"]{grid-template-columns:repeat(2,minmax(0,1fr))}
335
+ }
336
+ @media(max-width:620px){
337
+ .header-inner,.footer-inner{width:calc(100% - 32px)}
338
+ .site-main{width:calc(100% - 32px);padding-top:32px}
339
+ .primary-navigation{gap:18px}
340
+ .primary-navigation a,.primary-navigation .navigation-select{min-height:44px;font-size:.84rem}
341
+ .locale-nav select{max-width:128px;min-height:40px}
342
+ .hero-block{grid-template-columns:minmax(0,1fr);padding:30px 24px;border-radius:25px}
343
+ .hero-block h1{font-size:clamp(2.3rem,10vw,3.5rem)}
344
+ .hero-block h2{font-size:clamp(1.9rem,8vw,2.6rem)}
345
+ .hero-block--banner{padding:32px 0 0}
346
+ .hero-banner{max-height:none}
347
+ .hero-block--split{align-items:start}
348
+ .page-builder-row[data-columns="2"],.page-builder-row[data-columns="3"],.page-builder-row[data-columns="4"]{grid-template-columns:minmax(0,1fr)}
349
+ .latest-posts .post-list{grid-template-columns:minmax(0,1fr)}
350
+ .page-section{padding:23px;border-radius:22px}
351
+ .page-section--plain{padding-inline:0}
352
+ .media-text-block{grid-template-columns:minmax(0,1fr)}
353
+ .media-text-block--right figure{order:0}
354
+ .local-search-controls{align-items:stretch;flex-direction:column}
355
+ .local-search-controls button{min-height:46px}
356
+ .footer-inner{align-items:flex-start;flex-direction:column;justify-content:center;padding:18px 0}
357
+ .footer-navigation{gap:2px 15px}
358
+ .post-toc-widget{inset-inline-end:max(12px,env(safe-area-inset-right));inset-block-end:calc(max(12px,env(safe-area-inset-bottom)) + 56px)}
359
+ .post-toc-panel{max-height:min(58vh,30rem)}
360
+ .privacy-manager{inset-inline-start:max(12px,env(safe-area-inset-left));inset-inline-end:max(12px,env(safe-area-inset-right));inset-block-end:max(12px,env(safe-area-inset-bottom));width:auto;max-width:none}
361
+ .privacy-manager .privacy-panel{max-height:min(66dvh,40rem);padding:14px}
362
+ }
363
+ @media(prefers-reduced-motion:reduce){
364
+ html{scroll-behavior:auto}
365
+ *,*::before,*::after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}
366
+ }
367
+
368
+ /* Raster artwork and predictable spacing for generated page elements. */
369
+ .icon-library{display:inline-block;width:24px;height:24px;flex:none;object-fit:contain;vertical-align:middle}
370
+ .navigation-icon{width:20px;height:20px}
371
+ .feature-icon{width:32px;height:32px}
372
+ .post-toc-toggle .icon-library,.privacy-manager .icon-library{width:20px;height:20px}
373
+ .privacy-manager .privacy-accept .icon-library,.privacy-manager .privacy-reject .icon-library{filter:brightness(0) invert(1)}
374
+ .page-builder-cell{display:grid;align-content:start;gap:clamp(16px,2.5vw,28px)}
375
+ .page-builder-cell>*,.section-inner>*{min-width:0;margin-block:0}
376
+ .section-inner{display:grid;gap:16px}
377
+ .post-list{display:grid;gap:clamp(16px,2.5vw,24px)}
378
+ .archive-post-list{margin-block:24px}
379
+ .post-list>.post-card{margin:0}
380
+ .post-card .meta{margin-block:8px;line-height:1.6}
381
+ .latest-posts>h2,.feature-section>h2{margin-block:0 16px}
382
+ .pagination:not(.latest-posts-pagination){align-items:center;justify-content:center;gap:12px}
383
+ .pagination-pages{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}
384
+ .pagination-pages a,.pagination-current{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:var(--panel,var(--paper,var(--surface)));color:var(--ink);font-weight:600;text-decoration:none}
385
+ .pagination-current{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);font-weight:800}
386
+ .pagination-ellipsis{padding-inline:4px;color:var(--muted)}
387
+ .hero-block--banner{grid-template-columns:minmax(0,1fr);gap:24px}
388
+ .hero-banner{display:block;width:min(100%,680px);height:auto;max-height:460px;margin:0 auto;object-fit:contain}
389
+ .hero-block--banner .hero-aside{max-width:100%}
390
+
391
+ .page-section--dark .icon-library{filter:brightness(0) invert(1)}
392
+ @media(prefers-color-scheme:dark){.icon-library{filter:brightness(0) invert(1)}}
393
+
394
+ .brand-mark{width:36px;height:36px;object-fit:contain;border-radius:50%;background:#f8efdc;padding:2px}
395
+ .hero-mascot,.hero-mascot-picture{width:min(100%,320px);max-height:240px}
396
+ .hero-banner-picture{display:block;margin-top:24px}
397
+
398
+ /* Journal metadata and accessible project navigation. */
399
+ .navigation-select[hidden] { display: none; }
400
+ .navigation-select { display: inline-flex; align-items: center; gap: .42em; max-width: 100%; color: var(--accent); }
401
+ .navigation-select select { font: inherit; color: inherit; background: transparent; border: 0; border-radius: 0; padding: .25rem 0; min-height: 44px; max-width: 100%; field-sizing: content; cursor: pointer; }
402
+ .primary-navigation a { min-height: 44px; }
403
+ .navigation-select option { color: CanvasText; background: Canvas; }
404
+ .navigation-select select:focus-visible { outline: 2px solid currentColor; outline-offset: 3px; }
405
+ .post-byline { display: flex; align-items: center; flex-wrap: wrap; gap: .7rem 1.2rem; margin-block: 1rem; }
406
+ .post-byline .post-author { display: inline-flex; align-items: center; gap: .55rem; }
407
+ .author-avatar { width: 40px; height: 40px; flex: 0 0 40px; border-radius: 50%; object-fit: cover; }
408
+ .post-tags { display: flex; align-items: center; flex-wrap: wrap; gap: .45rem; margin-block: 1rem 1.5rem; }
409
+ .post-tag { display: inline-block; max-width: 100%; overflow-wrap: anywhere; border: 1px solid currentColor; border-radius: 1rem; padding: .15rem .6rem; font-size: .85em; }
410
+
411
+
412
+
413
+
414
+ .post-pinned{display:inline-block;font-size:.78rem;font-weight:600;padding:.15rem .5rem;border:1px solid currentColor;border-radius:.35rem;margin:.25rem 0}
415
+
416
+ .post-changes{margin:1.5rem 0;border:1px solid var(--line);border-radius:12px;overflow:hidden;color:var(--ink)}
417
+ .post-changes summary{cursor:pointer;font-weight:650;padding:1rem;min-height:44px;background:var(--surface,var(--panel,var(--paper,transparent)))}
418
+ .post-changes summary:focus-visible{outline:3px solid var(--accent);outline-offset:-3px}
419
+ .post-changes-list{display:grid;gap:1rem;padding:1rem}
420
+ .post-change-passage{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:1rem}
421
+ .post-change-side{min-width:0;padding:1rem;border:1px solid var(--line);border-radius:10px;background:var(--surface,var(--panel,var(--paper,transparent)))}
422
+ .post-change-after{border-inline-start:4px solid var(--accent);background:color-mix(in srgb,var(--accent) 7%,transparent)}
423
+ .post-change-label{font-weight:650;margin:0 0 .75rem;font-size:.9rem;color:var(--muted,var(--ink))}
424
+ .post-change-content{overflow-wrap:anywhere;font-size:.95rem;line-height:1.7}
425
+ .post-change-content>:first-child{margin-top:0}.post-change-content>:last-child{margin-bottom:0}
426
+ .post-change-heading{font-weight:650;font-size:1.1rem;margin:.5rem 0}
427
+ .post-change-content img{max-width:100%;height:auto}.post-change-content pre{overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere}
428
+
429
+
430
+ /* Folio: a reading spread, with Lumen's shared component geometry. */
431
+ :root{--serif:var(--edgepress-font-serif)}
432
+ @media(prefers-color-scheme:dark){:root{--button-bg:#e6dec1;--button-hover:#f5eacd;--accent:#e6dec1;--accent-hover:#fff1c9;--accent-soft:#34342b}}
433
+ .site-header{position:relative;background:var(--canvas);backdrop-filter:none;-webkit-backdrop-filter:none}
434
+ .header-inner{grid-template-columns:auto minmax(0,1fr) auto auto;gap:28px;width:min(calc(100% - 96px),var(--content-width));min-height:76px}
435
+ .brand{font-family:var(--serif);font-size:2.6rem;font-weight:600;letter-spacing:-.05em;line-height:1.2}
436
+ .brand-description{min-width:0;max-width:54ch;margin:0;white-space:normal;color:var(--muted);font-size:.9rem;line-height:1.6;text-wrap:pretty;overflow-wrap:anywhere}
437
+ .primary-navigation{justify-content:flex-end;gap:28px}
438
+ .primary-navigation a{position:relative;color:var(--ink);font-size:.88rem;font-weight:400;padding-block:15px}
439
+ .primary-navigation .navigation-icon{display:none!important}
440
+ .primary-navigation a[aria-current="page"]::after{content:"";position:absolute;bottom:-16px;left:0;right:0;height:2px;background:var(--ink)}
441
+ .locale-nav{padding-left:28px;border-left:1px solid var(--line)}
442
+ .locale-nav select{border:0;border-radius:0;background:transparent;font-size:.87rem}
443
+ .site-main{width:min(calc(100% - 96px),var(--content-width));padding-top:42px}
444
+ .page-builder{gap:44px}
445
+ h1,h2,h3,.display-text--serif{font-family:var(--serif);font-weight:700;font-synthesis:weight}
446
+ .hero-block{display:block;padding:16px 0 32px;border:0;border-radius:0;background:transparent;box-shadow:none}
447
+ .hero-main{max-width:920px}
448
+ .hero-block h1,.hero-block h2,html[lang^="zh"] .hero-block h1{max-width:20ch;margin:0 0 22px;font-size:clamp(2.5rem,4.3vw,4.1rem);font-weight:700;line-height:1.17;letter-spacing:-.03em;text-wrap:pretty}
449
+ .hero-block .eyebrow{margin-bottom:14px;font-size:.88rem;font-weight:500;letter-spacing:.04em;color:var(--ink)}
450
+ .hero-copy{max-width:52ch;margin-bottom:28px;font-size:1.13rem;line-height:1.7}
451
+ .hero-main>p:last-child{margin-bottom:0}
452
+ .button{border-radius:0;font-weight:500}
453
+ .hero-main:has(.button)::after{content:"";display:block;width:40px;border-top:1px solid var(--ink);margin-top:24px}
454
+ .hero-block--split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:48px}
455
+ .hero-block--banner,.hero-block--banner:not(.hero-block--split){display:grid;grid-template-columns:minmax(0,.75fr) minmax(0,1fr);align-items:center;gap:clamp(28px,5vw,64px);padding:0;background:transparent;overflow:visible}
456
+ .hero-block--banner .hero-main{padding:0;text-align:left}
457
+ .hero-block--banner h1,.hero-block--banner .hero-copy{margin-inline:0}
458
+ .hero-banner,.hero-banner-picture{display:block;width:100%;height:auto;max-height:none;margin:0;min-width:0;object-fit:contain}
459
+ .hero-block--banner .hero-aside{grid-column:1/-1;grid-row:2}
460
+ .latest-posts>h2,.feature-section>h2{font-size:1.6rem;margin-bottom:24px}
461
+ .post-list,.latest-posts .post-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:32px}
462
+ .post-card,.latest-posts .post-list .post-card:first-child{grid-column:auto;padding:22px 0 0;border:0;border-top:1px solid var(--line);border-radius:0;background:transparent;box-shadow:none}
463
+ .post-card h2,.post-card h3,.latest-posts .post-card:first-child h3{max-width:30ch;font-size:1.5rem;line-height:1.4;letter-spacing:-.01em}
464
+ .post-list:has(>.post-card:only-child){max-width:900px}
465
+ .meta{font-size:.85rem;line-height:1.65}
466
+ .post-excerpt{max-width:66ch;font-size:1rem;line-height:1.7}
467
+ .post{max-width:880px}
468
+ .post>header h1{font-size:clamp(2.15rem,4.1vw,3.65rem);line-height:1.3}
469
+ .post-content{max-width:70ch;font-size:1.1rem;line-height:1.95}
470
+ .post-content h2{font-size:1.9rem}.post-content h3{font-size:1.45rem;line-height:1.5}
471
+ .post-content img,.post-content video,.image-block img,.media-text-block img,.media-text-block video{height:auto;max-height:none;object-fit:contain;border-radius:0}
472
+ .image-block figcaption,.media-text-block figcaption,.markdown-video figcaption{font-size:.9rem;line-height:1.65}
473
+ .hero-mascot,.hero-mascot-picture{max-height:none}
474
+ .image-block,.code-widget{margin:0;min-width:0}
475
+ .page-section,.cta-block,.quote-block,.error-page,.local-search-page,.notice-widget,.privacy-controller-details>div{border-radius:0;box-shadow:none}
476
+ .page-section--soft,.cta-block,.quote-block{background:var(--surface-soft)}
477
+ .error-page{border:0}.local-search-page{border:0;background:transparent;padding-inline:0}
478
+ .footer-inner{width:min(calc(100% - 96px),var(--content-width))}.site-footer{background:transparent}
479
+ .post-toc-toggle,.post-toc-close,.privacy-manager .privacy-settings-button,.privacy-manager .privacy-panel button{border-radius:3px}
480
+ .privacy-manager .privacy-panel,.post-toc-panel{border-radius:6px}
481
+ .button,.cta-block .button,.local-search-controls button,.pagination-current,.privacy-manager .privacy-panel .privacy-accept,.privacy-manager .privacy-panel .privacy-reject{color:var(--canvas)}
482
+ @media(max-width:1100px){.header-inner{grid-template-columns:auto minmax(0,1fr) auto}.brand-description{grid-column:1/-1;grid-row:2;max-width:none;padding-bottom:12px}.primary-navigation{grid-column:2;grid-row:1;justify-content:flex-end}.locale-nav{grid-column:3;grid-row:1}}
483
+ @media(max-width:880px){.header-inner{grid-template-columns:minmax(0,1fr) auto;gap:0 20px;padding-block:12px}.primary-navigation{grid-column:1/-1;grid-row:2;justify-content:flex-start}.locale-nav{grid-column:2;grid-row:1;padding-left:12px}.brand-description{grid-row:3;padding-bottom:0}.primary-navigation a[aria-current="page"]::after{bottom:0}.hero-block--banner,.hero-block--banner:not(.hero-block--split),.hero-block--split{grid-template-columns:minmax(0,1fr)}.hero-block--banner .hero-main{max-width:700px}.hero-block--banner .hero-aside{grid-row:auto}}
484
+ @media(max-width:620px){.header-inner,.site-main,.footer-inner{width:calc(100% - 40px)}.header-inner{padding-top:14px}.brand{font-size:2.25rem}.site-main{padding-top:28px}.primary-navigation{gap:26px}.primary-navigation a{padding-block:12px}.locale-nav select{max-width:120px;padding-left:0}.hero-block{padding:0 0 8px}.hero-block h1,html[lang^="zh"] .hero-block h1{font-size:clamp(2.15rem,9vw,3rem);line-height:1.3}.hero-copy{font-size:1rem}.hero-block--banner{gap:26px}.page-builder{gap:36px}.post-list,.latest-posts .post-list{grid-template-columns:minmax(0,1fr);gap:26px}.post-content{font-size:1.04rem}.post-content h2{font-size:1.5rem}.post-content h3{font-size:1.3rem}}
485
+
486
+ .post-content a{text-decoration:underline;text-underline-offset:.18em}.post-byline time{font-variant-numeric:tabular-nums}
487
+ @media(max-width:600px){.post-byline>time,.post-byline .post-updated{flex-basis:100%;min-width:0}.post-byline time[data-date-only="false"],.post-updated{min-block-size:3.2em;line-height:1.6}}
488
+
489
+ /* Embed consent, status and controls inherit the surrounding website palette. */
490
+ .edgepress-oembed{width:100%;min-width:0;margin:1.5rem 0;padding:clamp(14px,3vw,24px);border:1px solid var(--line);border-radius:16px;background:var(--surface,var(--panel,var(--paper,transparent)));color:var(--ink);overflow-wrap:anywhere}
491
+ .edgepress-oembed>figcaption{font:inherit;font-weight:650;margin:0 0 .75rem}
492
+ .edgepress-oembed [data-oembed-notice]{color:var(--muted,var(--ink));font-size:.9rem;line-height:1.6;margin:.5rem 0 1rem}
493
+ .edgepress-oembed [data-oembed-load]{appearance:none;font:inherit;font-weight:650;min-height:44px;padding:10px 18px;margin:0 12px 12px 0;border:1px solid var(--accent);border-radius:10px;background:var(--accent);color:var(--paper);cursor:pointer;transition:filter .15s,transform .15s}
494
+ .edgepress-oembed [data-oembed-load]:hover{filter:brightness(1.1);transform:translateY(-1px)}
495
+ .edgepress-oembed [data-oembed-load]:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
496
+ .edgepress-oembed[aria-busy=true] [data-oembed-load]{pointer-events:none;opacity:.6}
497
+ .edgepress-oembed>a{display:inline-flex;align-items:center;min-height:44px;color:var(--accent);font-size:.9rem}
498
+ .edgepress-oembed [data-oembed-status],.oembed-content{min-width:0;max-width:100%}
499
+ .edgepress-oembed [data-oembed-status]{min-height:clamp(160px,calc((100vw - 48px)*.75),480px);position:relative}
500
+ .edgepress-oembed .oembed-placeholder{aspect-ratio:var(--oembed-ratio,4/3);min-height:160px;border-radius:10px;background:linear-gradient(110deg,color-mix(in srgb,var(--surface,var(--paper,#fff)) 78%,var(--accent) 22%),color-mix(in srgb,var(--surface,var(--paper,#fff)) 92%,var(--accent) 8%),color-mix(in srgb,var(--surface,var(--paper,#fff)) 78%,var(--accent) 22%));background-size:200% 100%}
501
+ .edgepress-oembed.is-loading .oembed-placeholder{animation:edgepress-oembed-shimmer 1.4s linear infinite}
502
+ .edgepress-oembed[data-loaded=true] [data-oembed-status]{min-height:0}.edgepress-oembed[data-loaded=true] .oembed-placeholder{display:none}
503
+ @keyframes edgepress-oembed-shimmer{to{background-position:-200% 0}}
504
+ .edgepress-oembed iframe,.edgepress-oembed img,.edgepress-oembed blockquote{max-width:100%;margin-inline:auto;border-radius:10px}
505
+ .edgepress-oembed[data-loaded=true]>[data-oembed-notice]{margin-bottom:.25rem}
506
+ .oembed-caption{white-space:pre-wrap}
507
+ .post-change-content img{display:block;width:100%;height:auto;max-height:420px;object-fit:contain;background:var(--surface,var(--panel,var(--paper,transparent)));border-radius:8px}
508
+ @media(prefers-reduced-motion:reduce){.edgepress-oembed [data-oembed-load]{transition:none}}
509
+ @media(prefers-reduced-motion:reduce){.edgepress-oembed.is-loading .oembed-placeholder{animation:none}}
510
+
511
+ .project-demo{position:relative;min-width:0}.project-demo img{display:block;width:100%;height:auto;border-radius:12px}.project-demo-media{position:relative}.project-demo-media video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;border-radius:12px}.project-demo-media.is-ready img{visibility:hidden}.project-demo [hidden]{display:none!important}.project-demo button{display:inline-flex;align-items:center;justify-content:center;min-height:44px;margin-top:12px;padding:10px 18px;border:1px solid var(--accent);border-radius:999px;background:var(--surface,var(--panel,var(--paper,transparent)));color:var(--ink);font:inherit;font-weight:650;cursor:pointer}.project-demo button:focus-visible{outline:3px solid var(--accent);outline-offset:4px}.project-demo button:disabled{cursor:wait;opacity:.7}.project-demo-status{display:block;min-height:1.4em;color:var(--ink);font-size:.9rem;margin-top:6px}
512
+
513
+ .table-widget:focus-visible{outline:3px solid var(--accent);outline-offset:4px}
514
+
515
+ .project-demo-seek{display:block;width:100%;min-height:44px;margin:4px 0;accent-color:var(--accent);cursor:pointer}.project-demo-seek:focus-visible{outline:3px solid var(--accent);outline-offset:3px}.project-demo-time{display:block;font-variant-numeric:tabular-nums;color:var(--ink);line-height:1.5}.project-demo-seek:disabled{cursor:wait;opacity:.5}
516
516
  .edgepress-oembed:not([data-loaded=true]) [data-oembed-status]{min-height:0}.edgepress-oembed:not(.is-loading) .oembed-placeholder{display:none}.edgepress-oembed.is-loading .oembed-placeholder{height:3rem;min-height:0;aspect-ratio:auto}.edgepress-oembed [data-oembed-load]:disabled{cursor:wait;opacity:.6}.edgepress-oembed>figcaption a:focus-visible{outline:3px solid var(--accent);outline-offset:3px}