diff --git a/.github/workflows/test-and-zip-default-themes.yml b/.github/workflows/test-and-zip-default-themes.yml index 62dd5de5dc1b2..f7adc910ebd61 100644 --- a/.github/workflows/test-and-zip-default-themes.yml +++ b/.github/workflows/test-and-zip-default-themes.yml @@ -17,6 +17,7 @@ on: - 'src/wp-content/themes/twentytwentyone/**' - 'src/wp-content/themes/twentytwentytwo/**' - 'src/wp-content/themes/twentytwentyfive/**' + - 'src/wp-content/themes/ipsum/**' # Changes to this workflow file should always verify success. - '.github/workflows/test-and-zip-default-themes.yml' pull_request: @@ -35,6 +36,7 @@ on: - 'src/wp-content/themes/twentytwentyone/**' - 'src/wp-content/themes/twentytwentytwo/**' - 'src/wp-content/themes/twentytwentyfive/**' + - 'src/wp-content/themes/ipsum/**' # Changes to this workflow file should always verify success. - '.github/workflows/test-and-zip-default-themes.yml' workflow_dispatch: @@ -123,6 +125,7 @@ jobs: 'twentyten', ]; const buildThemes = [ + 'ipsum', 'twentytwentyfive', 'twentytwentytwo', 'twentytwentyone', @@ -339,7 +342,7 @@ jobs: SELECTED_THEME: ${{ github.event_name == 'workflow_dispatch' && inputs.theme || 'all' }} - name: Set up Node.js for themes needing minification - if: ${{ steps.theme-exists.outputs.exists == 'true' && ( matrix.theme == 'twentytwentytwo' || matrix.theme == 'twentytwentyfive' ) }} + if: ${{ steps.theme-exists.outputs.exists == 'true' && ( matrix.theme == 'twentytwentytwo' || matrix.theme == 'twentytwentyfive' || matrix.theme == 'ipsum' ) }} uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version-file: 'src/wp-content/themes/${{ matrix.theme }}/.nvmrc' @@ -347,18 +350,18 @@ jobs: - name: Set up npm # A workflow_dispatch run can check out a release branch, which lacks the action. - if: ${{ steps.theme-exists.outputs.exists == 'true' && ( matrix.theme == 'twentytwentytwo' || matrix.theme == 'twentytwentyfive' ) && hashFiles('.github/actions/setup-npm/action.yml') != '' }} + if: ${{ steps.theme-exists.outputs.exists == 'true' && ( matrix.theme == 'twentytwentytwo' || matrix.theme == 'twentytwentyfive' || matrix.theme == 'ipsum' ) && hashFiles('.github/actions/setup-npm/action.yml') != '' }} uses: ./.github/actions/setup-npm with: working-directory: src/wp-content/themes/${{ matrix.theme }} - name: Install npm dependencies - if: ${{ steps.theme-exists.outputs.exists == 'true' && ( matrix.theme == 'twentytwentytwo' || matrix.theme == 'twentytwentyfive' ) }} + if: ${{ steps.theme-exists.outputs.exists == 'true' && ( matrix.theme == 'twentytwentytwo' || matrix.theme == 'twentytwentyfive' || matrix.theme == 'ipsum' ) }} run: npm ci working-directory: src/wp-content/themes/${{ matrix.theme }} - name: Build theme assets - if: ${{ steps.theme-exists.outputs.exists == 'true' && ( matrix.theme == 'twentytwentytwo' || matrix.theme == 'twentytwentyfive' ) }} + if: ${{ steps.theme-exists.outputs.exists == 'true' && ( matrix.theme == 'twentytwentytwo' || matrix.theme == 'twentytwentyfive' || matrix.theme == 'ipsum' ) }} run: npm run build working-directory: src/wp-content/themes/${{ matrix.theme }} diff --git a/.gitignore b/.gitignore index 94798d0a72702..2d0178f495120 100644 --- a/.gitignore +++ b/.gitignore @@ -96,10 +96,12 @@ wp-tests-config.php /src/wp-content/themes/twentytwenty/node_modules /src/wp-content/themes/twentytwentytwo/node_modules /src/wp-content/themes/twentytwentyfive/node_modules +/src/wp-content/themes/ipsum/node_modules # Minified files in bundled themes /src/wp-content/themes/twentytwentytwo/*.min.css /src/wp-content/themes/twentytwentyfive/*.min.css +/src/wp-content/themes/ipsum/*.min.css # Operating system specific files .DS_Store diff --git a/Gruntfile.js b/Gruntfile.js index f96eda8ce5f61..fba4a6153f3c0 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -30,6 +30,7 @@ module.exports = function(grunt) { 'wp-content/plugins/hello.php', 'wp-content/plugins/akismet/**', '!wp-content/themes/twenty*/node_modules/**', + '!wp-content/themes/ipsum/node_modules/**', ], // All built CSS files, in /src or /build. @@ -902,6 +903,7 @@ module.exports = function(grunt) { src: [ 'wp-content/themes/twentytwentytwo/style.css', 'wp-content/themes/twentytwentyfive/style.css', + 'wp-content/themes/ipsum/style.css', ] } }, diff --git a/src/wp-content/themes/ipsum/.nvmrc b/src/wp-content/themes/ipsum/.nvmrc new file mode 100644 index 0000000000000..82d5d714347ef --- /dev/null +++ b/src/wp-content/themes/ipsum/.nvmrc @@ -0,0 +1 @@ +24.18 diff --git a/src/wp-content/themes/ipsum/DESIGN.md b/src/wp-content/themes/ipsum/DESIGN.md new file mode 100644 index 0000000000000..efc7d52aa4a02 --- /dev/null +++ b/src/wp-content/themes/ipsum/DESIGN.md @@ -0,0 +1,253 @@ +# DESIGN.md + +How to design with Ipsum: what each preset is for, how the theme uses it, and what the style variations, templates, parts and block styles give you. `AGENTS.md` covers working in the repository. + +## Ipsum + +Ipsum is the default theme for WordPress 7.2: a block theme built around blogging, which its readme calls a blank canvas. Each palette is a background and a text ink in a few strengths, plus an accent the theme uses once. + +## Color + +Six palette colors. Every color variation redefines all six, and the duotone too. The values are in `theme.json` and the files in `styles/colors/`. + +| Slug | Name | Role | Where the theme uses it | +| --- | --- | --- | --- | +| `base` | Base | Background | Page background, button text, form field fill, text and links on Strong Contrast grounds, the end of both gradients | +| `contrast` | Contrast | Text | Body text, headings, links, button fill and border, form field text and border | +| `accent-3` | Strong Contrast | Strongest ink | Hover for links, buttons, form fields and tag pills; the ground of inverted sections, cards and the navigation overlay | +| `accent-1` | Accent | Accent | One place only: the arrival bar, a 3px line that sweeps the top of the screen when a single post loads (only when the visitor hasn't asked for reduced motion) | +| `accent-5` | Surface | Faint fill | Quotes, pullquotes, comment bubbles, tag pills, table headers and stripes, the calendar header, the audio player, cards in patterns, the start of both gradients, and a few rules (Header Sticky, Text Alternating) | +| `accent-6` | Border | Faint line | Separators, list markers, quote marks, table and calendar lines, the code block border, dotted rules between rows | + +`accent-2` and `accent-4` are not defined. The slugs match Twenty Twenty-Five's, so patterns written for it find matching colors, but a block that asks for `accent-2` or `accent-4` gets no color. + +How the palettes are built: + +- **Light palettes:** Contrast, Border and Surface are the dark ink at 75%, 20% and 3% opacity (hex alpha `bf`, `33`, `08`). Strong Contrast is the ink itself. The default builds Border and Surface on `#0a0a0a` instead of its `#000000` ink. +- **Dark palettes:** Contrast is opaque. Border and Surface are Contrast at 25% and 10% (`40`, `1a`). Strong Contrast is lighter than Contrast. +- Border and Surface are translucent, so they tint whatever is under them. + +### Usage rules + +- **Use the slugs, never literal colors.** `var(--wp--preset--color--contrast)` in CSS, `var:preset|color|contrast` in block attributes, or `textColor` and `backgroundColor`. A literal hex freezes one variation's look into all the others. +- **Text is Contrast.** Body, headings and links all use it. Hover goes to Strong Contrast. Contrast is translucent in the light palettes, so it only reads as intended on Base or Surface; on any other ground, use Strong Contrast. +- **Links** have a dotted 1px underline. On hover they turn Strong Contrast and lose the underline. Navigation, post title, post navigation and pagination links do the reverse: no underline until hover. +- **Buttons** fill with Contrast, with Base text, and fill with Strong Contrast on hover. Focus and press use Contrast at 85% (`color-mix()`). The Outline style keeps a Contrast border and fills with Surface on hover. +- **Form fields** in Search and the comment form are Base with Contrast text and border. The border turns Strong Contrast on hover. Jetpack form fields get the same border. +- **Accent is not a link or button color.** The theme uses it only in the arrival bar. +- **Inverted sections and cards** use a Strong Contrast ground with Base text and links: the About Row band, the Navigation Overlay, and the cards in Text Statement, Footer Centered, Footer Subscribe, Header Collapsed, Page Bio, Page Blog Home and the gallery text tiles. They are dark in light variations and light in dark ones. +- **Tinted cards** use a Surface ground, Contrast text and 10px corners: Kind Words, CTA Membership, Hero Colophon, Format Audio, Format Link and the author chip in single posts. Surface works on any ground, so keep Contrast text on it. +- **Lines** use Border, at 1px, apart from the Surface rules in Header Sticky (1px) and Text Alternating (5px). Dotted rules use Border or the current text color. +- **Light or dark:** read `settings.custom.controlScheme`. It is `light` in `theme.json`, and each color variation sets its own. The variation titles don't tell you. +- **Colors that don't follow the palette:** the Evening code block style keeps the Evening palette's literals on purpose, so it reads as a dark slab under every variation. The Soft shadow is black at 8%. Each variation's duotone colors are hex copies of its palette colors. + +### Gradients and duotone + +- **Gradients:** two presets, both Surface to Base, top to bottom. `gradient-1`, "Vertical soft wash to base", fades over the whole height. `gradient-2`, "Vertical hard wash to base", is Surface for the top 90%, then Base. No template or pattern uses them. +- **Duotone:** one preset, `duotone-1`. The default is "Black and white". Each color variation redefines it with two of its own palette colors as hex, dark first, so editing a palette doesn't update its duotone. Header Collapsed, Header Sticky and Hero Colophon apply it to the site logo. Blue Hour and Golden Hour also apply it to every Featured Image. +- Core's default palette, gradients and duotones are off, so only Ipsum's presets show. + +## Typography + +| Slug | Family | Role | +| --- | --- | --- | +| `inter` | Inter | The text font: body and, by default, headings | +| `manrope` | Manrope | The meta voice (below), buttons, navigation, site title and tagline; the text font in Golden Hour | +| `jetbrains-mono` | JetBrains Mono | Code and preformatted text; the text font in High Noon | +| `stix-two-text` | STIX Two Text | The text font in Blue Hour, plus its site title and tagline | +| `besley` | Besley | The text font in Sunrise | +| `archivo` | Archivo | The text font in Morning and After Hours | +| `archivo-condensed` | Archivo Condensed | Headings in After Hours | + +All seven are variable fonts. Manrope has no italic face. + +### The meta voice + +Labels, dates, terms, bylines, comment meta, pagination, read more links, cites, form labels and table headers share one treatment: **Manrope, Small, weight 600**. A few use 700 (site title, accordion and details summaries, table headers) or 400 (comment date, comment edit and reply links, comments title). The tagline is 500. The Navigation block defaults to Manrope at Medium, 500; every header but Header Vertical sets it to Small. + +It isn't a preset you can pick. New meta text needs Manrope, Small and weight 600 set on the block, and changing the voice means changing every block that carries it. Typography variations leave it alone, since those blocks set Manrope directly. Blue Hour is the one variation that moves part of it: the site title and tagline go to STIX Two Text. + +### Size scale + +| Slug | Name | Used for | +| --- | --- | --- | +| `small` | Small | The meta voice, h5, h6 | +| `medium` | Medium | Body text, h4, navigation, verse | +| `large` | Large | h3 | +| `x-large` | X-Large | h2 | +| `2-x-large` | 2X-Large | h1, single post titles, quote marks | + +Small to Large are fixed; X-Large and 2X-Large are fluid, smaller on narrow screens. The sizes are in `theme.json`. Above 2X-Large, the theme uses the Display block style (`is-style-text-display`) or fit text (Hero Epigraph, About Row, the 404 heading, the Footer Centered wordmark). Core's default sizes are off. + +### Conventions + +- **Line height:** body 1.5, paragraphs 1.6. Headings use `calc(1em + 0.5rem)`, so they get tighter as they grow. Display is 1.2; quote marks are 1. +- **Weight:** text 400, headings 500. +- **Letter spacing:** h1 and h2 are tightened by -0.02rem, h3 by -0.01rem. The site title and tagline open to 0.01rem. The meta voice sets 0. +- **Uppercase** is rare: the site title in Header Sticky, Header Vertical and Footer Social, and the Navigation Overlay menu. +- **Writing mode** is on. Header Vertical runs its site title vertically. + +## Spacing and layout + +| Slug | Name | Typical use | +| --- | --- | --- | +| `20` | 2X-Small | Gaps inside rows (date · categories, title and tagline), tag pill padding, heading bottom margin | +| `30` | X-Small | Gaps between small items and buttons; padding in most cards and in compact boxes (code, comment bubbles, button top and bottom) | +| `40` | Small | The root block gap and side padding, button side padding | +| `50` | Regular | Section padding (header top, footer), heading top margin | +| `60` | Large | Between sections (separators, comments, tags, author chip), the gap between posts in query loops, header bottom padding | +| `70` | X-Large | Large section padding, the gap beside the sidebar | +| `80` | 2X-Large | Hero and statement patterns: Hero Epigraph, CTA Search, Contact Say Hi, About Row | + +`20` and `30` are fixed; from `40` up, sizes scale with the viewport. The sizes are in `theme.json`. Core's default spacing sizes are off. + +### Layout + +- **Widths:** content 640px, wide 1280px. +- **Root padding:** spacing `40` on each side, with root-padding-aware alignments, so full-width blocks reach the screen edges. +- **Templates** wrap their content in a `main` group with a constrained layout; `archive` and `search` use the default layout. In the one-column templates, post content is full-aligned with a constrained layout, so its blocks sit at 640px and can go wide or full. +- **Sidebar templates** use a wide Columns block: 66.66% content, 33.33% sidebar, spacing `70` between. + +### Shadow + +One preset, `soft` ("Soft"), a small black shadow at 8%. Only the Header Sticky bar uses it. + +### Corners and lines + +| Radius | Where | +| --- | --- | +| 10px | Buttons, featured images, avatars, comment bubbles, tag pills, the audio player, most cards in patterns | +| 5px | Images, quotes and pullquotes, code, form fields, the site logo | +| 4px | Site title, search button | +| 2px | Post author name | +| 0 and 9999px | The Sharp and Rounded site logo styles | + +Lines are 1px, except Text Alternating's 5px heading rules. Dotted lines mark link underlines, button focus outlines, the Search Outline button, the top of accordions and details, the rules between rows in Archive Simple, Archive Minimal, Events List and All Archives Sidebar, and the rule beside the link in Format Link. Other buttons, separators, tables and code use solid lines. + +## Style variations + +### Color variations + +Six of the seven also change fonts, and two apply duotone to featured images. Every one redefines the six colors and `duotone-1`, so the duotone on the header site logos follows the variation. + +| # | Title | Scheme | Also changes | +| --- | --- | --- | --- | +| | Default (`theme.json`) | light | Nothing | +| 01 | Blue Hour | light | Text font, site title and tagline in STIX Two Text. Duotone "Ink on paper" on featured images. | +| 02 | Sunrise | light | Text font in Besley. | +| 03 | Morning | light | Text font in Archivo. | +| 04 | High Noon | light | Text font in JetBrains Mono. | +| 05 | Golden Hour | dark | Text font and headings in Manrope. Duotone "Peach on maroon" on featured images. | +| 06 | Evening | dark | Colors only. | +| 07 | After Hours | dark | Text font in Archivo, headings in Archivo Condensed. | + +Scheme is `settings.custom.controlScheme`. Each variation's colors are in its file in `styles/colors/`. + +### Typography variations + +Each sets only the root font family, which headings inherit. Manrope blocks and code keep their own families. + +| Title | Slug | Text font | +| --- | --- | --- | +| Archivo | `archivo` | Archivo | +| Archivo Condensed | `archivo-condensed` | Archivo Condensed | +| Besley | `besley` | Besley | +| JetBrains Mono | `jetbrains-mono` | JetBrains Mono | +| STIX Two Text | `stix-two-text` | STIX Two Text | + +### Block style variations + +The class is `is-style-` plus the slug. + +| Style | Class | Blocks | What it does | +| --- | --- | --- | --- | +| Crop Contents | `is-style-crop-contents` | Group | `overflow: clip` | +| Display | `is-style-text-display` | Heading, Paragraph, Post Title, Site Title, Query Title | A size above 2X-Large that scales with the viewport, line height 1.2 | +| Quote Mark | `is-style-text-quote-mark` | Heading, Paragraph | A ❝ above the text, in Border, at 2X-Large | +| Quote Mark on Color | `is-style-text-quote-mark-on-color` | Heading, Paragraph | The same mark in the current text color; Text Statement uses it on a Strong Contrast card | +| Evening | `is-style-evening` | Code | A black ground with near-white text and border, the same under every variation | +| Sharp | `is-style-sharp` | Site Logo | Square corners | +| Pinned to Bottom | `is-style-sticky-bottom` | Template Part | Pins the part to the bottom of the screen; see [Utility block styles](#utility-block-styles) | +| Row Hover | `is-style-hover-together` | Post Template | Post rows hover as one | +| Dot Separator | `is-style-dot-before` | Comment Edit Link, Comment Reply Link | A decorative `·` before the link | +| Outline | `is-style-outline` | Search | A dotted Contrast outline on a Base button until hover, focus or press; the Search Bar part uses it | + +Ipsum also restyles core's own block styles: Button Outline (a separate style from Search's Outline, though they share the name), Quote Plain (no ground, padding or corners), Separator Wide (capped at the wide width), Site Logo Rounded (9999px) and Social Icons Logos Only (icons in the current text color). + +## Templates and parts + +### Templates + +| Template | Pattern | Shows | +| --- | --- | --- | +| `index` | `ipsum/hidden-index` | The post feed, each post in full | +| `archive` | `ipsum/hidden-archive` | The archive title over the Archive Compact list | +| `search` | `ipsum/hidden-search` | The search title and field, then results with excerpts | +| `single` | `ipsum/hidden-single` | The post, tags, author chip, comments and Keep Reading | +| `page` | `ipsum/hidden-page` | Featured image, title and content | +| `404` | `ipsum/hidden-404` | A fit-text heading, a line of text and search | +| `page-no-title` | `ipsum/hidden-page-no-title` | Content only | +| `page-sidebar` | `ipsum/hidden-page-sidebar` | The page beside the Sidebar part | +| `single-sidebar` | `ipsum/hidden-single-sidebar` | The post beside the Sidebar part | +| `index-sidebar` | `ipsum/hidden-index-sidebar` | The feed beside the Sidebar part | +| `archive-sidebar` | `ipsum/hidden-archive-sidebar` | The archive beside the Sidebar part | + +- Every template starts with the Header part. +- One-column templates use the Footer part; sidebar templates use Footer Wide. +- All but `404` and `search` add the Search Bar part with the Pinned to Bottom block style, which pins it to the bottom of the screen. +- Both single templates insert two hidden helper patterns: `ipsum/hidden-comments` and `ipsum/hidden-keep-reading` (the three latest posts). + +### Custom templates + +- **In `theme.json` `customTemplates`:** Single Posts Sidebar (`single-sidebar`, posts), Pages Sidebar (`page-sidebar`, pages) and Pages No Title (`page-no-title`, pages). Editors pick them per post or page. +- **Template types:** Index Sidebar (`index-sidebar`) and All Archives Sidebar (`archive-sidebar`) have a title and description in the Site Editor. Their slugs aren't in the template hierarchy, so WordPress doesn't choose them on its own. + +### Template parts + +| Part | Area | Pattern | Used in | +| --- | --- | --- | --- | +| `header` | `header` | `ipsum/header-default` | Every template | +| `header-collapsed` | `header` | `ipsum/header-collapsed` | None; an alternative with the menu always behind a button | +| `header-sticky` | `header` | `ipsum/header-sticky` | None; an alternative sticky bar with the Soft shadow | +| `footer` | `footer` | `ipsum/footer` | One-column templates | +| `footer-wide` | `footer` | `ipsum/footer-wide` | Sidebar templates | +| `navigation-overlay` | `navigation-overlay` | `ipsum/navigation-overlay` | The menu button in Header Default, Header Collapsed, Header Sticky, Hero Colophon and Hero Epigraph | +| `search-bar` | `uncategorized` | `ipsum/hidden-search-bar` | All templates but `404` and `search` | +| `sidebar` | `uncategorized` | `ipsum/hidden-sidebar` | The four sidebar templates: categories and the five latest posts | + +The header, footer and overlay parts delegate to insertable patterns. Other patterns carry `Block Types: core/template-part/`, so the editor offers them as replacements: + +- **Header:** Header Default, Header Collapsed, Header Sticky, Header Vertical, Hero Colophon, Hero Epigraph. +- **Footer:** Footer, Footer Wide, Footer Centered, Footer Social, Footer Subscribe. +- **Navigation overlay:** Navigation Overlay, Overlay Contents, Overlay Profile. + +## Utility block styles + +Three block styles carry behaviour, not just looks, and need a particular setup to work. Like every block style, they're listed in the block's Styles panel and in REST at `/wp/v2/block-types/` under `styles`. A block holds one style at a time, and choosing a style stores `is-style-` in its `className`. + +| Style | Block | What it does | Used in | +| --- | --- | --- | --- | +| Pinned to Bottom (`sticky-bottom`) | Template Part | Pins the part to the bottom of the viewport, shrunk to its content at the inline end (bottom right in LTR, bottom left in RTL), above the content (`z-index: 10`). | The Search Bar part at the end of every template but Search and 404. | +| Row Hover (`hover-together`) | Post Template | Post rows hover as one: hovering any visible part of a row turns all its text and links Strong Contrast and gives its featured image a small tilt and settle (skipped with reduced motion). The empty space beside the content doesn't trigger it. | Archive Simple, Archive Standard, Archive Compact, Archive Lead, Search Results, All Archives Sidebar. | +| Dot Separator (`dot-before`) | Comment Edit Link, Comment Reply Link | Puts a decorative `·` before the link, with 0.5em of space on each side and weight 600. Screen readers skip it, and the dot comes and goes with its link. | The date, Edit and Reply row of each comment in `ipsum/hidden-comments`. | + +What each one needs to work: + +- **Pinned to Bottom:** put the template part at the root of the template, after the footer. A sticky element only travels within its parent; at the root that's the site wrapper, which the theme stretches to at least the viewport height. Inside a Group it only sticks while that Group is on screen. +- **Row Hover:** wrap each post's blocks in a single Group directly inside the Post Template, as every Ipsum pattern that uses it does. Without that Group the style does nothing. +- **Dot Separator:** put the link in a flex row with a block gap of 0. The dot's padding does the spacing, so a gap would double it. + +### Helper classes + +Two classes in `style.css` hide a group when a block inside it renders nothing, so the hand-written text around it doesn't stand alone. Keep the class on the group when you copy it into a new pattern. + +- **`comments-meta`** goes on the group around the comments link row in post lists. Core renders nothing for the Comments Link block when comments are closed, so the row, with its `·` and call to action, hides with it. +- **`author-card`** goes on the author chip in single posts. Core renders nothing for the Author Name block when the post type doesn't support authors, so the card, with its "Written by" byline and avatar, hides with it. + +### The `·` meta separator + +The separator between meta items is built three ways, on purpose: + +- **Where both neighbours always render** (post date · categories), it's a Paragraph named Meta Separator: small, weight 600, with the dot hidden from screen readers. The row's block gap (`spacing|20`) spaces it. To add one, copy it from an archive pattern. +- **Where the whole row can go** (comments link · call to action), it's the same Paragraph, and the `comments-meta` class hides the row when comments are closed. +- **Where a neighbour may not render**, it's the Dot Separator style. The Edit link only renders for people who can edit the comment, and the Reply link only when threading allows it, so a Paragraph would be left behind as a stray dot. Use the Paragraph wherever it's safe: unlike the style's dot, it can be translated. diff --git a/src/wp-content/themes/ipsum/assets/css/editor-style.css b/src/wp-content/themes/ipsum/assets/css/editor-style.css index f459c3833eb86..6d191462de895 100644 --- a/src/wp-content/themes/ipsum/assets/css/editor-style.css +++ b/src/wp-content/themes/ipsum/assets/css/editor-style.css @@ -2,10 +2,10 @@ * Editor-only overrides. The editors load style.css first, so this file holds * only what the editors need on top of it. * - * Sticky header part and pinned search bar: !important because the editor - * forces position:relative on block wrappers. + * Sticky header part and Pinned to Bottom template parts: !important because + * the editor forces position:relative on block wrappers. */ header.wp-block-template-part:has(> .is-position-sticky), -.sticky-bottom { +.wp-block-template-part.is-style-sticky-bottom { position: sticky !important; } diff --git a/src/wp-content/themes/ipsum/contributing.txt b/src/wp-content/themes/ipsum/contributing.txt new file mode 100644 index 0000000000000..2b4f5cce576a2 --- /dev/null +++ b/src/wp-content/themes/ipsum/contributing.txt @@ -0,0 +1,21 @@ +=== Contributing to Ipsum === + +Ipsum is developed at https://github.com/WordPress/ipsum. Changes made there are synced to WordPress core, so please open issues and pull requests in that repository. + += Minifying CSS = + +Ipsum has a single stylesheet `style.css` which is enqueued in addition to the global styles coming from core. On a normal production site, when `SCRIPT_DEBUG` is disabled, then the minified version `style.min.css` will be enqueued instead, unless `style.css` has changed since `style.min.css` was built. If you make a change to `style.css`, you'll need to re-minify the `style.min.css` using the built-in npm build tool. As always, it is preferable to use the Site Editor to supply Additional CSS instead of directly editing the theme stylesheet. + +Installation instructions + +1. Using a command line interface, go to the “ipsum” directory `cd /my-computer/local-wordpress-install/src/wp-content/themes/ipsum`. + +2. Type `npm install` into the command line, and press the [return] key, to install all Node.js dependencies. + +3. The dependencies may take a few minutes to download but once it completes, you’re done. + +Usage instructions + +1. After making a change to the `style.css` file, run `npm run build` from within the theme directory to regenerate `style.min.css` with your new changes. + +2. You can also “watch” the theme directory for CSS changes and re-minify the CSS anytime a change occurs by running: `npm run watch`. diff --git a/src/wp-content/themes/ipsum/functions.php b/src/wp-content/themes/ipsum/functions.php index edaf242a10b99..33c403d9f9608 100644 --- a/src/wp-content/themes/ipsum/functions.php +++ b/src/wp-content/themes/ipsum/functions.php @@ -48,14 +48,35 @@ function ipsum_add_theme_support() { * @return void */ function ipsum_enqueue_styles() { + $style_path = get_parent_theme_file_path( 'style.css' ); + $style_min_path = get_parent_theme_file_path( 'style.min.css' ); + + /* + * Use the minified stylesheet, unless script debugging is on or style.css + * has changed since style.min.css was built. That keeps edits made in the + * Theme File Editor working: saving style.css makes it the newer file. + */ + if ( + SCRIPT_DEBUG + || ! file_exists( $style_min_path ) + || ( filemtime( $style_path ) > filemtime( $style_min_path ) ) + ) { + $src = 'style.css'; + } else { + $src = 'style.min.css'; + } + // Register theme stylesheet. wp_register_style( 'ipsum-style', - get_parent_theme_file_uri( 'style.css' ), + get_parent_theme_file_uri( $src ), array(), - wp_get_theme()->get( 'Version' ) + wp_get_theme( get_template() )->get( 'Version' ) ); + // Let WordPress inline the stylesheet, so it is not a render-blocking request. + wp_style_add_data( 'ipsum-style', 'path', get_parent_theme_file_path( $src ) ); + // Enqueue theme stylesheet. wp_enqueue_style( 'ipsum-style' ); } @@ -69,21 +90,29 @@ function ipsum_enqueue_styles() { * * @since Ipsum 1.0 * - * @param array $source_args Block binding source arguments. - * @param WP_Block $block_instance The block instance. - * @return string The call to action text. + * @param array $source_args Block binding source arguments. Unused. + * @param WP_Block $block_instance The block instance. + * @return string|null The call to action text, an empty string when comments + * are closed, or null to keep the block's original content + * when there is no post. */ function ipsum_comments_cta_binding( $source_args, $block_instance ) { - $post_id = $block_instance->context['postId'] ?? get_the_ID(); + unset( $source_args ); // Unused, but must be accepted to get the block instance. + + $post_id = $block_instance->context['postId'] ?? null; + $post = get_post( is_numeric( $post_id ) ? (int) $post_id : null ); + if ( ! $post ) { + return null; + } - if ( ! comments_open( $post_id ) ) { + if ( ! comments_open( $post ) ) { return ''; } - $post_title = wp_strip_all_tags( get_the_title( $post_id ) ); + $post_title = wp_strip_all_tags( get_the_title( $post ) ); $has_title = ! empty( $post_title ); - if ( get_comments_number( $post_id ) > 0 ) { + if ( get_comments_number( $post ) > 0 ) { $text = $has_title ? sprintf( /* translators: %s: Post title. */ @@ -101,7 +130,7 @@ function ipsum_comments_cta_binding( $source_args, $block_instance ) { : __( 'Be the first to comment', 'ipsum' ); } - return '' . wp_kses_post( $text ) . ''; + return '' . wp_kses_post( $text ) . ''; } endif; @@ -133,8 +162,9 @@ function ipsum_register_block_bindings() { * * @since Ipsum 1.0 * - * @param array $default_template_types The default template types. - * @return array The template types, with the sidebar variants added. + * @param array> $default_template_types The default template types, keyed by + * slug, each with a title and description. + * @return array> The template types, with the sidebar variants added. */ function ipsum_sidebar_template_types( $default_template_types ) { $default_template_types['index-sidebar'] = array( @@ -166,6 +196,14 @@ function ipsum_register_pattern_categories() { 'description' => __( 'Full page layouts, ready to be applied to a page.', 'ipsum' ), ) ); + + register_block_pattern_category( + 'ipsum_post-format', + array( + 'label' => _x( 'Post formats', 'Block pattern category', 'ipsum' ), + 'description' => __( 'Layouts for post formats, like audio and link posts.', 'ipsum' ), + ) + ); } endif; add_action( 'init', 'ipsum_register_pattern_categories' ); @@ -182,12 +220,14 @@ function ipsum_register_pattern_categories() { * * @since Ipsum 1.0 * - * @param array $metadata Metadata for the block type being registered. - * @return array The block metadata, with ARIA label support on the Search block. + * @param array $metadata Metadata for the block type being registered. + * @return array The block metadata, with ARIA label support on the Search block. */ function ipsum_search_aria_label_support( $metadata ) { if ( isset( $metadata['name'] ) && 'core/search' === $metadata['name'] ) { - $metadata['supports']['ariaLabel'] = true; + $supports = isset( $metadata['supports'] ) && is_array( $metadata['supports'] ) ? $metadata['supports'] : array(); + $supports['ariaLabel'] = true; + $metadata['supports'] = $supports; } return $metadata; } @@ -201,6 +241,10 @@ function ipsum_search_aria_label_support( $metadata ) { * The Evening code style keeps the Evening palette's literals on purpose, * so the block reads as a dark slab under every style variation. * + * Each style's CSS is an inline style, as in the default themes. Row Hover + * can't move to styles/blocks/, because a theme.json css string cannot hold + * its at-rules and selector lists. + * * @since Ipsum 1.0 * * @return void @@ -223,6 +267,86 @@ function ipsum_register_block_styles() { 'inline_style' => '.wp-block-site-logo.is-style-sharp{border-radius:0;}', ) ); + + /* + * Pins the part to the bottom of the viewport, so it belongs at the root + * of the template. It keeps to its content's width at the inline end, so + * the rest of the band doesn't block clicks on the page. The editors also + * need the override in editor-style.css. + */ + register_block_style( + 'core/template-part', + array( + 'name' => 'sticky-bottom', + 'label' => _x( 'Pinned to Bottom', 'Block style label', 'ipsum' ), + 'inline_style' => ' + .wp-block-template-part.is-style-sticky-bottom { + position: sticky; + inset-block-end: 0; + z-index: 10; + width: fit-content; + margin-inline-start: auto; + }', + ) + ); + + /* + * Outlines the Search button until it is hovered, focused or pressed, when + * the global button states take back over. A theme.json css string would + * wrap this in :where() and only tie with the global button styles. + */ + register_block_style( + 'core/search', + array( + 'name' => 'outline', + 'label' => _x( 'Outline', 'Block style label', 'ipsum' ), + 'inline_style' => ' + .wp-block-search.is-style-outline .wp-block-search__button.wp-element-button:not(:hover):not(:focus):not(:active) { + background-color: var(--wp--preset--color--base); + border: 1px dotted var(--wp--preset--color--contrast); + color: var(--wp--preset--color--contrast); + }', + ) + ); + + /* + * Hovering any part of a post row colors the whole row and tilts its + * featured image. Targets the row's child blocks, since the Group spans + * the full band. Needs each post's blocks wrapped in one Group. + */ + register_block_style( + 'core/post-template', + array( + 'name' => 'hover-together', + 'label' => _x( 'Row Hover', 'Block style label', 'ipsum' ), + 'inline_style' => ' + .wp-block-post-template.is-style-hover-together .wp-block-post > .wp-block-group, + .wp-block-post-template.is-style-hover-together .wp-block-post > .wp-block-group a { + transition: color 0.15s ease-out; + } + + .wp-block-post-template.is-style-hover-together .wp-block-post > .wp-block-group:has(> :hover), + .wp-block-post-template.is-style-hover-together .wp-block-post > .wp-block-group:has(> :hover) a { + color: var(--wp--preset--color--accent-3); + } + + @media (prefers-reduced-motion: no-preference) { + @keyframes tilt-settle { + 35% { + transform: rotate(-1deg); + } + + 100% { + transform: rotate(0deg); + } + } + + .wp-block-post-template.is-style-hover-together .wp-block-post > .wp-block-group:has(> :hover) .wp-block-post-featured-image img { + animation: tilt-settle 0.5s ease-out; + } + }', + ) + ); } endif; add_action( 'init', 'ipsum_register_block_styles' ); diff --git a/src/wp-content/themes/ipsum/inc/abilities.php b/src/wp-content/themes/ipsum/inc/abilities.php index 8f5875ea658bd..0257ae2c3b526 100644 --- a/src/wp-content/themes/ipsum/inc/abilities.php +++ b/src/wp-content/themes/ipsum/inc/abilities.php @@ -90,7 +90,12 @@ function ipsum_get_color_roles() { * * @since Ipsum 1.0 * - * @return array The output schema of the design guide ability. + * @return array The output schema of the design guide ability. + * @phpstan-return array{ + * type: 'object', + * additionalProperties: false, + * properties: array> + * } */ function ipsum_get_design_guide_schema() { $string = array( 'type' => 'string' ); @@ -254,14 +259,23 @@ function ipsum_get_design_guide_schema() { * * @since Ipsum 1.0 * - * @param array $presets The presets from the global settings, keyed by origin. + * @param mixed $presets The presets from the global settings, keyed by origin. * @param string[] $keys The preset properties to keep. - * @return array[] The presets, with only the given properties. + * @return array> The presets, with only the given properties. */ function ipsum_get_design_guide_presets( $presets, $keys ) { $items = array(); + if ( ! is_array( $presets ) ) { + return $items; + } foreach ( array( 'theme', 'custom' ) as $origin ) { - foreach ( $presets[ $origin ] ?? array() as $preset ) { + if ( ! isset( $presets[ $origin ] ) || ! is_array( $presets[ $origin ] ) ) { + continue; + } + foreach ( $presets[ $origin ] as $preset ) { + if ( ! is_array( $preset ) ) { + continue; + } $item = array(); foreach ( $keys as $key ) { if ( isset( $preset[ $key ] ) ) { @@ -315,7 +329,7 @@ static function ( $block ) { } ) ); - if ( 1 === count( $blocks ) && 'core/pattern' === $blocks[0]['blockName'] && ! empty( $blocks[0]['attrs']['slug'] ) ) { + if ( 1 === count( $blocks ) && 'core/pattern' === $blocks[0]['blockName'] && isset( $blocks[0]['attrs']['slug'] ) && is_string( $blocks[0]['attrs']['slug'] ) && '' !== $blocks[0]['attrs']['slug'] ) { return $blocks[0]['attrs']['slug']; } return null; @@ -334,7 +348,7 @@ static function ( $block ) { * * @type string[] $fields Optional. The sections to return. Default all of them. * } - * @return array The design guide. + * @return array The design guide, keyed by section. */ function ipsum_get_design_guide( $input = array() ) { $sections = array_keys( ipsum_get_design_guide_schema()['properties'] ); @@ -364,7 +378,7 @@ function ipsum_get_design_guide( $input = array() ) { $roles = ipsum_get_color_roles(); $guide['colors'] = array(); foreach ( ipsum_get_design_guide_presets( $settings['color']['palette'] ?? array(), array( 'slug', 'name', 'color' ) ) as $color ) { - if ( isset( $color['slug'], $roles[ $color['slug'] ] ) ) { + if ( isset( $color['slug'] ) && is_string( $color['slug'] ) && isset( $roles[ $color['slug'] ] ) ) { $color['role'] = $roles[ $color['slug'] ]; } $guide['colors'][] = $color; @@ -382,7 +396,8 @@ function ipsum_get_design_guide( $input = array() ) { if ( isset( $sections['typography'] ) ) { $body_font = ipsum_get_design_guide_font_slug( $styles['typography']['fontFamily'] ?? '' ); $block_fonts = array(); - foreach ( $styles['blocks'] ?? array() as $block_type => $block_styles ) { + $blocks = $styles['blocks'] ?? null; + foreach ( is_array( $blocks ) ? $blocks : array() as $block_type => $block_styles ) { $block_font = ipsum_get_design_guide_font_slug( $block_styles['typography']['fontFamily'] ?? '' ); if ( null !== $block_font && $block_font !== $body_font ) { $block_fonts[ $block_font ][] = $block_type; @@ -427,8 +442,13 @@ function ipsum_get_design_guide( $input = array() ) { if ( ! empty( $variation_styles['elements']['heading']['typography']['fontFamily'] ) ) { $item['headingFont'] = ipsum_get_design_guide_font_slug( $variation_styles['elements']['heading']['typography']['fontFamily'] ); } - if ( ! empty( $variation_styles['blocks'] ) ) { - $item['blocks'] = array_map( 'array_keys', $variation_styles['blocks'] ); + if ( ! empty( $variation_styles['blocks'] ) && is_array( $variation_styles['blocks'] ) ) { + $item['blocks'] = array_map( + static function ( $block_styles ) { + return is_array( $block_styles ) ? array_keys( $block_styles ) : array(); + }, + $variation_styles['blocks'] + ); } $guide['styleVariations'][] = $item; } @@ -453,13 +473,22 @@ function ipsum_get_design_guide( $input = array() ) { } if ( isset( $sections['patterns'] ) ) { - $theme_pattern_dirs = array( - wp_normalize_path( get_stylesheet_directory() . '/patterns' ), - wp_normalize_path( get_template_directory() . '/patterns' ), - ); - $guide['patterns'] = array(); - foreach ( WP_Block_Patterns_Registry::get_instance()->get_all_registered() as $pattern ) { - if ( empty( $pattern['filePath'] ) || ! in_array( wp_normalize_path( dirname( $pattern['filePath'] ) ), $theme_pattern_dirs, true ) ) { + // Look up the theme's patterns by slug, since the registry drops a pattern's filePath once its content is loaded. + $theme = wp_get_theme(); + $theme_pattern_slugs = array(); + foreach ( array_filter( array( $theme, $theme->parent() ) ) as $pattern_theme ) { + foreach ( $pattern_theme->get_block_patterns() as $file_pattern ) { + if ( isset( $file_pattern['slug'] ) && is_string( $file_pattern['slug'] ) ) { + $theme_pattern_slugs[] = $file_pattern['slug']; + } + } + } + + $registry = WP_Block_Patterns_Registry::get_instance(); + $guide['patterns'] = array(); + foreach ( array_unique( $theme_pattern_slugs ) as $slug ) { + $pattern = $registry->get_registered( $slug ); + if ( null === $pattern ) { continue; } $item = array( diff --git a/src/wp-content/themes/ipsum/package-lock.json b/src/wp-content/themes/ipsum/package-lock.json new file mode 100644 index 0000000000000..c235a36295bf4 --- /dev/null +++ b/src/wp-content/themes/ipsum/package-lock.json @@ -0,0 +1,1722 @@ +{ + "name": "ipsum", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ipsum", + "version": "1.0.0", + "license": "GPL-2.0-or-later", + "devDependencies": { + "@wordpress/browserslist-config": "^6.34.0", + "cssnano": "^7.1.2", + "postcss": "^8.5.6", + "postcss-cli": "^11.0.1" + }, + "engines": { + "node": ">=24.18.0", + "npm": ">=11.16.0" + } + }, + "node_modules/@wordpress/browserslist-config": { + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.34.0.tgz", + "integrity": "sha512-pmcCkqG2jW+UUBSkX7rSZS33mcW6M0fKcJPD40TlK2cUZvECS5TDa2BC/b80PfIsT2kSw+Z9Wv+8eyX6I8HGjQ==", + "dev": true, + "license": "GPL-2.0-or-later", + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.25", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.25.tgz", + "integrity": "sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001754", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz", + "integrity": "sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz", + "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.2.tgz", + "integrity": "sha512-HYOPBsNvoiFeR1eghKD5C3ASm64v9YVyJB4Ivnl2gqKoQYvjjN/G0rztvKQq8OxocUtC6sjqY8jwYngIB4AByA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.10", + "lilconfig": "^3.1.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.10.tgz", + "integrity": "sha512-6ZBjW0Lf1K1Z+0OKUAUpEN62tSXmYChXWi2NAA0afxEVsj9a+MbcB1l5qel6BHJHmULai2fCGRthCeKSFbScpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.27.0", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.1", + "postcss-calc": "^10.1.1", + "postcss-colormin": "^7.0.5", + "postcss-convert-values": "^7.0.8", + "postcss-discard-comments": "^7.0.5", + "postcss-discard-duplicates": "^7.0.2", + "postcss-discard-empty": "^7.0.1", + "postcss-discard-overridden": "^7.0.1", + "postcss-merge-longhand": "^7.0.5", + "postcss-merge-rules": "^7.0.7", + "postcss-minify-font-values": "^7.0.1", + "postcss-minify-gradients": "^7.0.1", + "postcss-minify-params": "^7.0.5", + "postcss-minify-selectors": "^7.0.5", + "postcss-normalize-charset": "^7.0.1", + "postcss-normalize-display-values": "^7.0.1", + "postcss-normalize-positions": "^7.0.1", + "postcss-normalize-repeat-style": "^7.0.1", + "postcss-normalize-string": "^7.0.1", + "postcss-normalize-timing-functions": "^7.0.1", + "postcss-normalize-unicode": "^7.0.5", + "postcss-normalize-url": "^7.0.1", + "postcss-normalize-whitespace": "^7.0.1", + "postcss-ordered-values": "^7.0.2", + "postcss-reduce-initial": "^7.0.5", + "postcss-reduce-transforms": "^7.0.1", + "postcss-svgo": "^7.1.0", + "postcss-unique-selectors": "^7.0.4" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.1.tgz", + "integrity": "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/dependency-graph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.250", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.250.tgz", + "integrity": "sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz", + "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-cli": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz", + "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.3.0", + "dependency-graph": "^1.0.0", + "fs-extra": "^11.0.0", + "picocolors": "^1.0.0", + "postcss-load-config": "^5.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "slash": "^5.0.0", + "tinyglobby": "^0.2.12", + "yargs": "^17.0.0" + }, + "bin": { + "postcss": "index.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.5.tgz", + "integrity": "sha512-ekIBP/nwzRWhEMmIxHHbXHcMdzd1HIUzBECaj5KEdLz9DVP2HzT065sEhvOx1dkLjYW7jyD0CngThx6bpFi2fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.27.0", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.8.tgz", + "integrity": "sha512-+XNKuPfkHTCEo499VzLMYn94TiL3r9YqRE3Ty+jP7UX4qjewUONey1t7CG21lrlTLN07GtGM8MqFVp86D4uKJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.27.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.5.tgz", + "integrity": "sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz", + "integrity": "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz", + "integrity": "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz", + "integrity": "sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-load-config": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", + "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1", + "yaml": "^2.4.2" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + } + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz", + "integrity": "sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.5" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.7.tgz", + "integrity": "sha512-njWJrd/Ms6XViwowaaCc+/vqhPG3SmXn725AGrnl+BgTuRPEacjiLEaGq16J6XirMJbtKkTwnt67SS+e2WGoew==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.27.0", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.1", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz", + "integrity": "sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz", + "integrity": "sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.5.tgz", + "integrity": "sha512-FGK9ky02h6Ighn3UihsyeAH5XmLEE2MSGH5Tc4tXMFtEDx7B+zTG6hD/+/cT+fbF7PbYojsmmWjyTwFwW1JKQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.27.0", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz", + "integrity": "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz", + "integrity": "sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz", + "integrity": "sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz", + "integrity": "sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz", + "integrity": "sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz", + "integrity": "sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz", + "integrity": "sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.5.tgz", + "integrity": "sha512-X6BBwiRxVaFHrb2WyBMddIeB5HBjJcAaUHyhLrM2FsxSq5TFqcHSsK7Zu1otag+o0ZphQGJewGH1tAyrD0zX1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.27.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz", + "integrity": "sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz", + "integrity": "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz", + "integrity": "sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.5.tgz", + "integrity": "sha512-RHagHLidG8hTZcnr4FpyMB2jtgd/OcyAazjMhoy5qmWJOx1uxKh4ntk0Pb46ajKM0rkf32lRH4C8c9qQiPR6IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.27.0", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz", + "integrity": "sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-reporter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz", + "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "thenby": "^1.3.4" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.0.tgz", + "integrity": "sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^4.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz", + "integrity": "sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sax": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylehacks": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.7.tgz", + "integrity": "sha512-bJkD0JkEtbRrMFtwgpJyBbFIwfDDONQ1Ov3sDLZQP8HuJ73kBOyx66H4bOcAbVWmnfLdvQ0AJwXxOMkpujcO6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.27.0", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/thenby": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", + "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/src/wp-content/themes/ipsum/package.json b/src/wp-content/themes/ipsum/package.json new file mode 100644 index 0000000000000..056747f5c8182 --- /dev/null +++ b/src/wp-content/themes/ipsum/package.json @@ -0,0 +1,43 @@ +{ + "name": "ipsum", + "version": "1.0.0", + "description": "Default WP Theme", + "author": "The WordPress Contributors", + "license": "GPL-2.0-or-later", + "keywords": [ + "WordPress", + "Theme" + ], + "bugs": { + "url": "https://core.trac.wordpress.org/" + }, + "homepage": "https://wordpress.org/themes/ipsum/", + "engines": { + "node": ">=24.18.0", + "npm": ">=11.16.0" + }, + "devEngines": { + "runtime": { + "name": "node", + "version": ">=24.18.0" + }, + "packageManager": { + "name": "npm", + "version": ">=11.16.0", + "onFail": "error" + } + }, + "devDependencies": { + "@wordpress/browserslist-config": "^6.34.0", + "postcss": "^8.5.6", + "postcss-cli": "^11.0.1", + "cssnano": "^7.1.2" + }, + "browserslist": [ + "extends @wordpress/browserslist-config" + ], + "scripts": { + "build": "postcss style.css --use cssnano -o style.min.css --no-map", + "watch": "postcss style.css --use cssnano -o style.min.css --no-map --watch" + } +} diff --git a/src/wp-content/themes/ipsum/patterns/about-row.php b/src/wp-content/themes/ipsum/patterns/about-row.php index 0b4e0ec03a1f4..64975e350c63e 100644 --- a/src/wp-content/themes/ipsum/patterns/about-row.php +++ b/src/wp-content/themes/ipsum/patterns/about-row.php @@ -4,7 +4,7 @@ * Slug: ipsum/about-row * Categories: about * Viewport width: 1280 - * Description: An about section on a dark band — the blog’s story beside the author’s square portrait, under a fit-text heading. + * Description: An about section on an inverted band. The blog’s story runs beside the author’s square portrait, under a fit-text heading. * * @package Ipsum * @since Ipsum 1.0 @@ -29,7 +29,7 @@
-
<?php esc_attr_e( 'Portrait of the author.', 'ipsum' ); ?>
+
<?php esc_attr_e( 'Portrait of the author.', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/archive-columns.php b/src/wp-content/themes/ipsum/patterns/archive-columns.php index 7e0c4017c26f9..251f10fd31c3c 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-columns.php +++ b/src/wp-content/themes/ipsum/patterns/archive-columns.php @@ -5,14 +5,14 @@ * Categories: posts * Block Types: core/query * Viewport width: 1280 - * Description: Featured image beside title and meta in a responsive row — the image takes a fixed width on desktop and the full width on small screens. + * Description: Featured image beside title and meta in a responsive row. The image takes a fixed width on desktop and the full width on small screens. * * @package Ipsum * @since Ipsum 1.0 */ ?> - +
diff --git a/src/wp-content/themes/ipsum/patterns/archive-compact.php b/src/wp-content/themes/ipsum/patterns/archive-compact.php index 543bc22a6d28a..a7b6238bd30d4 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-compact.php +++ b/src/wp-content/themes/ipsum/patterns/archive-compact.php @@ -5,15 +5,15 @@ * Categories: posts * Block Types: core/query * Viewport width: 1280 - * Description: Title, meta, and an excerpt — the Standard listing without images. + * Description: The Standard listing without images. Each post shows its title, meta, and an excerpt. * * @package Ipsum * @since Ipsum 1.0 */ ?> - -
+ +
@@ -21,7 +21,7 @@
- +

diff --git a/src/wp-content/themes/ipsum/patterns/archive-full.php b/src/wp-content/themes/ipsum/patterns/archive-full.php index 64c9d6149576f..ea632d61157ff 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-full.php +++ b/src/wp-content/themes/ipsum/patterns/archive-full.php @@ -5,7 +5,7 @@ * Categories: posts * Block Types: core/query * Viewport width: 1280 - * Description: The whole post in the stream — featured image, title, meta, full content, and the conversation link. The home feed, wherever you want it. + * Description: A listing of whole posts, like the home feed. Each post shows its featured image, title, meta, full content, and the conversation link. * * @package Ipsum * @since Ipsum 1.0 @@ -25,7 +25,7 @@
- +

@@ -36,18 +36,18 @@ -
+
- +

- +

- +

diff --git a/src/wp-content/themes/ipsum/patterns/archive-lead.php b/src/wp-content/themes/ipsum/patterns/archive-lead.php index 6b07e41fe6a54..126ec8d04d9d5 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-lead.php +++ b/src/wp-content/themes/ipsum/patterns/archive-lead.php @@ -5,7 +5,7 @@ * Categories: posts * Block Types: core/query * Viewport width: 1280 - * Description: A section lead — a small Manrope label over the five latest posts in the compact, imageless listing. + * Description: A section lead. It has a small Manrope label over the five latest posts in the compact, imageless listing. * * @package Ipsum * @since Ipsum 1.0 @@ -20,7 +20,7 @@ -
+
@@ -28,7 +28,7 @@
- +

diff --git a/src/wp-content/themes/ipsum/patterns/archive-minimal.php b/src/wp-content/themes/ipsum/patterns/archive-minimal.php index de136847b6b7f..4a0f40575f2b8 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-minimal.php +++ b/src/wp-content/themes/ipsum/patterns/archive-minimal.php @@ -5,14 +5,14 @@ * Categories: posts * Block Types: core/query * Viewport width: 1280 - * Description: Big post titles and a whisper of meta — nothing else. + * Description: Big post titles and a whisper of meta, nothing else. * * @package Ipsum * @since Ipsum 1.0 */ ?> - +
diff --git a/src/wp-content/themes/ipsum/patterns/archive-photographic.php b/src/wp-content/themes/ipsum/patterns/archive-photographic.php index 674f77ad3b137..58b5b97b32332 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-photographic.php +++ b/src/wp-content/themes/ipsum/patterns/archive-photographic.php @@ -12,7 +12,7 @@ */ ?> - +
diff --git a/src/wp-content/themes/ipsum/patterns/archive-simple.php b/src/wp-content/themes/ipsum/patterns/archive-simple.php index c9594dbd405e7..35590e17463f4 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-simple.php +++ b/src/wp-content/themes/ipsum/patterns/archive-simple.php @@ -5,28 +5,28 @@ * Categories: posts * Block Types: core/query * Viewport width: 1280 - * Description: A lean chronological list — titles, dates, categories, and reading time. Inherits the template’s query; turn that off when using it inside a page. + * Description: A lean chronological list of titles, dates, categories, and reading time. It inherits the template’s query, so turn that off when using it inside a page. * * @package Ipsum * @since Ipsum 1.0 */ ?> - -
+ +
- +

- +

diff --git a/src/wp-content/themes/ipsum/patterns/archive-standard.php b/src/wp-content/themes/ipsum/patterns/archive-standard.php index 33eccc8d6ae1b..0a94a2ca926b4 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-standard.php +++ b/src/wp-content/themes/ipsum/patterns/archive-standard.php @@ -5,15 +5,15 @@ * Categories: posts * Block Types: core/query * Viewport width: 1280 - * Description: Featured image, title, meta, and an excerpt with a Read more link — the classic listing. + * Description: The classic listing. Each post shows its featured image, title, meta, and an excerpt with a Read more link. * * @package Ipsum * @since Ipsum 1.0 */ ?> - -
+ +
@@ -25,7 +25,7 @@
- +

diff --git a/src/wp-content/themes/ipsum/patterns/contact-say-hi.php b/src/wp-content/themes/ipsum/patterns/contact-say-hi.php index c17c43112f695..c51c9c4d2b7da 100644 --- a/src/wp-content/themes/ipsum/patterns/contact-say-hi.php +++ b/src/wp-content/themes/ipsum/patterns/contact-say-hi.php @@ -4,7 +4,7 @@ * Slug: ipsum/contact-say-hi * Categories: contact * Viewport width: 1280 - * Description: A centered contact invitation — a display heading with the reach-out link over a row of social icons. + * Description: A centered contact invitation. A display heading with the reach-out link sits over a row of social icons. * * @package Ipsum * @since Ipsum 1.0 @@ -17,7 +17,7 @@

Feel free to reach out.', 'ipsum' ) ); ?>

- + diff --git a/src/wp-content/themes/ipsum/patterns/cta-membership.php b/src/wp-content/themes/ipsum/patterns/cta-membership.php index ff099e13128f6..89b0ea937a1c0 100644 --- a/src/wp-content/themes/ipsum/patterns/cta-membership.php +++ b/src/wp-content/themes/ipsum/patterns/cta-membership.php @@ -1,20 +1,21 @@ - -
-
-
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
+ +
+
+
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/cta-search.php b/src/wp-content/themes/ipsum/patterns/cta-search.php index d2271df11c472..35aca2d15f245 100644 --- a/src/wp-content/themes/ipsum/patterns/cta-search.php +++ b/src/wp-content/themes/ipsum/patterns/cta-search.php @@ -1,14 +1,22 @@ -

+ +
+
+

+ + +
+
+ diff --git a/src/wp-content/themes/ipsum/patterns/events-list.php b/src/wp-content/themes/ipsum/patterns/events-list.php index 69986acc5a47c..2edca39156a89 100644 --- a/src/wp-content/themes/ipsum/patterns/events-list.php +++ b/src/wp-content/themes/ipsum/patterns/events-list.php @@ -4,7 +4,7 @@ * Slug: ipsum/events-list * Categories: text * Viewport width: 1280 - * Description: A stack of event rows under dotted rules — title, date and place, with a reserve link on the right. + * Description: A stack of event rows under dotted rules. Each row has the title, date and place, with a reserve link on the right. * * @package Ipsum * @since Ipsum 1.0 @@ -25,13 +25,13 @@
-
-

+
+

- -
-
+ +
+

@@ -57,9 +57,9 @@

- -
-
+ +
+

@@ -85,9 +85,9 @@

- -
-
+ +
+

@@ -109,13 +109,13 @@ -
-

+
+

- -
-
+ +
+

diff --git a/src/wp-content/themes/ipsum/patterns/footer-centered.php b/src/wp-content/themes/ipsum/patterns/footer-centered.php index e9ecd0f9100af..14d683611ad09 100644 --- a/src/wp-content/themes/ipsum/patterns/footer-centered.php +++ b/src/wp-content/themes/ipsum/patterns/footer-centered.php @@ -5,7 +5,7 @@ * Categories: footer * Block Types: core/template-part/footer * Viewport width: 1280 - * Description: A centered footer on the toast card — the site name as a cropped wordmark over the tagline, with the credit line beneath. + * Description: A centered footer on an inverted card. The site name runs as a cropped wordmark over the tagline, with the credit line beneath. * * @package Ipsum * @since Ipsum 1.0 @@ -13,8 +13,8 @@ ?> -
-