edgepress 2026.9.3
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.
- package/README.md +70 -0
- package/config.yml +146 -0
- package/content/pages/home/en.md +84 -0
- package/content/pages/home/zh-cn.md +84 -0
- package/content/pages/plugin-development/en.md +108 -0
- package/content/pages/plugin-development/zh-cn.md +108 -0
- package/content/pages/privacy-policy/en.md +73 -0
- package/content/pages/privacy-policy/zh-cn.md +73 -0
- package/content/pages/project-introduction/en.md +88 -0
- package/content/pages/project-introduction/zh-cn.md +88 -0
- package/content/pages/quick-start/en.md +147 -0
- package/content/pages/quick-start/zh-cn.md +147 -0
- package/content/pages/theme-development/en.md +106 -0
- package/content/pages/theme-development/zh-cn.md +106 -0
- package/content/posts/2026-09-23-edgepress-on-the-edge/en.md +169 -0
- package/content/posts/2026-09-23-edgepress-on-the-edge/zh-cn.md +169 -0
- package/content/posts/2026-09-24-edgepress-release-2026-9-1/en.md +30 -0
- package/content/posts/2026-09-24-edgepress-release-2026-9-1/zh-cn.md +30 -0
- package/content/posts/2026-09-25-edgepress-release-2026-9-2/en.md +28 -0
- package/content/posts/2026-09-25-edgepress-release-2026-9-2/zh-cn.md +28 -0
- package/content/posts/2026-09-25-edgepress-release-2026-9-3/en.md +39 -0
- package/content/posts/2026-09-25-edgepress-release-2026-9-3/zh-cn.md +39 -0
- package/edgepress.config.mjs +18 -0
- package/languages/base/en.json +55 -0
- package/languages/packs/zh-CN.json +55 -0
- package/package.json +59 -0
- package/plugins/consent/index.js +40 -0
- package/project-compatibility.json +48 -0
- package/src/assets.js +181 -0
- package/src/build.js +277 -0
- package/src/cli.js +344 -0
- package/src/concurrency.js +26 -0
- package/src/config.js +396 -0
- package/src/content.js +160 -0
- package/src/generators.js +263 -0
- package/src/i18n.js +64 -0
- package/src/maintenance.js +122 -0
- package/src/markdown.js +65 -0
- package/src/page-blocks.js +350 -0
- package/src/page-check.js +416 -0
- package/src/plugin-api.js +75 -0
- package/src/preview.js +167 -0
- package/src/report-visuals.js +480 -0
- package/src/theme.js +161 -0
- package/src/worker.js +139 -0
- package/static/.gitkeep +0 -0
- package/static/edgepress/language-select.js +5 -0
- package/static/edgepress/plugins/advertising/google-adsense.js +26 -0
- package/static/edgepress/plugins/captcha/cloudflare-turnstile.js +28 -0
- package/static/edgepress/plugins/captcha/google-recaptcha.js +27 -0
- package/static/edgepress/plugins/captcha/hcaptcha.js +27 -0
- package/static/edgepress/plugins/consent/manager.js +180 -0
- package/static/edgepress/plugins/statistics/baidu-tongji.js +8 -0
- package/static/edgepress/plugins/statistics/cloudflare-web-analytics.js +9 -0
- package/static/edgepress/plugins/statistics/google-analytics.js +13 -0
- package/static/edgepress/plugins/tracking/google-tag-manager.js +10 -0
- package/static/edgepress/plugins/tracking/meta-pixel.js +18 -0
- package/static/edgepress/search.js +84 -0
- package/static/edgepress-markdown-guide.svg +21 -0
- package/templates/gitignore +6 -0
- package/templates/site-readme.md +20 -0
- package/themes/atelier/assets/style.css +120 -0
- package/themes/atelier/layouts/layout.html +17 -0
- package/themes/atelier/layouts/partials/footer.html +4 -0
- package/themes/atelier/layouts/partials/head.html +17 -0
- package/themes/atelier/layouts/partials/header.html +5 -0
- package/themes/atelier/theme.json +6 -0
- package/themes/default/assets/style.css +157 -0
- package/themes/default/layouts/layout.html +12 -0
- package/themes/default/layouts/partials/footer.html +4 -0
- package/themes/default/layouts/partials/head.html +19 -0
- package/themes/default/layouts/partials/header.html +5 -0
- package/themes/default/theme.json +6 -0
- package/themes/signal/assets/style.css +113 -0
- package/themes/signal/layouts/layout.html +12 -0
- package/themes/signal/layouts/partials/footer.html +4 -0
- package/themes/signal/layouts/partials/head.html +17 -0
- package/themes/signal/layouts/partials/header.html +5 -0
- package/themes/signal/theme.json +6 -0
- package/wrangler.jsonc +13 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
:root{color-scheme:light;--paper:#f3eee4;--panel:#fcfaf5;--ink:#29271f;--muted:#777064;--line:#d7cdbb;--accent:#93542f;font:16px/1.8 Georgia,"Iowan Old Style",serif}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink)}a{color:var(--accent);text-underline-offset:.2em}.skip-link{position:absolute;left:-10000px}.skip-link:focus{left:16px;top:16px;padding:10px;background:var(--panel);outline:3px solid var(--accent);z-index:2}.atelier-shell{display:grid;grid-template-columns:minmax(220px,280px) minmax(0,760px);gap:clamp(32px,7vw,100px);max-width:1240px;margin:0 auto;padding:56px 34px}.atelier-rail{position:sticky;top:40px;align-self:start;min-height:75vh;display:flex;flex-direction:column}.brand{font:700 1.5rem/1.2 ui-sans-serif,system-ui,sans-serif;color:var(--ink);text-decoration:none}.atelier-rail>p{color:var(--muted)}nav{display:flex;flex-direction:column;gap:8px;margin-top:22px}nav a{text-decoration:none;padding:5px 0}.locale-nav{border-top:1px solid var(--line);padding-top:16px}.atelier-rail footer{margin-top:auto;padding-top:32px;color:var(--muted);font-size:.9rem}.atelier-shell main{min-width:0;padding:12px 0}.intro{padding:30px;background:var(--panel);border:1px solid var(--line);border-radius:3px;margin-bottom:36px}.intro h1,.post h1,.page h1,.atelier-shell main>section>h1{font-size:clamp(2.2rem,6vw,3.8rem);line-height:1.08;letter-spacing:-.04em}.post-card{padding:24px 0;border-top:1px solid var(--line)}.post-card h2{margin:0;font:600 1.5rem/1.35 Georgia,serif}.meta,.tags{color:var(--muted);font-size:.9rem}.post-content img{max-width:100%;height:auto}.post-content pre{overflow:auto;padding:18px;background:#e9e1d3}.post-content code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.post-content blockquote{margin-left:0;padding-left:20px;border-left:3px solid var(--accent);color:var(--muted)}.pagination{display:flex;justify-content:space-between;margin-top:32px}a:focus-visible{outline:3px solid #32745b;outline-offset:3px}@media(max-width:760px){.atelier-shell{display:block;padding:26px 19px}.atelier-rail{position:static;min-height:0;border-bottom:1px solid var(--line);padding-bottom:20px}.atelier-rail nav{flex-direction:row;flex-wrap:wrap;gap:14px}.atelier-rail footer{margin-top:12px;padding-top:0}.atelier-shell main{padding-top:26px}}
|
|
2
|
+
|
|
3
|
+
/* The shell and content column expand so the footer remains at the bottom. */
|
|
4
|
+
body{display:flex;flex-direction:column;min-height:100vh}
|
|
5
|
+
.atelier-shell{flex:1;width:100%}
|
|
6
|
+
.atelier-shell main{min-height:0}
|
|
7
|
+
.site-footer{width:min(calc(100% - 68px),1240px);margin:0 auto;padding:22px 0;border-top:1px solid var(--line);color:var(--muted)}
|
|
8
|
+
.hero-block,.cta-block{padding:clamp(24px,5vw,56px);background:var(--panel);border:1px solid var(--line);border-radius:4px;margin:0 0 32px}
|
|
9
|
+
.hero-block h1,.hero-block h2{font-size:clamp(2.2rem,7vw,4.2rem);line-height:1.08;letter-spacing:-.04em;margin:.2em 0}
|
|
10
|
+
.eyebrow{color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.08em}
|
|
11
|
+
.hero-copy{font-size:1.15rem;max-width:60ch;color:var(--muted)}
|
|
12
|
+
.button{display:inline-block;padding:10px 18px;border-radius:4px;background:var(--accent);color:white;text-decoration:none;font-weight:700}
|
|
13
|
+
.block-columns{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));gap:24px;margin:30px 0}
|
|
14
|
+
.feature-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:16px}
|
|
15
|
+
.feature-card,.faq-block details,.quote-block,.ad-slot,.captcha-block{padding:20px;border:1px solid var(--line);background:var(--panel)}
|
|
16
|
+
.image-block img{max-width:100%;height:auto}.image-block figcaption,.quote-block figcaption{color:var(--muted);font-size:.9rem}
|
|
17
|
+
.faq-block details{margin:12px 0}.faq-block summary{cursor:pointer;font-weight:700}
|
|
18
|
+
.ad-slot:empty{min-height:90px}.captcha-block{min-height:65px}
|
|
19
|
+
@media(max-width:760px){.site-footer{width:calc(100% - 38px)}}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
.privacy-manager{position:fixed;right:16px;bottom:16px;z-index:1000;color:var(--ink);font:14px/1.5 ui-sans-serif,system-ui,sans-serif}
|
|
23
|
+
.privacy-settings-button,.privacy-panel button{font:inherit;font-weight:700;border:1px solid var(--line);border-radius:8px;padding:9px 13px;background:var(--panel,#fff);color:var(--ink);cursor:pointer}
|
|
24
|
+
.privacy-settings-button{box-shadow:0 4px 18px #0002}
|
|
25
|
+
.privacy-panel{width:min(28rem,calc(100vw - 32px));max-height:min(80vh,42rem);overflow:auto;padding:20px;margin-bottom:10px;border:1px solid var(--line);border-radius:12px;background:var(--paper,#fff);box-shadow:0 12px 40px #0003}
|
|
26
|
+
.privacy-panel[hidden]{display:none}
|
|
27
|
+
.privacy-panel h2{margin:8px 0;font-size:1.2rem}
|
|
28
|
+
.privacy-panel p{margin:10px 0}
|
|
29
|
+
.privacy-close{float:right}
|
|
30
|
+
.privacy-details{display:grid;gap:8px;margin:16px 0}
|
|
31
|
+
.privacy-service{display:flex;align-items:flex-start;gap:10px;padding:10px;border:1px solid var(--line);border-radius:8px}
|
|
32
|
+
.privacy-service input{margin-top:4px;accent-color:var(--accent)}
|
|
33
|
+
.privacy-service span span{display:inline}
|
|
34
|
+
.privacy-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
|
|
35
|
+
.privacy-actions button{flex:1 1 auto}
|
|
36
|
+
.privacy-accept,.privacy-reject{font-weight:800!important}
|
|
37
|
+
.privacy-controller,.privacy-policy-link{font-size:.9rem}
|
|
38
|
+
.privacy-settings-button:focus-visible,.privacy-panel button:focus-visible,.privacy-panel a:focus-visible,.privacy-service input:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
|
|
39
|
+
@media(max-width:500px){.privacy-manager{left:12px;right:12px;bottom:12px}.privacy-settings-button{float:right}.privacy-panel{width:100%}.privacy-actions button{flex:1 1 100%}}
|
|
40
|
+
|
|
41
|
+
.page-builder{display:grid;gap:24px}
|
|
42
|
+
.page-title h1{font-size:clamp(2rem,5vw,3.3rem);line-height:1.1;letter-spacing:-.04em}
|
|
43
|
+
.hero-block{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(180px,.8fr);gap:28px;padding:clamp(26px,5vw,54px);background:var(--panel);border:1px solid var(--line);margin:0 0 24px}
|
|
44
|
+
.hero-block:not(.hero-block--split){display:block}
|
|
45
|
+
.hero-highlights{display:grid;gap:10px;list-style:none;padding:0}
|
|
46
|
+
.hero-highlights li,.feature-card,.steps-widget li,.privacy-service-list li,.link-list li{padding:18px;background:var(--panel);border:1px solid var(--line);border-radius:4px}
|
|
47
|
+
.page-section{padding:clamp(20px,4vw,34px);margin:0}
|
|
48
|
+
.page-section--soft{background:var(--panel)}.page-section--accent{background:#eee0cf}.page-section--dark{background:#342f26;color:#fff}.page-section--dark a{color:#fff}
|
|
49
|
+
.section-inner{max-width:760px;margin-inline:auto}.section-inner--wide{max-width:none}.section-inner--narrow{max-width:620px}
|
|
50
|
+
.section-inner>h2{font-size:clamp(1.5rem,3vw,2.2rem);line-height:1.2}
|
|
51
|
+
.feature-section{margin:22px 0}.feature-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));gap:14px}
|
|
52
|
+
.link-list ul,.steps-widget ol,.privacy-service-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:12px;padding:0;list-style:none}
|
|
53
|
+
.link-list li>a{font-weight:700}.steps-widget h4{margin-top:0}.steps-widget li{counter-increment:step}.steps-widget ol{counter-reset:step}.steps-widget li:before{content:counter(step,decimal-leading-zero);color:var(--accent);font-weight:700}
|
|
54
|
+
.steps-widget pre,.code-widget pre{overflow:auto;padding:16px;background:#29271f;color:#fff;border-radius:4px}.code-widget figcaption{font-weight:700}
|
|
55
|
+
.table-widget{overflow-x:auto}.table-widget table{border-collapse:collapse;min-width:520px;width:100%;background:var(--panel)}.table-widget th,.table-widget td{border:1px solid var(--line);padding:9px 12px;text-align:left}.table-widget th{background:#eee8dc}
|
|
56
|
+
.notice-widget{padding:16px 20px;border-left:4px solid var(--accent);background:var(--panel)}.notice-widget--warning{border-color:#a76120;background:#f8ead6}.notice-widget--success{border-color:#327550;background:#e5f0e8}
|
|
57
|
+
.footer-navigation{display:flex;flex-direction:row;flex-wrap:wrap;gap:16px}.site-header--hidden,.brand--hidden,.primary-navigation--hidden,.locale-nav--hidden,.site-footer--hidden,.footer-copy--hidden,.footer-navigation--hidden{display:none!important}
|
|
58
|
+
.error-page{max-width:620px;margin:6vh auto;padding:clamp(28px,6vw,64px);text-align:center;background:var(--panel);border:1px solid var(--line)}.error-code{margin:0;color:var(--accent);font-size:clamp(4rem,14vw,8rem);font-weight:700;line-height:1}
|
|
59
|
+
@media(max-width:760px){.hero-block{grid-template-columns:1fr}.atelier-header{padding:0;border:0}}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
/* Page files define row column counts and then element types inside each column. */
|
|
63
|
+
.page-builder-row{display:grid;gap:clamp(16px,2.5vw,30px);align-items:start}
|
|
64
|
+
.page-builder-row[data-columns="1"]{grid-template-columns:minmax(0,1fr)}
|
|
65
|
+
.page-builder-row[data-columns="2"]{grid-template-columns:repeat(2,minmax(0,1fr))}
|
|
66
|
+
.page-builder-row[data-columns="3"]{grid-template-columns:repeat(3,minmax(0,1fr))}
|
|
67
|
+
.page-builder-row[data-columns="4"]{grid-template-columns:repeat(4,minmax(0,1fr))}
|
|
68
|
+
.page-builder-cell{min-width:0}
|
|
69
|
+
.page-builder-cell>.hero-block,.page-builder-cell>.page-section,.page-builder-cell>.feature-section,.page-builder-cell>.cta-block,.page-builder-cell>.faq-block,.page-builder-cell>.latest-posts{margin:0}
|
|
70
|
+
.display-text{font-size:clamp(1.8rem,5vw,4rem);line-height:1.08;letter-spacing:-.045em}
|
|
71
|
+
.display-text--serif{font-family:Georgia,"Iowan Old Style",serif;font-weight:500}
|
|
72
|
+
.display-text--mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:-.06em}
|
|
73
|
+
.display-text--accent{color:var(--accent)}
|
|
74
|
+
.display-text--outline{-webkit-text-stroke:1px currentColor;color:transparent}
|
|
75
|
+
.media-text-block{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:clamp(20px,4vw,48px)}
|
|
76
|
+
.media-text-block--right figure{order:2}
|
|
77
|
+
.media-text-block figure{min-width:0;margin:0}
|
|
78
|
+
.media-text-block img,.media-text-block video{display:block;width:100%;height:auto;max-height:640px;object-fit:cover;border-radius:var(--media-radius,14px)}
|
|
79
|
+
.media-text-block figcaption{margin-top:8px;color:var(--muted);font-size:.9rem}
|
|
80
|
+
.media-text-copy{max-width:62ch}
|
|
81
|
+
.media-text-copy h2{font-size:clamp(1.5rem,3vw,2.4rem);line-height:1.2}
|
|
82
|
+
.privacy-controller-details{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));gap:12px}
|
|
83
|
+
.privacy-controller-details>div{padding:14px;border:1px solid var(--line);border-radius:10px}
|
|
84
|
+
.privacy-controller-details dt{font-size:.85rem;color:var(--muted);font-weight:700}
|
|
85
|
+
.privacy-controller-details dd{margin:4px 0 0;overflow-wrap:anywhere}
|
|
86
|
+
@media(max-width:760px){.page-builder-row[data-columns="2"],.page-builder-row[data-columns="3"],.page-builder-row[data-columns="4"]{grid-template-columns:minmax(0,1fr)}.media-text-block{grid-template-columns:1fr}.media-text-block--right figure{order:0}}
|
|
87
|
+
|
|
88
|
+
.page-builder,.page-builder-row,.page-builder-cell,.hero-block,.hero-main,.hero-highlights{min-width:0}
|
|
89
|
+
.page-builder-row{width:100%}
|
|
90
|
+
.media-text-block,.media-text-block>*{min-width:0}
|
|
91
|
+
@media(max-width:760px){html,body{max-width:100%}.site-header,main,.site-footer{max-width:100%;min-width:0}.hero-block{grid-template-columns:minmax(0,1fr)}.hero-highlights{grid-template-columns:minmax(0,1fr)}}
|
|
92
|
+
|
|
93
|
+
/* Keep long article content and generated page widgets inside narrow viewports. */
|
|
94
|
+
html,body{width:100%;min-width:0;max-width:100%}
|
|
95
|
+
main,.page-builder,.page-builder-row,.page-builder-cell,.post,.post-content,.post-content>*{min-width:0;max-width:100%}
|
|
96
|
+
.post-content,.page-builder{overflow-wrap:anywhere}
|
|
97
|
+
.post-content img,.post-content video,.post-content iframe,.page-builder img,.page-builder video{max-width:100%;height:auto}
|
|
98
|
+
.post-content pre,.code-widget pre,.steps-widget pre{max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain}
|
|
99
|
+
.post-content table{display:block;width:100%;max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain}
|
|
100
|
+
.post-content th,.post-content td{overflow-wrap:anywhere}
|
|
101
|
+
.post-content blockquote{margin-inline:clamp(8px,3vw,32px)}
|
|
102
|
+
.post-content a,.post-content code,.meta,.tags{overflow-wrap:anywhere}
|
|
103
|
+
.site-header,.site-header nav,.locale-nav,.site-footer,.footer-navigation{min-width:0;max-width:100%;flex-wrap:wrap}
|
|
104
|
+
.site-header nav,.footer-navigation{row-gap:10px}
|
|
105
|
+
.local-search-page{max-width:760px;margin-inline:auto}
|
|
106
|
+
.local-search-form label{display:block;font-weight:700;margin-bottom:8px}
|
|
107
|
+
.local-search-controls{display:flex;gap:10px;min-width:0}
|
|
108
|
+
.local-search-controls input{flex:1 1 auto;min-width:0;padding:11px 12px;border:1px solid var(--line);border-radius:8px;font:inherit;background:#fff;color:var(--ink)}
|
|
109
|
+
.local-search-controls button{flex:0 0 auto;padding:10px 16px;border:0;border-radius:8px;background:var(--accent);color:#fff;font:inherit;font-weight:700;cursor:pointer}
|
|
110
|
+
.local-search-form :focus-visible{outline:3px solid #cb774d;outline-offset:3px}
|
|
111
|
+
.local-search-results{padding-inline-start:1.5rem}
|
|
112
|
+
.local-search-results>li{padding:14px 0;border-top:1px solid var(--line)}
|
|
113
|
+
.local-search-results h2{margin:0;font-size:1.25rem}
|
|
114
|
+
.local-search-results time{display:block;color:var(--muted);font-size:.9rem;margin-top:4px}
|
|
115
|
+
.local-search-results p{margin:8px 0 0}
|
|
116
|
+
.markdown-task-status{display:inline-block;min-width:1.35em;font-weight:800}
|
|
117
|
+
@media(max-width:620px){.local-search-controls{align-items:stretch;flex-direction:column}.local-search-controls button{min-height:44px}.post-content pre,.code-widget pre,.steps-widget pre{padding:12px}}
|
|
118
|
+
.locale-nav select{max-width:min(100%,13rem);padding:7px 30px 7px 10px;border:1px solid var(--line);border-radius:8px;background:var(--paper);color:var(--ink);font:inherit;cursor:pointer}
|
|
119
|
+
.locale-nav select:focus-visible{outline:3px solid #cb774d;outline-offset:3px}
|
|
120
|
+
@media(max-width:620px){.locale-nav select{min-height:42px;max-width:100%}}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<html lang="{{site.language}}">
|
|
2
|
+
<head>
|
|
3
|
+
{{> head}}
|
|
4
|
+
</head>
|
|
5
|
+
<body>
|
|
6
|
+
<a class="skip-link" href="#main">{{site.skipToContent}}</a>
|
|
7
|
+
<div class="atelier-shell">
|
|
8
|
+
<aside class="atelier-rail">
|
|
9
|
+
<p>{{site.description}}</p>
|
|
10
|
+
{{> header}}
|
|
11
|
+
</aside>
|
|
12
|
+
<main id="main">{{{page.content}}}</main>
|
|
13
|
+
</div>
|
|
14
|
+
{{> footer}}
|
|
15
|
+
<script defer src="/edgepress/language-select.js"></script>
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<footer class="site-footer {{site.footerClass}}">
|
|
2
|
+
<p class="footer-copy {{site.footerCopyClass}}">{{site.footer}}</p>
|
|
3
|
+
<nav class="footer-navigation {{site.footerNavigationClass}}" aria-label="{{site.footerNavigationLabel}}">{{{site.footerNavigationHtml}}}</nav>
|
|
4
|
+
</footer>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<meta charset="utf-8">
|
|
2
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
3
|
+
<meta name="description" content="{{page.description}}">
|
|
4
|
+
<meta name="robots" content="{{page.robots}}">
|
|
5
|
+
<meta name="keywords" content="{{page.keywords}}">
|
|
6
|
+
<meta name="author" content="{{site.seo.author}}">
|
|
7
|
+
<title>{{page.title}}</title>
|
|
8
|
+
<link rel="canonical" href="{{page.canonical}}">
|
|
9
|
+
<meta property="og:type" content="website">
|
|
10
|
+
<meta property="og:title" content="{{page.title}}">
|
|
11
|
+
<meta property="og:description" content="{{page.description}}">
|
|
12
|
+
<meta property="og:url" content="{{page.canonical}}">
|
|
13
|
+
<meta property="og:image" content="{{page.image}}">
|
|
14
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
15
|
+
<link rel="alternate" type="application/atom+xml" href="{{site.feedPath}}" title="{{site.feedLabel}}">
|
|
16
|
+
<link rel="stylesheet" href="{{site.stylesheet}}">
|
|
17
|
+
<script type="application/ld+json">{{{page.jsonLd}}}</script>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<header class="site-header atelier-header {{site.headerClass}}">
|
|
2
|
+
<a class="brand {{site.brandClass}}" href="{{site.homePath}}">{{site.headerBrand}}</a>
|
|
3
|
+
<nav class="primary-navigation {{site.primaryNavigationClass}}" aria-label="{{site.mainNavigationLabel}}">{{{site.primaryNavigationHtml}}}</nav>
|
|
4
|
+
<div class="locale-nav {{site.languageNavigationClass}}" role="group" aria-label="{{site.languageLabel}}">{{{site.localeLinksHtml}}}</div>
|
|
5
|
+
</header>
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
:root{color-scheme:light;--paper:#fbfaf7;--ink:#222722;--muted:#667168;--line:#dfe4dc;--accent:#426b57;font:16px/1.75 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}*{box-sizing:border-box}body{max-width:920px;margin:0 auto;padding:0 28px;background:var(--paper);color:var(--ink)}a{color:var(--accent);text-underline-offset:.18em}a:hover{text-decoration-thickness:2px}.skip-link{position:absolute;left:-10000px;top:auto}.skip-link:focus{left:16px;top:16px;padding:10px 14px;background:#fff;border:2px solid var(--accent);z-index:2}.site-header{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:28px 0;border-bottom:1px solid var(--line)}.brand{font-size:1.3rem;font-weight:750;color:var(--ink);text-decoration:none}.site-header nav,.locale-nav{display:flex;flex-wrap:wrap;gap:18px}.site-header nav a{text-decoration:none}main{min-height:64vh;padding:38px 0}.intro{max-width:680px;margin-bottom:36px}.intro h1,.post h1,.page h1,main>section>h1{font-size:clamp(2rem,6vw,3.25rem);letter-spacing:-.035em;line-height:1.12}.post-card{padding:18px 0;border-top:1px solid var(--line)}.post-card h2{margin:0;font-size:1.35rem}.meta,.tags,footer{color:var(--muted)}.meta{font-size:.9rem}.post-content img{max-width:100%;height:auto}.post-content pre{overflow:auto;padding:16px;background:#edf0ea;border-radius:8px}.post-content code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.post-content table{display:block;max-width:100%;overflow:auto;border-collapse:collapse}.post-content th,.post-content td{padding:8px 12px;border:1px solid var(--line)}.pagination{display:flex;justify-content:space-between;margin-top:30px}.locale-nav{justify-content:flex-end;padding-top:12px;font-size:.88rem}.locale-nav a{color:var(--muted)}a:focus-visible{outline:3px solid #cb774d;outline-offset:3px}footer{border-top:1px solid var(--line);padding:24px 0;font-size:.9rem}@media(max-width:620px){body{padding:0 17px}.site-header{align-items:flex-start;flex-direction:column;gap:14px}.site-header nav{gap:14px}.locale-nav{justify-content:flex-start}}
|
|
2
|
+
|
|
3
|
+
/* Page flow keeps the footer at the viewport bottom on short pages. */
|
|
4
|
+
body{display:flex;flex-direction:column;min-height:100vh}
|
|
5
|
+
main{flex:1;min-height:0}
|
|
6
|
+
.site-footer{margin-top:auto}
|
|
7
|
+
.hero-block,.cta-block{padding:clamp(24px,5vw,56px);background:#edf0ea;border:1px solid var(--line);border-radius:14px;margin:0 0 32px}
|
|
8
|
+
.hero-block h1,.hero-block h2{font-size:clamp(2.2rem,7vw,4.2rem);line-height:1.08;letter-spacing:-.04em;margin:.2em 0}
|
|
9
|
+
.eyebrow{color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.08em}
|
|
10
|
+
.hero-copy{font-size:1.15rem;max-width:60ch;color:var(--muted)}
|
|
11
|
+
.button{display:inline-block;padding:10px 18px;border-radius:8px;background:var(--accent);color:white;text-decoration:none;font-weight:700}
|
|
12
|
+
.block-columns{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));gap:24px;margin:30px 0}
|
|
13
|
+
.feature-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:16px}
|
|
14
|
+
.feature-card,.faq-block details,.quote-block,.ad-slot,.captcha-block{padding:20px;border:1px solid var(--line);border-radius:12px;background:white}
|
|
15
|
+
.image-block img{max-width:100%;height:auto}
|
|
16
|
+
.image-block figcaption,.quote-block figcaption{color:var(--muted);font-size:.9rem}
|
|
17
|
+
.faq-block details{margin:12px 0}.faq-block summary{cursor:pointer;font-weight:700}
|
|
18
|
+
.ad-slot:empty{min-height:90px}.captcha-block{min-height:65px}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
.privacy-manager{position:fixed;right:16px;bottom:16px;z-index:1000;color:var(--ink);font:14px/1.5 ui-sans-serif,system-ui,sans-serif}
|
|
22
|
+
.privacy-settings-button,.privacy-panel button{font:inherit;font-weight:700;border:1px solid var(--line);border-radius:8px;padding:9px 13px;background:var(--panel,#fff);color:var(--ink);cursor:pointer}
|
|
23
|
+
.privacy-settings-button{box-shadow:0 4px 18px #0002}
|
|
24
|
+
.privacy-panel{width:min(28rem,calc(100vw - 32px));max-height:min(80vh,42rem);overflow:auto;padding:20px;margin-bottom:10px;border:1px solid var(--line);border-radius:12px;background:var(--paper,#fff);box-shadow:0 12px 40px #0003}
|
|
25
|
+
.privacy-panel[hidden]{display:none}
|
|
26
|
+
.privacy-panel h2{margin:8px 0;font-size:1.2rem}
|
|
27
|
+
.privacy-panel p{margin:10px 0}
|
|
28
|
+
.privacy-close{float:right}
|
|
29
|
+
.privacy-details{display:grid;gap:8px;margin:16px 0}
|
|
30
|
+
.privacy-service{display:flex;align-items:flex-start;gap:10px;padding:10px;border:1px solid var(--line);border-radius:8px}
|
|
31
|
+
.privacy-service input{margin-top:4px;accent-color:var(--accent)}
|
|
32
|
+
.privacy-service span span{display:inline}
|
|
33
|
+
.privacy-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
|
|
34
|
+
.privacy-actions button{flex:1 1 auto}
|
|
35
|
+
.privacy-accept,.privacy-reject{font-weight:800!important}
|
|
36
|
+
.privacy-controller,.privacy-policy-link{font-size:.9rem}
|
|
37
|
+
.privacy-settings-button:focus-visible,.privacy-panel button:focus-visible,.privacy-panel a:focus-visible,.privacy-service input:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
|
|
38
|
+
@media(max-width:500px){.privacy-manager{left:12px;right:12px;bottom:12px}.privacy-settings-button{float:right}.privacy-panel{width:100%}.privacy-actions button{flex:1 1 100%}}
|
|
39
|
+
|
|
40
|
+
/* Page blocks follow a section-and-widget layout, while articles keep their own reading column. */
|
|
41
|
+
body{max-width:none;padding:0 clamp(18px,4vw,56px)}
|
|
42
|
+
.site-header,main,.site-footer{width:min(100%,1240px);margin-inline:auto}
|
|
43
|
+
main{padding:clamp(32px,5vw,64px) 0}
|
|
44
|
+
.page-builder{display:grid;gap:clamp(18px,3vw,32px)}
|
|
45
|
+
.page-title{max-width:860px;margin:0 auto;width:100%}
|
|
46
|
+
.page-title h1{font-size:clamp(2rem,5vw,3.4rem);line-height:1.12;letter-spacing:-.035em;margin:0}
|
|
47
|
+
.hero-block{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(220px,.8fr);align-items:center;gap:clamp(24px,6vw,72px);margin:0;padding:clamp(30px,7vw,84px);background:linear-gradient(135deg,#f0f3ed,#e7eee8)}
|
|
48
|
+
.hero-block:not(.hero-block--split){display:block}
|
|
49
|
+
.hero-block h1,.hero-block h2{max-width:16ch}
|
|
50
|
+
.hero-highlights{display:grid;gap:10px;margin:0;padding:0;list-style:none}
|
|
51
|
+
.hero-highlights li{padding:14px 16px;border:1px solid #ffffffb3;border-radius:10px;background:#ffffffb8;font-weight:650}
|
|
52
|
+
.page-section{border-radius:16px;margin:0;padding:clamp(22px,4vw,44px)}
|
|
53
|
+
.page-section--plain{background:transparent}
|
|
54
|
+
.page-section--soft{background:#f0f2ed;border:1px solid var(--line)}
|
|
55
|
+
.page-section--accent{background:#e1ede5}
|
|
56
|
+
.page-section--dark{background:#263b31;color:#fff}
|
|
57
|
+
.page-section--dark a{color:#fff}
|
|
58
|
+
.section-inner{width:100%;margin-inline:auto}
|
|
59
|
+
.section-inner--default{max-width:900px}
|
|
60
|
+
.section-inner--wide{max-width:1120px}
|
|
61
|
+
.section-inner--narrow{max-width:680px}
|
|
62
|
+
.section-inner>h2{font-size:clamp(1.55rem,3vw,2.25rem);letter-spacing:-.025em;line-height:1.2;margin:0 0 12px}
|
|
63
|
+
.section-intro{max-width:68ch;color:var(--muted);font-size:1.05rem;margin:0 0 20px}
|
|
64
|
+
.feature-section{margin:22px 0 0}
|
|
65
|
+
.feature-section>h2{font-size:clamp(1.4rem,2.5vw,1.9rem);margin:0 0 16px}
|
|
66
|
+
.feature-card,.steps-widget li,.privacy-service-list li{padding:22px;border:1px solid var(--line);border-radius:13px;background:#fff}
|
|
67
|
+
.feature-card h3,.steps-widget h4{margin-top:0;line-height:1.3}
|
|
68
|
+
.link-list ul{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:12px;list-style:none;padding:0}
|
|
69
|
+
.link-list li{padding:18px;border:1px solid var(--line);border-radius:12px;background:#fff}
|
|
70
|
+
.link-list li>a{font-weight:700}
|
|
71
|
+
.steps-widget ol{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));gap:14px;list-style:none;padding:0;counter-reset:step}
|
|
72
|
+
.steps-widget li{counter-increment:step}
|
|
73
|
+
.steps-widget li::before{content:counter(step,decimal-leading-zero);display:block;color:var(--accent);font-size:.85rem;font-weight:800;letter-spacing:.08em;margin-bottom:8px}
|
|
74
|
+
.steps-widget pre,.code-widget pre{overflow:auto;padding:16px;background:#202722;color:#f7f7f2;border-radius:10px}
|
|
75
|
+
.steps-widget code,.code-widget code{font: .9rem/1.6 ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre}
|
|
76
|
+
.code-widget{margin:14px 0}
|
|
77
|
+
.code-widget figcaption{font-size:.9rem;font-weight:700;margin:0 0 8px}
|
|
78
|
+
.table-widget{overflow-x:auto;margin:18px 0}
|
|
79
|
+
.table-widget table{border-collapse:collapse;min-width:560px;width:100%;background:#fff}
|
|
80
|
+
.table-widget caption{text-align:left;font-weight:700;padding:0 0 8px}
|
|
81
|
+
.table-widget th,.table-widget td{border:1px solid var(--line);padding:10px 12px;text-align:left;vertical-align:top}
|
|
82
|
+
.table-widget th{background:#edf0ea}
|
|
83
|
+
.notice-widget{padding:18px 20px;border-left:4px solid var(--accent);background:#f0f2ed;border-radius:8px}
|
|
84
|
+
.notice-widget--warning{border-color:#9c5d20;background:#fbf0df}
|
|
85
|
+
.notice-widget--success{border-color:#317550;background:#e9f4ed}
|
|
86
|
+
.privacy-service-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:12px;list-style:none;padding:0}
|
|
87
|
+
.privacy-service-list h3{margin-top:0}
|
|
88
|
+
.cta-block{margin:0}
|
|
89
|
+
.page-builder .latest-posts{margin:0}
|
|
90
|
+
@media(max-width:700px){.hero-block{grid-template-columns:1fr}.hero-block--split{align-items:start}.page-section{padding:22px}.site-header{align-items:flex-start}}
|
|
91
|
+
.site-header--hidden,.brand--hidden,.primary-navigation--hidden,.locale-nav--hidden,.site-footer--hidden,.footer-copy--hidden,.footer-navigation--hidden{display:none!important}
|
|
92
|
+
.site-footer{display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap}
|
|
93
|
+
.site-footer p{margin:0}
|
|
94
|
+
.footer-navigation{display:flex;flex-direction:row;gap:18px}
|
|
95
|
+
.error-page{max-width:760px;margin:8vh auto;text-align:center;padding:clamp(28px,6vw,72px);border:1px solid var(--line);border-radius:18px;background:#f0f2ed}
|
|
96
|
+
.error-code{margin:0;color:var(--accent);font-size:clamp(4rem,14vw,9rem);font-weight:800;line-height:1;letter-spacing:-.08em}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
/* Page files define row column counts and then element types inside each column. */
|
|
100
|
+
.page-builder-row{display:grid;gap:clamp(16px,2.5vw,30px);align-items:start}
|
|
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>.hero-block,.page-builder-cell>.page-section,.page-builder-cell>.feature-section,.page-builder-cell>.cta-block,.page-builder-cell>.faq-block,.page-builder-cell>.latest-posts{margin:0}
|
|
107
|
+
.display-text{font-size:clamp(1.8rem,5vw,4rem);line-height:1.08;letter-spacing:-.045em}
|
|
108
|
+
.display-text--serif{font-family:Georgia,"Iowan Old Style",serif;font-weight:500}
|
|
109
|
+
.display-text--mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:-.06em}
|
|
110
|
+
.display-text--accent{color:var(--accent)}
|
|
111
|
+
.display-text--outline{-webkit-text-stroke:1px currentColor;color:transparent}
|
|
112
|
+
.media-text-block{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:clamp(20px,4vw,48px)}
|
|
113
|
+
.media-text-block--right figure{order:2}
|
|
114
|
+
.media-text-block figure{min-width:0;margin:0}
|
|
115
|
+
.media-text-block img,.media-text-block video{display:block;width:100%;height:auto;max-height:640px;object-fit:cover;border-radius:var(--media-radius,14px)}
|
|
116
|
+
.media-text-block figcaption{margin-top:8px;color:var(--muted);font-size:.9rem}
|
|
117
|
+
.media-text-copy{max-width:62ch}
|
|
118
|
+
.media-text-copy h2{font-size:clamp(1.5rem,3vw,2.4rem);line-height:1.2}
|
|
119
|
+
.privacy-controller-details{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));gap:12px}
|
|
120
|
+
.privacy-controller-details>div{padding:14px;border:1px solid var(--line);border-radius:10px}
|
|
121
|
+
.privacy-controller-details dt{font-size:.85rem;color:var(--muted);font-weight:700}
|
|
122
|
+
.privacy-controller-details dd{margin:4px 0 0;overflow-wrap:anywhere}
|
|
123
|
+
@media(max-width:760px){.page-builder-row[data-columns="2"],.page-builder-row[data-columns="3"],.page-builder-row[data-columns="4"]{grid-template-columns:minmax(0,1fr)}.media-text-block{grid-template-columns:1fr}.media-text-block--right figure{order:0}}
|
|
124
|
+
|
|
125
|
+
.page-builder,.page-builder-row,.page-builder-cell,.hero-block,.hero-main,.hero-highlights{min-width:0}
|
|
126
|
+
.page-builder-row{width:100%}
|
|
127
|
+
.media-text-block,.media-text-block>*{min-width:0}
|
|
128
|
+
@media(max-width:760px){html,body{max-width:100%}.site-header,main,.site-footer{max-width:100%;min-width:0}.hero-block{grid-template-columns:minmax(0,1fr)}.hero-highlights{grid-template-columns:minmax(0,1fr)}}
|
|
129
|
+
|
|
130
|
+
/* Keep long article content and generated page widgets inside narrow viewports. */
|
|
131
|
+
html,body{width:100%;min-width:0;max-width:100%}
|
|
132
|
+
main,.page-builder,.page-builder-row,.page-builder-cell,.post,.post-content,.post-content>*{min-width:0;max-width:100%}
|
|
133
|
+
.post-content,.page-builder{overflow-wrap:anywhere}
|
|
134
|
+
.post-content img,.post-content video,.post-content iframe,.page-builder img,.page-builder video{max-width:100%;height:auto}
|
|
135
|
+
.post-content pre,.code-widget pre,.steps-widget pre{max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain}
|
|
136
|
+
.post-content table{display:block;width:100%;max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain}
|
|
137
|
+
.post-content th,.post-content td{overflow-wrap:anywhere}
|
|
138
|
+
.post-content blockquote{margin-inline:clamp(8px,3vw,32px)}
|
|
139
|
+
.post-content a,.post-content code,.meta,.tags{overflow-wrap:anywhere}
|
|
140
|
+
.site-header,.site-header nav,.locale-nav,.site-footer,.footer-navigation{min-width:0;max-width:100%;flex-wrap:wrap}
|
|
141
|
+
.site-header nav,.footer-navigation{row-gap:10px}
|
|
142
|
+
.local-search-page{max-width:760px;margin-inline:auto}
|
|
143
|
+
.local-search-form label{display:block;font-weight:700;margin-bottom:8px}
|
|
144
|
+
.local-search-controls{display:flex;gap:10px;min-width:0}
|
|
145
|
+
.local-search-controls input{flex:1 1 auto;min-width:0;padding:11px 12px;border:1px solid var(--line);border-radius:8px;font:inherit;background:#fff;color:var(--ink)}
|
|
146
|
+
.local-search-controls button{flex:0 0 auto;padding:10px 16px;border:0;border-radius:8px;background:var(--accent);color:#fff;font:inherit;font-weight:700;cursor:pointer}
|
|
147
|
+
.local-search-form :focus-visible{outline:3px solid #cb774d;outline-offset:3px}
|
|
148
|
+
.local-search-results{padding-inline-start:1.5rem}
|
|
149
|
+
.local-search-results>li{padding:14px 0;border-top:1px solid var(--line)}
|
|
150
|
+
.local-search-results h2{margin:0;font-size:1.25rem}
|
|
151
|
+
.local-search-results time{display:block;color:var(--muted);font-size:.9rem;margin-top:4px}
|
|
152
|
+
.local-search-results p{margin:8px 0 0}
|
|
153
|
+
.markdown-task-status{display:inline-block;min-width:1.35em;font-weight:800}
|
|
154
|
+
@media(max-width:620px){.local-search-controls{align-items:stretch;flex-direction:column}.local-search-controls button{min-height:44px}.post-content pre,.code-widget pre,.steps-widget pre{padding:12px}}
|
|
155
|
+
.locale-nav select{max-width:min(100%,13rem);padding:7px 30px 7px 10px;border:1px solid var(--line);border-radius:8px;background:var(--paper);color:var(--ink);font:inherit;cursor:pointer}
|
|
156
|
+
.locale-nav select:focus-visible{outline:3px solid #cb774d;outline-offset:3px}
|
|
157
|
+
@media(max-width:620px){.locale-nav select{min-height:42px;max-width:100%}}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<html lang="{{site.language}}">
|
|
2
|
+
<head>
|
|
3
|
+
{{> head}}
|
|
4
|
+
</head>
|
|
5
|
+
<body>
|
|
6
|
+
<a class="skip-link" href="#main">{{site.skipToContent}}</a>
|
|
7
|
+
{{> header}}
|
|
8
|
+
<main id="main">{{{page.content}}}</main>
|
|
9
|
+
{{> footer}}
|
|
10
|
+
<script defer src="/edgepress/language-select.js"></script>
|
|
11
|
+
</body>
|
|
12
|
+
</html>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<footer class="site-footer {{site.footerClass}}">
|
|
2
|
+
<p class="footer-copy {{site.footerCopyClass}}">{{site.footer}}</p>
|
|
3
|
+
<nav class="footer-navigation {{site.footerNavigationClass}}" aria-label="{{site.footerNavigationLabel}}">{{{site.footerNavigationHtml}}}</nav>
|
|
4
|
+
</footer>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<meta charset="utf-8">
|
|
2
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
3
|
+
<meta name="description" content="{{page.description}}">
|
|
4
|
+
<meta name="robots" content="{{page.robots}}">
|
|
5
|
+
<meta name="keywords" content="{{page.keywords}}">
|
|
6
|
+
<meta name="author" content="{{site.seo.author}}">
|
|
7
|
+
<title>{{page.title}}</title>
|
|
8
|
+
<link rel="canonical" href="{{page.canonical}}">
|
|
9
|
+
<meta property="og:type" content="website">
|
|
10
|
+
<meta property="og:title" content="{{page.title}}">
|
|
11
|
+
<meta property="og:description" content="{{page.description}}">
|
|
12
|
+
<meta property="og:url" content="{{page.canonical}}">
|
|
13
|
+
<meta property="og:image" content="{{page.image}}">
|
|
14
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
15
|
+
<meta name="twitter:title" content="{{page.title}}">
|
|
16
|
+
<meta name="twitter:description" content="{{page.description}}">
|
|
17
|
+
<link rel="alternate" type="application/atom+xml" href="{{site.feedPath}}" title="{{site.feedLabel}}">
|
|
18
|
+
<link rel="stylesheet" href="{{site.stylesheet}}">
|
|
19
|
+
<script type="application/ld+json">{{{page.jsonLd}}}</script>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<header class="site-header {{site.headerClass}}">
|
|
2
|
+
<a class="brand {{site.brandClass}}" href="{{site.homePath}}">{{site.headerBrand}}</a>
|
|
3
|
+
<nav class="primary-navigation {{site.primaryNavigationClass}}" aria-label="{{site.mainNavigationLabel}}">{{{site.primaryNavigationHtml}}}</nav>
|
|
4
|
+
<div class="locale-nav {{site.languageNavigationClass}}" role="group" aria-label="{{site.languageLabel}}">{{{site.localeLinksHtml}}}</div>
|
|
5
|
+
</header>
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
:root{color-scheme:dark;--night:#11172a;--panel:#1c2540;--ink:#edf2ff;--muted:#a5b2d3;--line:#303b5c;--accent:#79e0c3;--warm:#ffbd78;font:16px/1.7 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}*{box-sizing:border-box}body{max-width:1120px;margin:0 auto;padding:0 30px;background:radial-gradient(ellipse at 15% 0%,#263356 0,transparent 38%),var(--night);color:var(--ink)}a{color:var(--accent);text-underline-offset:.2em}.skip-link{position:absolute;left:-10000px}.skip-link:focus{left:16px;top:16px;padding:10px 14px;background:var(--panel);outline:3px solid var(--warm);z-index:2}.signal-header{display:flex;justify-content:space-between;align-items:center;gap:24px;padding:30px 0;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:11px;font-size:1.35rem;font-weight:750;color:var(--ink);text-decoration:none}.signal-mark{width:13px;height:13px;border-radius:4px;background:var(--accent);box-shadow:0 0 22px #79e0c399;transform:rotate(45deg)}nav{display:flex;flex-wrap:wrap;gap:20px}nav a{text-decoration:none}.locale-nav{justify-content:flex-end;padding-top:14px;font-size:.88rem}.locale-nav a{color:var(--muted)}main{min-height:64vh;padding:44px 0}.intro{max-width:780px;padding:24px 0 36px}.intro h1,.post h1,.page h1,main>section>h1{font-size:clamp(2.4rem,7vw,4.5rem);line-height:1.04;letter-spacing:-.05em}.intro p{color:var(--muted);font-size:1.12rem}.post-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:18px}.post-card{padding:24px;background:linear-gradient(145deg,#202a48,#171e35);border:1px solid var(--line);border-radius:16px;box-shadow:0 12px 35px #080c1a33}.post-card h2{margin:0;font-size:1.45rem;line-height:1.25}.meta,.tags,footer{color:var(--muted)}.meta{font-size:.9rem}.post-content img{max-width:100%;height:auto;border-radius:12px}.post-content pre{overflow:auto;padding:18px;background:#0d1221;border:1px solid var(--line);border-radius:12px}.post-content code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.post-content blockquote{margin-left:0;padding-left:20px;border-left:3px solid var(--accent);color:var(--muted)}.pagination{display:flex;justify-content:space-between;margin-top:30px}.post,.page{max-width:780px;margin:0 auto}.post-content h2,.post-content h3{line-height:1.25;margin-top:2em}a:focus-visible{outline:3px solid var(--warm);outline-offset:3px}body>footer{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);padding:24px 0;font-size:.9rem}@media(max-width:650px){body{padding:0 17px}.signal-header{align-items:flex-start;flex-direction:column}.signal-header nav{gap:14px}body>footer{flex-direction:column}}
|
|
2
|
+
|
|
3
|
+
/* The content area takes remaining viewport height before the footer. */
|
|
4
|
+
body{display:flex;flex-direction:column;min-height:100vh}
|
|
5
|
+
main{flex:1;min-height:0}
|
|
6
|
+
.site-footer{margin-top:auto}
|
|
7
|
+
.hero-block,.cta-block{padding:clamp(24px,5vw,56px);background:linear-gradient(145deg,#202a48,#171e35);border:1px solid var(--line);border-radius:16px;margin:0 0 32px}
|
|
8
|
+
.hero-block h1,.hero-block h2{font-size:clamp(2.2rem,7vw,4.2rem);line-height:1.08;letter-spacing:-.04em;margin:.2em 0}
|
|
9
|
+
.eyebrow{color:var(--warm);font-weight:700;text-transform:uppercase;letter-spacing:.08em}
|
|
10
|
+
.hero-copy{font-size:1.15rem;max-width:60ch;color:var(--muted)}
|
|
11
|
+
.button{display:inline-block;padding:10px 18px;border-radius:8px;background:var(--accent);color:#11172a;text-decoration:none;font-weight:700}
|
|
12
|
+
.block-columns{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));gap:24px;margin:30px 0}
|
|
13
|
+
.feature-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:16px}
|
|
14
|
+
.feature-card,.faq-block details,.quote-block,.ad-slot,.captcha-block{padding:20px;border:1px solid var(--line);border-radius:12px;background:var(--panel)}
|
|
15
|
+
.image-block img{max-width:100%;height:auto;border-radius:12px}
|
|
16
|
+
.image-block figcaption,.quote-block figcaption{color:var(--muted);font-size:.9rem}
|
|
17
|
+
.faq-block details{margin:12px 0}.faq-block summary{cursor:pointer;font-weight:700}
|
|
18
|
+
.ad-slot:empty{min-height:90px}.captcha-block{min-height:65px}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
.privacy-manager{position:fixed;right:16px;bottom:16px;z-index:1000;color:var(--ink);font:14px/1.5 ui-sans-serif,system-ui,sans-serif}
|
|
22
|
+
.privacy-settings-button,.privacy-panel button{font:inherit;font-weight:700;border:1px solid var(--line);border-radius:8px;padding:9px 13px;background:var(--panel,#fff);color:var(--ink);cursor:pointer}
|
|
23
|
+
.privacy-settings-button{box-shadow:0 4px 18px #0002}
|
|
24
|
+
.privacy-panel{width:min(28rem,calc(100vw - 32px));max-height:min(80vh,42rem);overflow:auto;padding:20px;margin-bottom:10px;border:1px solid var(--line);border-radius:12px;background:var(--paper,#fff);box-shadow:0 12px 40px #0003}
|
|
25
|
+
.privacy-panel[hidden]{display:none}
|
|
26
|
+
.privacy-panel h2{margin:8px 0;font-size:1.2rem}
|
|
27
|
+
.privacy-panel p{margin:10px 0}
|
|
28
|
+
.privacy-close{float:right}
|
|
29
|
+
.privacy-details{display:grid;gap:8px;margin:16px 0}
|
|
30
|
+
.privacy-service{display:flex;align-items:flex-start;gap:10px;padding:10px;border:1px solid var(--line);border-radius:8px}
|
|
31
|
+
.privacy-service input{margin-top:4px;accent-color:var(--accent)}
|
|
32
|
+
.privacy-service span span{display:inline}
|
|
33
|
+
.privacy-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
|
|
34
|
+
.privacy-actions button{flex:1 1 auto}
|
|
35
|
+
.privacy-accept,.privacy-reject{font-weight:800!important}
|
|
36
|
+
.privacy-controller,.privacy-policy-link{font-size:.9rem}
|
|
37
|
+
.privacy-settings-button:focus-visible,.privacy-panel button:focus-visible,.privacy-panel a:focus-visible,.privacy-service input:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
|
|
38
|
+
@media(max-width:500px){.privacy-manager{left:12px;right:12px;bottom:12px}.privacy-settings-button{float:right}.privacy-panel{width:100%}.privacy-actions button{flex:1 1 100%}}
|
|
39
|
+
|
|
40
|
+
.page-builder{display:grid;gap:22px}.page-title h1{font-size:clamp(2rem,5vw,3.5rem);line-height:1.08;letter-spacing:-.04em}
|
|
41
|
+
.hero-block{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(190px,.8fr);align-items:center;gap:28px;padding:clamp(28px,6vw,70px);background:linear-gradient(145deg,#202a48,#171e35);border:1px solid var(--line);border-radius:18px;margin:0}
|
|
42
|
+
.hero-block:not(.hero-block--split){display:block}.hero-highlights{display:grid;gap:10px;list-style:none;padding:0}.hero-highlights li,.feature-card,.steps-widget li,.privacy-service-list li,.link-list li{padding:18px;background:var(--panel);border:1px solid var(--line);border-radius:12px}
|
|
43
|
+
.page-section{padding:clamp(20px,4vw,38px);border:1px solid var(--line);border-radius:16px}.page-section--soft{background:#1a233d}.page-section--accent{background:#273b45}.page-section--dark{background:#0b1020;color:#fff}.page-section--dark a{color:var(--accent)}
|
|
44
|
+
.section-inner{max-width:780px;margin-inline:auto}.section-inner--wide{max-width:none}.section-inner--narrow{max-width:620px}.section-inner>h2{font-size:clamp(1.55rem,3vw,2.25rem);line-height:1.2}
|
|
45
|
+
.feature-section{margin:22px 0}.feature-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:14px}.link-list ul,.steps-widget ol,.privacy-service-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:12px;padding:0;list-style:none}.link-list li>a{font-weight:700}
|
|
46
|
+
.steps-widget h4{margin-top:0}.steps-widget ol{counter-reset:step}.steps-widget li{counter-increment:step}.steps-widget li:before{content:counter(step,decimal-leading-zero);color:var(--accent);font-weight:800}
|
|
47
|
+
.steps-widget pre,.code-widget pre{overflow:auto;padding:16px;background:#0d1221;border:1px solid var(--line);border-radius:12px}.code-widget figcaption{font-weight:700}
|
|
48
|
+
.table-widget{overflow-x:auto}.table-widget table{border-collapse:collapse;min-width:520px;width:100%;background:var(--panel)}.table-widget th,.table-widget td{border:1px solid var(--line);padding:9px 12px;text-align:left}.table-widget th{background:#263252}
|
|
49
|
+
.notice-widget{padding:16px 20px;border-left:4px solid var(--accent);background:var(--panel);border-radius:8px}.notice-widget--warning{border-color:var(--warm);background:#342a24}.notice-widget--success{border-color:#5ac98a;background:#1c332c}
|
|
50
|
+
.footer-navigation{display:flex;flex-direction:row;flex-wrap:wrap;gap:16px}.site-header--hidden,.brand--hidden,.primary-navigation--hidden,.locale-nav--hidden,.site-footer--hidden,.footer-copy--hidden,.footer-navigation--hidden{display:none!important}
|
|
51
|
+
.error-page{max-width:760px;margin:6vh auto;text-align:center;padding:clamp(28px,6vw,70px);background:linear-gradient(145deg,#202a48,#171e35);border:1px solid var(--line);border-radius:18px}.error-code{margin:0;color:var(--accent);font-size:clamp(4rem,14vw,9rem);font-weight:800;line-height:1}
|
|
52
|
+
@media(max-width:650px){.hero-block{grid-template-columns:1fr}}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
/* Page files define row column counts and then element types inside each column. */
|
|
56
|
+
.page-builder-row{display:grid;gap:clamp(16px,2.5vw,30px);align-items:start}
|
|
57
|
+
.page-builder-row[data-columns="1"]{grid-template-columns:minmax(0,1fr)}
|
|
58
|
+
.page-builder-row[data-columns="2"]{grid-template-columns:repeat(2,minmax(0,1fr))}
|
|
59
|
+
.page-builder-row[data-columns="3"]{grid-template-columns:repeat(3,minmax(0,1fr))}
|
|
60
|
+
.page-builder-row[data-columns="4"]{grid-template-columns:repeat(4,minmax(0,1fr))}
|
|
61
|
+
.page-builder-cell{min-width:0}
|
|
62
|
+
.page-builder-cell>.hero-block,.page-builder-cell>.page-section,.page-builder-cell>.feature-section,.page-builder-cell>.cta-block,.page-builder-cell>.faq-block,.page-builder-cell>.latest-posts{margin:0}
|
|
63
|
+
.display-text{font-size:clamp(1.8rem,5vw,4rem);line-height:1.08;letter-spacing:-.045em}
|
|
64
|
+
.display-text--serif{font-family:Georgia,"Iowan Old Style",serif;font-weight:500}
|
|
65
|
+
.display-text--mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:-.06em}
|
|
66
|
+
.display-text--accent{color:var(--accent)}
|
|
67
|
+
.display-text--outline{-webkit-text-stroke:1px currentColor;color:transparent}
|
|
68
|
+
.media-text-block{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:clamp(20px,4vw,48px)}
|
|
69
|
+
.media-text-block--right figure{order:2}
|
|
70
|
+
.media-text-block figure{min-width:0;margin:0}
|
|
71
|
+
.media-text-block img,.media-text-block video{display:block;width:100%;height:auto;max-height:640px;object-fit:cover;border-radius:var(--media-radius,14px)}
|
|
72
|
+
.media-text-block figcaption{margin-top:8px;color:var(--muted);font-size:.9rem}
|
|
73
|
+
.media-text-copy{max-width:62ch}
|
|
74
|
+
.media-text-copy h2{font-size:clamp(1.5rem,3vw,2.4rem);line-height:1.2}
|
|
75
|
+
.privacy-controller-details{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));gap:12px}
|
|
76
|
+
.privacy-controller-details>div{padding:14px;border:1px solid var(--line);border-radius:10px}
|
|
77
|
+
.privacy-controller-details dt{font-size:.85rem;color:var(--muted);font-weight:700}
|
|
78
|
+
.privacy-controller-details dd{margin:4px 0 0;overflow-wrap:anywhere}
|
|
79
|
+
@media(max-width:760px){.page-builder-row[data-columns="2"],.page-builder-row[data-columns="3"],.page-builder-row[data-columns="4"]{grid-template-columns:minmax(0,1fr)}.media-text-block{grid-template-columns:1fr}.media-text-block--right figure{order:0}}
|
|
80
|
+
|
|
81
|
+
.page-builder,.page-builder-row,.page-builder-cell,.hero-block,.hero-main,.hero-highlights{min-width:0}
|
|
82
|
+
.page-builder-row{width:100%}
|
|
83
|
+
.media-text-block,.media-text-block>*{min-width:0}
|
|
84
|
+
@media(max-width:760px){html,body{max-width:100%}.site-header,main,.site-footer{max-width:100%;min-width:0}.hero-block{grid-template-columns:minmax(0,1fr)}.hero-highlights{grid-template-columns:minmax(0,1fr)}}
|
|
85
|
+
|
|
86
|
+
/* Keep long article content and generated page widgets inside narrow viewports. */
|
|
87
|
+
html,body{width:100%;min-width:0;max-width:100%}
|
|
88
|
+
main,.page-builder,.page-builder-row,.page-builder-cell,.post,.post-content,.post-content>*{min-width:0;max-width:100%}
|
|
89
|
+
.post-content,.page-builder{overflow-wrap:anywhere}
|
|
90
|
+
.post-content img,.post-content video,.post-content iframe,.page-builder img,.page-builder video{max-width:100%;height:auto}
|
|
91
|
+
.post-content pre,.code-widget pre,.steps-widget pre{max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain}
|
|
92
|
+
.post-content table{display:block;width:100%;max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain}
|
|
93
|
+
.post-content th,.post-content td{overflow-wrap:anywhere}
|
|
94
|
+
.post-content blockquote{margin-inline:clamp(8px,3vw,32px)}
|
|
95
|
+
.post-content a,.post-content code,.meta,.tags{overflow-wrap:anywhere}
|
|
96
|
+
.site-header,.site-header nav,.locale-nav,.site-footer,.footer-navigation{min-width:0;max-width:100%;flex-wrap:wrap}
|
|
97
|
+
.site-header nav,.footer-navigation{row-gap:10px}
|
|
98
|
+
.local-search-page{max-width:760px;margin-inline:auto}
|
|
99
|
+
.local-search-form label{display:block;font-weight:700;margin-bottom:8px}
|
|
100
|
+
.local-search-controls{display:flex;gap:10px;min-width:0}
|
|
101
|
+
.local-search-controls input{flex:1 1 auto;min-width:0;padding:11px 12px;border:1px solid var(--line);border-radius:8px;font:inherit;background:#fff;color:var(--ink)}
|
|
102
|
+
.local-search-controls button{flex:0 0 auto;padding:10px 16px;border:0;border-radius:8px;background:var(--accent);color:#fff;font:inherit;font-weight:700;cursor:pointer}
|
|
103
|
+
.local-search-form :focus-visible{outline:3px solid #cb774d;outline-offset:3px}
|
|
104
|
+
.local-search-results{padding-inline-start:1.5rem}
|
|
105
|
+
.local-search-results>li{padding:14px 0;border-top:1px solid var(--line)}
|
|
106
|
+
.local-search-results h2{margin:0;font-size:1.25rem}
|
|
107
|
+
.local-search-results time{display:block;color:var(--muted);font-size:.9rem;margin-top:4px}
|
|
108
|
+
.local-search-results p{margin:8px 0 0}
|
|
109
|
+
.markdown-task-status{display:inline-block;min-width:1.35em;font-weight:800}
|
|
110
|
+
@media(max-width:620px){.local-search-controls{align-items:stretch;flex-direction:column}.local-search-controls button{min-height:44px}.post-content pre,.code-widget pre,.steps-widget pre{padding:12px}}
|
|
111
|
+
.locale-nav select{max-width:min(100%,13rem);padding:7px 30px 7px 10px;border:1px solid var(--line);border-radius:8px;background:var(--paper);color:var(--ink);font:inherit;cursor:pointer}
|
|
112
|
+
.locale-nav select:focus-visible{outline:3px solid #cb774d;outline-offset:3px}
|
|
113
|
+
@media(max-width:620px){.locale-nav select{min-height:42px;max-width:100%}}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<html lang="{{site.language}}">
|
|
2
|
+
<head>
|
|
3
|
+
{{> head}}
|
|
4
|
+
</head>
|
|
5
|
+
<body>
|
|
6
|
+
<a class="skip-link" href="#main">{{site.skipToContent}}</a>
|
|
7
|
+
{{> header}}
|
|
8
|
+
<main id="main">{{{page.content}}}</main>
|
|
9
|
+
{{> footer}}
|
|
10
|
+
<script defer src="/edgepress/language-select.js"></script>
|
|
11
|
+
</body>
|
|
12
|
+
</html>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<footer class="site-footer {{site.footerClass}}">
|
|
2
|
+
<p class="footer-copy {{site.footerCopyClass}}">{{site.footer}}</p>
|
|
3
|
+
<nav class="footer-navigation {{site.footerNavigationClass}}" aria-label="{{site.footerNavigationLabel}}">{{{site.footerNavigationHtml}}}</nav>
|
|
4
|
+
</footer>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<meta charset="utf-8">
|
|
2
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
3
|
+
<meta name="description" content="{{page.description}}">
|
|
4
|
+
<meta name="robots" content="{{page.robots}}">
|
|
5
|
+
<meta name="keywords" content="{{page.keywords}}">
|
|
6
|
+
<meta name="author" content="{{site.seo.author}}">
|
|
7
|
+
<title>{{page.title}}</title>
|
|
8
|
+
<link rel="canonical" href="{{page.canonical}}">
|
|
9
|
+
<meta property="og:type" content="website">
|
|
10
|
+
<meta property="og:title" content="{{page.title}}">
|
|
11
|
+
<meta property="og:description" content="{{page.description}}">
|
|
12
|
+
<meta property="og:url" content="{{page.canonical}}">
|
|
13
|
+
<meta property="og:image" content="{{page.image}}">
|
|
14
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
15
|
+
<link rel="alternate" type="application/atom+xml" href="{{site.feedPath}}" title="{{site.feedLabel}}">
|
|
16
|
+
<link rel="stylesheet" href="{{site.stylesheet}}">
|
|
17
|
+
<script type="application/ld+json">{{{page.jsonLd}}}</script>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<header class="signal-header site-header {{site.headerClass}}">
|
|
2
|
+
<a class="brand {{site.brandClass}}" href="{{site.homePath}}"><span class="signal-mark" aria-hidden="true"></span>{{site.headerBrand}}</a>
|
|
3
|
+
<nav class="primary-navigation {{site.primaryNavigationClass}}" aria-label="{{site.mainNavigationLabel}}">{{{site.primaryNavigationHtml}}}</nav>
|
|
4
|
+
<div class="locale-nav {{site.languageNavigationClass}}" role="group" aria-label="{{site.languageLabel}}">{{{site.localeLinksHtml}}}</div>
|
|
5
|
+
</header>
|
package/wrangler.jsonc
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// For the optional URL/token backend, add vars.BACKEND_URL (for example, https://api.example.org) and run `edgepress secret put BACKEND_TOKEN`.
|
|
2
|
+
{
|
|
3
|
+
"$schema": "./node_modules/wrangler/config-schema.json",
|
|
4
|
+
"name": "edgepress",
|
|
5
|
+
"main": "./src/worker.js",
|
|
6
|
+
"compatibility_date": "2026-09-24",
|
|
7
|
+
"assets": {
|
|
8
|
+
"directory": "./dist",
|
|
9
|
+
"binding": "ASSETS",
|
|
10
|
+
"html_handling": "auto-trailing-slash",
|
|
11
|
+
"run_worker_first": ["/api/*"]
|
|
12
|
+
}
|
|
13
|
+
}
|