Rust library to generate static websites
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: linting and formatting and stuff

+807 -585
+12
.oxfmtrc.json
··· 1 + { 2 + "$schema": "./node_modules/oxfmt/configuration_schema.json", 3 + "ignorePatterns": [ 4 + "node_modules", 5 + "dist", 6 + "pnpm-lock.yaml", 7 + "target", 8 + "benchmarks", 9 + "CHANGELOG.md" 10 + ], 11 + "useTabs": true 12 + }
+7
.oxlintrc.json
··· 1 + { 2 + "$schema": "./node_modules/oxlint/configuration_schema.json", 3 + "env": { 4 + "browser": true 5 + }, 6 + "ignorePatterns": ["dist", "node_modules"] 7 + }
-9
.vscode/settings.json
··· 1 - { 2 - "tailwindCSS.includeLanguages": { 3 - "rust": "html" 4 - }, 5 - "tailwindCSS.experimental.classRegex": [ 6 - ["[\\w-]+((?:\\.\\s*\\S+\\s*)*)", "\\.\"?([^.\"]+)\"?"] 7 - ], 8 - "biome.enabled": false 9 - }
+12 -12
CODE_OF_CONDUCT.md
··· 17 17 Examples of behavior that contributes to a positive environment for our 18 18 community include: 19 19 20 - * Demonstrating empathy and kindness toward other people 21 - * Being respectful of differing opinions, viewpoints, and experiences 22 - * Giving and gracefully accepting constructive feedback 23 - * Accepting responsibility and apologizing to those affected by our mistakes, 20 + - Demonstrating empathy and kindness toward other people 21 + - Being respectful of differing opinions, viewpoints, and experiences 22 + - Giving and gracefully accepting constructive feedback 23 + - Accepting responsibility and apologizing to those affected by our mistakes, 24 24 and learning from the experience 25 - * Focusing on what is best not just for us as individuals, but for the 25 + - Focusing on what is best not just for us as individuals, but for the 26 26 overall community 27 27 28 28 Examples of unacceptable behavior include: 29 29 30 - * The use of sexualized language or imagery, and sexual attention or 30 + - The use of sexualized language or imagery, and sexual attention or 31 31 advances of any kind 32 - * Trolling, insulting or derogatory comments, and personal or political attacks 33 - * Public or private harassment 34 - * Publishing others' private information, such as a physical or email 32 + - Trolling, insulting or derogatory comments, and personal or political attacks 33 + - Public or private harassment 34 + - Publishing others' private information, such as a physical or email 35 35 address, without their explicit permission 36 - * Other conduct which could reasonably be considered inappropriate in a 36 + - Other conduct which could reasonably be considered inappropriate in a 37 37 professional setting 38 38 39 39 ## Enforcement Responsibilities ··· 59 59 ## Enforcement 60 60 61 61 Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 - reported to the community leaders responsible for enforcement at 62 + reported to the community leaders responsible for enforcement at 63 63 princesseuh@proton.me or goulven.clech@protonmail.com . 64 64 All complaints will be reviewed and investigated promptly and fairly. 65 65 ··· 106 106 ### 4. Permanent Ban 107 107 108 108 **Community Impact**: Demonstrating a pattern of violation of community 109 - standards, including sustained inappropriate behavior, harassment of an 109 + standards, including sustained inappropriate behavior, harassment of an 110 110 individual, or aggression toward or disparagement of classes of individuals. 111 111 112 112 **Consequence**: A permanent ban from any sort of public interaction within
+2 -10
crates/maudit-cli/Cargo.toml
··· 13 13 chrono = "0.4.39" 14 14 colored = "2.2.0" 15 15 clap = { version = "4.5.23", features = ["derive"] } 16 - tokio = { version = "1", features = [ 17 - "macros", 18 - "rt-multi-thread", 19 - "signal", 20 - "process", 21 - ] } 16 + tokio = { version = "1", features = ["macros", "rt-multi-thread", "signal", "process"] } 22 17 axum = { version = "0.8.6", features = ["ws"] } 23 18 futures = "0.3" 24 19 tower-http = { version = "0.6.6", features = ["fs", "trace"] } 25 20 tracing = "0.1" 26 - tracing-subscriber = { version = "=0.3.19", features = [ 27 - "env-filter", 28 - "chrono", 29 - ] } 21 + tracing-subscriber = { version = "=0.3.19", features = ["env-filter", "chrono"] } 30 22 notify = "8.2.0" 31 23 notify-debouncer-full = "0.6.0" 32 24 inquire = "0.7.5"
+1 -3
crates/maudit-cli/js/overlay.ts
··· 70 70 } 71 71 72 72 export function clearErrorOverlay() { 73 - document 74 - .querySelectorAll<MauditErrorOverlay>(overlayTagName) 75 - .forEach((n) => n.close()); 73 + document.querySelectorAll<MauditErrorOverlay>(overlayTagName).forEach((n) => n.close()); 76 74 }
+1
crates/maudit-cli/js/utils.ts
··· 1 1 const ansiPattern = new RegExp( 2 + // oxlint-disable-next-line no-control-regex 2 3 "(?:\\u001B\\][\\s\\S]*?(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]", 3 4 "g", 4 5 );
-22
crates/maudit-cli/pnpm-lock.yaml
··· 1 - lockfileVersion: '9.0' 2 - 3 - settings: 4 - autoInstallPeers: true 5 - excludeLinksFromLockfile: false 6 - 7 - importers: 8 - 9 - .: 10 - dependencies: 11 - ansi_up: 12 - specifier: ^6.0.6 13 - version: 6.0.6 14 - 15 - packages: 16 - 17 - ansi_up@6.0.6: 18 - resolution: {integrity: sha512-yIa1x3Ecf8jWP4UWEunNjqNX6gzE4vg2gGz+xqRGY+TBSucnYp6RRdPV4brmtg6bQ1ljD48mZ5iGSEj7QEpRKA==} 19 - 20 - snapshots: 21 - 22 - ansi_up@6.0.6: {}
+11 -11
crates/maudit-cli/src/dev/404.html
··· 1 1 <!-- TODO: Make this prettier --> 2 - <!DOCTYPE html> 2 + <!doctype html> 3 3 <html lang="en"> 4 - <head> 5 - <meta charset="UTF-8" /> 6 - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 - <title>404 - Not Found</title> 8 - </head> 9 - <body> 10 - <h1>404</h1> 11 - <h2>Page not found</h2> 12 - <p>The page you're looking for doesn't exist or has been moved.</p> 13 - </body> 4 + <head> 5 + <meta charset="UTF-8" /> 6 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 + <title>404 - Not Found</title> 8 + </head> 9 + <body> 10 + <h1>404</h1> 11 + <h2>Page not found</h2> 12 + <p>The page you're looking for doesn't exist or has been moved.</p> 13 + </body> 14 14 </html>
+4
crates/maudit-cli/tsconfig.json
··· 1 + { 2 + "extends": "../../tsconfig.json", 3 + "include": ["js"], 4 + }
+3 -6
crates/maudit-macros/CHANGELOG.md
··· 17 17 ### Minor changes 18 18 19 19 - [2bfa8a8](https://github.com/bruits/maudit/commit/2bfa8a87212243b27c2231b836e7da9ec2cd3288) Rename (almost) all instances of Routes to Pages and vice versa. 20 - 20 + 21 21 Previously, in Maudit, a _page_ referred to the struct you'd pass to `coronate` and a page could have multiple routes if it was dynamic. In my opinion, the reverse is more intuitive: a _route_ is the struct you define, and a route can have multiple _pages_ if it's dynamic. This also applies to every other types that had "Route" or "Page" in their name. 22 - 22 + 23 23 As such, the following renames were made: 24 - 25 24 - `Route` -> `Page` 26 25 - `FullRoute` -> `FullPage` 27 26 - `RouteContext` -> `PageContext` ··· 29 28 - `Routes` -> `Pages` 30 29 - `fn routes` -> `fn pages` 31 30 - `maudit::page` -> `maudit::route` (including the prelude, which is now `maudit::route::prelude`) 32 - 31 + 33 32 And probably some others I forgot. — Thanks @Princesseuh! 34 - 35 33 36 34 ## 0.4.0 37 35 38 36 ### Minor changes 39 37 40 38 - [52eda9e](https://github.com/bruits/maudit/commit/52eda9ea4eac8efd3efd945d00f39a1b99f284ab) Update generated code to support returning properties in dynamic routes. — Thanks @Princesseuh! 41 -
+4
crates/maudit/tsconfig.json
··· 1 + { 2 + "extends": "../../tsconfig.json", 3 + "include": ["js"], 4 + }
-5
crates/oubli/CHANGELOG.md
··· 60 60 61 61 - Updated dependencies: maudit@0.6.2 62 62 63 - 64 63 ## 0.1.4 65 64 66 65 ### Patch changes 67 66 68 67 - Updated dependencies: maudit@0.6.1 69 - 70 68 71 69 ## 0.1.3 72 70 73 71 ### Patch changes 74 72 75 73 - Updated dependencies: maudit@0.6.0 76 - 77 74 78 75 ## 0.1.2 79 76 ··· 81 78 82 79 - Updated dependencies: maudit@0.5.1 83 80 84 - 85 81 ## 0.1.1 86 82 87 83 ### Patch changes 88 84 89 85 - Updated dependencies: maudit@0.5.0 90 -
+9 -5
examples/i18n/README.md
··· 35 35 ``` 36 36 37 37 This route is accessible at: 38 + 38 39 - `/about` - the base/default path 39 40 - `/en/about` - English variant 40 41 - `/sv/om-oss` - Swedish variant (using natural Swedish URL structure) ··· 62 63 Page::from_params(MixedParams { id: "phone".to_string() }), 63 64 ] 64 65 } 65 - 66 + 66 67 fn render(&self, ctx: &mut PageContext) -> impl Into<RenderResult> { 67 68 let params = ctx.params::<MixedParams>(); 68 69 // Render using params.id ··· 71 72 ``` 72 73 73 74 This generates only variant pages: 75 + 74 76 - `/en/products/laptop` and `/en/products/phone` 75 77 - `/sv/produkter/laptop` and `/sv/produkter/phone` 76 78 ··· 97 99 Page::from_params(ArticleParams { slug: "getting-started".to_string() }), 98 100 ] 99 101 } 100 - 102 + 101 103 fn render(&self, ctx: &mut PageContext) -> impl Into<RenderResult> { 102 104 let params = ctx.params::<ArticleParams>(); 103 105 // Render using params.slug ··· 106 108 ``` 107 109 108 110 This generates: 111 + 109 112 - `/articles/hello-world` and `/articles/getting-started` - base pages 110 113 - `/en/articles/hello-world` and `/en/articles/getting-started` - English variants 111 114 - `/sv/artiklar/hello-world` and `/sv/artiklar/getting-started` - Swedish variants (note the localized "artiklar" path segment) ··· 119 122 - `variants(&self) -> Vec<(String, String)>` - Get all variants as `(id, path)` tuples 120 123 121 124 Example: 125 + 122 126 ```rust 123 127 let about = About; 124 128 let variants = about.variants(); ··· 173 177 174 178 fn render(&self, ctx: &mut PageContext) -> impl Into<RenderResult> { 175 179 let params = ctx.params::<ArticleParams>(); 176 - 180 + 177 181 // Render differently based on variant 178 182 let greeting = match ctx.variant.as_deref() { 179 183 Some("en") => "Hello", ··· 181 185 None => "Hi", 182 186 _ => "?" 183 187 }; 184 - 188 + 185 189 format!("{}: {}", greeting, params.slug) 186 190 } 187 191 } ··· 211 215 16:38:08 pages generated 13 pages in 1ms 212 216 ``` 213 217 214 - Each variant is treated as a separate page with its own URL and output file. For dynamic routes, all pages are generated for each variant automatically. 218 + Each variant is treated as a separate page with its own URL and output file. For dynamic routes, all pages are generated for each variant automatically.
+1 -1
examples/kitchen-sink/data/script.js
··· 1 1 import { sayHello } from "./some_other_script.js"; 2 2 3 3 document.addEventListener("DOMContentLoaded", () => { 4 - sayHello(); 4 + sayHello(); 5 5 });
+2 -2
examples/kitchen-sink/data/some_other_script.js
··· 1 1 export function sayHello() { 2 - const world = "world"; 3 - console.log(`hello${world}`); 2 + const world = "world"; 3 + console.log(`hello${world}`); 4 4 }
+150 -150
examples/markdown-components/src/style.css
··· 1 1 /* Reset and base styles */ 2 2 * { 3 - box-sizing: border-box; 3 + box-sizing: border-box; 4 4 } 5 5 body { 6 - margin: 0; 7 - padding: 0; 8 - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, 9 - "Helvetica Neue", Arial, sans-serif; 10 - line-height: 1.6; 11 - color: #333; 12 - min-height: 100vh; 6 + margin: 0; 7 + padding: 0; 8 + font-family: 9 + -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; 10 + line-height: 1.6; 11 + color: #333; 12 + min-height: 100vh; 13 13 } 14 14 15 15 /* Layout */ 16 16 .container { 17 - max-width: 1024px; 18 - margin: 0 auto; 19 - padding: 48px 24px; 17 + max-width: 1024px; 18 + margin: 0 auto; 19 + padding: 48px 24px; 20 20 } 21 21 22 22 .header { 23 - text-align: center; 24 - margin-bottom: 48px; 23 + text-align: center; 24 + margin-bottom: 48px; 25 25 } 26 26 27 27 .header h1 { 28 - font-size: 2.5rem; 29 - font-weight: bold; 30 - color: #1a1a1a; 31 - margin: 0 0 16px 0; 28 + font-size: 2.5rem; 29 + font-weight: bold; 30 + color: #1a1a1a; 31 + margin: 0 0 16px 0; 32 32 } 33 33 34 34 .header p { 35 - font-size: 1.25rem; 36 - color: #666; 37 - margin: 0; 35 + font-size: 1.25rem; 36 + color: #666; 37 + margin: 0; 38 38 } 39 39 40 40 .footer { 41 - margin-top: 48px; 42 - text-align: center; 43 - color: #888; 41 + margin-top: 48px; 42 + text-align: center; 43 + color: #888; 44 44 } 45 45 46 46 /* Component styles */ 47 47 .prose { 48 - font-size: 1.125rem; 49 - color: #374151; 50 - line-height: 1.75; 48 + font-size: 1.125rem; 49 + color: #374151; 50 + line-height: 1.75; 51 51 } 52 52 53 53 /* Heading styles */ 54 54 .anchor-link { 55 - opacity: 0; 56 - transition: opacity 0.2s; 57 - text-decoration: none; 58 - color: #ba1f33; 55 + opacity: 0; 56 + transition: opacity 0.2s; 57 + text-decoration: none; 58 + color: #ba1f33; 59 59 } 60 60 h1:hover .anchor-link, 61 61 h2:hover .anchor-link, ··· 63 63 h4:hover .anchor-link, 64 64 h5:hover .anchor-link, 65 65 h6:hover .anchor-link { 66 - opacity: 1; 66 + opacity: 1; 67 67 } 68 68 69 69 /* Link styles */ 70 70 .external-link { 71 - color: #ba1f33; 72 - text-decoration: none; 71 + color: #ba1f33; 72 + text-decoration: none; 73 73 } 74 74 .external-link:hover { 75 - text-decoration: underline; 75 + text-decoration: underline; 76 76 } 77 77 .external-link::after { 78 - content: "↗"; 79 - color: #ba1f33; 78 + content: "↗"; 79 + color: #ba1f33; 80 80 } 81 81 82 82 .internal-link { 83 - color: #ba1f33; 84 - text-decoration: none; 83 + color: #ba1f33; 84 + text-decoration: none; 85 85 } 86 86 .internal-link:hover { 87 - text-decoration: underline; 87 + text-decoration: underline; 88 88 } 89 89 90 90 /* Image styles */ 91 91 .image-wrapper { 92 - margin: 24px 0; 93 - text-align: center; 92 + margin: 24px 0; 93 + text-align: center; 94 94 } 95 95 .responsive-image { 96 - max-width: 100%; 97 - height: auto; 98 - border-radius: 8px; 99 - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); 96 + max-width: 100%; 97 + height: auto; 98 + border-radius: 8px; 99 + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); 100 100 } 101 101 .image-wrapper figcaption { 102 - margin-top: 8px; 103 - font-style: italic; 104 - color: #666; 105 - font-size: 0.9rem; 102 + margin-top: 8px; 103 + font-style: italic; 104 + color: #666; 105 + font-size: 0.9rem; 106 106 } 107 107 108 108 /* Strong and emphasis */ 109 109 .gradient-text { 110 - font-weight: bold; 111 - background: linear-gradient(to right, #ba1f33, #fa3252); 112 - -webkit-background-clip: text; 113 - -webkit-text-fill-color: transparent; 114 - background-clip: text; 110 + font-weight: bold; 111 + background: linear-gradient(to right, #ba1f33, #fa3252); 112 + -webkit-background-clip: text; 113 + -webkit-text-fill-color: transparent; 114 + background-clip: text; 115 115 } 116 116 117 117 .emphasis-text { 118 - font-style: italic; 119 - color: #ba1f33; 118 + font-style: italic; 119 + color: #ba1f33; 120 120 } 121 121 122 122 /* Code styles */ 123 123 .inline-code { 124 - background-color: #f3f4f6; 125 - color: #dc2626; 126 - padding: 2px 4px; 127 - border-radius: 4px; 128 - font-family: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, 129 - "Courier New", monospace; 130 - font-size: 0.875rem; 124 + background-color: #f3f4f6; 125 + color: #dc2626; 126 + padding: 2px 4px; 127 + border-radius: 4px; 128 + font-family: 129 + "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace; 130 + font-size: 0.875rem; 131 131 } 132 132 133 133 /* Code blocks */ 134 134 pre { 135 - background-color: #1a202c; 136 - color: #e2e8f0; 137 - padding: 16px; 138 - border-radius: 8px; 139 - overflow-x: auto; 140 - margin: 16px 0; 141 - border: 1px solid #2d3748; 135 + background-color: #1a202c; 136 + color: #e2e8f0; 137 + padding: 16px; 138 + border-radius: 8px; 139 + overflow-x: auto; 140 + margin: 16px 0; 141 + border: 1px solid #2d3748; 142 142 } 143 143 144 144 pre code { 145 - background: none; 146 - color: inherit; 147 - padding: 0; 148 - border-radius: 0; 149 - font-family: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, 150 - "Courier New", monospace; 151 - font-size: 0.875rem; 152 - line-height: 1.5; 145 + background: none; 146 + color: inherit; 147 + padding: 0; 148 + border-radius: 0; 149 + font-family: 150 + "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace; 151 + font-size: 0.875rem; 152 + line-height: 1.5; 153 153 } 154 154 155 155 /* Blockquote styles */ ··· 158 158 .blockquote-warning, 159 159 .blockquote-important, 160 160 .blockquote-caution { 161 - padding: 16px; 162 - margin: 16px 0; 163 - border-radius: 8px; 164 - display: flex; 165 - align-items: center; 166 - gap: 12px; 161 + padding: 16px; 162 + margin: 16px 0; 163 + border-radius: 8px; 164 + display: flex; 165 + align-items: center; 166 + gap: 12px; 167 167 } 168 168 169 169 .blockquote-note { 170 - border-left: 4px solid #3b82f6; 171 - background-color: #eff6ff; 170 + border-left: 4px solid #3b82f6; 171 + background-color: #eff6ff; 172 172 } 173 173 .blockquote-tip { 174 - border-left: 4px solid #10b981; 175 - background-color: #f0fdf4; 174 + border-left: 4px solid #10b981; 175 + background-color: #f0fdf4; 176 176 } 177 177 .blockquote-warning { 178 - border-left: 4px solid #f59e0b; 179 - background-color: #fffbeb; 178 + border-left: 4px solid #f59e0b; 179 + background-color: #fffbeb; 180 180 } 181 181 .blockquote-important { 182 - border-left: 4px solid #8b5cf6; 183 - background-color: #faf5ff; 182 + border-left: 4px solid #8b5cf6; 183 + background-color: #faf5ff; 184 184 } 185 185 .blockquote-caution { 186 - border-left: 4px solid #ef4444; 187 - background-color: #fef2f2; 186 + border-left: 4px solid #ef4444; 187 + background-color: #fef2f2; 188 188 } 189 189 .blockquote-default { 190 - border-left: 4px solid #9ca3af; 191 - background-color: #f9fafb; 192 - padding: 16px; 193 - margin: 16px 0; 194 - font-style: italic; 195 - border-radius: 8px; 190 + border-left: 4px solid #9ca3af; 191 + background-color: #f9fafb; 192 + padding: 16px; 193 + margin: 16px 0; 194 + font-style: italic; 195 + border-radius: 8px; 196 196 } 197 197 198 198 .blockquote-icon { 199 - font-size: 1.2em; 200 - line-height: 1; 201 - flex-shrink: 0; 202 - display: flex; 203 - align-items: center; 204 - justify-content: center; 199 + font-size: 1.2em; 200 + line-height: 1; 201 + flex-shrink: 0; 202 + display: flex; 203 + align-items: center; 204 + justify-content: center; 205 205 } 206 206 207 207 .blockquote-content { 208 - flex: 1; 209 - margin: 0; 208 + flex: 1; 209 + margin: 0; 210 210 } 211 211 212 212 .blockquote-content p { 213 - margin: 0; 213 + margin: 0; 214 214 } 215 215 216 216 /* List styles */ 217 217 .custom-list { 218 - margin: 16px 0; 219 - padding-left: 16px; 218 + margin: 16px 0; 219 + padding-left: 16px; 220 220 } 221 221 .custom-list li { 222 - margin: 8px 0; 223 - color: #374151; 224 - transition: color 0.2s; 222 + margin: 8px 0; 223 + color: #374151; 224 + transition: color 0.2s; 225 225 } 226 226 .custom-list li:hover { 227 - color: #1f2937; 227 + color: #1f2937; 228 228 } 229 229 230 230 /* Strikethrough */ 231 231 .strikethrough { 232 - text-decoration: line-through; 233 - color: #6b7280; 234 - opacity: 0.75; 232 + text-decoration: line-through; 233 + color: #6b7280; 234 + opacity: 0.75; 235 235 } 236 236 237 237 /* Task list */ 238 238 .task-checkbox { 239 - margin-right: 8px; 239 + margin-right: 8px; 240 240 } 241 241 .task-checkbox[checked] { 242 - accent-color: #ba1f33; 242 + accent-color: #ba1f33; 243 243 } 244 244 245 245 /* Table styles */ 246 246 .custom-table { 247 - width: 100%; 248 - border-collapse: separate; 249 - border-spacing: 0; 250 - border: 1px solid #d1d5db; 251 - border-radius: 8px; 252 - overflow: hidden; 253 - margin: 24px 0; 247 + width: 100%; 248 + border-collapse: separate; 249 + border-spacing: 0; 250 + border: 1px solid #d1d5db; 251 + border-radius: 8px; 252 + overflow: hidden; 253 + margin: 24px 0; 254 254 } 255 255 256 256 .table-header { 257 - background-color: #f9fafb; 257 + background-color: #f9fafb; 258 258 } 259 259 260 260 .table-header th { 261 - padding: 12px 24px; 262 - text-align: left; 263 - font-size: 0.75rem; 264 - font-weight: 500; 265 - color: #6b7280; 266 - text-transform: uppercase; 267 - letter-spacing: 0.05em; 261 + padding: 12px 24px; 262 + text-align: left; 263 + font-size: 0.75rem; 264 + font-weight: 500; 265 + color: #6b7280; 266 + text-transform: uppercase; 267 + letter-spacing: 0.05em; 268 268 } 269 269 270 270 .table-row { 271 - transition: background-color 0.2s; 271 + transition: background-color 0.2s; 272 272 } 273 273 .table-row:hover { 274 - background-color: #f9fafb; 274 + background-color: #f9fafb; 275 275 } 276 276 277 277 .table-cell { 278 - padding: 12px 24px; 279 - white-space: nowrap; 280 - font-size: 0.875rem; 281 - color: #1f2937; 278 + padding: 12px 24px; 279 + white-space: nowrap; 280 + font-size: 0.875rem; 281 + color: #1f2937; 282 282 } 283 283 284 284 .table-cell.center { 285 - text-align: center; 285 + text-align: center; 286 286 } 287 287 .table-cell.right { 288 - text-align: right; 288 + text-align: right; 289 289 } 290 290 291 291 /* Horizontal rule */ 292 292 .custom-hr { 293 - margin: 32px 0; 294 - border: none; 295 - height: 2px; 296 - background: linear-gradient(to right, #ba1f33, #fa3252); 293 + margin: 32px 0; 294 + border: none; 295 + height: 2px; 296 + background: linear-gradient(to right, #ba1f33, #fa3252); 297 297 } 298 298 299 299 /* Hard break */ 300 300 .hard-break { 301 - display: block; 302 - content: ""; 303 - margin: 8px 0; 301 + display: block; 302 + content: ""; 303 + margin: 8px 0; 304 304 }
-2
netlify.toml
··· 1 - [[plugins]] 2 - package = "netlify-plugin-debug-cache"
+12 -6
package.json
··· 1 1 { 2 2 "name": "root", 3 + "private": true, 3 4 "type": "module", 4 - "private": true, 5 - "packageManager": "pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c", 5 + "scripts": { 6 + "lint": "oxlint", 7 + "lint:fix": "oxlint --fix", 8 + "format": "oxfmt", 9 + "format:check": "oxfmt --check" 10 + }, 6 11 "dependencies": { 7 - "@tailwindcss/cli": "^4.0.0", 8 - "tailwindcss": "^4.0.0" 12 + "@tailwindcss/cli": "^4.1.18", 13 + "tailwindcss": "^4.1.18" 9 14 }, 10 15 "devDependencies": { 11 - "netlify-plugin-debug-cache": "^1.0.4", 12 - "typescript": "^5.9.2" 16 + "oxfmt": "^0.23.0", 17 + "oxlint": "^1.38.0", 18 + "typescript": "^5.9.3" 13 19 } 14 20 }
+444 -203
pnpm-lock.yaml
··· 9 9 .: 10 10 dependencies: 11 11 '@tailwindcss/cli': 12 - specifier: ^4.0.0 13 - version: 4.0.0 12 + specifier: ^4.1.18 13 + version: 4.1.18 14 14 tailwindcss: 15 - specifier: ^4.0.0 16 - version: 4.0.0 17 - thumbhash: 18 - specifier: ^0.1.1 19 - version: 0.1.1 15 + specifier: ^4.1.18 16 + version: 4.1.18 20 17 devDependencies: 21 - netlify-plugin-debug-cache: 22 - specifier: ^1.0.4 23 - version: 1.0.4 18 + oxfmt: 19 + specifier: ^0.23.0 20 + version: 0.23.0 21 + oxlint: 22 + specifier: ^1.38.0 23 + version: 1.38.0 24 24 typescript: 25 - specifier: ^5.9.2 26 - version: 5.9.2 25 + specifier: ^5.9.3 26 + version: 5.9.3 27 + 28 + crates/maudit-cli: 29 + dependencies: 30 + ansi_up: 31 + specifier: ^6.0.6 32 + version: 6.0.6 27 33 28 34 packages: 29 35 30 - '@parcel/watcher-android-arm64@2.5.0': 31 - resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} 36 + '@jridgewell/gen-mapping@0.3.13': 37 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 38 + 39 + '@jridgewell/remapping@2.3.5': 40 + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 41 + 42 + '@jridgewell/resolve-uri@3.1.2': 43 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 44 + engines: {node: '>=6.0.0'} 45 + 46 + '@jridgewell/sourcemap-codec@1.5.5': 47 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 48 + 49 + '@jridgewell/trace-mapping@0.3.31': 50 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 51 + 52 + '@oxfmt/darwin-arm64@0.23.0': 53 + resolution: {integrity: sha512-shGng2EjBspvuqtFtcjcKf0WoZ9QCdL8iLYgdOoKSiSQ9pPyLJ4jQf62yhm4b2PpZNVcV/20gV6d8SyKzg6SZQ==} 54 + cpu: [arm64] 55 + os: [darwin] 56 + 57 + '@oxfmt/darwin-x64@0.23.0': 58 + resolution: {integrity: sha512-DxQ7Hm7B+6JiIkiRU3CSJmM15nTJDDezyaAv+x9NN8BfU0C49O8JuZIFu1Lr9AKEPV+ECIYM2X4HU0xm6IdiMQ==} 59 + cpu: [x64] 60 + os: [darwin] 61 + 62 + '@oxfmt/linux-arm64-gnu@0.23.0': 63 + resolution: {integrity: sha512-7qTXPpENi45sEKsaYFit4VRywPVkX+ZJc5JVA17KW1coJ/SLUuRAdLjRipU+QTZsr1TF93HCmGFSlUjB7lmEVQ==} 64 + cpu: [arm64] 65 + os: [linux] 66 + 67 + '@oxfmt/linux-arm64-musl@0.23.0': 68 + resolution: {integrity: sha512-qkFXbf+K01B++j69o9mLvvyfhmmL4+qX7hGPA2PRDkE5xxuUTWdqboQQc1FgGI0teUlIYYyxjamq9UztL2A7NA==} 69 + cpu: [arm64] 70 + os: [linux] 71 + 72 + '@oxfmt/linux-x64-gnu@0.23.0': 73 + resolution: {integrity: sha512-J7Q13Ujyn8IgjHD96urA377GOy8HerxC13OrEyYaM8iwH3gc/EoboK9AKu0bxp9qai4btPFDhnkRnpCwJE9pAw==} 74 + cpu: [x64] 75 + os: [linux] 76 + 77 + '@oxfmt/linux-x64-musl@0.23.0': 78 + resolution: {integrity: sha512-3gb25Zk2/y4An8fi399KdpLkDYFTJEB5Nq/sSHmeXG0pZlR/jnKoXEFHsjU+9nqF2wsuZ+tmkoi/swcaGG8+Qg==} 79 + cpu: [x64] 80 + os: [linux] 81 + 82 + '@oxfmt/win32-arm64@0.23.0': 83 + resolution: {integrity: sha512-JKfRP2ENWwRZ73rMZFyChvRi/+oDEW+3obp1XIwecot8gvDHgGZ4nX3hTp4VPiBFL89JORMpWSKzJvjRDucJIw==} 84 + cpu: [arm64] 85 + os: [win32] 86 + 87 + '@oxfmt/win32-x64@0.23.0': 88 + resolution: {integrity: sha512-vgqtYK1X1n/KexCNQKWXao3hyOnmWuCzk2sQyCSpkLhjSNIDPm7dmnEkvOXhf1t0O5RjCwHpk2VB6Fuaq3GULg==} 89 + cpu: [x64] 90 + os: [win32] 91 + 92 + '@oxlint/darwin-arm64@1.38.0': 93 + resolution: {integrity: sha512-9rN3047QTyA4i73FKikDUBdczRcLtOsIwZ5TsEx5Q7jr5nBjolhYQOFQf9QdhBLdInxw1iX4+lgdMCf1g74zjg==} 94 + cpu: [arm64] 95 + os: [darwin] 96 + 97 + '@oxlint/darwin-x64@1.38.0': 98 + resolution: {integrity: sha512-Y1UHW4KOlg5NvyrSn/bVBQP8/LRuid7Pnu+BWGbAVVsFcK0b565YgMSO3Eu9nU3w8ke91dr7NFpUmS+bVkdkbw==} 99 + cpu: [x64] 100 + os: [darwin] 101 + 102 + '@oxlint/linux-arm64-gnu@1.38.0': 103 + resolution: {integrity: sha512-ZiVxPZizlXSnAMdkEFWX/mAj7U3bNiku8p6I9UgLrXzgGSSAhFobx8CaFGwVoKyWOd+gQgZ/ogCrunvx2k0CFg==} 104 + cpu: [arm64] 105 + os: [linux] 106 + 107 + '@oxlint/linux-arm64-musl@1.38.0': 108 + resolution: {integrity: sha512-ELtlCIGZ72A65ATZZHFxHMFrkRtY+DYDCKiNKg6v7u5PdeOFey+OlqRXgXtXlxWjCL+g7nivwI2FPVsWqf05Qw==} 109 + cpu: [arm64] 110 + os: [linux] 111 + 112 + '@oxlint/linux-x64-gnu@1.38.0': 113 + resolution: {integrity: sha512-E1OcDh30qyng1m0EIlsOuapYkqk5QB6o6IMBjvDKqIoo6IrjlVAasoJfS/CmSH998gXRL3BcAJa6Qg9IxPFZnQ==} 114 + cpu: [x64] 115 + os: [linux] 116 + 117 + '@oxlint/linux-x64-musl@1.38.0': 118 + resolution: {integrity: sha512-4AfpbM/4sQnr6S1dMijEPfsq4stQbN5vJ2jsahSy/QTcvIVbFkgY+RIhrA5UWlC6eb0rD5CdaPQoKGMJGeXpYw==} 119 + cpu: [x64] 120 + os: [linux] 121 + 122 + '@oxlint/win32-arm64@1.38.0': 123 + resolution: {integrity: sha512-OvUVYdI68OwXh3d1RjH9N/okCxb6PrOGtEtzXyqGA7Gk+IxyZcX0/QCTBwV8FNbSSzDePSSEHOKpoIB+VXdtvg==} 124 + cpu: [arm64] 125 + os: [win32] 126 + 127 + '@oxlint/win32-x64@1.38.0': 128 + resolution: {integrity: sha512-7IuZMYiZiOcgg5zHvpJY6jRlEwh8EB/uq7GsoQJO9hANq96TIjyntGByhIjFSsL4asyZmhTEki+MO/u5Fb/WQA==} 129 + cpu: [x64] 130 + os: [win32] 131 + 132 + '@parcel/watcher-android-arm64@2.5.1': 133 + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} 32 134 engines: {node: '>= 10.0.0'} 33 135 cpu: [arm64] 34 136 os: [android] 35 137 36 - '@parcel/watcher-darwin-arm64@2.5.0': 37 - resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} 138 + '@parcel/watcher-darwin-arm64@2.5.1': 139 + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} 38 140 engines: {node: '>= 10.0.0'} 39 141 cpu: [arm64] 40 142 os: [darwin] 41 143 42 - '@parcel/watcher-darwin-x64@2.5.0': 43 - resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} 144 + '@parcel/watcher-darwin-x64@2.5.1': 145 + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} 44 146 engines: {node: '>= 10.0.0'} 45 147 cpu: [x64] 46 148 os: [darwin] 47 149 48 - '@parcel/watcher-freebsd-x64@2.5.0': 49 - resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} 150 + '@parcel/watcher-freebsd-x64@2.5.1': 151 + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} 50 152 engines: {node: '>= 10.0.0'} 51 153 cpu: [x64] 52 154 os: [freebsd] 53 155 54 - '@parcel/watcher-linux-arm-glibc@2.5.0': 55 - resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} 156 + '@parcel/watcher-linux-arm-glibc@2.5.1': 157 + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} 56 158 engines: {node: '>= 10.0.0'} 57 159 cpu: [arm] 58 160 os: [linux] 59 161 60 - '@parcel/watcher-linux-arm-musl@2.5.0': 61 - resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} 162 + '@parcel/watcher-linux-arm-musl@2.5.1': 163 + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} 62 164 engines: {node: '>= 10.0.0'} 63 165 cpu: [arm] 64 166 os: [linux] 65 167 66 - '@parcel/watcher-linux-arm64-glibc@2.5.0': 67 - resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} 168 + '@parcel/watcher-linux-arm64-glibc@2.5.1': 169 + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} 68 170 engines: {node: '>= 10.0.0'} 69 171 cpu: [arm64] 70 172 os: [linux] 71 173 72 - '@parcel/watcher-linux-arm64-musl@2.5.0': 73 - resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} 174 + '@parcel/watcher-linux-arm64-musl@2.5.1': 175 + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} 74 176 engines: {node: '>= 10.0.0'} 75 177 cpu: [arm64] 76 178 os: [linux] 77 179 78 - '@parcel/watcher-linux-x64-glibc@2.5.0': 79 - resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} 180 + '@parcel/watcher-linux-x64-glibc@2.5.1': 181 + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} 80 182 engines: {node: '>= 10.0.0'} 81 183 cpu: [x64] 82 184 os: [linux] 83 185 84 - '@parcel/watcher-linux-x64-musl@2.5.0': 85 - resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} 186 + '@parcel/watcher-linux-x64-musl@2.5.1': 187 + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} 86 188 engines: {node: '>= 10.0.0'} 87 189 cpu: [x64] 88 190 os: [linux] 89 191 90 - '@parcel/watcher-win32-arm64@2.5.0': 91 - resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} 192 + '@parcel/watcher-win32-arm64@2.5.1': 193 + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} 92 194 engines: {node: '>= 10.0.0'} 93 195 cpu: [arm64] 94 196 os: [win32] 95 197 96 - '@parcel/watcher-win32-ia32@2.5.0': 97 - resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} 198 + '@parcel/watcher-win32-ia32@2.5.1': 199 + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} 98 200 engines: {node: '>= 10.0.0'} 99 201 cpu: [ia32] 100 202 os: [win32] 101 203 102 - '@parcel/watcher-win32-x64@2.5.0': 103 - resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} 204 + '@parcel/watcher-win32-x64@2.5.1': 205 + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} 104 206 engines: {node: '>= 10.0.0'} 105 207 cpu: [x64] 106 208 os: [win32] 107 209 108 - '@parcel/watcher@2.5.0': 109 - resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} 210 + '@parcel/watcher@2.5.1': 211 + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} 110 212 engines: {node: '>= 10.0.0'} 111 213 112 - '@tailwindcss/cli@4.0.0': 113 - resolution: {integrity: sha512-nh6kzSTalHf9yk6WNsS4MMZakSINsncNQXsSJthvcPI4x+yajEaNQvS2uUti3PGLbsmlGoUvjhnGTBpzh7H0bA==} 214 + '@tailwindcss/cli@4.1.18': 215 + resolution: {integrity: sha512-sMZ+lZbDyxwjD2E0L7oRUjJ01Ffjtme5OtjvvnC+cV4CEDcbqzbp25TCpxHj6kWLU9+DlqJOiNgSOgctC2aZmg==} 114 216 hasBin: true 115 217 116 - '@tailwindcss/node@4.0.0': 117 - resolution: {integrity: sha512-tfG2uBvo6j6kDIPmntxwXggCOZAt7SkpAXJ6pTIYirNdk5FBqh/CZZ9BZPpgcl/tNFLs6zc4yghM76sqiELG9g==} 218 + '@tailwindcss/node@4.1.18': 219 + resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} 118 220 119 - '@tailwindcss/oxide-android-arm64@4.0.0': 120 - resolution: {integrity: sha512-EAhjU0+FIdyGPR+7MbBWubLLPtmOu+p7c2egTTFBRk/n//zYjNvVK0WhcBK5Y7oUB5mo4EjA2mCbY7dcEMWSRw==} 221 + '@tailwindcss/oxide-android-arm64@4.1.18': 222 + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} 121 223 engines: {node: '>= 10'} 122 224 cpu: [arm64] 123 225 os: [android] 124 226 125 - '@tailwindcss/oxide-darwin-arm64@4.0.0': 126 - resolution: {integrity: sha512-hdz4xnSWS11cIp+7ye+3dGHqs0X33z+BXXTtgPOguDWVa+TdXUzwxonklSzf5wlJFuot3dv5eWzhlNai0oYYQg==} 227 + '@tailwindcss/oxide-darwin-arm64@4.1.18': 228 + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} 127 229 engines: {node: '>= 10'} 128 230 cpu: [arm64] 129 231 os: [darwin] 130 232 131 - '@tailwindcss/oxide-darwin-x64@4.0.0': 132 - resolution: {integrity: sha512-+dOUUaXTkPKKhtUI9QtVaYg+MpmLh2CN0dHohiYXaBirEyPMkjaT0zbRgzQlNnQWjCVVXPQluIEb0OMEjSTH+Q==} 233 + '@tailwindcss/oxide-darwin-x64@4.1.18': 234 + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} 133 235 engines: {node: '>= 10'} 134 236 cpu: [x64] 135 237 os: [darwin] 136 238 137 - '@tailwindcss/oxide-freebsd-x64@4.0.0': 138 - resolution: {integrity: sha512-CJhGDhxnrmu4SwyC62fA+wP24MhA/TZlIhRHqg1kRuIHoGoVR2uSSm1qxTxU37tSSZj8Up0q6jsBJCAP4k7rgQ==} 239 + '@tailwindcss/oxide-freebsd-x64@4.1.18': 240 + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} 139 241 engines: {node: '>= 10'} 140 242 cpu: [x64] 141 243 os: [freebsd] 142 244 143 - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.0': 144 - resolution: {integrity: sha512-Wy7Av0xzXfY2ujZBcYy4+7GQm25/J1iHvlQU2CfwdDCuPWfIjYzR6kggz+uVdSJyKV2s64znchBxRE8kV4uXSA==} 245 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': 246 + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} 145 247 engines: {node: '>= 10'} 146 248 cpu: [arm] 147 249 os: [linux] 148 250 149 - '@tailwindcss/oxide-linux-arm64-gnu@4.0.0': 150 - resolution: {integrity: sha512-srwBo2l6pvM0swBntc1ucuhGsfFOLkqPRFQ3dWARRTfSkL1U9nAsob2MKc/n47Eva/W9pZZgMOuf7rDw8pK1Ew==} 251 + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': 252 + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} 151 253 engines: {node: '>= 10'} 152 254 cpu: [arm64] 153 255 os: [linux] 154 256 155 - '@tailwindcss/oxide-linux-arm64-musl@4.0.0': 156 - resolution: {integrity: sha512-abhusswkduYWuezkBmgo0K0/erGq3M4Se5xP0fhc/0dKs0X/rJUYYCFWntHb3IGh3aVzdQ0SXJs93P76DbUqtw==} 257 + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': 258 + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} 157 259 engines: {node: '>= 10'} 158 260 cpu: [arm64] 159 261 os: [linux] 160 262 161 - '@tailwindcss/oxide-linux-x64-gnu@4.0.0': 162 - resolution: {integrity: sha512-hGtRYIUEx377/HlU49+jvVKKwU1MDSKYSMMs0JFO2Wp7LGxk5+0j5+RBk9NFnmp/lbp32yPTgIOO5m1BmDq36A==} 263 + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': 264 + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} 163 265 engines: {node: '>= 10'} 164 266 cpu: [x64] 165 267 os: [linux] 166 268 167 - '@tailwindcss/oxide-linux-x64-musl@4.0.0': 168 - resolution: {integrity: sha512-7xgQgSAThs0I14VAgmxpJnK6XFSZBxHMGoDXkLyYkEnu+8WRQMbCP93dkCUn2PIv+Q+JulRgc00PJ09uORSLXQ==} 269 + '@tailwindcss/oxide-linux-x64-musl@4.1.18': 270 + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} 169 271 engines: {node: '>= 10'} 170 272 cpu: [x64] 171 273 os: [linux] 172 274 173 - '@tailwindcss/oxide-win32-arm64-msvc@4.0.0': 174 - resolution: {integrity: sha512-qEcgTIPcWY5ZE7f6VxQ/JPrSFMcehzVIlZj7sGE3mVd5YWreAT+Fl1vSP8q2pjnWXn0avZG3Iw7a2hJQAm+fTQ==} 275 + '@tailwindcss/oxide-wasm32-wasi@4.1.18': 276 + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} 277 + engines: {node: '>=14.0.0'} 278 + cpu: [wasm32] 279 + bundledDependencies: 280 + - '@napi-rs/wasm-runtime' 281 + - '@emnapi/core' 282 + - '@emnapi/runtime' 283 + - '@tybys/wasm-util' 284 + - '@emnapi/wasi-threads' 285 + - tslib 286 + 287 + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': 288 + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} 175 289 engines: {node: '>= 10'} 176 290 cpu: [arm64] 177 291 os: [win32] 178 292 179 - '@tailwindcss/oxide-win32-x64-msvc@4.0.0': 180 - resolution: {integrity: sha512-bqT0AY8RXb8GMDy28JtngvqaOSB2YixbLPLvUo6I6lkvvUwA6Eqh2Tj60e2Lh7O/k083f8tYiB0WEK4wmTI7Jg==} 293 + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': 294 + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} 181 295 engines: {node: '>= 10'} 182 296 cpu: [x64] 183 297 os: [win32] 184 298 185 - '@tailwindcss/oxide@4.0.0': 186 - resolution: {integrity: sha512-W3FjpJgy4VV1JiL7iBYDf2n/WkeDg1Il+0Q7eWnqPyvkPPCo/Mbwc5BiaT7dfBNV6tQKAhVE34rU5xl8pSl50w==} 299 + '@tailwindcss/oxide@4.1.18': 300 + resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} 187 301 engines: {node: '>= 10'} 302 + 303 + ansi_up@6.0.6: 304 + resolution: {integrity: sha512-yIa1x3Ecf8jWP4UWEunNjqNX6gzE4vg2gGz+xqRGY+TBSucnYp6RRdPV4brmtg6bQ1ljD48mZ5iGSEj7QEpRKA==} 188 305 189 306 braces@3.0.3: 190 307 resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} ··· 195 312 engines: {node: '>=0.10'} 196 313 hasBin: true 197 314 198 - enhanced-resolve@5.18.0: 199 - resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} 315 + detect-libc@2.1.2: 316 + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 317 + engines: {node: '>=8'} 318 + 319 + enhanced-resolve@5.18.4: 320 + resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} 200 321 engines: {node: '>=10.13.0'} 201 322 202 323 fill-range@7.1.1: ··· 218 339 resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 219 340 engines: {node: '>=0.12.0'} 220 341 221 - jiti@2.4.2: 222 - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} 342 + jiti@2.6.1: 343 + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 223 344 hasBin: true 224 345 225 - lightningcss-darwin-arm64@1.29.1: 226 - resolution: {integrity: sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==} 346 + lightningcss-android-arm64@1.30.2: 347 + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} 348 + engines: {node: '>= 12.0.0'} 349 + cpu: [arm64] 350 + os: [android] 351 + 352 + lightningcss-darwin-arm64@1.30.2: 353 + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} 227 354 engines: {node: '>= 12.0.0'} 228 355 cpu: [arm64] 229 356 os: [darwin] 230 357 231 - lightningcss-darwin-x64@1.29.1: 232 - resolution: {integrity: sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==} 358 + lightningcss-darwin-x64@1.30.2: 359 + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} 233 360 engines: {node: '>= 12.0.0'} 234 361 cpu: [x64] 235 362 os: [darwin] 236 363 237 - lightningcss-freebsd-x64@1.29.1: 238 - resolution: {integrity: sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==} 364 + lightningcss-freebsd-x64@1.30.2: 365 + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} 239 366 engines: {node: '>= 12.0.0'} 240 367 cpu: [x64] 241 368 os: [freebsd] 242 369 243 - lightningcss-linux-arm-gnueabihf@1.29.1: 244 - resolution: {integrity: sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==} 370 + lightningcss-linux-arm-gnueabihf@1.30.2: 371 + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} 245 372 engines: {node: '>= 12.0.0'} 246 373 cpu: [arm] 247 374 os: [linux] 248 375 249 - lightningcss-linux-arm64-gnu@1.29.1: 250 - resolution: {integrity: sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==} 376 + lightningcss-linux-arm64-gnu@1.30.2: 377 + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} 251 378 engines: {node: '>= 12.0.0'} 252 379 cpu: [arm64] 253 380 os: [linux] 254 381 255 - lightningcss-linux-arm64-musl@1.29.1: 256 - resolution: {integrity: sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==} 382 + lightningcss-linux-arm64-musl@1.30.2: 383 + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} 257 384 engines: {node: '>= 12.0.0'} 258 385 cpu: [arm64] 259 386 os: [linux] 260 387 261 - lightningcss-linux-x64-gnu@1.29.1: 262 - resolution: {integrity: sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==} 388 + lightningcss-linux-x64-gnu@1.30.2: 389 + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} 263 390 engines: {node: '>= 12.0.0'} 264 391 cpu: [x64] 265 392 os: [linux] 266 393 267 - lightningcss-linux-x64-musl@1.29.1: 268 - resolution: {integrity: sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==} 394 + lightningcss-linux-x64-musl@1.30.2: 395 + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} 269 396 engines: {node: '>= 12.0.0'} 270 397 cpu: [x64] 271 398 os: [linux] 272 399 273 - lightningcss-win32-arm64-msvc@1.29.1: 274 - resolution: {integrity: sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==} 400 + lightningcss-win32-arm64-msvc@1.30.2: 401 + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} 275 402 engines: {node: '>= 12.0.0'} 276 403 cpu: [arm64] 277 404 os: [win32] 278 405 279 - lightningcss-win32-x64-msvc@1.29.1: 280 - resolution: {integrity: sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==} 406 + lightningcss-win32-x64-msvc@1.30.2: 407 + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} 281 408 engines: {node: '>= 12.0.0'} 282 409 cpu: [x64] 283 410 os: [win32] 284 411 285 - lightningcss@1.29.1: 286 - resolution: {integrity: sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==} 412 + lightningcss@1.30.2: 413 + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} 287 414 engines: {node: '>= 12.0.0'} 288 415 289 - make-dir@3.1.0: 290 - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 291 - engines: {node: '>=8'} 416 + magic-string@0.30.21: 417 + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 292 418 293 419 micromatch@4.0.8: 294 420 resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} ··· 298 424 resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 299 425 engines: {node: '>=4'} 300 426 301 - netlify-plugin-debug-cache@1.0.4: 302 - resolution: {integrity: sha512-a9yBPnQlsDaNO8iPiSVxpiFnz3gj8BkhXRwT6bshLMCQRVezf/uIChTB55L675t6mZj+U4PwVIc7u8X2Ptc2Fw==} 303 - 304 427 node-addon-api@7.1.1: 305 428 resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} 306 429 430 + oxfmt@0.23.0: 431 + resolution: {integrity: sha512-dh4rlNBua93aVf2ZaDecbQxVLMnUUTvDi1K1fdvBdontQeEf6K22Z1KQg5QKl2D9aNFeFph+wOVwcjjYUIO6Mw==} 432 + engines: {node: ^20.19.0 || >=22.12.0} 433 + hasBin: true 434 + 435 + oxlint@1.38.0: 436 + resolution: {integrity: sha512-XT7tBinQS+hVLxtfJOnokJ9qVBiQvZqng40tDgR6qEJMRMnpVq/JwYfbYyGntSq8MO+Y+N9M1NG4bAMFUtCJiw==} 437 + engines: {node: ^20.19.0 || >=22.12.0} 438 + hasBin: true 439 + peerDependencies: 440 + oxlint-tsgolint: '>=0.10.0' 441 + peerDependenciesMeta: 442 + oxlint-tsgolint: 443 + optional: true 444 + 307 445 picocolors@1.1.1: 308 446 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 309 447 ··· 311 449 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 312 450 engines: {node: '>=8.6'} 313 451 314 - semver@6.3.1: 315 - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 316 - hasBin: true 452 + source-map-js@1.2.1: 453 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 454 + engines: {node: '>=0.10.0'} 317 455 318 - tailwindcss@4.0.0: 319 - resolution: {integrity: sha512-ULRPI3A+e39T7pSaf1xoi58AqqJxVCLg8F/uM5A3FadUbnyDTgltVnXJvdkTjwCOGA6NazqHVcwPJC5h2vRYVQ==} 456 + tailwindcss@4.1.18: 457 + resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} 320 458 321 459 tapable@2.2.1: 322 460 resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 323 461 engines: {node: '>=6'} 324 462 325 - thumbhash@0.1.1: 326 - resolution: {integrity: sha512-kH5pKeIIBPQXAOni2AiY/Cu/NKdkFREdpH+TLdM0g6WA7RriCv0kPLgP731ady67MhTAqrVG/4mnEeibVuCJcg==} 463 + tinypool@2.0.0: 464 + resolution: {integrity: sha512-/RX9RzeH2xU5ADE7n2Ykvmi9ED3FBGPAjw9u3zucrNNaEBIO0HPSYgL0NT7+3p147ojeSdaVu08F6hjpv31HJg==} 465 + engines: {node: ^20.0.0 || >=22.0.0} 327 466 328 467 to-regex-range@5.0.1: 329 468 resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 330 469 engines: {node: '>=8.0'} 331 470 332 - typescript@5.9.2: 333 - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} 471 + typescript@5.9.3: 472 + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 334 473 engines: {node: '>=14.17'} 335 474 hasBin: true 336 475 337 476 snapshots: 338 477 339 - '@parcel/watcher-android-arm64@2.5.0': 478 + '@jridgewell/gen-mapping@0.3.13': 479 + dependencies: 480 + '@jridgewell/sourcemap-codec': 1.5.5 481 + '@jridgewell/trace-mapping': 0.3.31 482 + 483 + '@jridgewell/remapping@2.3.5': 484 + dependencies: 485 + '@jridgewell/gen-mapping': 0.3.13 486 + '@jridgewell/trace-mapping': 0.3.31 487 + 488 + '@jridgewell/resolve-uri@3.1.2': {} 489 + 490 + '@jridgewell/sourcemap-codec@1.5.5': {} 491 + 492 + '@jridgewell/trace-mapping@0.3.31': 493 + dependencies: 494 + '@jridgewell/resolve-uri': 3.1.2 495 + '@jridgewell/sourcemap-codec': 1.5.5 496 + 497 + '@oxfmt/darwin-arm64@0.23.0': 340 498 optional: true 341 499 342 - '@parcel/watcher-darwin-arm64@2.5.0': 500 + '@oxfmt/darwin-x64@0.23.0': 343 501 optional: true 344 502 345 - '@parcel/watcher-darwin-x64@2.5.0': 503 + '@oxfmt/linux-arm64-gnu@0.23.0': 346 504 optional: true 347 505 348 - '@parcel/watcher-freebsd-x64@2.5.0': 506 + '@oxfmt/linux-arm64-musl@0.23.0': 349 507 optional: true 350 508 351 - '@parcel/watcher-linux-arm-glibc@2.5.0': 509 + '@oxfmt/linux-x64-gnu@0.23.0': 352 510 optional: true 353 511 354 - '@parcel/watcher-linux-arm-musl@2.5.0': 512 + '@oxfmt/linux-x64-musl@0.23.0': 355 513 optional: true 356 514 357 - '@parcel/watcher-linux-arm64-glibc@2.5.0': 515 + '@oxfmt/win32-arm64@0.23.0': 358 516 optional: true 359 517 360 - '@parcel/watcher-linux-arm64-musl@2.5.0': 518 + '@oxfmt/win32-x64@0.23.0': 361 519 optional: true 362 520 363 - '@parcel/watcher-linux-x64-glibc@2.5.0': 521 + '@oxlint/darwin-arm64@1.38.0': 364 522 optional: true 365 523 366 - '@parcel/watcher-linux-x64-musl@2.5.0': 524 + '@oxlint/darwin-x64@1.38.0': 367 525 optional: true 368 526 369 - '@parcel/watcher-win32-arm64@2.5.0': 527 + '@oxlint/linux-arm64-gnu@1.38.0': 370 528 optional: true 371 529 372 - '@parcel/watcher-win32-ia32@2.5.0': 530 + '@oxlint/linux-arm64-musl@1.38.0': 373 531 optional: true 374 532 375 - '@parcel/watcher-win32-x64@2.5.0': 533 + '@oxlint/linux-x64-gnu@1.38.0': 376 534 optional: true 377 535 378 - '@parcel/watcher@2.5.0': 536 + '@oxlint/linux-x64-musl@1.38.0': 537 + optional: true 538 + 539 + '@oxlint/win32-arm64@1.38.0': 540 + optional: true 541 + 542 + '@oxlint/win32-x64@1.38.0': 543 + optional: true 544 + 545 + '@parcel/watcher-android-arm64@2.5.1': 546 + optional: true 547 + 548 + '@parcel/watcher-darwin-arm64@2.5.1': 549 + optional: true 550 + 551 + '@parcel/watcher-darwin-x64@2.5.1': 552 + optional: true 553 + 554 + '@parcel/watcher-freebsd-x64@2.5.1': 555 + optional: true 556 + 557 + '@parcel/watcher-linux-arm-glibc@2.5.1': 558 + optional: true 559 + 560 + '@parcel/watcher-linux-arm-musl@2.5.1': 561 + optional: true 562 + 563 + '@parcel/watcher-linux-arm64-glibc@2.5.1': 564 + optional: true 565 + 566 + '@parcel/watcher-linux-arm64-musl@2.5.1': 567 + optional: true 568 + 569 + '@parcel/watcher-linux-x64-glibc@2.5.1': 570 + optional: true 571 + 572 + '@parcel/watcher-linux-x64-musl@2.5.1': 573 + optional: true 574 + 575 + '@parcel/watcher-win32-arm64@2.5.1': 576 + optional: true 577 + 578 + '@parcel/watcher-win32-ia32@2.5.1': 579 + optional: true 580 + 581 + '@parcel/watcher-win32-x64@2.5.1': 582 + optional: true 583 + 584 + '@parcel/watcher@2.5.1': 379 585 dependencies: 380 586 detect-libc: 1.0.3 381 587 is-glob: 4.0.3 382 588 micromatch: 4.0.8 383 589 node-addon-api: 7.1.1 384 590 optionalDependencies: 385 - '@parcel/watcher-android-arm64': 2.5.0 386 - '@parcel/watcher-darwin-arm64': 2.5.0 387 - '@parcel/watcher-darwin-x64': 2.5.0 388 - '@parcel/watcher-freebsd-x64': 2.5.0 389 - '@parcel/watcher-linux-arm-glibc': 2.5.0 390 - '@parcel/watcher-linux-arm-musl': 2.5.0 391 - '@parcel/watcher-linux-arm64-glibc': 2.5.0 392 - '@parcel/watcher-linux-arm64-musl': 2.5.0 393 - '@parcel/watcher-linux-x64-glibc': 2.5.0 394 - '@parcel/watcher-linux-x64-musl': 2.5.0 395 - '@parcel/watcher-win32-arm64': 2.5.0 396 - '@parcel/watcher-win32-ia32': 2.5.0 397 - '@parcel/watcher-win32-x64': 2.5.0 591 + '@parcel/watcher-android-arm64': 2.5.1 592 + '@parcel/watcher-darwin-arm64': 2.5.1 593 + '@parcel/watcher-darwin-x64': 2.5.1 594 + '@parcel/watcher-freebsd-x64': 2.5.1 595 + '@parcel/watcher-linux-arm-glibc': 2.5.1 596 + '@parcel/watcher-linux-arm-musl': 2.5.1 597 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 598 + '@parcel/watcher-linux-arm64-musl': 2.5.1 599 + '@parcel/watcher-linux-x64-glibc': 2.5.1 600 + '@parcel/watcher-linux-x64-musl': 2.5.1 601 + '@parcel/watcher-win32-arm64': 2.5.1 602 + '@parcel/watcher-win32-ia32': 2.5.1 603 + '@parcel/watcher-win32-x64': 2.5.1 398 604 399 - '@tailwindcss/cli@4.0.0': 605 + '@tailwindcss/cli@4.1.18': 400 606 dependencies: 401 - '@parcel/watcher': 2.5.0 402 - '@tailwindcss/node': 4.0.0 403 - '@tailwindcss/oxide': 4.0.0 404 - enhanced-resolve: 5.18.0 405 - lightningcss: 1.29.1 607 + '@parcel/watcher': 2.5.1 608 + '@tailwindcss/node': 4.1.18 609 + '@tailwindcss/oxide': 4.1.18 610 + enhanced-resolve: 5.18.4 406 611 mri: 1.2.0 407 612 picocolors: 1.1.1 408 - tailwindcss: 4.0.0 613 + tailwindcss: 4.1.18 409 614 410 - '@tailwindcss/node@4.0.0': 615 + '@tailwindcss/node@4.1.18': 411 616 dependencies: 412 - enhanced-resolve: 5.18.0 413 - jiti: 2.4.2 414 - tailwindcss: 4.0.0 617 + '@jridgewell/remapping': 2.3.5 618 + enhanced-resolve: 5.18.4 619 + jiti: 2.6.1 620 + lightningcss: 1.30.2 621 + magic-string: 0.30.21 622 + source-map-js: 1.2.1 623 + tailwindcss: 4.1.18 415 624 416 - '@tailwindcss/oxide-android-arm64@4.0.0': 625 + '@tailwindcss/oxide-android-arm64@4.1.18': 626 + optional: true 627 + 628 + '@tailwindcss/oxide-darwin-arm64@4.1.18': 417 629 optional: true 418 630 419 - '@tailwindcss/oxide-darwin-arm64@4.0.0': 631 + '@tailwindcss/oxide-darwin-x64@4.1.18': 420 632 optional: true 421 633 422 - '@tailwindcss/oxide-darwin-x64@4.0.0': 634 + '@tailwindcss/oxide-freebsd-x64@4.1.18': 423 635 optional: true 424 636 425 - '@tailwindcss/oxide-freebsd-x64@4.0.0': 637 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': 426 638 optional: true 427 639 428 - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.0': 640 + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': 429 641 optional: true 430 642 431 - '@tailwindcss/oxide-linux-arm64-gnu@4.0.0': 643 + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': 432 644 optional: true 433 645 434 - '@tailwindcss/oxide-linux-arm64-musl@4.0.0': 646 + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': 435 647 optional: true 436 648 437 - '@tailwindcss/oxide-linux-x64-gnu@4.0.0': 649 + '@tailwindcss/oxide-linux-x64-musl@4.1.18': 438 650 optional: true 439 651 440 - '@tailwindcss/oxide-linux-x64-musl@4.0.0': 652 + '@tailwindcss/oxide-wasm32-wasi@4.1.18': 441 653 optional: true 442 654 443 - '@tailwindcss/oxide-win32-arm64-msvc@4.0.0': 655 + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': 444 656 optional: true 445 657 446 - '@tailwindcss/oxide-win32-x64-msvc@4.0.0': 658 + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': 447 659 optional: true 448 660 449 - '@tailwindcss/oxide@4.0.0': 661 + '@tailwindcss/oxide@4.1.18': 450 662 optionalDependencies: 451 - '@tailwindcss/oxide-android-arm64': 4.0.0 452 - '@tailwindcss/oxide-darwin-arm64': 4.0.0 453 - '@tailwindcss/oxide-darwin-x64': 4.0.0 454 - '@tailwindcss/oxide-freebsd-x64': 4.0.0 455 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.0 456 - '@tailwindcss/oxide-linux-arm64-gnu': 4.0.0 457 - '@tailwindcss/oxide-linux-arm64-musl': 4.0.0 458 - '@tailwindcss/oxide-linux-x64-gnu': 4.0.0 459 - '@tailwindcss/oxide-linux-x64-musl': 4.0.0 460 - '@tailwindcss/oxide-win32-arm64-msvc': 4.0.0 461 - '@tailwindcss/oxide-win32-x64-msvc': 4.0.0 663 + '@tailwindcss/oxide-android-arm64': 4.1.18 664 + '@tailwindcss/oxide-darwin-arm64': 4.1.18 665 + '@tailwindcss/oxide-darwin-x64': 4.1.18 666 + '@tailwindcss/oxide-freebsd-x64': 4.1.18 667 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 668 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 669 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 670 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 671 + '@tailwindcss/oxide-linux-x64-musl': 4.1.18 672 + '@tailwindcss/oxide-wasm32-wasi': 4.1.18 673 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 674 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 675 + 676 + ansi_up@6.0.6: {} 462 677 463 678 braces@3.0.3: 464 679 dependencies: ··· 466 681 467 682 detect-libc@1.0.3: {} 468 683 469 - enhanced-resolve@5.18.0: 684 + detect-libc@2.1.2: {} 685 + 686 + enhanced-resolve@5.18.4: 470 687 dependencies: 471 688 graceful-fs: 4.2.11 472 689 tapable: 2.2.1 ··· 485 702 486 703 is-number@7.0.0: {} 487 704 488 - jiti@2.4.2: {} 705 + jiti@2.6.1: {} 489 706 490 - lightningcss-darwin-arm64@1.29.1: 707 + lightningcss-android-arm64@1.30.2: 491 708 optional: true 492 709 493 - lightningcss-darwin-x64@1.29.1: 710 + lightningcss-darwin-arm64@1.30.2: 711 + optional: true 712 + 713 + lightningcss-darwin-x64@1.30.2: 494 714 optional: true 495 715 496 - lightningcss-freebsd-x64@1.29.1: 716 + lightningcss-freebsd-x64@1.30.2: 497 717 optional: true 498 718 499 - lightningcss-linux-arm-gnueabihf@1.29.1: 719 + lightningcss-linux-arm-gnueabihf@1.30.2: 500 720 optional: true 501 721 502 - lightningcss-linux-arm64-gnu@1.29.1: 722 + lightningcss-linux-arm64-gnu@1.30.2: 503 723 optional: true 504 724 505 - lightningcss-linux-arm64-musl@1.29.1: 725 + lightningcss-linux-arm64-musl@1.30.2: 506 726 optional: true 507 727 508 - lightningcss-linux-x64-gnu@1.29.1: 728 + lightningcss-linux-x64-gnu@1.30.2: 509 729 optional: true 510 730 511 - lightningcss-linux-x64-musl@1.29.1: 731 + lightningcss-linux-x64-musl@1.30.2: 512 732 optional: true 513 733 514 - lightningcss-win32-arm64-msvc@1.29.1: 734 + lightningcss-win32-arm64-msvc@1.30.2: 515 735 optional: true 516 736 517 - lightningcss-win32-x64-msvc@1.29.1: 737 + lightningcss-win32-x64-msvc@1.30.2: 518 738 optional: true 519 739 520 - lightningcss@1.29.1: 740 + lightningcss@1.30.2: 521 741 dependencies: 522 - detect-libc: 1.0.3 742 + detect-libc: 2.1.2 523 743 optionalDependencies: 524 - lightningcss-darwin-arm64: 1.29.1 525 - lightningcss-darwin-x64: 1.29.1 526 - lightningcss-freebsd-x64: 1.29.1 527 - lightningcss-linux-arm-gnueabihf: 1.29.1 528 - lightningcss-linux-arm64-gnu: 1.29.1 529 - lightningcss-linux-arm64-musl: 1.29.1 530 - lightningcss-linux-x64-gnu: 1.29.1 531 - lightningcss-linux-x64-musl: 1.29.1 532 - lightningcss-win32-arm64-msvc: 1.29.1 533 - lightningcss-win32-x64-msvc: 1.29.1 744 + lightningcss-android-arm64: 1.30.2 745 + lightningcss-darwin-arm64: 1.30.2 746 + lightningcss-darwin-x64: 1.30.2 747 + lightningcss-freebsd-x64: 1.30.2 748 + lightningcss-linux-arm-gnueabihf: 1.30.2 749 + lightningcss-linux-arm64-gnu: 1.30.2 750 + lightningcss-linux-arm64-musl: 1.30.2 751 + lightningcss-linux-x64-gnu: 1.30.2 752 + lightningcss-linux-x64-musl: 1.30.2 753 + lightningcss-win32-arm64-msvc: 1.30.2 754 + lightningcss-win32-x64-msvc: 1.30.2 534 755 535 - make-dir@3.1.0: 756 + magic-string@0.30.21: 536 757 dependencies: 537 - semver: 6.3.1 758 + '@jridgewell/sourcemap-codec': 1.5.5 538 759 539 760 micromatch@4.0.8: 540 761 dependencies: ··· 543 764 544 765 mri@1.2.0: {} 545 766 546 - netlify-plugin-debug-cache@1.0.4: 767 + node-addon-api@7.1.1: {} 768 + 769 + oxfmt@0.23.0: 547 770 dependencies: 548 - make-dir: 3.1.0 771 + tinypool: 2.0.0 772 + optionalDependencies: 773 + '@oxfmt/darwin-arm64': 0.23.0 774 + '@oxfmt/darwin-x64': 0.23.0 775 + '@oxfmt/linux-arm64-gnu': 0.23.0 776 + '@oxfmt/linux-arm64-musl': 0.23.0 777 + '@oxfmt/linux-x64-gnu': 0.23.0 778 + '@oxfmt/linux-x64-musl': 0.23.0 779 + '@oxfmt/win32-arm64': 0.23.0 780 + '@oxfmt/win32-x64': 0.23.0 549 781 550 - node-addon-api@7.1.1: {} 782 + oxlint@1.38.0: 783 + optionalDependencies: 784 + '@oxlint/darwin-arm64': 1.38.0 785 + '@oxlint/darwin-x64': 1.38.0 786 + '@oxlint/linux-arm64-gnu': 1.38.0 787 + '@oxlint/linux-arm64-musl': 1.38.0 788 + '@oxlint/linux-x64-gnu': 1.38.0 789 + '@oxlint/linux-x64-musl': 1.38.0 790 + '@oxlint/win32-arm64': 1.38.0 791 + '@oxlint/win32-x64': 1.38.0 551 792 552 793 picocolors@1.1.1: {} 553 794 554 795 picomatch@2.3.1: {} 555 796 556 - semver@6.3.1: {} 797 + source-map-js@1.2.1: {} 557 798 558 - tailwindcss@4.0.0: {} 799 + tailwindcss@4.1.18: {} 559 800 560 801 tapable@2.2.1: {} 561 802 562 - thumbhash@0.1.1: {} 803 + tinypool@2.0.0: {} 563 804 564 805 to-regex-range@5.0.1: 565 806 dependencies: 566 807 is-number: 7.0.0 567 808 568 - typescript@5.9.2: {} 809 + typescript@5.9.3: {}
+5
pnpm-workspace.yaml
··· 1 + packages: 2 + - crates/* 3 + 4 + onlyBuiltDependencies: 5 + - '@parcel/watcher'
-1
tsconfig.json
··· 22 22 "moduleDetection": "force", 23 23 "skipLibCheck": true, 24 24 }, 25 - "include": ["crates/**/js", "website/assets"], 26 25 "exclude": ["node_modules", "dist", "vendor"], 27 26 }
+1 -1
website/Cargo.toml
··· 8 8 maudit = { workspace = true } 9 9 maud = { workspace = true } 10 10 serde = { workspace = true } 11 - chrono = {version = "0.4.42", features = ["serde"]} 11 + chrono = { version = "0.4.42", features = ["serde"] }
+4 -14
website/assets/docs-sidebar.ts
··· 1 1 document.addEventListener("DOMContentLoaded", function () { 2 - const leftSidebarToggleElement = document.getElementById( 3 - "left-sidebar-toggle" 4 - ); 5 - const rightSidebarToggleElement = document.getElementById( 6 - "right-sidebar-toggle" 7 - ); 2 + const leftSidebarToggleElement = document.getElementById("left-sidebar-toggle"); 3 + const rightSidebarToggleElement = document.getElementById("right-sidebar-toggle"); 8 4 const leftSidebarElement = document.getElementById("mobile-left-sidebar"); 9 5 const rightSidebarElement = document.getElementById("mobile-right-sidebar"); 10 6 ··· 53 49 function toggleRightSidebar() { 54 50 rightOpen = !rightOpen; 55 51 56 - const rightSidebarContent = rightSidebar.querySelector( 57 - "div" 58 - ) as HTMLElement; 52 + const rightSidebarContent = rightSidebar.querySelector("div") as HTMLElement; 59 53 60 54 // Toggle overlay opacity 61 55 rightSidebar.classList.toggle("opacity-0", !rightOpen); ··· 98 92 // Close right sidebar when clicking on table of contents links 99 93 rightSidebar.addEventListener("click", function (event) { 100 94 const target = event.target as HTMLElement; 101 - if ( 102 - target && 103 - target.tagName === "A" && 104 - target.getAttribute("href")?.startsWith("#") 105 - ) { 95 + if (target && target.tagName === "A" && target.getAttribute("href")?.startsWith("#")) { 106 96 if (rightOpen) { 107 97 toggleRightSidebar(); 108 98 }
+119 -119
website/assets/prin.css
··· 1 1 @import "tailwindcss"; 2 2 3 3 @font-face { 4 - font-family: "Charter"; 5 - src: 6 - local("Charter"), 7 - url("./fonts/charter_regular.woff2") format("woff2"); 8 - font-weight: normal; 9 - font-style: normal; 10 - font-display: swap; 4 + font-family: "Charter"; 5 + src: 6 + local("Charter"), 7 + url("./fonts/charter_regular.woff2") format("woff2"); 8 + font-weight: normal; 9 + font-style: normal; 10 + font-display: swap; 11 11 } 12 12 13 13 @theme { 14 - --color-our-white: #fafafa; 15 - --color-our-black: #262421; 16 - --color-darker-black: #21201c; 17 - --color-darker-white: #f5f5f4; 18 - --color-brighter-white: #ffffff; 19 - --color-borders: #e9e9e7; 20 - --color-brand-red: #ba1f33; 21 - --color-brighter-brand: #fa3252; 14 + --color-our-white: #fafafa; 15 + --color-our-black: #262421; 16 + --color-darker-black: #21201c; 17 + --color-darker-white: #f5f5f4; 18 + --color-brighter-white: #ffffff; 19 + --color-borders: #e9e9e7; 20 + --color-brand-red: #ba1f33; 21 + --color-brighter-brand: #fa3252; 22 22 23 - --max-width-larger-prose: 75ch; 23 + --max-width-larger-prose: 75ch; 24 24 25 - --docs-columns: 0.17fr 0.72fr 0.15fr; 26 - --docs-tablet-columns: 25% 75%; 25 + --docs-columns: 0.17fr 0.72fr 0.15fr; 26 + --docs-tablet-columns: 25% 75%; 27 27 } 28 28 29 29 html, 30 30 body { 31 - background-color: var(--color-our-black); 32 - color: var(--color-our-black); 33 - height: 100%; 31 + background-color: var(--color-our-black); 32 + color: var(--color-our-black); 33 + height: 100%; 34 34 } 35 35 36 36 body { 37 - font-family: Charter, "Bitstream Charter", Cambria, serif; 37 + font-family: Charter, "Bitstream Charter", Cambria, serif; 38 38 } 39 39 40 40 a:hover { 41 - color: var(--color-brand-red); 41 + color: var(--color-brand-red); 42 42 } 43 43 44 44 .btn { 45 - color: var(--color-brand-red); 46 - font-size: 1.55rem; 47 - font-weight: bold; 45 + color: var(--color-brand-red); 46 + font-size: 1.55rem; 47 + font-weight: bold; 48 48 } 49 49 50 50 .btn:hover { 51 - color: var(--color-brighter-brand); 51 + color: var(--color-brighter-brand); 52 52 } 53 53 54 54 .card { 55 - border-color: var(--color-borders); 56 - border-width: 1px; 57 - border-style: solid; 58 - border-radius: 0.5rem; 59 - padding: 1.5rem; 60 - box-shadow: 0 0 0.25rem 0 rgba(0, 0, 0, 0.025); 55 + border-color: var(--color-borders); 56 + border-width: 1px; 57 + border-style: solid; 58 + border-radius: 0.5rem; 59 + padding: 1.5rem; 60 + box-shadow: 0 0 0.25rem 0 rgba(0, 0, 0, 0.025); 61 61 } 62 62 63 63 .card:hover { 64 - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.05); 65 - background-color: var(--color-brighter-white); 64 + box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.05); 65 + background-color: var(--color-brighter-white); 66 66 } 67 67 68 68 .banner { 69 - background-color: var(--color-brand-red); 70 - color: var(--color-our-white); 69 + background-color: var(--color-brand-red); 70 + color: var(--color-our-white); 71 71 } 72 72 73 73 .hero-background { 74 - background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZpZXdCb3g9IjAgMCA0NjYgNDY1Ij48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjMgMTRoNDc2djQ3NUgyM1ptMjQ3IDU4Yy0yOCAwLTU1IDYtODEgMjBhMTY0IDE2NCAwIDAgMC03MCAyMjRjNDUgODEgMTQ3IDExMSAyMjkgNjggODMtNDMgMTE0LTE0NCA3MC0yMjRsLTEzIDdjNDAgNzMgMTIgMTY0LTY0IDIwNC03NSAzOS0xNjggMTEtMjA4LTYyLTQxLTc0LTEyLTE2NSA2My0yMDRzMTY5LTExIDIwOSA2MmwxMy03Yy0zMC01Ni04OC04Ny0xNDgtODhabTcyIDI0OSAzNCA2di01MmwtMi01Mi00LTIyLTMtMjIgNC0zIDUtM2MxLTIgMi02IDEtMTItMS00LTEtNS00LTdzLTMtMi04LTJoLTZsLTQgNS00IDV2MTJsNCAzIDMgMi0xMSAzOGMtMTAgMzYtMTEgMzktMTQgMzlsLTI2LTc3IDMtMSA0LTNjMi0zIDEtOC0xLTEzLTItNC0zLTQtNy01bC03IDFjLTMgMy00IDMtNSA3bC0xIDQgMyA0IDMgNC04IDMxLTExIDM3LTMgOWMtMSAyLTQtMy0xNS0yNC0xMS0yMi0xMS0yMi0xNS0zNGwtNC0xNCAzLTdjMy04IDMtMTAgMS0xNS0zLTQtNi02LTEyLTQtNCAwLTQgMS04IDVsLTQgNCAxIDYgNSAxMSAyIDVhMTIzMSAxMjMxIDAgMCAwLTExIDQwbC0zIDEwLTM1LTQ1LTgtMTIgMS0yIDItNy0yLTgtNi0yYy00LTEtNC0xLTcgMS00IDItNCAyLTQgNi0xIDUgMSAxMSA1IDEybDEgMSAyIDY5IDMgNjlhOTA4IDkwOCAwIDAgMSA1OS00bDQxLTIgMjAgMmMyMSAwIDIxIDAgNTMgNnoiIGNsYXNzPSJwb3dlcmNsaXAiIGNvbG9yPSIjMDAwIiBzdHlsZT0iLWlua3NjYXBlLXN0cm9rZTpub25lIi8+PC9jbGlwUGF0aD48L2RlZnM+PHBhdGggZmlsbD0iI2ZhZmFmYSIgZD0ibTM3Mi4xODUgMzcxLjcxMi0xMTEuMDg5IDM2LjM0LTExNi4zMi0xMS40NTItNjguODg5LTk0LjQyMi0yNS4wNTMtMTE0LjE2NSA2OC41MTMtOTQuNjk2TDIyMC4xODMgMzQuMjFsMTExLjIzMiAzNS44OTcgODcuMzczIDc3LjYzNi4yMzMgMTE2Ljg4MVoiIHBhaW50LW9yZGVyPSJzdHJva2UgZmlsbCBtYXJrZXJzIi8+PHBhdGggZmlsbD0iI2JhMWYzMyIgZD0iTTQ1NyA0MTFjLTcgMC0xNSAyLTIxIDctMzUgMjYtMTAgNzUgMzEgNDEgMzMtMjcgMTQtNDktMTAtNDhaTTI5MCAxOWMtMzEgMC02NyAxNC04NyAyNS0xNSA4LTY0IDM3LTEwNyA0Ni01NSAxMC04NyA2My01NSA5MCA1NCA0NCA1NiAxMDEgMTYgMTQzLTQ0IDQ2IDEgMTEzIDY0IDEwNiA2My04IDg5IDAgMTIxIDMyIDQxIDQxIDEzMiAyNSAxNTQtMzMgMTAtMjYgMjQtNTYgNTgtNjggNDEtMTQgNTMtNTkgMjYtOTEtMTktMjMtMjEtNDcgNS05NSAyMi00MCA1LTg0LTU2LTgxLTQ1IDMtNjQtMjctOTctNTlhNTkgNTkgMCAwIDAtNDItMTV6IiBjbGlwLXBhdGg9InVybCgjYSkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yOCAtMTkpIi8+PC9zdmc+"); 75 - background-repeat: no-repeat; 76 - background-position-x: calc(50%); 77 - background-position-y: calc(100%); 78 - background-size: 175px; 74 + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZpZXdCb3g9IjAgMCA0NjYgNDY1Ij48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjMgMTRoNDc2djQ3NUgyM1ptMjQ3IDU4Yy0yOCAwLTU1IDYtODEgMjBhMTY0IDE2NCAwIDAgMC03MCAyMjRjNDUgODEgMTQ3IDExMSAyMjkgNjggODMtNDMgMTE0LTE0NCA3MC0yMjRsLTEzIDdjNDAgNzMgMTIgMTY0LTY0IDIwNC03NSAzOS0xNjggMTEtMjA4LTYyLTQxLTc0LTEyLTE2NSA2My0yMDRzMTY5LTExIDIwOSA2MmwxMy03Yy0zMC01Ni04OC04Ny0xNDgtODhabTcyIDI0OSAzNCA2di01MmwtMi01Mi00LTIyLTMtMjIgNC0zIDUtM2MxLTIgMi02IDEtMTItMS00LTEtNS00LTdzLTMtMi04LTJoLTZsLTQgNS00IDV2MTJsNCAzIDMgMi0xMSAzOGMtMTAgMzYtMTEgMzktMTQgMzlsLTI2LTc3IDMtMSA0LTNjMi0zIDEtOC0xLTEzLTItNC0zLTQtNy01bC03IDFjLTMgMy00IDMtNSA3bC0xIDQgMyA0IDMgNC04IDMxLTExIDM3LTMgOWMtMSAyLTQtMy0xNS0yNC0xMS0yMi0xMS0yMi0xNS0zNGwtNC0xNCAzLTdjMy04IDMtMTAgMS0xNS0zLTQtNi02LTEyLTQtNCAwLTQgMS04IDVsLTQgNCAxIDYgNSAxMSAyIDVhMTIzMSAxMjMxIDAgMCAwLTExIDQwbC0zIDEwLTM1LTQ1LTgtMTIgMS0yIDItNy0yLTgtNi0yYy00LTEtNC0xLTcgMS00IDItNCAyLTQgNi0xIDUgMSAxMSA1IDEybDEgMSAyIDY5IDMgNjlhOTA4IDkwOCAwIDAgMSA1OS00bDQxLTIgMjAgMmMyMSAwIDIxIDAgNTMgNnoiIGNsYXNzPSJwb3dlcmNsaXAiIGNvbG9yPSIjMDAwIiBzdHlsZT0iLWlua3NjYXBlLXN0cm9rZTpub25lIi8+PC9jbGlwUGF0aD48L2RlZnM+PHBhdGggZmlsbD0iI2ZhZmFmYSIgZD0ibTM3Mi4xODUgMzcxLjcxMi0xMTEuMDg5IDM2LjM0LTExNi4zMi0xMS40NTItNjguODg5LTk0LjQyMi0yNS4wNTMtMTE0LjE2NSA2OC41MTMtOTQuNjk2TDIyMC4xODMgMzQuMjFsMTExLjIzMiAzNS44OTcgODcuMzczIDc3LjYzNi4yMzMgMTE2Ljg4MVoiIHBhaW50LW9yZGVyPSJzdHJva2UgZmlsbCBtYXJrZXJzIi8+PHBhdGggZmlsbD0iI2JhMWYzMyIgZD0iTTQ1NyA0MTFjLTcgMC0xNSAyLTIxIDctMzUgMjYtMTAgNzUgMzEgNDEgMzMtMjcgMTQtNDktMTAtNDhaTTI5MCAxOWMtMzEgMC02NyAxNC04NyAyNS0xNSA4LTY0IDM3LTEwNyA0Ni01NSAxMC04NyA2My01NSA5MCA1NCA0NCA1NiAxMDEgMTYgMTQzLTQ0IDQ2IDEgMTEzIDY0IDEwNiA2My04IDg5IDAgMTIxIDMyIDQxIDQxIDEzMiAyNSAxNTQtMzMgMTAtMjYgMjQtNTYgNTgtNjggNDEtMTQgNTMtNTkgMjYtOTEtMTktMjMtMjEtNDcgNS05NSAyMi00MCA1LTg0LTU2LTgxLTQ1IDMtNjQtMjctOTctNTlhNTkgNTkgMCAwIDAtNDItMTV6IiBjbGlwLXBhdGg9InVybCgjYSkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yOCAtMTkpIi8+PC9zdmc+"); 75 + background-repeat: no-repeat; 76 + background-position-x: calc(50%); 77 + background-position-y: calc(100%); 78 + background-size: 175px; 79 79 } 80 80 81 81 @media (max-width: 1250px) { 82 - .hero-background { 83 - background-size: 100px; 84 - background-position-y: calc(50%); 85 - } 82 + .hero-background { 83 + background-size: 100px; 84 + background-position-y: calc(50%); 85 + } 86 86 } 87 87 88 88 .prose { 89 - font-size: 1.125rem; 90 - line-height: 1.75; 89 + font-size: 1.125rem; 90 + line-height: 1.75; 91 91 } 92 92 93 93 .prose h1, ··· 95 95 .prose h3, 96 96 .prose h4, 97 97 .prose h5 { 98 - font-weight: bold; 98 + font-weight: bold; 99 99 } 100 100 101 101 .prose h1 { 102 - margin-top: 0; 103 - margin-bottom: 0.5em; 104 - font-size: 2.25rem; 105 - line-height: 1.11111; 102 + margin-top: 0; 103 + margin-bottom: 0.5em; 104 + font-size: 2.25rem; 105 + line-height: 1.11111; 106 106 } 107 107 108 108 .prose h2 { 109 - margin-top: 1.2em; 110 - margin-bottom: 0.6em; 111 - font-size: 1.66667em; 112 - line-height: 1.33333; 109 + margin-top: 1.2em; 110 + margin-bottom: 0.6em; 111 + font-size: 1.66667em; 112 + line-height: 1.33333; 113 113 } 114 114 115 115 .prose h2:first-child { 116 - margin-top: 0; 116 + margin-top: 0; 117 117 } 118 118 119 119 .prose h3 { 120 - margin-top: 1em; 121 - margin-bottom: 0.4em; 122 - font-size: 1.5rem; 123 - line-height: 1.4; 120 + margin-top: 1em; 121 + margin-bottom: 0.4em; 122 + font-size: 1.5rem; 123 + line-height: 1.4; 124 124 } 125 125 126 126 .prose h4 { 127 - margin-top: 0.8em; 128 - margin-bottom: 0.3em; 129 - font-size: 1.25rem; 130 - line-height: 1.5; 127 + margin-top: 0.8em; 128 + margin-bottom: 0.3em; 129 + font-size: 1.25rem; 130 + line-height: 1.5; 131 131 } 132 132 133 133 .prose h5 { 134 - margin-top: 0.8em; 135 - margin-bottom: 0.3em; 136 - font-size: 1.125rem; 137 - line-height: 1.55556; 134 + margin-top: 0.8em; 135 + margin-bottom: 0.3em; 136 + font-size: 1.125rem; 137 + line-height: 1.55556; 138 138 } 139 139 140 140 .prose a { 141 - text-decoration: underline; 141 + text-decoration: underline; 142 142 } 143 143 144 144 .prose p { 145 - margin-top: 1em; 146 - margin-bottom: 1em; 147 - line-height: 1.75; 145 + margin-top: 1em; 146 + margin-bottom: 1em; 147 + line-height: 1.75; 148 148 } 149 149 150 150 .prose blockquote { 151 - border-left: 4px solid var(--color-borders); 152 - margin-left: -1.5rem; 153 - margin-right: -1.5rem; 154 - padding-left: 1rem; 155 - color: var(--color-darker-black); 156 - font-style: italic; 157 - margin-top: 1em; 158 - margin-bottom: 1em; 151 + border-left: 4px solid var(--color-borders); 152 + margin-left: -1.5rem; 153 + margin-right: -1.5rem; 154 + padding-left: 1rem; 155 + color: var(--color-darker-black); 156 + font-style: italic; 157 + margin-top: 1em; 158 + margin-bottom: 1em; 159 159 } 160 160 161 161 .prose code, 162 162 .intro-code code { 163 - font-family: 164 - ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, 165 - "DejaVu Sans Mono", monospace; 166 - font-size: 0.888889em; 163 + font-family: 164 + ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", 165 + monospace; 166 + font-size: 0.888889em; 167 167 } 168 168 169 169 .prose code:not(pre code) { 170 - font-weight: bold; 170 + font-weight: bold; 171 171 } 172 172 173 173 .prose code:not(pre code):before { 174 - content: "`"; 174 + content: "`"; 175 175 } 176 176 177 177 .prose code:not(pre code):after { 178 - content: "`"; 178 + content: "`"; 179 179 } 180 180 181 181 .prose pre, 182 182 .intro-code pre { 183 - background-color: var(--color-darker-black); 184 - overflow-x: auto; 185 - padding-top: 1em; 186 - padding-inline-end: 1.5em; 187 - padding-bottom: 1em; 188 - border-radius: 0.375rem; 189 - margin-top: 2em; 190 - margin-bottom: 2em; 191 - padding-inline-start: 1.5em; 192 - font-size: 0.888889em; 193 - margin-left: -1.5rem; 194 - margin-right: -1.5rem; 183 + background-color: var(--color-darker-black); 184 + overflow-x: auto; 185 + padding-top: 1em; 186 + padding-inline-end: 1.5em; 187 + padding-bottom: 1em; 188 + border-radius: 0.375rem; 189 + margin-top: 2em; 190 + margin-bottom: 2em; 191 + padding-inline-start: 1.5em; 192 + font-size: 0.888889em; 193 + margin-left: -1.5rem; 194 + margin-right: -1.5rem; 195 195 } 196 196 197 197 @media (min-width: 769px) and (max-width: 1280px) { 198 - .prose pre, 199 - .intro-code pre { 200 - margin-left: 0; 201 - margin-right: 0; 202 - } 198 + .prose pre, 199 + .intro-code pre { 200 + margin-left: 0; 201 + margin-right: 0; 202 + } 203 203 } 204 204 205 205 .prose ul { 206 - list-style-type: disc; 207 - margin-top: 1em; 208 - margin-bottom: 1em; 209 - padding-left: 1.5em; 206 + list-style-type: disc; 207 + margin-top: 1em; 208 + margin-bottom: 1em; 209 + padding-left: 1.5em; 210 210 } 211 211 212 212 .prose li { 213 - margin-top: 0.5em; 214 - margin-bottom: 0.5em; 213 + margin-top: 0.5em; 214 + margin-bottom: 0.5em; 215 215 } 216 216 217 217 @media (max-width: 768px) { 218 - .prose pre, 219 - .intro-code pre { 220 - border-radius: 0; 221 - } 218 + .prose pre, 219 + .intro-code pre { 220 + border-radius: 0; 221 + } 222 222 } 223 223 224 224 .prose hr { 225 - border-color: var(--color-borders); 226 - margin-top: 2em; 227 - margin-bottom: 2em; 225 + border-color: var(--color-borders); 226 + margin-top: 2em; 227 + margin-bottom: 2em; 228 228 }
+1 -1
website/content/docs/javascript.md
··· 6 6 7 7 Maudit supports adding JavaScript and TypeScript files to your site. 8 8 9 - To import a script, add it anywhere in your project's directory, and use the [`ctx.assets.add_script()`](https://docs.rs/maudit/latest/maudit/assets/struct.RouteAssets.html#method.add_script) method to add it to a page's assets. 9 + To import a script, add it anywhere in your project's directory, and use the [`ctx.assets.add_script()`](https://docs.rs/maudit/latest/maudit/assets/struct.RouteAssets.html#method.add_script) method to add it to a page's assets. 10 10 11 11 This function will return an error if the image file does not exist, or cannot be read for any reason. If you'd rather not deal with errors, you can use the `add_script_unchecked()` method, which will instead panic on failure. 12 12
+1 -1
website/content/docs/routing.md
··· 162 162 163 163 ## Internationalization (i18n) 164 164 165 - Maudit includes the ability to generate *variants* of pages based on locales. For instance, you may have a `/about` page and want to create a `/fr/about` or `/a-propos` page with a localized slug. 165 + Maudit includes the ability to generate _variants_ of pages based on locales. For instance, you may have a `/about` page and want to create a `/fr/about` or `/a-propos` page with a localized slug. 166 166 167 167 While you could do this by duplicating your `/about` page, creating a new struct, re-implementing Route etc etc, it would be quite time consuming if your website support more languages and probably lead to a lot of duplicated code, as your Swedish about page probably uses a lot of the same layout as your Danish one. 168 168
+1 -1
website/content/news/for-static-websites.md
··· 5 5 date: 2025-10-15 6 6 --- 7 7 8 - We have one goal for Maudit: To make it the best tool to generate static websites. This may include helpful side features like loading Markdown content, syntax highlighting, image processing, sitemap generation, RSS feeds, etc. 8 + We have one goal for Maudit: To make it the best tool to generate static websites. This may include helpful side features like loading Markdown content, syntax highlighting, image processing, sitemap generation, RSS feeds, etc. 9 9 10 10 But the end result is always the same: You get a static website. No server, no serverless (with a server), no nothing. You get `.html` files that you can host wherever support hosting static files. 11 11