@publier/shell 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- export{i as HASHED_ASSET_RE,t as docsShell,a as publierCacheControl}from"./integration-B8fpR1il.mjs";
1
+ export{i as HASHED_ASSET_RE,t as docsShell,a as publierCacheControl}from"./integration-ta_sKGK0.mjs";
@@ -50,6 +50,42 @@ if (import.meta.hot) {
50
50
  }
51
51
  customElements.define('publier-table-scroll', PublierTableScroll);
52
52
  })();
53
+ `,`
54
+ (() => {
55
+ if (window.__publierCodeScrollWired) return;
56
+ window.__publierCodeScrollWired = true;
57
+ const SELECTOR = 'pre[data-language]';
58
+ const watched = new WeakSet();
59
+ const label = (pre) => {
60
+ const title = pre.closest('figure')?.querySelector('figcaption .title')?.textContent.trim();
61
+ return title || (pre.getAttribute('data-language') + ' code');
62
+ };
63
+ const update = (pre) => {
64
+ if (pre.clientWidth > 0 && pre.scrollWidth > pre.clientWidth) {
65
+ pre.setAttribute('tabindex', '0');
66
+ pre.setAttribute('role', 'region');
67
+ pre.setAttribute('aria-label', label(pre));
68
+ } else {
69
+ pre.removeAttribute('tabindex');
70
+ pre.removeAttribute('role');
71
+ pre.removeAttribute('aria-label');
72
+ }
73
+ };
74
+ const observer = new ResizeObserver((entries) => {
75
+ for (const entry of entries) update(entry.target);
76
+ });
77
+ const scan = () => {
78
+ for (const pre of document.querySelectorAll(SELECTOR)) {
79
+ if (watched.has(pre)) continue;
80
+ watched.add(pre);
81
+ observer.observe(pre);
82
+ update(pre);
83
+ }
84
+ };
85
+ if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', scan);
86
+ else scan();
87
+ document.addEventListener('astro:page-load', scan);
88
+ })();
53
89
  `,_(),x(),w()];return e.searchEnabled&&t.push(C(e.searchHotkey),pe()),t.join(`
54
90
  `)}function ut(e,t){let n=[],r=[],i=[];for(let a of[`heading`,`body`,`mono`]){let o=e[a];if(!o?.family)continue;let s=`--publier-font-${a}`,c=a===`mono`?[`monospace`]:[`system-ui`,`sans-serif`],l=[o.weight??`400`],u=[o.style??`normal`];if(o.googleFontsUrl)n.push({name:o.family,cssVariable:s,provider:M.google(),fallbacks:c,weights:l,styles:u,subsets:[`latin`]}),r.push(a);else if(o.src){let e=j.isAbsolute(o.src)&&T(o.src)?o.src:j.join(t,`public`,o.src.replace(/^\/+/,``));n.push({name:o.family,cssVariable:s,provider:M.local(),fallbacks:c,weights:l,styles:u,subsets:[`latin`],options:{variants:[{weight:l[0],style:u[0],src:[e]}]}}),r.push(a)}else i.push(`${s}:"${o.family}",${c.join(`,`)};`)}return{entries:n,familyOnlyCss:i.length?`:root{${i.join(``)}}`:``,slots:r}}const dt=[{pkg:`astro-expressive-code`,aliases:[`astro-expressive-code`]},{pkg:`@astrojs/mdx`,aliases:[`@astrojs/mdx`]},{pkg:`@astrojs/sitemap`,aliases:[`@astrojs/sitemap`]},{pkg:`astro-pagefind`,aliases:[`astro-pagefind`,`pagefind`]},{pkg:`@qwik.dev/astro`,aliases:[`@qwik.dev/astro`]}];function $(e,t){let n=j.join(e,`src`,`content`,t);if(!T(n))return!1;try{return he(n,{recursive:!0}).some(e=>typeof e==`string`&&/\.mdx?$/.test(e))}catch{return!1}}function ft(e){return JSON.stringify(e).replace(/</g,`\\u003c`)}function pt(e={}){let t=null,n=``,r=``,i={name:`@publier/shell`,hooks:{"astro:config:setup":async({command:a,config:c,updateConfig:l,injectScript:u,injectRoute:d,logger:f})=>{let m=c.root?ge(c.root):process.cwd();try{me()}catch(e){let t=e instanceof Error?e.message:String(e),n=ne(t);throw n?Error(n):e}let h=p(j.join(m,`package.json`)),g=JSON.stringify(e),_=Be(m),v=Re(_??``);if(_)for(let e of ze(_))f.warn(e);let y=v.site;t={llms:v.llms,siteName:y.name,siteUrl:y.url??void 0,siteDescription:y.description??void 0};let b=v.vars,re=v.fonts,ie=v.nav,ae=v.announcement,oe=v.docs,x=typeof y.url==`string`&&y.url.length>0;x&&!c.site&&l({site:y.url});let fe=new Set(c.integrations.map(e=>e.name)),S=dt.filter(({aliases:e})=>!e.some(e=>fe.has(e)));S.length>0&&f.warn(`[@publier/shell] Required framework integrations are not registered in
55
91
  astro.config.ts. As of @publier/shell@2.0.0, docsShell() no longer
@@ -1 +1 @@
1
- export{t as docsShell,n as hoistMediaOutOfUtilitiesLayer,r as publierCascadeHoistPlugin}from"./integration-B8fpR1il.mjs";
1
+ export{t as docsShell,n as hoistMediaOutOfUtilitiesLayer,r as publierCascadeHoistPlugin}from"./integration-ta_sKGK0.mjs";
@@ -98,7 +98,7 @@ color-scheme: dark;
98
98
 
99
99
  --color-pl-muted: oklch(72% 0.067 181.6);
100
100
  --color-pl-muted-bg: oklch(22.5% 0.02 181.6);
101
- --color-pl-subtle: oklch(55% 0.04 181.6);
101
+ --color-pl-subtle: oklch(58% 0.04 181.6);
102
102
  --color-pl-card: oklch(20.5% 0.018 181.6);
103
103
  --color-pl-card-hover: oklch(26% 0.03 181.6);
104
104
  --color-pl-popover: oklch(20.5% 0.018 181.6);
@@ -78,7 +78,7 @@ color-scheme: dark;
78
78
 
79
79
  --color-pl-muted: oklch(72% 0.067 84.43);
80
80
  --color-pl-muted-bg: oklch(22.5% 0.02 84.43);
81
- --color-pl-subtle: oklch(55% 0.04 84.43);
81
+ --color-pl-subtle: oklch(58.5% 0.04 84.43);
82
82
  --color-pl-card: oklch(20.5% 0.018 84.43);
83
83
  --color-pl-card-hover: oklch(26% 0.03 84.43);
84
84
  --color-pl-popover: oklch(20.5% 0.018 84.43);
@@ -81,7 +81,7 @@ color-scheme: dark;
81
81
 
82
82
  --color-pl-muted: oklch(72% 0.067 304.77);
83
83
  --color-pl-muted-bg: oklch(22.5% 0.02 304.77);
84
- --color-pl-subtle: oklch(55% 0.04 304.77);
84
+ --color-pl-subtle: oklch(63% 0.04 304.77);
85
85
  --color-pl-card: oklch(20.5% 0.018 304.77);
86
86
  --color-pl-card-hover: oklch(26% 0.03 304.77);
87
87
  --color-pl-popover: oklch(20.5% 0.018 304.77);
@@ -81,7 +81,7 @@ color-scheme: dark;
81
81
 
82
82
  --color-pl-muted: oklch(72% 0.067 276.93);
83
83
  --color-pl-muted-bg: oklch(22.5% 0.02 276.93);
84
- --color-pl-subtle: oklch(55% 0.04 276.93);
84
+ --color-pl-subtle: oklch(58% 0.04 276.93);
85
85
  --color-pl-card: oklch(20.5% 0.018 276.93);
86
86
  --color-pl-card-hover: oklch(26% 0.03 276.93);
87
87
  --color-pl-popover: oklch(20.5% 0.018 276.93);
@@ -81,7 +81,7 @@ color-scheme: dark;
81
81
 
82
82
  --color-pl-muted: oklch(72% 0.067 16.93);
83
83
  --color-pl-muted-bg: oklch(22.5% 0.02 16.93);
84
- --color-pl-subtle: oklch(55% 0.04 16.93);
84
+ --color-pl-subtle: oklch(62% 0.04 16.93);
85
85
  --color-pl-card: oklch(20.5% 0.018 16.93);
86
86
  --color-pl-card-hover: oklch(26% 0.03 16.93);
87
87
  --color-pl-popover: oklch(20.5% 0.018 16.93);
@@ -78,7 +78,7 @@ color-scheme: dark;
78
78
 
79
79
  --color-pl-muted: oklch(72% 0.067 163.22);
80
80
  --color-pl-muted-bg: oklch(22.5% 0.02 163.22);
81
- --color-pl-subtle: oklch(55% 0.04 163.22);
81
+ --color-pl-subtle: oklch(58.5% 0.04 163.22);
82
82
  --color-pl-card: oklch(20.5% 0.018 163.22);
83
83
  --color-pl-card-hover: oklch(26% 0.03 163.22);
84
84
  --color-pl-popover: oklch(20.5% 0.018 163.22);
@@ -78,7 +78,7 @@ color-scheme: dark;
78
78
 
79
79
  --color-pl-muted: oklch(72% 0.067 276.93);
80
80
  --color-pl-muted-bg: oklch(22.5% 0.02 276.93);
81
- --color-pl-subtle: oklch(55% 0.04 276.93);
81
+ --color-pl-subtle: oklch(58% 0.04 276.93);
82
82
  --color-pl-card: oklch(20.5% 0.018 276.93);
83
83
  --color-pl-card-hover: oklch(26% 0.03 276.93);
84
84
  --color-pl-popover: oklch(20.5% 0.018 276.93);
@@ -97,7 +97,7 @@ color-scheme: dark;
97
97
 
98
98
  --color-pl-muted: oklch(72% 0.067 66);
99
99
  --color-pl-muted-bg: oklch(22.5% 0.02 58);
100
- --color-pl-subtle: oklch(55% 0.04 60);
100
+ --color-pl-subtle: oklch(59% 0.04 60);
101
101
 
102
102
  --color-pl-card: oklch(20.5% 0.018 58);
103
103
  --color-pl-card-hover: oklch(26% 0.03 60);
@@ -205,7 +205,7 @@ color-scheme: dark;
205
205
  .dark {
206
206
  --color-pl-muted: #8a8f98;
207
207
  --color-pl-muted-bg: #141516;
208
- --color-pl-subtle: #62666d;
208
+ --color-pl-subtle: #72767d;
209
209
  --color-pl-card: #0f1011;
210
210
  --color-pl-card-hover: #141516;
211
211
  --color-pl-popover: #141516;
@@ -81,7 +81,7 @@ color-scheme: dark;
81
81
 
82
82
  --color-pl-muted: oklch(72% 0.067 232.66);
83
83
  --color-pl-muted-bg: oklch(22.5% 0.02 232.66);
84
- --color-pl-subtle: oklch(55% 0.04 232.66);
84
+ --color-pl-subtle: oklch(60% 0.04 232.66);
85
85
  --color-pl-card: oklch(20.5% 0.018 232.66);
86
86
  --color-pl-card-hover: oklch(26% 0.03 232.66);
87
87
  --color-pl-popover: oklch(20.5% 0.018 232.66);
@@ -78,7 +78,7 @@ color-scheme: dark;
78
78
 
79
79
  --color-pl-muted: oklch(72% 0.067 293.54);
80
80
  --color-pl-muted-bg: oklch(22.5% 0.02 293.54);
81
- --color-pl-subtle: oklch(55% 0.04 293.54);
81
+ --color-pl-subtle: oklch(58% 0.04 293.54);
82
82
  --color-pl-card: oklch(20.5% 0.018 293.54);
83
83
  --color-pl-card-hover: oklch(26% 0.03 293.54);
84
84
  --color-pl-popover: oklch(20.5% 0.018 293.54);
@@ -78,7 +78,7 @@ color-scheme: dark;
78
78
 
79
79
  --color-pl-muted: oklch(72% 0.067 13.43);
80
80
  --color-pl-muted-bg: oklch(22.5% 0.02 13.43);
81
- --color-pl-subtle: oklch(55% 0.04 13.43);
81
+ --color-pl-subtle: oklch(58% 0.04 13.43);
82
82
  --color-pl-card: oklch(20.5% 0.018 13.43);
83
83
  --color-pl-card-hover: oklch(26% 0.03 13.43);
84
84
  --color-pl-popover: oklch(20.5% 0.018 13.43);
@@ -81,7 +81,7 @@ color-scheme: dark;
81
81
 
82
82
  --color-pl-muted: oklch(72% 0.067 84.43);
83
83
  --color-pl-muted-bg: oklch(22.5% 0.02 84.43);
84
- --color-pl-subtle: oklch(55% 0.04 84.43);
84
+ --color-pl-subtle: oklch(61% 0.04 84.43);
85
85
  --color-pl-card: oklch(20.5% 0.018 84.43);
86
86
  --color-pl-card-hover: oklch(26% 0.03 84.43);
87
87
  --color-pl-popover: oklch(20.5% 0.018 84.43);
@@ -78,7 +78,7 @@ color-scheme: dark;
78
78
 
79
79
  --color-pl-muted: oklch(72% 0.067 160.37);
80
80
  --color-pl-muted-bg: oklch(22.5% 0.02 160.37);
81
- --color-pl-subtle: oklch(55% 0.04 160.37);
81
+ --color-pl-subtle: oklch(61% 0.04 160.37);
82
82
  --color-pl-card: oklch(20.5% 0.018 160.37);
83
83
  --color-pl-card-hover: oklch(26% 0.03 160.37);
84
84
  --color-pl-popover: oklch(20.5% 0.018 160.37);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@publier/shell",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "license": "UNLICENSED",
5
5
  "description": "Qwik + Astro docs layout for Publier sites.",
6
6
  "type": "module",
@@ -129,7 +129,7 @@
129
129
  "@github/details-menu-element": "^1.0.13",
130
130
  "@github/relative-time-element": "^5.3.1",
131
131
  "@github/tab-container-element": "^4.9.0",
132
- "@publier/native": "0.4.0",
132
+ "@publier/native": "0.14.1",
133
133
  "@tailwindcss/typography": "^0.5.20",
134
134
  "astro-pagefind": "^2.0.1",
135
135
  "daisyui": "^5.7.50",
@@ -28,7 +28,7 @@ const displayTags = tags ?? (type ? [type] : []);
28
28
  {date}
29
29
  </time>
30
30
  {version && (
31
- <span class="mt-1.5 inline-block text-xs font-mono text-base-content/60">{version}</span>
31
+ <span class="mt-1.5 inline-block text-xs font-mono text-[var(--color-pl-muted,var(--color-base-content))]">{version}</span>
32
32
  )}
33
33
  {displayTags.length > 0 && (
34
34
  <ul class="mt-2 flex flex-col items-end gap-1.5 list-none p-0 m-0">
@@ -26,7 +26,7 @@ const colCls = columns === 2
26
26
  <div class="card-body">
27
27
  {item.icon && <div class="text-3xl leading-none" aria-hidden="true">{item.icon}</div>}
28
28
  <h3 class="card-title text-lg text-base-content">{item.title}</h3>
29
- <p class="text-base-content/70">{item.description}</p>
29
+ <p class="text-[var(--color-pl-muted,var(--color-base-content))]">{item.description}</p>
30
30
  {item.href && (
31
31
  <a class="absolute inset-0" href={item.href} aria-label={item.title}>
32
32
  <span class="sr-only">Learn more about {item.title}</span>
@@ -31,7 +31,7 @@ const visualOrder = reverse ? 'md:order-first' : '';
31
31
  <span class="badge badge-outline badge-primary">{eyebrow}</span>
32
32
  )}
33
33
  <h2 class="text-3xl md:text-4xl font-bold text-base-content">{title}</h2>
34
- {subtitle && <p class="mt-3 text-lg text-base-content/70">{subtitle}</p>}
34
+ {subtitle && <p class="mt-3 text-lg text-[var(--color-pl-muted,var(--color-base-content))]">{subtitle}</p>}
35
35
  {hasBullets && (
36
36
  <ul class="mt-6 space-y-2">
37
37
  {items.map((bullet) => (
@@ -70,9 +70,9 @@ const hasCaption = Boolean(caption) || Boolean(hint);
70
70
  )}
71
71
  </div>
72
72
  {hasCaption && (
73
- <figcaption class="flex flex-wrap items-baseline gap-2 px-4 py-2 text-sm text-base-content/70 border-t border-base-300">
73
+ <figcaption class="flex flex-wrap items-baseline gap-2 px-4 py-2 text-sm text-[var(--color-pl-muted,var(--color-base-content))] border-t border-base-300">
74
74
  {caption && <span>{caption}</span>}
75
- {hint && <span class="text-xs text-base-content/50 italic">{hint}</span>}
75
+ {hint && <span class="text-xs text-[var(--color-pl-muted,var(--color-base-content))] italic">{hint}</span>}
76
76
  </figcaption>
77
77
  )}
78
78
  </figure>
@@ -23,7 +23,7 @@ const ctasCls = align === 'center' ? 'justify-center' : 'justify-start';
23
23
  )}
24
24
  <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold text-base-content">{title}</h1>
25
25
  {subtitle && (
26
- <p class="mt-4 text-lg md:text-xl text-base-content/70 max-w-2xl">{subtitle}</p>
26
+ <p class="mt-4 text-lg md:text-xl text-[var(--color-pl-muted,var(--color-base-content))] max-w-2xl">{subtitle}</p>
27
27
  )}
28
28
  {(primaryCta || secondaryCta) && (
29
29
  <div class={`mt-8 flex flex-wrap gap-3 ${ctasCls}`}>
@@ -30,17 +30,17 @@ const isEmpty = jobs.length === 0;
30
30
  <section>
31
31
  {heading && <h2 class="text-2xl md:text-3xl font-bold text-base-content mb-6">{heading}</h2>}
32
32
  {isEmpty ? (
33
- <p class="text-base-content/60 italic">{emptyMessage}</p>
33
+ <p class="text-[var(--color-pl-muted,var(--color-base-content))] italic">{emptyMessage}</p>
34
34
  ) : (
35
35
  departmentOrder.map((dept) => (
36
36
  <div class="mb-8">
37
- <h3 class="text-xs uppercase tracking-wider text-base-content/60 mb-2">{dept}</h3>
37
+ <h3 class="text-xs uppercase tracking-wider text-[var(--color-pl-muted,var(--color-base-content))] mb-2">{dept}</h3>
38
38
  <ul class="menu menu-compact bg-base-100 border border-base-300 rounded-box">
39
39
  {groups[dept]?.map((job) => (
40
40
  <li>
41
41
  <a href={job.href} class="justify-between">
42
42
  <span class="font-semibold">{job.title}</span>
43
- <span class="text-xs text-base-content/60">
43
+ <span class="text-xs text-[var(--color-pl-muted,var(--color-base-content))]">
44
44
  {job.location}{job.type ? ` · ${job.type}` : ''}
45
45
  </span>
46
46
  </a>
@@ -31,7 +31,7 @@ const colCls = columns === 3
31
31
  {hasHeader && (
32
32
  <header class="max-w-2xl mx-auto text-center mb-8 px-6">
33
33
  {title && <h2 class="text-2xl md:text-3xl font-bold text-base-content">{title}</h2>}
34
- {subtitle && <p class="mt-2 text-base-content/70">{subtitle}</p>}
34
+ {subtitle && <p class="mt-2 text-[var(--color-pl-muted,var(--color-base-content))]">{subtitle}</p>}
35
35
  </header>
36
36
  )}
37
37
  <ul class={`list-none grid gap-8 items-center px-6 max-w-6xl mx-auto ${colCls}`}>
@@ -39,7 +39,7 @@ const { items } = Astro.props;
39
39
  {item.quote && (
40
40
  <blockquote class="italic text-base-content/80 mt-2">&ldquo;{item.quote}&rdquo;</blockquote>
41
41
  )}
42
- <footer class="mt-3 flex items-center justify-between text-sm text-base-content/60">
42
+ <footer class="mt-3 flex items-center justify-between text-sm text-[var(--color-pl-muted,var(--color-base-content))]">
43
43
  <span>{item.outlet}</span>
44
44
  {item.date && (
45
45
  <time datetime={item.date}>{item.date}</time>
@@ -23,7 +23,7 @@ const yearlyId = `publier-pricing-${groupId}-yearly`;
23
23
  {(title || subtitle) && (
24
24
  <header class="max-w-2xl mx-auto text-center mb-8">
25
25
  {title && <h2 class="text-3xl md:text-4xl font-bold text-base-content">{title}</h2>}
26
- {subtitle && <p class="mt-3 text-lg text-base-content/70">{subtitle}</p>}
26
+ {subtitle && <p class="mt-3 text-lg text-[var(--color-pl-muted,var(--color-base-content))]">{subtitle}</p>}
27
27
  </header>
28
28
  )}
29
29
 
@@ -18,9 +18,9 @@ const { tiers } = Astro.props as PricingTableProps;
18
18
  </span>
19
19
  )}
20
20
  <div class="card-body">
21
- <h3 class="text-sm uppercase tracking-wider font-medium text-base-content/70">{tier.name}</h3>
21
+ <h3 class="text-sm uppercase tracking-wider font-medium text-[var(--color-pl-muted,var(--color-base-content))]">{tier.name}</h3>
22
22
  <div class="text-3xl font-bold text-base-content">{tier.price}</div>
23
- {tier.tagline && <p class="text-sm text-base-content/60">{tier.tagline}</p>}
23
+ {tier.tagline && <p class="text-sm text-[var(--color-pl-muted,var(--color-base-content))]">{tier.tagline}</p>}
24
24
  <ul class="list-none space-y-2 mt-3 mb-6">
25
25
  {tier.features.map((feat) => (
26
26
  <li class="flex items-start gap-2 text-sm text-base-content">
@@ -39,8 +39,8 @@ const colCls = columns === 2
39
39
  </div>
40
40
  )}
41
41
  <h3 class="card-title text-base-content">{member.name}</h3>
42
- <p class="text-sm text-base-content/60">{member.role}</p>
43
- {member.bio && <p class="text-sm text-base-content/70">{member.bio}</p>}
42
+ <p class="text-sm text-[var(--color-pl-muted,var(--color-base-content))]">{member.role}</p>
43
+ {member.bio && <p class="text-sm text-[var(--color-pl-muted,var(--color-base-content))]">{member.bio}</p>}
44
44
  {member.socials && member.socials.length > 0 && (
45
45
  <ul class="list-none flex gap-3 mt-2">
46
46
  {member.socials.map((s) => (
@@ -35,7 +35,7 @@ const meta = [role, company].filter(Boolean).join(', ');
35
35
  )}
36
36
  <div class="flex flex-col">
37
37
  <span class="font-semibold text-base-content">{author}</span>
38
- {meta && <span class="text-sm text-base-content/60">{meta}</span>}
38
+ {meta && <span class="text-sm text-[var(--color-pl-muted,var(--color-base-content))]">{meta}</span>}
39
39
  </div>
40
40
  </figcaption>
41
41
  </div>
@@ -716,23 +716,34 @@ aside.alert .pl-callout__body > :first-child {
716
716
  * - Dismiss button absolutely positioned so it doesn't push the centered
717
717
  * message off-axis.
718
718
  */
719
+ /* Theme-able through tokens (see docs/THEMING.md "Announcement banner"):
720
+ * `--publier-banner-{bg,fg,link,border,radius}`. Each fallback is what the
721
+ * variant's soft alert resolves to, so an unset token changes nothing. */
719
722
  header.alert[data-publier-banner] {
720
723
  display: flex;
721
724
  align-items: center;
722
725
  justify-content: center;
723
726
  padding-block: 0.5rem;
724
- color: var(--color-base-content);
727
+ color: var(--publier-banner-fg, var(--color-base-content));
728
+ background: var(
729
+ --publier-banner-bg,
730
+ color-mix(in oklab, var(--alert-color, var(--color-base-content)) 8%, var(--color-base-100))
731
+ );
732
+ border-color: var(--publier-banner-border, var(--alert-border-color));
733
+ border-radius: var(--publier-banner-radius, 0);
725
734
  position: relative;
726
735
  }
727
- header.alert[data-publier-banner] .link,
728
736
  header.alert[data-publier-banner] > span {
729
- color: var(--color-base-content);
737
+ color: var(--publier-banner-fg, var(--color-base-content));
738
+ }
739
+ header.alert[data-publier-banner] .link {
740
+ color: var(--publier-banner-link, var(--publier-banner-fg, var(--color-base-content)));
730
741
  }
731
742
  header.alert[data-publier-banner] [data-publier-banner-dismiss] {
732
743
  position: absolute;
733
744
  inset-inline-end: 0.5rem;
734
745
  margin-inline-start: 0;
735
- color: var(--color-base-content);
746
+ color: var(--publier-banner-fg, var(--color-base-content));
736
747
  }
737
748
 
738
749
  /* Native dialog top-layer placement keeps mobile docs above the sticky header. */
@@ -775,6 +786,13 @@ header.alert[data-publier-banner] [data-publier-banner-dismiss] {
775
786
  outline-offset: 2px;
776
787
  }
777
788
 
789
+ /* Scrollable code blocks are focusable (code-scroll runtime); inset ring because
790
+ * the Expressive Code frame clips overflow. */
791
+ .expressive-code pre[data-language]:focus-visible {
792
+ outline: 2px solid var(--color-primary);
793
+ outline-offset: -2px;
794
+ }
795
+
778
796
  /* Documentation uses one primary header row; selectors and sections sit beside the brand. */
779
797
  [data-publier-top-nav] > .navbar {
780
798
  min-height: var(--publier-nav-height, 4rem);
@@ -162,10 +162,15 @@
162
162
  * had as `--qw-color-muted-foreground`. Default derives from
163
163
  * base-content via color-mix so un-overridden themes still
164
164
  * look reasonable; themes with a deliberate warm/cool tint
165
- * should override. */
166
- --color-pl-muted: color-mix(in oklch, var(--color-base-content) 62%, var(--color-base-100));
165
+ * should override. 85% (not lower): a mid-tone `base-content` such as
166
+ * #525666 on white is 7.3:1 itself, and 62% of it fell to ~3.1:1, below
167
+ * WCAG AA (4.5:1) for body-size text; 85% measures ~5.1:1 there and
168
+ * stays above 4.5:1 for any base-content that already has >= 6:1. */
169
+ --color-pl-muted: color-mix(in oklch, var(--color-base-content) 85%, var(--color-base-100));
167
170
  --color-pl-muted-bg: var(--color-base-200);
168
- --color-pl-subtle: color-mix(in oklch, var(--color-base-content) 45%, var(--color-base-100));
171
+ /* Quietest text (captions, counters). 65%: every shipped surface reaches
172
+ * 4.5:1 at <= 61%, and it stays visibly lighter than muted (85%). */
173
+ --color-pl-subtle: color-mix(in oklch, var(--color-base-content) 65%, var(--color-base-100));
169
174
 
170
175
  /* Raised — tile / card surfaces. `card-hover` is the
171
176
  * visible lift on pointer hover; missing in the daisyUI
@@ -219,6 +224,14 @@
219
224
  --publier-radius-panel: var(--radius-box, 0.75rem);
220
225
  --publier-radius-chip: var(--radius-selector, 0.5rem);
221
226
 
227
+ /* Announcement banner. Only the context-free defaults live here.
228
+ * `--publier-banner-bg`, `-border` and `-link` are left unset on purpose:
229
+ * their defaults depend on the banner's variant (info, warning, success)
230
+ * and on its own `--alert-color`, so the banner rule in `base.css` carries
231
+ * those fallbacks and a value set here or in `customCss` replaces them. */
232
+ --publier-banner-fg: var(--color-base-content);
233
+ --publier-banner-radius: 0;
234
+
222
235
  --publier-space-xxs: 0.125rem;
223
236
  --publier-space-xs: 0.25rem;
224
237
  --publier-space-sm: 0.5rem;