@penn-libraries/web 1.4.0-dev.4 → 1.4.0-dev.5
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/cjs/{index-BKWYkqL-.js → index-Bh9Ii5qa.js} +65 -3
- package/dist/cjs/index-Bh9Ii5qa.js.map +1 -0
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/pennlibs-accordion.pennlibs-expand-text.pennlibs-feedback.pennlibs-footer.pennlibs-header.pennlibs-service-switcher.entry.cjs.js.map +1 -0
- package/dist/cjs/{pennlibs-accordion_5.cjs.entry.js → pennlibs-accordion_6.cjs.entry.js} +70 -4
- package/dist/cjs/pennlibs-autocomplete.cjs.entry.js +1 -1
- package/dist/cjs/pennlibs-banner.cjs.entry.js +1 -1
- package/dist/cjs/pennlibs-chat.cjs.entry.js +1 -1
- package/dist/cjs/pennlibs-fallback-img.cjs.entry.js +1 -1
- package/dist/cjs/pennlibs-hero.cjs.entry.js +2 -2
- package/dist/cjs/pennlibs-iiif-img.cjs.entry.js +1 -1
- package/dist/cjs/web.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +2 -1
- package/dist/collection/components/pennlibs-header/pennlibs-header.css +27 -18
- package/dist/collection/components/pennlibs-header/pennlibs-header.js +2 -1
- package/dist/collection/components/pennlibs-header/pennlibs-header.js.map +1 -1
- package/dist/collection/components/pennlibs-hero/pennlibs-hero.js +1 -1
- package/dist/collection/components/pennlibs-service-switcher/pennlibs-service-switcher.css +224 -0
- package/dist/collection/components/pennlibs-service-switcher/pennlibs-service-switcher.js +118 -0
- package/dist/collection/components/pennlibs-service-switcher/pennlibs-service-switcher.js.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/pennlibs-header.js +2 -2
- package/dist/components/pennlibs-header.js.map +1 -1
- package/dist/components/pennlibs-hero.js +1 -1
- package/dist/components/pennlibs-service-switcher.d.ts +11 -0
- package/dist/components/pennlibs-service-switcher.js +94 -0
- package/dist/components/pennlibs-service-switcher.js.map +1 -0
- package/dist/docs.json +71 -1
- package/dist/{web/p-Cw9fYoti.js → esm/index-BxutzoSj.js} +65 -3
- package/dist/esm/index-BxutzoSj.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/pennlibs-accordion.pennlibs-expand-text.pennlibs-feedback.pennlibs-footer.pennlibs-header.pennlibs-service-switcher.entry.js.map +1 -0
- package/dist/{web/p-ca1412b5.entry.js → esm/pennlibs-accordion_6.entry.js} +70 -5
- package/dist/esm/pennlibs-autocomplete.entry.js +1 -1
- package/dist/esm/pennlibs-banner.entry.js +1 -1
- package/dist/esm/pennlibs-chat.entry.js +1 -1
- package/dist/esm/pennlibs-fallback-img.entry.js +1 -1
- package/dist/esm/pennlibs-hero.entry.js +2 -2
- package/dist/esm/pennlibs-iiif-img.entry.js +1 -1
- package/dist/esm/web.js +3 -3
- package/dist/types/components/pennlibs-header/pennlibs-header.d.ts +1 -0
- package/dist/types/components/pennlibs-service-switcher/pennlibs-service-switcher.d.ts +30 -0
- package/dist/types/components.d.ts +59 -0
- package/dist/web/index.esm.js +1 -1
- package/dist/web/{p-0eb9e4fa.entry.js → p-152d30af.entry.js} +1 -1
- package/dist/web/{p-85b7d695.entry.js → p-48ff4883.entry.js} +1 -1
- package/dist/web/{p-af10bd16.entry.js → p-4af80a22.entry.js} +2 -2
- package/dist/{esm/pennlibs-accordion_5.entry.js → web/p-6ea9889d.entry.js} +70 -5
- package/dist/{esm/index-Cw9fYoti.js → web/p-BxutzoSj.js} +65 -3
- package/dist/web/p-BxutzoSj.js.map +1 -0
- package/dist/web/{p-1c284e42.entry.js → p-b503cf62.entry.js} +1 -1
- package/dist/web/{p-4f2ff6ec.entry.js → p-bca28ffd.entry.js} +1 -1
- package/dist/web/{p-8d7c5424.entry.js → p-bcfaaae4.entry.js} +1 -1
- package/dist/web/pennlibs-accordion.pennlibs-expand-text.pennlibs-feedback.pennlibs-footer.pennlibs-header.pennlibs-service-switcher.entry.esm.js.map +1 -0
- package/dist/web/web.css +7 -0
- package/dist/web/web.esm.js +3 -3
- package/hydrate/index.js +122 -3
- package/hydrate/index.mjs +122 -3
- package/package.json +1 -1
- package/dist/cjs/index-BKWYkqL-.js.map +0 -1
- package/dist/cjs/pennlibs-accordion.pennlibs-expand-text.pennlibs-feedback.pennlibs-footer.pennlibs-header.entry.cjs.js.map +0 -1
- package/dist/esm/index-Cw9fYoti.js.map +0 -1
- package/dist/esm/pennlibs-accordion.pennlibs-expand-text.pennlibs-feedback.pennlibs-footer.pennlibs-header.entry.js.map +0 -1
- package/dist/web/p-Cw9fYoti.js.map +0 -1
- package/dist/web/pennlibs-accordion.pennlibs-expand-text.pennlibs-feedback.pennlibs-footer.pennlibs-header.entry.esm.js.map +0 -1
|
@@ -51,7 +51,7 @@ const Hero = /*@__PURE__*/ proxyCustomElement(class Hero extends HTMLElement {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
render() {
|
|
54
|
-
return (h("div", { key: '
|
|
54
|
+
return (h("div", { key: '11c5fe7ac2c3605ccbb6b7acd979469d136195c8', class: "hero", style: { backgroundImage: `url(${this.heroSrc})` } }, h("div", { key: '06d216d91c1c8330c1dbdb6084231c98b840387f', class: "hero__content" }, h("slot", { key: 'dd7516040bb5e8440f6acf8651675119686f0ce5', name: "start" }), h("div", { key: '81146751e4ae8e6a13a64236fba980ff66b01385', class: "hero__heading-container" }, this.heroHeadingElement && (h("div", { key: 'b46fb33705a043210e37f97f76abe56d9f96ce4a', class: "viewport-margins" }, h("h1", { key: 'e5f05c78315b3dcfe9c26fcd7c49bc338bc2d5b1', class: "hero__heading", innerHTML: this.heroHeadingElement.innerText }), this.heroParagraphElement && h("p", { key: '37a220f154057e74feaaa591ae25183de4c45880', class: "hero__sub-heading", innerHTML: this.heroParagraphElement.innerHTML })))))));
|
|
55
55
|
}
|
|
56
56
|
static get assetsDirs() { return ["assets"]; }
|
|
57
57
|
get hostElement() { return this; }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../types/components";
|
|
2
|
+
|
|
3
|
+
interface PennlibsServiceSwitcher extends Components.PennlibsServiceSwitcher, HTMLElement {}
|
|
4
|
+
export const PennlibsServiceSwitcher: {
|
|
5
|
+
prototype: PennlibsServiceSwitcher;
|
|
6
|
+
new (): PennlibsServiceSwitcher;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
|
|
2
|
+
|
|
3
|
+
const pennlibsServiceSwitcherCss = ".sc-pennlibs-service-switcher-h{position:relative;display:inline-flex;align-items:center;font-family:var(--pl-font-family);font-size:var(--pl-font-size)}.service-switcher__trigger.sc-pennlibs-service-switcher{all:unset;display:inline-flex;align-items:center;justify-content:center;padding:var(--pl-space-xs);border-radius:var(--pl-border-radius);cursor:pointer;color:var(--color-fg-service, var(--pl-color-penn-blue));background:var(--pl-color-bg-subtle);border:solid 1px transparent}.service-switcher__trigger.sc-pennlibs-service-switcher:hover{border-color:var(--pl-color-fg-subtle)}[theme=\"dark\"].sc-pennlibs-service-switcher-h .service-switcher__trigger.sc-pennlibs-service-switcher{background:rgb(from var(--color-fg-service, var(--pl-color-fg-on-emphasis)) r g b / 0.1)}[theme=\"dark\"].sc-pennlibs-service-switcher-h .service-switcher__trigger.sc-pennlibs-service-switcher:hover{background:rgb(from var(--color-fg-service, var(--pl-color-fg-on-emphasis)) r g b / 0.18);border-color:rgb(from var(--color-fg-service, var(--pl-color-fg-on-emphasis)) r g b / 0.4)}.service-switcher__trigger.sc-pennlibs-service-switcher:focus-visible{outline:none;box-shadow:var(--pl-focus-box-shadow)}.service-switcher__tooltip.sc-pennlibs-service-switcher{visibility:hidden;opacity:0;transition:opacity 120ms ease;position:absolute;z-index:10;top:calc(100% + var(--pl-space-2xs));left:50%;translate:-50%;width:max-content;max-width:16rem;padding:var(--pl-space-2xs) var(--pl-space-xs);border-radius:var(--pl-border-radius-subtle);background:var(--pl-color-fg-default);color:var(--pl-color-bg-default);font-size:0.875rem;line-height:1.4}@supports (anchor-name: --a){.service-switcher__trigger.sc-pennlibs-service-switcher{anchor-name:--service-switcher-anchor}.service-switcher__tooltip.sc-pennlibs-service-switcher{position-anchor:--service-switcher-anchor;top:calc(anchor(bottom) + var(--pl-space-2xs));left:anchor(center)}}.service-switcher__trigger.sc-pennlibs-service-switcher:hover+.service-switcher__tooltip.sc-pennlibs-service-switcher,.service-switcher__trigger.sc-pennlibs-service-switcher:focus-visible+.service-switcher__tooltip.sc-pennlibs-service-switcher,.service-switcher__tooltip.sc-pennlibs-service-switcher:hover{visibility:visible;opacity:1}.tooltip-dismissed.sc-pennlibs-service-switcher-h .service-switcher__trigger.sc-pennlibs-service-switcher+.service-switcher__tooltip.sc-pennlibs-service-switcher{visibility:hidden;opacity:0}.service-switcher__dialog.sc-pennlibs-service-switcher{--service-switcher-padding:var(--pl-space-xl);position:fixed;inset:0;margin:auto;width:min(90vw, 52rem);height:fit-content;max-height:calc(100dvh - var(--pl-space-2xl));overflow:auto;padding:0;border:1px solid var(--pl-color-fg-default);border-radius:var(--pl-border-radius-subtle);background:var(--pl-color-bg-default);color:var(--pl-color-fg-default)}.service-switcher__dialog.sc-pennlibs-service-switcher:focus{outline:none;box-shadow:var(--pl-focus-box-shadow)}.service-switcher__dialog.sc-pennlibs-service-switcher::backdrop{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.service-switcher__dialog-inner.sc-pennlibs-service-switcher{padding:var(--service-switcher-padding)}@media (max-width: 620px){.service-switcher__dialog.sc-pennlibs-service-switcher{--service-switcher-padding:var(--pl-space-l)}}.service-switcher__close.sc-pennlibs-service-switcher{all:unset;position:absolute;top:calc(var(--service-switcher-padding) - var(--pl-space-xs));right:calc(var(--service-switcher-padding) - var(--pl-space-xs));display:inline-flex;padding:var(--pl-space-2xs);border-radius:var(--pl-border-radius-subtle);color:var(--pl-color-fg-default);cursor:pointer}.service-switcher__close.sc-pennlibs-service-switcher:hover{background:var(--pl-color-bg-subtle)}.service-switcher__close.sc-pennlibs-service-switcher:focus-visible{outline:none;box-shadow:var(--pl-focus-box-shadow)}.service-switcher__dialog-inner.sc-pennlibs-service-switcher h1.sc-pennlibs-service-switcher{padding-right:var(--pl-space-xl)}.cards.sc-pennlibs-service-switcher{display:grid;gap:var(--pl-space-m);grid-template-columns:1fr 1fr;margin:0;padding:0;list-style:none}@media (max-width: 620px){.cards.sc-pennlibs-service-switcher{grid-template-columns:1fr}}.card.sc-pennlibs-service-switcher{position:relative;display:flex;flex-direction:column;gap:var(--pl-space-2xs);justify-content:space-between;min-height:6rem;padding:var(--pl-space-m);background-color:var(--pl-color-bg-default);border:1px solid var(--pl-color-fg-default);border-radius:var(--pl-border-radius-subtle);box-shadow:calc(-1 * var(--pl-space-2xs)) var(--pl-space-2xs) 0 var(--pl-color-fg-accent)}.card__heading.sc-pennlibs-service-switcher{margin:0;font-size:1.25rem;font-weight:500}.card__description.sc-pennlibs-service-switcher{margin:0;color:var(--pl-color-fg-subtle)}.card__link.sc-pennlibs-service-switcher{color:var(--pl-color-fg-default);text-decoration:none}.card__link.sc-pennlibs-service-switcher:hover{text-decoration:underline}.card__link.sc-pennlibs-service-switcher::after{content:\"\";position:absolute;inset:0}";
|
|
4
|
+
|
|
5
|
+
// The Penn Libraries services the switcher links to. The component owns this
|
|
6
|
+
// list — consumers don't author it.
|
|
7
|
+
const SERVICES = [
|
|
8
|
+
{ href: 'https://www.library.upenn.edu/', name: 'Using the library', description: 'Get hours, plan your visit, and use our many services.' },
|
|
9
|
+
{ href: 'https://find.library.upenn.edu', name: 'Find', description: 'Search our catalog to find materials and manage your account.' },
|
|
10
|
+
{ href: 'https://digitalcollections.library.upenn.edu/', name: 'Digital Collections', description: 'Browse digitized originals from our libraries and partners.' },
|
|
11
|
+
{ href: 'https://findingaids.library.upenn.edu/', name: 'Philadelphia Area Archives', description: 'Explore primary sources held by archives across the area.' },
|
|
12
|
+
];
|
|
13
|
+
// The trigger's accessible name and the text shown in its hover/focus tooltip.
|
|
14
|
+
const TRIGGER_LABEL = 'Pick your place to start';
|
|
15
|
+
const ServiceSwitcher = /*@__PURE__*/ proxyCustomElement(class ServiceSwitcher extends HTMLElement {
|
|
16
|
+
constructor(registerHost) {
|
|
17
|
+
super();
|
|
18
|
+
if (registerHost !== false) {
|
|
19
|
+
this.__registerHost();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The visual theme, matching the surrounding header. `dark` keeps the icon
|
|
23
|
+
* light and uses a translucent chip; `light` uses the default solid chip.
|
|
24
|
+
* @default 'light'
|
|
25
|
+
*/
|
|
26
|
+
this.theme = 'light';
|
|
27
|
+
this.isOpen = false;
|
|
28
|
+
this.tooltipDismissed = false;
|
|
29
|
+
this.open = () => {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
this.isOpen = true;
|
|
32
|
+
(_a = this.dialogEl) === null || _a === void 0 ? void 0 : _a.showModal();
|
|
33
|
+
// Move focus to the modal itself (rather than the first focusable control)
|
|
34
|
+
// so assistive tech announces the dialog and its heading on open.
|
|
35
|
+
(_b = this.dialogEl) === null || _b === void 0 ? void 0 : _b.focus();
|
|
36
|
+
};
|
|
37
|
+
this.close = () => {
|
|
38
|
+
var _a;
|
|
39
|
+
(_a = this.dialogEl) === null || _a === void 0 ? void 0 : _a.close();
|
|
40
|
+
};
|
|
41
|
+
// Native <dialog> handles Escape and restores focus to the trigger on close;
|
|
42
|
+
// we only sync our open state and close when the backdrop itself is clicked.
|
|
43
|
+
this.handleDialogClose = () => {
|
|
44
|
+
this.isOpen = false;
|
|
45
|
+
};
|
|
46
|
+
this.handleDialogClick = (event) => {
|
|
47
|
+
if (event.target === this.dialogEl) {
|
|
48
|
+
this.close();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
// The tooltip shows on hover/focus via CSS. Escape dismisses it without moving
|
|
52
|
+
// focus (WCAG 1.4.13); leaving or blurring the trigger re-arms it.
|
|
53
|
+
this.dismissTooltip = (event) => {
|
|
54
|
+
if (event.key === 'Escape') {
|
|
55
|
+
this.tooltipDismissed = true;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
this.rearmTooltip = () => {
|
|
59
|
+
this.tooltipDismissed = false;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
renderIcon() {
|
|
63
|
+
return (h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 20 20", "aria-hidden": "true", focusable: "false" }, h("circle", { cx: "5", cy: "5", r: "2", fill: "currentColor" }), h("circle", { cx: "15", cy: "5", r: "2", fill: "currentColor" }), h("circle", { cx: "5", cy: "15", r: "2", fill: "currentColor" }), h("circle", { cx: "15", cy: "15", r: "2", fill: "currentColor" })));
|
|
64
|
+
}
|
|
65
|
+
render() {
|
|
66
|
+
return (h(Host, { key: '052d82ad0bbccd5ef2b303b22579d2865abe92c8', class: { 'tooltip-dismissed': this.tooltipDismissed } }, h("button", { key: '0e0a4e62979a29629a77baad883cfc82ca5c4981', type: "button", class: "service-switcher__trigger", "aria-haspopup": "dialog", "aria-expanded": String(this.isOpen), "aria-controls": "service-switcher-panel", "aria-labelledby": "service-switcher-tooltip", onClick: this.open, onKeyDown: this.dismissTooltip, onMouseLeave: this.rearmTooltip, onBlur: this.rearmTooltip }, this.renderIcon()), h("span", { key: '223c39feaeddc8ea53e798026a45a2ccbc58d4ab', id: "service-switcher-tooltip", role: "tooltip", class: "service-switcher__tooltip" }, TRIGGER_LABEL), h("dialog", { key: '0247e2efa23022ff3e9b50941f072abdc8e70d98', id: "service-switcher-panel", class: "service-switcher__dialog pl-typeset pl-reset", tabindex: "-1", "aria-labelledby": "service-switcher-title", ref: (el) => (this.dialogEl = el), onClose: this.handleDialogClose, onClick: this.handleDialogClick }, h("div", { key: '45500c7931e19a80fbe8279d0b2b1e36cde31bf3', class: "service-switcher__dialog-inner pl-typeset" }, h("h1", { key: '8228917093f0e3e092d9dcae98f00594e8d4ca91', id: "service-switcher-title" }, "Pick your place to start"), h("button", { key: '920055a94d8fd2a0201b8906179d0937cce05123', type: "button", class: "service-switcher__close", "aria-label": "Close", onClick: this.close }, h("svg", { key: 'f797796f2d78ea7b019d15d7f378961aff1971cf', width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", focusable: "false" }, h("path", { key: '5634773a6c2de9ecbcca44430d3f0f86d5c1ce36', d: "M17 7L7 17M7 7L17 17", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }))), h("ul", { key: '7fd42daeb400679f90873e2bde8e31949e0668ca', class: "cards" }, SERVICES.map((service) => (h("li", { class: "card" }, h("h3", { class: "card__heading" }, h("a", { class: "card__link", href: service.href }, service.name)), service.description && (h("p", { class: "card__description" }, service.description))))))))));
|
|
67
|
+
}
|
|
68
|
+
static get style() { return pennlibsServiceSwitcherCss; }
|
|
69
|
+
}, [258, "pennlibs-service-switcher", {
|
|
70
|
+
"theme": [513],
|
|
71
|
+
"isOpen": [32],
|
|
72
|
+
"tooltipDismissed": [32]
|
|
73
|
+
}]);
|
|
74
|
+
function defineCustomElement$1() {
|
|
75
|
+
if (typeof customElements === "undefined") {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const components = ["pennlibs-service-switcher"];
|
|
79
|
+
components.forEach(tagName => { switch (tagName) {
|
|
80
|
+
case "pennlibs-service-switcher":
|
|
81
|
+
if (!customElements.get(tagName)) {
|
|
82
|
+
customElements.define(tagName, ServiceSwitcher);
|
|
83
|
+
}
|
|
84
|
+
break;
|
|
85
|
+
} });
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const PennlibsServiceSwitcher = ServiceSwitcher;
|
|
89
|
+
const defineCustomElement = defineCustomElement$1;
|
|
90
|
+
|
|
91
|
+
export { PennlibsServiceSwitcher, defineCustomElement };
|
|
92
|
+
//# sourceMappingURL=pennlibs-service-switcher.js.map
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=pennlibs-service-switcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"pennlibs-service-switcher.js","mappings":"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","names":["__stencil_proxyCustomElement"],"sources":["src/components/pennlibs-service-switcher/pennlibs-service-switcher.css?tag=pennlibs-service-switcher&encapsulation=scoped","src/components/pennlibs-service-switcher/pennlibs-service-switcher.tsx"],"sourcesContent":[":host {\n position: relative;\n display: inline-flex;\n align-items: center;\n font-family: var(--pl-font-family);\n font-size: var(--pl-font-size);\n}\n\n/* Icon-only trigger. Inherits the header's themed service color so it works on\n both light and dark headers. */\n.service-switcher__trigger {\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--pl-space-xs);\n border-radius: var(--pl-border-radius);\n cursor: pointer;\n /* Icon takes the header's themed service color (penn-blue on light, light on\n dark). The chip keeps the default solid background on the light header. */\n color: var(--color-fg-service, var(--pl-color-penn-blue));\n background: var(--pl-color-bg-subtle);\n border: solid 1px transparent;\n}\n\n.service-switcher__trigger:hover {\n border-color: var(--pl-color-fg-subtle);\n}\n\n/* Dark header: swap the solid chip for a translucent one derived from the\n (light) service color, so the penn-blue header shows through. */\n:host([theme=\"dark\"]) .service-switcher__trigger {\n background: rgb(from var(--color-fg-service, var(--pl-color-fg-on-emphasis)) r g b / 0.1);\n}\n\n:host([theme=\"dark\"]) .service-switcher__trigger:hover {\n background: rgb(from var(--color-fg-service, var(--pl-color-fg-on-emphasis)) r g b / 0.18);\n border-color: rgb(from var(--color-fg-service, var(--pl-color-fg-on-emphasis)) r g b / 0.4);\n}\n\n.service-switcher__trigger:focus-visible {\n outline: none;\n box-shadow: var(--pl-focus-box-shadow);\n}\n\n/* Tooltip showing the trigger's label on hover/focus. Hidden by default;\n revealed by the rules below. */\n.service-switcher__tooltip {\n visibility: hidden;\n opacity: 0;\n transition: opacity 120ms ease;\n position: absolute;\n z-index: 10;\n /* Fallback placement: centered under the trigger (the :host wraps it). */\n top: calc(100% + var(--pl-space-2xs));\n left: 50%;\n translate: -50%;\n width: max-content;\n max-width: 16rem;\n padding: var(--pl-space-2xs) var(--pl-space-xs);\n border-radius: var(--pl-border-radius-subtle);\n background: var(--pl-color-fg-default);\n color: var(--pl-color-bg-default);\n font-size: 0.875rem;\n line-height: 1.4;\n}\n\n/* Progressive enhancement: anchor the tooltip to the trigger so it isn't tied\n to the :host containing block (and won't be clipped by header overflow). */\n@supports (anchor-name: --a) {\n .service-switcher__trigger {\n anchor-name: --service-switcher-anchor;\n }\n\n .service-switcher__tooltip {\n position-anchor: --service-switcher-anchor;\n top: calc(anchor(bottom) + var(--pl-space-2xs));\n left: anchor(center);\n }\n}\n\n/* Show on pointer hover, keyboard focus, or when hovering the tooltip itself\n (so it's hoverable/persistent per WCAG 1.4.13). */\n.service-switcher__trigger:hover + .service-switcher__tooltip,\n.service-switcher__trigger:focus-visible + .service-switcher__tooltip,\n.service-switcher__tooltip:hover {\n visibility: visible;\n opacity: 1;\n}\n\n/* Escape-dismissed: force-hide even while hovered/focused. Placed last so it\n wins the source-order tie against the show rules above. */\n:host(.tooltip-dismissed) .service-switcher__trigger + .service-switcher__tooltip {\n visibility: hidden;\n opacity: 0;\n}\n\n/* Centered modal dialog (native <dialog> opened with showModal). */\n.service-switcher__dialog {\n /* Single source for the modal body inset; the close button aligns to it. */\n --service-switcher-padding: var(--pl-space-xl);\n position: fixed;\n inset: 0;\n margin: auto;\n width: min(90vw, 52rem);\n height: fit-content;\n max-height: calc(100dvh - var(--pl-space-2xl));\n overflow: auto;\n padding: 0;\n border: 1px solid var(--pl-color-fg-default);\n border-radius: var(--pl-border-radius-subtle);\n background: var(--pl-color-bg-default);\n color: var(--pl-color-fg-default);\n}\n\n/* The dialog is focused on open; show the design system focus ring around the\n whole modal so it's clear the modal itself has focus. Uses `:focus` (not\n `:focus-visible`) because the focus is moved programmatically, not by keyboard. */\n.service-switcher__dialog:focus {\n outline: none;\n box-shadow: var(--pl-focus-box-shadow);\n}\n\n.service-switcher__dialog::backdrop {\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n}\n\n.service-switcher__dialog-inner {\n padding: var(--service-switcher-padding);\n}\n\n@media (max-width: 620px) {\n .service-switcher__dialog {\n --service-switcher-padding: var(--pl-space-l);\n }\n}\n\n/* Bare icon close, pinned to the upper-right of the modal. */\n.service-switcher__close {\n all: unset;\n position: absolute;\n top: calc(var(--service-switcher-padding) - var(--pl-space-xs));\n right: calc(var(--service-switcher-padding) - var(--pl-space-xs));\n display: inline-flex;\n padding: var(--pl-space-2xs);\n border-radius: var(--pl-border-radius-subtle);\n color: var(--pl-color-fg-default);\n cursor: pointer;\n}\n\n.service-switcher__close:hover {\n background: var(--pl-color-bg-subtle);\n}\n\n/* `all: unset` clears the inherited focus ring, so restore it explicitly. */\n.service-switcher__close:focus-visible {\n outline: none;\n box-shadow: var(--pl-focus-box-shadow);\n}\n\n/* Keep the heading clear of the absolutely-positioned close button. */\n.service-switcher__dialog-inner h1 {\n padding-right: var(--pl-space-xl);\n}\n\n/* Cards — mirrors docs/css/card.css (a docs-only stylesheet, not shipped).\n Two columns on wider screens (so four services read as a 2×2 grid), stacking\n to one column on narrow screens. */\n.cards {\n display: grid;\n gap: var(--pl-space-m);\n grid-template-columns: 1fr 1fr;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n@media (max-width: 620px) {\n .cards {\n grid-template-columns: 1fr;\n }\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: var(--pl-space-2xs);\n justify-content: space-between;\n min-height: 6rem;\n padding: var(--pl-space-m);\n background-color: var(--pl-color-bg-default);\n border: 1px solid var(--pl-color-fg-default);\n border-radius: var(--pl-border-radius-subtle);\n box-shadow: calc(-1 * var(--pl-space-2xs)) var(--pl-space-2xs) 0 var(--pl-color-fg-accent);\n}\n\n.card__heading {\n margin: 0;\n font-size: 1.25rem;\n font-weight: 500;\n}\n\n.card__description {\n margin: 0;\n color: var(--pl-color-fg-subtle);\n}\n\n.card__link {\n color: var(--pl-color-fg-default);\n text-decoration: none;\n}\n\n.card__link:hover {\n text-decoration: underline;\n}\n\n.card__link::after {\n content: \"\";\n position: absolute;\n inset: 0;\n}\n\n","import { Component, Prop, State, Host, h } from '@stencil/core';\n\ninterface ServiceItem {\n href: string;\n name: string;\n description: string;\n}\n\n// The Penn Libraries services the switcher links to. The component owns this\n// list — consumers don't author it.\nconst SERVICES: ServiceItem[] = [\n { href: 'https://www.library.upenn.edu/', name: 'Using the library', description: 'Get hours, plan your visit, and use our many services.' },\n { href: 'https://find.library.upenn.edu', name: 'Find', description: 'Search our catalog to find materials and manage your account.' },\n { href: 'https://digitalcollections.library.upenn.edu/', name: 'Digital Collections', description: 'Browse digitized originals from our libraries and partners.' },\n { href: 'https://findingaids.library.upenn.edu/', name: 'Philadelphia Area Archives', description: 'Explore primary sources held by archives across the area.' },\n];\n\n// The trigger's accessible name and the text shown in its hover/focus tooltip.\nconst TRIGGER_LABEL = 'Pick your place to start';\n\n/**\n * A \"waffle\" switcher that helps people move between Penn Libraries services\n * (Find, Digital Collections, Philadelphia Area Archives, and the main library\n * site) and discover which one fits their task. The list of services is built\n * into the component — consumers don't author it. Slots into `pennlibs-header`\n * beside the logo via the `service-switcher` slot.\n *\n * @component\n * @example\n * <pennlibs-service-switcher></pennlibs-service-switcher>\n */\n@Component({\n tag: 'pennlibs-service-switcher',\n styleUrl: 'pennlibs-service-switcher.css',\n scoped: true,\n})\nexport class ServiceSwitcher {\n /**\n * The visual theme, matching the surrounding header. `dark` keeps the icon\n * light and uses a translucent chip; `light` uses the default solid chip.\n * @default 'light'\n */\n @Prop({ reflect: true }) theme: 'light' | 'dark' = 'light';\n\n @State() isOpen: boolean = false;\n @State() tooltipDismissed: boolean = false;\n\n private dialogEl?: HTMLDialogElement;\n\n private open = () => {\n this.isOpen = true;\n this.dialogEl?.showModal();\n // Move focus to the modal itself (rather than the first focusable control)\n // so assistive tech announces the dialog and its heading on open.\n this.dialogEl?.focus();\n };\n\n private close = () => {\n this.dialogEl?.close();\n };\n\n // Native <dialog> handles Escape and restores focus to the trigger on close;\n // we only sync our open state and close when the backdrop itself is clicked.\n private handleDialogClose = () => {\n this.isOpen = false;\n };\n\n private handleDialogClick = (event: MouseEvent) => {\n if (event.target === this.dialogEl) {\n this.close();\n }\n };\n\n // The tooltip shows on hover/focus via CSS. Escape dismisses it without moving\n // focus (WCAG 1.4.13); leaving or blurring the trigger re-arms it.\n private dismissTooltip = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.tooltipDismissed = true;\n }\n };\n\n private rearmTooltip = () => {\n this.tooltipDismissed = false;\n };\n\n private renderIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle cx=\"5\" cy=\"5\" r=\"2\" fill=\"currentColor\" />\n <circle cx=\"15\" cy=\"5\" r=\"2\" fill=\"currentColor\" />\n <circle cx=\"5\" cy=\"15\" r=\"2\" fill=\"currentColor\" />\n <circle cx=\"15\" cy=\"15\" r=\"2\" fill=\"currentColor\" />\n </svg>\n );\n }\n\n render() {\n return (\n <Host class={{ 'tooltip-dismissed': this.tooltipDismissed }}>\n <button\n type=\"button\"\n class=\"service-switcher__trigger\"\n aria-haspopup=\"dialog\"\n aria-expanded={String(this.isOpen)}\n aria-controls=\"service-switcher-panel\"\n aria-labelledby=\"service-switcher-tooltip\"\n onClick={this.open}\n onKeyDown={this.dismissTooltip}\n onMouseLeave={this.rearmTooltip}\n onBlur={this.rearmTooltip}\n >\n {this.renderIcon()}\n </button>\n <span id=\"service-switcher-tooltip\" role=\"tooltip\" class=\"service-switcher__tooltip\">\n {TRIGGER_LABEL}\n </span>\n\n <dialog\n id=\"service-switcher-panel\"\n class=\"service-switcher__dialog pl-typeset pl-reset\"\n tabindex=\"-1\"\n aria-labelledby=\"service-switcher-title\"\n ref={(el) => (this.dialogEl = el as HTMLDialogElement)}\n onClose={this.handleDialogClose}\n onClick={this.handleDialogClick}\n >\n <div class=\"service-switcher__dialog-inner pl-typeset\">\n <h1 id=\"service-switcher-title\">\n Pick your place to start\n </h1>\n <button\n type=\"button\"\n class=\"service-switcher__close\"\n aria-label=\"Close\"\n onClick={this.close}\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M17 7L7 17M7 7L17 17\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n <ul class=\"cards\">\n {SERVICES.map((service) => (\n <li class=\"card\">\n <h3 class=\"card__heading\">\n <a class=\"card__link\" href={service.href}>\n {service.name}\n </a>\n </h3>\n {service.description && (\n <p class=\"card__description\">{service.description}</p>\n )}\n </li>\n ))}\n </ul>\n </div>\n </dialog>\n </Host>\n );\n }\n}\n"],"version":3}
|
package/dist/docs.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"timestamp": "2026-06-
|
|
2
|
+
"timestamp": "2026-06-22T18:45:54",
|
|
3
3
|
"compiler": {
|
|
4
4
|
"name": "@stencil/core",
|
|
5
5
|
"version": "4.38.1",
|
|
@@ -555,6 +555,10 @@
|
|
|
555
555
|
"name": "slot",
|
|
556
556
|
"text": "name-end - Content to display at the end of the service name (right side)"
|
|
557
557
|
},
|
|
558
|
+
{
|
|
559
|
+
"name": "slot",
|
|
560
|
+
"text": "service-switcher - A pennlibs-service-switcher placed between the logo and the service name"
|
|
561
|
+
},
|
|
558
562
|
{
|
|
559
563
|
"name": "prop",
|
|
560
564
|
"text": "--pl-viewport-margins-max-width: The maximum width of the header."
|
|
@@ -688,6 +692,10 @@
|
|
|
688
692
|
{
|
|
689
693
|
"name": "name-end",
|
|
690
694
|
"docs": "Content to display at the end of the service name (right side)"
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
"name": "service-switcher",
|
|
698
|
+
"docs": "A pennlibs-service-switcher placed between the logo and the service name"
|
|
691
699
|
}
|
|
692
700
|
],
|
|
693
701
|
"parts": [],
|
|
@@ -961,6 +969,68 @@
|
|
|
961
969
|
"pennlibs-fallback-img"
|
|
962
970
|
]
|
|
963
971
|
}
|
|
972
|
+
},
|
|
973
|
+
{
|
|
974
|
+
"filePath": "src/components/pennlibs-service-switcher/pennlibs-service-switcher.tsx",
|
|
975
|
+
"encapsulation": "scoped",
|
|
976
|
+
"tag": "pennlibs-service-switcher",
|
|
977
|
+
"readme": "# pennlibs-service-switcher\n\n\n",
|
|
978
|
+
"docs": "A \"waffle\" switcher that helps people move between Penn Libraries services\n(Find, Digital Collections, Philadelphia Area Archives, and the main library\nsite) and discover which one fits their task. The list of services is built\ninto the component — consumers don't author it. Slots into `pennlibs-header`\nbeside the logo via the `service-switcher` slot.",
|
|
979
|
+
"docsTags": [
|
|
980
|
+
{
|
|
981
|
+
"name": "component"
|
|
982
|
+
},
|
|
983
|
+
{
|
|
984
|
+
"name": "example",
|
|
985
|
+
"text": "<pennlibs-service-switcher></pennlibs-service-switcher>"
|
|
986
|
+
}
|
|
987
|
+
],
|
|
988
|
+
"usage": {},
|
|
989
|
+
"props": [
|
|
990
|
+
{
|
|
991
|
+
"name": "theme",
|
|
992
|
+
"type": "\"dark\" | \"light\"",
|
|
993
|
+
"complexType": {
|
|
994
|
+
"original": "'light' | 'dark'",
|
|
995
|
+
"resolved": "\"dark\" | \"light\"",
|
|
996
|
+
"references": {}
|
|
997
|
+
},
|
|
998
|
+
"mutable": false,
|
|
999
|
+
"attr": "theme",
|
|
1000
|
+
"reflectToAttr": true,
|
|
1001
|
+
"docs": "The visual theme, matching the surrounding header. `dark` keeps the icon\nlight and uses a translucent chip; `light` uses the default solid chip.",
|
|
1002
|
+
"docsTags": [
|
|
1003
|
+
{
|
|
1004
|
+
"name": "default",
|
|
1005
|
+
"text": "'light'"
|
|
1006
|
+
}
|
|
1007
|
+
],
|
|
1008
|
+
"default": "'light'",
|
|
1009
|
+
"values": [
|
|
1010
|
+
{
|
|
1011
|
+
"value": "dark",
|
|
1012
|
+
"type": "string"
|
|
1013
|
+
},
|
|
1014
|
+
{
|
|
1015
|
+
"value": "light",
|
|
1016
|
+
"type": "string"
|
|
1017
|
+
}
|
|
1018
|
+
],
|
|
1019
|
+
"optional": false,
|
|
1020
|
+
"required": false,
|
|
1021
|
+
"getter": false,
|
|
1022
|
+
"setter": false
|
|
1023
|
+
}
|
|
1024
|
+
],
|
|
1025
|
+
"methods": [],
|
|
1026
|
+
"events": [],
|
|
1027
|
+
"listeners": [],
|
|
1028
|
+
"styles": [],
|
|
1029
|
+
"slots": [],
|
|
1030
|
+
"parts": [],
|
|
1031
|
+
"dependents": [],
|
|
1032
|
+
"dependencies": [],
|
|
1033
|
+
"dependencyGraph": {}
|
|
964
1034
|
}
|
|
965
1035
|
],
|
|
966
1036
|
"typeLibrary": {
|
|
@@ -2,7 +2,7 @@ const NAMESPACE = 'web';
|
|
|
2
2
|
const BUILD = /* web */ { hydratedSelectorName: "hydrated", lazyLoad: true, propChangeCallback: true, updatable: true};
|
|
3
3
|
|
|
4
4
|
const globalScripts = () => {};
|
|
5
|
-
const globalStyles = "@import url(\"https://use.typekit.net/gbh8cmg.css\");\n\n@font-face {\n font-family: 'Perpetua';\n src: url('assets/fonts/perpetua.woff2') format('woff2'),\n url('assets/fonts/perpetua.woff') format('woff');\n font-weight: 400;\n font-display: swap;\n}\n\n:root {\n --pl-color-penn-red: #990000;\n --pl-color-penn-blue: #011F5B;\n --pl-color-gray-dark: #2D3545;\n --pl-color-gray: #595F6A;\n --pl-color-gray-light: #F5F5F6;\n --pl-color-gray-blue-light: #EEEEF4;\n --pl-color-white: #FFFFFF;\n --pl-color-blue: #0E5696;\n --pl-color-blue-light: #D4E4F2;\n --pl-color-green: #267434;\n --pl-color-green-light: #F1F7E1;\n --pl-color-orange: #BD4718;\n --pl-color-orange-light: #FEEDDD;\n --pl-color-purple: #80317F;\n --pl-color-purple-light: #F2DFED;\n --pl-color-bg-gradient-1: linear-gradient(45deg, rgba(200, 219, 232, 0.8), rgba(239, 210, 215, 0.8));\n --pl-color-bg-gradient-2: linear-gradient(45deg, #dbe9f5, #feefdf);\n --pl-font-size: 16px;\n --pl-font-sans-serif: proxima-nova, system-ui, sans-serif;\n --pl-font-serif: 'Perpetua', serif;\n --pl-link-text-underline-offset: 0.2em;\n --pl-link-text-decoration-thickness: 1px;\n --pl-link-hover-text-decoration-thickness: 2px;\n --pl-viewport-margins-max-width: 1440px;\n --pl-viewport-margins-gutter: 1em;\n --pl-color-fg-default: var(--pl-color-gray-dark);\n --pl-color-fg-subtle: var(--pl-color-gray);\n --pl-color-fg-subtle-on-emphasis: var(--pl-color-gray-light);\n --pl-color-fg-on-emphasis: var(--pl-color-white);\n --pl-color-fg-accent: var(--pl-color-blue);\n --pl-color-fg-success: var(--pl-color-green);\n --pl-color-fg-attention: var(--pl-color-orange);\n --pl-color-fg-info: var(--pl-color-purple);\n --pl-color-bg-default: var(--pl-color-white);\n --pl-color-bg-subtle: var(--pl-color-gray-light);\n --pl-color-bg-subtle-brand: var(--pl-color-gray-blue-light);\n --pl-color-bg-emphasis: var(--pl-color-gray-dark);\n --pl-color-bg-accent: var(--pl-color-blue-light);\n --pl-color-bg-success: var(--pl-color-green-light);\n --pl-color-bg-attention: var(--pl-color-orange-light);\n --pl-color-bg-info: var(--pl-color-purple-light);\n --pl-color-bg-accent-emphasis: var(--pl-color-blue);\n --pl-color-bg-success-emphasis: var(--pl-color-green);\n --pl-color-bg-attention-emphasis: var(--pl-color-orange);\n --pl-color-bg-info-emphasis: var(--pl-color-purple);\n --pl-font-family: var(--pl-font-sans-serif);\n --pl-link-text-underline-offset: 0.2em;\n --pl-link-text-decoration-thickness: 1px;\n --pl-link-hover-text-decoration-thickness: 2px;\n\n /* Font size tokens */\n --pl-font-size-5xl: 3.5rem;\n --pl-font-size-4xl: 2.5rem;\n --pl-font-size-3xl: 2rem;\n --pl-font-size-2xl: 1.5rem;\n --pl-font-size-xl: 1.25rem;\n --pl-font-size-l: 1.125rem;\n --pl-font-size-m: 1rem;\n --pl-font-size-s: 0.875rem;\n --pl-font-size-xs: 0.75rem;\n \n /* Spacing tokens */\n --pl-space-3xs: 0.125rem;\n --pl-space-2xs: 0.25rem;\n --pl-space-xs: 0.5rem;\n --pl-space-s: 0.75rem;\n --pl-space-m: 1rem;\n --pl-space-l: 1.5rem;\n --pl-space-xl: 2rem;\n --pl-space-2xl: 3rem;\n --pl-space-3xl: 4rem;\n\n /* Border radius tokens */\n --pl-border-radius-subtle: 0.25rem;\n --pl-border-radius: 1rem;\n\n /* Focus box shadow tokens */\n --pl-focus-box-shadow: 0 0 0 2px var(--pl-color-bg-accent), 0 0 0 4px var(--pl-color-fg-default);\n}\n\n@media (min-width: 768px) {\n :root {\n --pl-viewport-margins-gutter: 3em;\n }\n}\n\n@media print {\n body {\n zoom: 80%;\n }\n}\n\n.pl-viewport-margins {\n max-width: var(--pl-viewport-margins-max-width);\n margin: 0 auto;\n padding: 0 var(--pl-viewport-margins-gutter, 1rem);\n width: 100%;\n}\n\n/*\n Prevents a flash of unstyled content (FOUC) while custom elements are loading.\n Ensures that elements are only visible once they're fully defined and ready to be displayed.\n*/\n:not(:defined) {\n visibility: hidden;\n}\n\n/*\n Reset\n*/\n\n:where(.pl-reset) {\n font-weight: 400;\n line-height: 1.4;\n color: var(--pl-color-fg-default);\n accent-color: var(--pl-color-fg-accent);\n overflow-wrap: anywhere;\n\n /* Use a more-intuitive box-sizing model */\n & :is(*, *::before, *::after) {\n box-sizing: border-box;\n margin: 0;\n }\n\n /* Improve media defaults */\n & :is(img, picture, video, canvas, svg) {\n display: block;\n max-width: 100%;\n }\n\n /* Inherit fonts for form controls */\n & :is(input, button, textarea, select) {\n font: var(--pl-font-family);\n }\n\n /* Improve line wrapping */\n & p {\n text-wrap: pretty;\n }\n & :is(h1, h2, h3, h4, h5, h6) {\n text-wrap: balance;\n }\n\n /* Link styles */\n & a {\n color: var(--pl-color-fg-accent);\n text-decoration: underline;\n text-underline-offset: var(--pl-link-text-underline-offset);\n text-decoration-thickness: var(--pl-link-text-decoration-thickness);\n font-weight: 500;\n\n &:hover {\n text-decoration-thickness: 3px;\n }\n }\n}\n\n/*\n Typeset\n*/\n\n:where(.pl-typeset) {\n font-family: var(--pl-font-family);\n /* Establish a container so descendant headings can use `cqi` units\n to scale fluidly with the typeset wrapper's width. */\n container-type: inline-size;\n\n & :is(p, .pl-p) {\n font-family: var(--pl-font-family);\n }\n\n & :is(h1, .pl-h1, h2, .pl-h2) {\n font-family: var(--pl-font-serif);\n font-weight: 400;\n }\n\n & :is(h3, .pl-h3, h4, .pl-h4, h5, .pl-h5, h6, .pl-h6) {\n font-weight: 600;\n }\n\n & *+:is(h2,h3,h4,h5,h6) {\n margin-block-start: var(--pl-space-xl);\n }\n\n & :is(h1, .pl-h1, h2, .pl-h2) {\n line-height: 1;\n font-family: var(--pl-font-serif);\n color: var(--pl-color-penn-blue);\n position: relative;\n\n &::after {\n bottom: -0.25rem;\n content: \"\";\n display: block;\n height: 4px;\n opacity: 1;\n position: absolute;\n }\n }\n\n & :is(h1, .pl-h1) {\n /* Fallback for browsers that don't parse `cqi`. Modern browsers use the\n fluid clamp below. */\n font-size: var(--pl-font-size-5xl);\n font-size: clamp(var(--pl-font-size-4xl), 3cqi + 1rem, var(--pl-font-size-5xl));\n margin-bottom: var(--pl-space-l);\n margin-top: 0;\n\n &::after {\n background: var(--pl-color-penn-red);\n width: 2.25rem;\n }\n }\n\n & :is(h2, .pl-h2) {\n font-size: var(--pl-font-size-4xl);\n font-size: clamp(var(--pl-font-size-3xl), 1.5cqi + 1.25rem, var(--pl-font-size-4xl));\n margin-bottom: var(--pl-space-m);\n\n &::after {\n background: #d6d6dc;\n width: 2.25rem;\n }\n }\n\n & :is(h3, .pl-h3) {\n font-size: var(--pl-font-size-xl);\n font-size: clamp(var(--pl-font-size-l), 0.5cqi + 0.875rem, var(--pl-font-size-xl));\n font-family: var(--pl-font-sans-serif);\n color: var(--pl-color-fg-default);\n margin-bottom: var(--pl-space-m);\n\n &:after {\n content: none;\n }\n }\n\n & :is(h4, .pl-h4) {\n font-size: var(--pl-font-size-m);\n margin-bottom: var(--pl-space-s);\n\n &:after {\n content: none;\n }\n }\n}\n\n/* \n Display\n*/\n.pl-block { display: block; }\n.pl-inline { display: inline; }\n.pl-inline-block { display: inline-block; }\n.pl-flex { display: flex; }\n.pl-inline-flex { display: inline-flex; }\n.pl-grid { display: grid; }\n.pl-inline-grid { display: inline-grid; }\n.pl-none { display: none; }\n\n/* \n Flex direction utilities\n*/\n.pl-flex-row { flex-direction: row; }\n.pl-flex-col { flex-direction: column; }\n\n/* \n Spacing\n*/\n\n/* Margin utilities */\n.pl-margin-0 { margin: 0; }\n.pl-margin-2xs { margin: var(--pl-space-2xs); }\n.pl-margin-xs { margin: var(--pl-space-xs); }\n.pl-margin-s { margin: var(--pl-space-s); }\n.pl-margin-m { margin: var(--pl-space-m); }\n.pl-margin-l { margin: var(--pl-space-l); }\n.pl-margin-xl { margin: var(--pl-space-xl); }\n.pl-margin-2xl { margin: var(--pl-space-2xl); }\n.pl-margin-3xl { margin: var(--pl-space-3xl); }\n\n/* Margin top */\n.pl-margin-t-0 { margin-top: 0; }\n.pl-margin-t-2xs { margin-top: var(--pl-space-2xs); }\n.pl-margin-t-xs { margin-top: var(--pl-space-xs); }\n.pl-margin-t-s { margin-top: var(--pl-space-s); }\n.pl-margin-t-m { margin-top: var(--pl-space-m); }\n.pl-margin-t-l { margin-top: var(--pl-space-l); }\n.pl-margin-t-xl { margin-top: var(--pl-space-xl); }\n.pl-margin-t-2xl { margin-top: var(--pl-space-2xl); }\n.pl-margin-t-3xl { margin-top: var(--pl-space-3xl); }\n\n/* Margin bottom */\n.pl-margin-b-0 { margin-bottom: 0; }\n.pl-margin-b-2xs { margin-bottom: var(--pl-space-2xs); }\n.pl-margin-b-xs { margin-bottom: var(--pl-space-xs); }\n.pl-margin-b-s { margin-bottom: var(--pl-space-s); }\n.pl-margin-b-m { margin-bottom: var(--pl-space-m); }\n.pl-margin-b-l { margin-bottom: var(--pl-space-l); }\n.pl-margin-b-xl { margin-bottom: var(--pl-space-xl); }\n.pl-margin-b-2xl { margin-bottom: var(--pl-space-2xl); }\n.pl-margin-b-3xl { margin-bottom: var(--pl-space-3xl); }\n\n/* Margin left */\n.pl-margin-l-0 { margin-left: 0; }\n.pl-margin-l-2xs { margin-left: var(--pl-space-2xs); }\n.pl-margin-l-xs { margin-left: var(--pl-space-xs); }\n.pl-margin-l-s { margin-left: var(--pl-space-s); }\n.pl-margin-l-m { margin-left: var(--pl-space-m); }\n.pl-margin-l-l { margin-left: var(--pl-space-l); }\n.pl-margin-l-xl { margin-left: var(--pl-space-xl); }\n.pl-margin-l-2xl { margin-left: var(--pl-space-2xl); }\n.pl-margin-l-3xl { margin-left: var(--pl-space-3xl); }\n\n/* Margin right */\n.pl-margin-r-0 { margin-right: 0; }\n.pl-margin-r-2xs { margin-right: var(--pl-space-2xs); }\n.pl-margin-r-xs { margin-right: var(--pl-space-xs); }\n.pl-margin-r-s { margin-right: var(--pl-space-s); }\n.pl-margin-r-m { margin-right: var(--pl-space-m); }\n.pl-margin-r-l { margin-right: var(--pl-space-l); }\n.pl-margin-r-xl { margin-right: var(--pl-space-xl); }\n.pl-margin-r-2xl { margin-right: var(--pl-space-2xl); }\n.pl-margin-r-3xl { margin-right: var(--pl-space-3xl); }\n\n/* Margin x (left and right) */\n.pl-margin-x-0 { margin-left: 0; margin-right: 0; }\n.pl-margin-x-2xs { margin-left: var(--pl-space-2xs); margin-right: var(--pl-space-2xs); }\n.pl-margin-x-xs { margin-left: var(--pl-space-xs); margin-right: var(--pl-space-xs); }\n.pl-margin-x-s { margin-left: var(--pl-space-s); margin-right: var(--pl-space-s); }\n.pl-margin-x-m { margin-left: var(--pl-space-m); margin-right: var(--pl-space-m); }\n.pl-margin-x-l { margin-left: var(--pl-space-l); margin-right: var(--pl-space-l); }\n.pl-margin-x-xl { margin-left: var(--pl-space-xl); margin-right: var(--pl-space-xl); }\n.pl-margin-x-2xl { margin-left: var(--pl-space-2xl); margin-right: var(--pl-space-2xl); }\n.pl-margin-x-3xl { margin-left: var(--pl-space-3xl); margin-right: var(--pl-space-3xl); }\n\n/* Margin y (top and bottom) */\n.pl-margin-y-0 { margin-top: 0; margin-bottom: 0; }\n.pl-margin-y-2xs { margin-top: var(--pl-space-2xs); margin-bottom: var(--pl-space-2xs); }\n.pl-margin-y-xs { margin-top: var(--pl-space-xs); margin-bottom: var(--pl-space-xs); }\n.pl-margin-y-s { margin-top: var(--pl-space-s); margin-bottom: var(--pl-space-s); }\n.pl-margin-y-m { margin-top: var(--pl-space-m); margin-bottom: var(--pl-space-m); }\n.pl-margin-y-l { margin-top: var(--pl-space-l); margin-bottom: var(--pl-space-l); }\n.pl-margin-y-xl { margin-top: var(--pl-space-xl); margin-bottom: var(--pl-space-xl); }\n.pl-margin-y-2xl { margin-top: var(--pl-space-2xl); margin-bottom: var(--pl-space-2xl); }\n.pl-margin-y-3xl { margin-top: var(--pl-space-3xl); margin-bottom: var(--pl-space-3xl); }\n\n/* Padding utilities */\n.pl-padding-0 { padding: 0; }\n.pl-padding-2xs { padding: var(--pl-space-2xs); }\n.pl-padding-xs { padding: var(--pl-space-xs); }\n.pl-padding-s { padding: var(--pl-space-s); }\n.pl-padding-m { padding: var(--pl-space-m); }\n.pl-padding-l { padding: var(--pl-space-l); }\n.pl-padding-xl { padding: var(--pl-space-xl); }\n.pl-padding-2xl { padding: var(--pl-space-2xl); }\n.pl-padding-3xl { padding: var(--pl-space-3xl); }\n\n/* Padding top */\n.pl-padding-t-0 { padding-top: 0; }\n.pl-padding-t-2xs { padding-top: var(--pl-space-2xs); }\n.pl-padding-t-xs { padding-top: var(--pl-space-xs); }\n.pl-padding-t-s { padding-top: var(--pl-space-s); }\n.pl-padding-t-m { padding-top: var(--pl-space-m); }\n.pl-padding-t-l { padding-top: var(--pl-space-l); }\n.pl-padding-t-xl { padding-top: var(--pl-space-xl); }\n.pl-padding-t-2xl { padding-top: var(--pl-space-2xl); }\n.pl-padding-t-3xl { padding-top: var(--pl-space-3xl); }\n\n/* Padding bottom */\n.pl-padding-b-0 { padding-bottom: 0; }\n.pl-padding-b-2xs { padding-bottom: var(--pl-space-2xs); }\n.pl-padding-b-xs { padding-bottom: var(--pl-space-xs); }\n.pl-padding-b-s { padding-bottom: var(--pl-space-s); }\n.pl-padding-b-m { padding-bottom: var(--pl-space-m); }\n.pl-padding-b-l { padding-bottom: var(--pl-space-l); }\n.pl-padding-b-xl { padding-bottom: var(--pl-space-xl); }\n.pl-padding-b-2xl { padding-bottom: var(--pl-space-2xl); }\n.pl-padding-b-3xl { padding-bottom: var(--pl-space-3xl); }\n\n/* Padding left */\n.pl-padding-l-0 { padding-left: 0; }\n.pl-padding-l-2xs { padding-left: var(--pl-space-2xs); }\n.pl-padding-l-xs { padding-left: var(--pl-space-xs); }\n.pl-padding-l-s { padding-left: var(--pl-space-s); }\n.pl-padding-l-m { padding-left: var(--pl-space-m); }\n.pl-padding-l-l { padding-left: var(--pl-space-l); }\n.pl-padding-l-xl { padding-left: var(--pl-space-xl); }\n.pl-padding-l-2xl { padding-left: var(--pl-space-2xl); }\n.pl-padding-l-3xl { padding-left: var(--pl-space-3xl); }\n\n/* Padding right */\n.pl-padding-r-0 { padding-right: 0; }\n.pl-padding-r-2xs { padding-right: var(--pl-space-2xs); }\n.pl-padding-r-xs { padding-right: var(--pl-space-xs); }\n.pl-padding-r-s { padding-right: var(--pl-space-s); }\n.pl-padding-r-m { padding-right: var(--pl-space-m); }\n.pl-padding-r-l { padding-right: var(--pl-space-l); }\n.pl-padding-r-xl { padding-right: var(--pl-space-xl); }\n.pl-padding-r-2xl { padding-right: var(--pl-space-2xl); }\n.pl-padding-r-3xl { padding-right: var(--pl-space-3xl); }\n\n/* Padding x (left and right) */\n.pl-padding-x-0 { padding-left: 0; padding-right: 0; }\n.pl-padding-x-2xs { padding-left: var(--pl-space-2xs); padding-right: var(--pl-space-2xs); }\n.pl-padding-x-xs { padding-left: var(--pl-space-xs); padding-right: var(--pl-space-xs); }\n.pl-padding-x-s { padding-left: var(--pl-space-s); padding-right: var(--pl-space-s); }\n.pl-padding-x-m { padding-left: var(--pl-space-m); padding-right: var(--pl-space-m); }\n.pl-padding-x-l { padding-left: var(--pl-space-l); padding-right: var(--pl-space-l); }\n.pl-padding-x-xl { padding-left: var(--pl-space-xl); padding-right: var(--pl-space-xl); }\n.pl-padding-x-2xl { padding-left: var(--pl-space-2xl); padding-right: var(--pl-space-2xl); }\n.pl-padding-x-3xl { padding-left: var(--pl-space-3xl); padding-right: var(--pl-space-3xl); }\n\n/* Padding y (top and bottom) */\n.pl-padding-y-0 { padding-top: 0; padding-bottom: 0; }\n.pl-padding-y-2xs { padding-top: var(--pl-space-2xs); padding-bottom: var(--pl-space-2xs); }\n.pl-padding-y-xs { padding-top: var(--pl-space-xs); padding-bottom: var(--pl-space-xs); }\n.pl-padding-y-s { padding-top: var(--pl-space-s); padding-bottom: var(--pl-space-s); }\n.pl-padding-y-m { padding-top: var(--pl-space-m); padding-bottom: var(--pl-space-m); }\n.pl-padding-y-l { padding-top: var(--pl-space-l); padding-bottom: var(--pl-space-l); }\n.pl-padding-y-xl { padding-top: var(--pl-space-xl); padding-bottom: var(--pl-space-xl); }\n.pl-padding-y-2xl { padding-top: var(--pl-space-2xl); padding-bottom: var(--pl-space-2xl); }\n.pl-padding-y-3xl { padding-top: var(--pl-space-3xl); padding-bottom: var(--pl-space-3xl); }\n\n/* Gap utilities for flexbox and grid */\n.pl-gap-0 { gap: 0; }\n.pl-gap-2xs { gap: var(--pl-space-2xs); }\n.pl-gap-xs { gap: var(--pl-space-xs); }\n.pl-gap-s { gap: var(--pl-space-s); }\n.pl-gap-m { gap: var(--pl-space-m); }\n.pl-gap-l { gap: var(--pl-space-l); }\n.pl-gap-xl { gap: var(--pl-space-xl); }\n.pl-gap-2xl { gap: var(--pl-space-2xl); }\n.pl-gap-3xl { gap: var(--pl-space-3xl); } \n\n/*\n Font size\n*/\n\n.pl-font-size-xs {\n font-size: var(--pl-font-size-xs);\n}\n\n.pl-font-size-s {\n font-size: var(--pl-font-size-s);\n}\n\n.pl-font-size-m {\n font-size: var(--pl-font-size-m);\n}\n\n.pl-font-size-l {\n font-size: var(--pl-font-size-l);\n}\n\n.pl-font-size-xl {\n font-size: var(--pl-font-size-xl);\n}\n\n.pl-font-size-2xl {\n font-size: var(--pl-font-size-2xl);\n}\n\n.pl-font-size-3xl {\n font-size: var(--pl-font-size-3xl);\n}\n\n.pl-font-size-4xl {\n font-size: var(--pl-font-size-4xl);\n}\n\n.pl-font-size-5xl {\n font-size: var(--pl-font-size-5xl);\n}\n\n/*\n Caps\n\n Small uppercase label type used throughout the site, such as table headers\n and section labels. The subtle variant dims it with the subtle foreground.\n*/\n\n.pl-caps,\n.pl-caps-subtle {\n font-size: 0.8rem;\n font-weight: 600;\n letter-spacing: 0.075rem;\n text-transform: uppercase;\n vertical-align: middle;\n}\n\n.pl-caps-subtle {\n color: var(--pl-color-fg-subtle);\n}\n\n/*\n Line length\n*/\n\n.pl-line-length {\n max-width: 60ch;\n}\n\n/*\n Border radius\n*/\n\n.pl-border-radius-subtle {\n border-radius: var(--pl-border-radius-subtle);\n}\n\n.pl-border-radius {\n border-radius: var(--pl-border-radius);\n}\n\n/*\n Definition list\n*/\n\n.pl-dl:not(.pl-dl--inline) {\n display: grid;\n grid-row-gap: 0.25rem;\n \n & dt {\n font-weight: 600;\n margin-top: 0.5rem;\n }\n}\n\n@media (min-width: 720px) {\n .pl-dl:not(.pl-dl--inline) {\n grid-template-columns: 12rem 1fr;\n\n & dt {\n grid-column: 1 / 2;\n margin-top: 0;\n padding-right: 1rem;\n }\n\n & dd {\n grid-column: 2 / 3;\n margin-bottom: 0;\n }\n }\n}\n\n@media (min-width: 720px) {\n .pl-dl:not(.pl-dl--inline) dt:not(:first-of-type),\n .pl-dl:not(.pl-dl--inline) dt:not(:first-of-type) + dd {\n padding-top: 0.75rem;\n margin-top: 0.5rem;\n border-top: solid 1px var(--pl-color-bg-subtle-brand);\n }\n}\n\n.pl-dl--inline {\n display: block;\n\n & dt,\n & dd {\n display: inline;\n padding-right: 0.5rem;\n margin-bottom: 0;\n }\n\n & dt {\n font-weight: 600;\n }\n\n & dt:not(:first-of-type)::before {\n content: \"\";\n display: block;\n margin-bottom: 0.25rem;\n }\n\n & dd::after {\n content: \" ·\";\n padding-left: var(--pl-space-xs);\n }\n\n & dd:has(+ dt)::after {\n all: unset;\n }\n\n & > *:last-child::after {\n all: unset;\n }\n\n & a {\n color: var(--pl-color-fg-default);\n text-decoration-style: dotted;\n font-weight: 400;\n\n &:hover {\n text-decoration-style: solid;\n text-decoration-thickness: 2px;\n }\n }\n}\n\n.pl-button {\n border: none;\n outline: none;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n gap: var(--pl-space-2xs);\n padding: var(--pl-space-xs) var(--pl-space-m);\n font-size: 1rem;\n line-height: 1.5;\n font-family: var(--pl-font-family);\n border-radius: var(--pl-border-radius);\n\n background: var(--pl-color-bg-subtle);\n color: var(--pl-color-fg-default);\n}\n\na.pl-button {\n text-decoration: none;\n}\n\n.pl-button:hover {\n cursor: pointer;\n text-decoration: underline;\n text-underline-offset: var(--pl-link-text-underline-offset);\n text-decoration-thickness: var(--pl-link-text-decoration-thickness);\n}\n\n.pl-button:focus {\n box-shadow: var(--pl-focus-box-shadow);\n}\n\n.pl-button--accent {\n background: var(--pl-color-bg-accent-emphasis);\n color: var(--pl-color-fg-on-emphasis);\n}\n\n.pl-button--success {\n background: var(--pl-color-bg-success-emphasis);\n color: var(--pl-color-fg-on-emphasis);\n}\n\n.pl-button--attention {\n background: var(--pl-color-bg-attention-emphasis);\n color: var(--pl-color-fg-on-emphasis);\n}\n\n.pl-callout {\n padding: var(--pl-space-m) var(--pl-space-l);\n margin-bottom: var(--pl-space-l);\n border: 1px solid var(--pl-color-fg-subtle);\n border-left-width: 0.25rem;\n border-radius: var(--pl-border-radius-subtle);\n border-left-color: var(--pl-color-fg-accent);\n}\n\n/*\n Details\n\n Styles a native <details>/<summary> as a disclosure: a subtle card whose\n border and divider appear when open, with the default marker replaced by a\n chevron that rotates on open. Pure CSS, no JavaScript required. Add\n `.pl-details` to the <details>, `.pl-details__summary` to the <summary>, and\n `.pl-details__content` to the panel that follows it.\n\n Ported from the finding-aids prototype (`.faa-guide__details`).\n*/\n\n.pl-details {\n border-radius: var(--pl-border-radius);\n background: var(--pl-color-bg-subtle);\n border: solid 1px transparent;\n}\n\n.pl-details[open] {\n border-color: var(--pl-color-fg-subtle);\n}\n\n.pl-details[open] > .pl-details__summary {\n border-bottom: solid 1px var(--pl-color-fg-subtle);\n}\n\n/* Headings used as the summary label shouldn't add their own bottom margin. */\n.pl-details__summary :is(h1, h2, h3, h4, h5, h6) {\n margin-bottom: 0;\n}\n\n.pl-details__summary {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--pl-space-s);\n cursor: pointer;\n list-style: none;\n padding: var(--pl-space-xs) var(--pl-space-m);\n}\n\n.pl-details__summary:hover {\n text-decoration: underline;\n text-underline-offset: var(--pl-link-text-underline-offset);\n}\n\n.pl-details__summary:focus-visible {\n outline: none;\n box-shadow: var(--pl-focus-box-shadow);\n}\n\n/* Remove the default disclosure triangle (Safari/Chrome use this marker). */\n.pl-details__summary::-webkit-details-marker {\n display: none;\n}\n\n/* Custom chevron that rotates 180° when the panel is open. */\n.pl-details__summary::after {\n content: '';\n width: 1.25rem;\n height: 1.25rem;\n flex-shrink: 0;\n background: currentColor;\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6 9L12 15L18 9' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\") no-repeat center;\n mask: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6 9L12 15L18 9' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\") no-repeat center;\n transition: transform 0.2s ease;\n}\n\n.pl-details[open] > .pl-details__summary::after {\n transform: rotate(180deg);\n}\n\n/* The content revealed when the disclosure is open. */\n.pl-details__content {\n padding: var(--pl-space-m);\n background: var(--pl-color-bg-default);\n border-radius: 0 0 var(--pl-border-radius) var(--pl-border-radius);\n\n & > .pl-details:first-of-type,\n & > pennlibs-accordion {\n margin-top: var(--pl-space-m);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pl-details__summary::after {\n transition: none;\n }\n}";
|
|
5
|
+
const globalStyles = "@import url(\"https://use.typekit.net/gbh8cmg.css\");\n\n@font-face {\n font-family: 'Perpetua';\n src: url('assets/fonts/perpetua.woff2') format('woff2'),\n url('assets/fonts/perpetua.woff') format('woff');\n font-weight: 400;\n font-display: swap;\n}\n\n:root {\n --pl-color-penn-red: #990000;\n --pl-color-penn-blue: #011F5B;\n --pl-color-gray-dark: #2D3545;\n --pl-color-gray: #595F6A;\n --pl-color-gray-light: #F5F5F6;\n --pl-color-gray-blue-light: #EEEEF4;\n --pl-color-white: #FFFFFF;\n --pl-color-blue: #0E5696;\n --pl-color-blue-light: #D4E4F2;\n --pl-color-green: #267434;\n --pl-color-green-light: #F1F7E1;\n --pl-color-orange: #BD4718;\n --pl-color-orange-light: #FEEDDD;\n --pl-color-purple: #80317F;\n --pl-color-purple-light: #F2DFED;\n --pl-color-bg-gradient-1: linear-gradient(45deg, rgba(200, 219, 232, 0.8), rgba(239, 210, 215, 0.8));\n --pl-color-bg-gradient-2: linear-gradient(45deg, #dbe9f5, #feefdf);\n --pl-font-size: 16px;\n --pl-font-sans-serif: proxima-nova, system-ui, sans-serif;\n --pl-font-serif: 'Perpetua', serif;\n --pl-link-text-underline-offset: 0.2em;\n --pl-link-text-decoration-thickness: 1px;\n --pl-link-hover-text-decoration-thickness: 2px;\n --pl-viewport-margins-max-width: 1440px;\n --pl-viewport-margins-gutter: 1em;\n --pl-color-fg-default: var(--pl-color-gray-dark);\n --pl-color-fg-subtle: var(--pl-color-gray);\n --pl-color-fg-subtle-on-emphasis: var(--pl-color-gray-light);\n --pl-color-fg-on-emphasis: var(--pl-color-white);\n --pl-color-fg-accent: var(--pl-color-blue);\n --pl-color-fg-success: var(--pl-color-green);\n --pl-color-fg-attention: var(--pl-color-orange);\n --pl-color-fg-info: var(--pl-color-purple);\n --pl-color-bg-default: var(--pl-color-white);\n --pl-color-bg-subtle: var(--pl-color-gray-light);\n --pl-color-bg-subtle-brand: var(--pl-color-gray-blue-light);\n --pl-color-bg-emphasis: var(--pl-color-gray-dark);\n --pl-color-bg-accent: var(--pl-color-blue-light);\n --pl-color-bg-success: var(--pl-color-green-light);\n --pl-color-bg-attention: var(--pl-color-orange-light);\n --pl-color-bg-info: var(--pl-color-purple-light);\n --pl-color-bg-accent-emphasis: var(--pl-color-blue);\n --pl-color-bg-success-emphasis: var(--pl-color-green);\n --pl-color-bg-attention-emphasis: var(--pl-color-orange);\n --pl-color-bg-info-emphasis: var(--pl-color-purple);\n --pl-font-family: var(--pl-font-sans-serif);\n --pl-link-text-underline-offset: 0.2em;\n --pl-link-text-decoration-thickness: 1px;\n --pl-link-hover-text-decoration-thickness: 2px;\n\n /* Font size tokens */\n --pl-font-size-5xl: 3.5rem;\n --pl-font-size-4xl: 2.5rem;\n --pl-font-size-3xl: 2rem;\n --pl-font-size-2xl: 1.5rem;\n --pl-font-size-xl: 1.25rem;\n --pl-font-size-l: 1.125rem;\n --pl-font-size-m: 1rem;\n --pl-font-size-s: 0.875rem;\n --pl-font-size-xs: 0.75rem;\n \n /* Spacing tokens */\n --pl-space-3xs: 0.125rem;\n --pl-space-2xs: 0.25rem;\n --pl-space-xs: 0.5rem;\n --pl-space-s: 0.75rem;\n --pl-space-m: 1rem;\n --pl-space-l: 1.5rem;\n --pl-space-xl: 2rem;\n --pl-space-2xl: 3rem;\n --pl-space-3xl: 4rem;\n\n /* Border radius tokens */\n --pl-border-radius-subtle: 0.25rem;\n --pl-border-radius: 1rem;\n\n /* Focus box shadow tokens */\n --pl-focus-box-shadow: 0 0 0 2px var(--pl-color-bg-accent), 0 0 0 4px var(--pl-color-fg-default);\n}\n\n@media (min-width: 768px) {\n :root {\n --pl-viewport-margins-gutter: 3em;\n }\n}\n\n@media print {\n body {\n zoom: 80%;\n }\n}\n\n.pl-viewport-margins {\n max-width: var(--pl-viewport-margins-max-width);\n margin: 0 auto;\n padding: 0 var(--pl-viewport-margins-gutter, 1rem);\n width: 100%;\n}\n\n/*\n Prevents a flash of unstyled content (FOUC) while custom elements are loading.\n Ensures that elements are only visible once they're fully defined and ready to be displayed.\n*/\n:not(:defined) {\n visibility: hidden;\n}\n\n/*\n Reset\n*/\n\n:where(.pl-reset) {\n font-weight: 400;\n line-height: 1.4;\n color: var(--pl-color-fg-default);\n accent-color: var(--pl-color-fg-accent);\n overflow-wrap: anywhere;\n\n /* Use a more-intuitive box-sizing model */\n & :is(*, *::before, *::after) {\n box-sizing: border-box;\n margin: 0;\n }\n\n /* Improve media defaults */\n & :is(img, picture, video, canvas, svg) {\n display: block;\n max-width: 100%;\n }\n\n /* Inherit fonts for form controls */\n & :is(input, button, textarea, select) {\n font: var(--pl-font-family);\n }\n\n /* Improve line wrapping */\n & p {\n text-wrap: pretty;\n }\n & :is(h1, h2, h3, h4, h5, h6) {\n text-wrap: balance;\n }\n\n /* Link styles */\n & a {\n color: var(--pl-color-fg-accent);\n text-decoration: underline;\n text-underline-offset: var(--pl-link-text-underline-offset);\n text-decoration-thickness: var(--pl-link-text-decoration-thickness);\n font-weight: 500;\n\n &:hover {\n text-decoration-thickness: 3px;\n }\n }\n}\n\n/*\n Typeset\n*/\n\n:where(.pl-typeset) {\n font-family: var(--pl-font-family);\n /* Establish a container so descendant headings can use `cqi` units\n to scale fluidly with the typeset wrapper's width. */\n container-type: inline-size;\n\n & :is(p, .pl-p) {\n font-family: var(--pl-font-family);\n }\n\n & :is(h1, .pl-h1, h2, .pl-h2) {\n font-family: var(--pl-font-serif);\n font-weight: 400;\n }\n\n & :is(h3, .pl-h3, h4, .pl-h4, h5, .pl-h5, h6, .pl-h6) {\n font-weight: 600;\n }\n\n & *+:is(h2,h3,h4,h5,h6) {\n margin-block-start: var(--pl-space-xl);\n }\n\n & :is(h1, .pl-h1, h2, .pl-h2) {\n line-height: 1;\n font-family: var(--pl-font-serif);\n color: var(--pl-color-penn-blue);\n position: relative;\n\n &::after {\n bottom: -0.25rem;\n content: \"\";\n display: block;\n height: 4px;\n opacity: 1;\n position: absolute;\n }\n }\n\n & :is(h1, .pl-h1) {\n /* Fallback for browsers that don't parse `cqi`. Modern browsers use the\n fluid clamp below. */\n font-size: var(--pl-font-size-5xl);\n font-size: clamp(var(--pl-font-size-4xl), 3cqi + 1rem, var(--pl-font-size-5xl));\n margin-bottom: var(--pl-space-l);\n margin-top: 0;\n\n &::after {\n background: var(--pl-color-penn-red);\n width: 2.25rem;\n }\n }\n\n & :is(h2, .pl-h2) {\n font-size: var(--pl-font-size-4xl);\n font-size: clamp(var(--pl-font-size-3xl), 1.5cqi + 1.25rem, var(--pl-font-size-4xl));\n margin-bottom: var(--pl-space-m);\n\n &::after {\n background: #d6d6dc;\n width: 2.25rem;\n }\n }\n\n & :is(h3, .pl-h3) {\n font-size: var(--pl-font-size-xl);\n font-size: clamp(var(--pl-font-size-l), 0.5cqi + 0.875rem, var(--pl-font-size-xl));\n font-family: var(--pl-font-sans-serif);\n color: var(--pl-color-fg-default);\n margin-bottom: var(--pl-space-m);\n\n &:after {\n content: none;\n }\n }\n\n & :is(h4, .pl-h4) {\n font-size: var(--pl-font-size-m);\n margin-bottom: var(--pl-space-s);\n\n &:after {\n content: none;\n }\n }\n}\n\n/* \n Display\n*/\n.pl-block { display: block; }\n.pl-inline { display: inline; }\n.pl-inline-block { display: inline-block; }\n.pl-flex { display: flex; }\n.pl-inline-flex { display: inline-flex; }\n.pl-grid { display: grid; }\n.pl-inline-grid { display: inline-grid; }\n.pl-none { display: none; }\n\n/* \n Flex direction utilities\n*/\n.pl-flex-row { flex-direction: row; }\n.pl-flex-col { flex-direction: column; }\n\n/* \n Spacing\n*/\n\n/* Margin utilities */\n.pl-margin-0 { margin: 0; }\n.pl-margin-2xs { margin: var(--pl-space-2xs); }\n.pl-margin-xs { margin: var(--pl-space-xs); }\n.pl-margin-s { margin: var(--pl-space-s); }\n.pl-margin-m { margin: var(--pl-space-m); }\n.pl-margin-l { margin: var(--pl-space-l); }\n.pl-margin-xl { margin: var(--pl-space-xl); }\n.pl-margin-2xl { margin: var(--pl-space-2xl); }\n.pl-margin-3xl { margin: var(--pl-space-3xl); }\n\n/* Margin top */\n.pl-margin-t-0 { margin-top: 0; }\n.pl-margin-t-2xs { margin-top: var(--pl-space-2xs); }\n.pl-margin-t-xs { margin-top: var(--pl-space-xs); }\n.pl-margin-t-s { margin-top: var(--pl-space-s); }\n.pl-margin-t-m { margin-top: var(--pl-space-m); }\n.pl-margin-t-l { margin-top: var(--pl-space-l); }\n.pl-margin-t-xl { margin-top: var(--pl-space-xl); }\n.pl-margin-t-2xl { margin-top: var(--pl-space-2xl); }\n.pl-margin-t-3xl { margin-top: var(--pl-space-3xl); }\n\n/* Margin bottom */\n.pl-margin-b-0 { margin-bottom: 0; }\n.pl-margin-b-2xs { margin-bottom: var(--pl-space-2xs); }\n.pl-margin-b-xs { margin-bottom: var(--pl-space-xs); }\n.pl-margin-b-s { margin-bottom: var(--pl-space-s); }\n.pl-margin-b-m { margin-bottom: var(--pl-space-m); }\n.pl-margin-b-l { margin-bottom: var(--pl-space-l); }\n.pl-margin-b-xl { margin-bottom: var(--pl-space-xl); }\n.pl-margin-b-2xl { margin-bottom: var(--pl-space-2xl); }\n.pl-margin-b-3xl { margin-bottom: var(--pl-space-3xl); }\n\n/* Margin left */\n.pl-margin-l-0 { margin-left: 0; }\n.pl-margin-l-2xs { margin-left: var(--pl-space-2xs); }\n.pl-margin-l-xs { margin-left: var(--pl-space-xs); }\n.pl-margin-l-s { margin-left: var(--pl-space-s); }\n.pl-margin-l-m { margin-left: var(--pl-space-m); }\n.pl-margin-l-l { margin-left: var(--pl-space-l); }\n.pl-margin-l-xl { margin-left: var(--pl-space-xl); }\n.pl-margin-l-2xl { margin-left: var(--pl-space-2xl); }\n.pl-margin-l-3xl { margin-left: var(--pl-space-3xl); }\n\n/* Margin right */\n.pl-margin-r-0 { margin-right: 0; }\n.pl-margin-r-2xs { margin-right: var(--pl-space-2xs); }\n.pl-margin-r-xs { margin-right: var(--pl-space-xs); }\n.pl-margin-r-s { margin-right: var(--pl-space-s); }\n.pl-margin-r-m { margin-right: var(--pl-space-m); }\n.pl-margin-r-l { margin-right: var(--pl-space-l); }\n.pl-margin-r-xl { margin-right: var(--pl-space-xl); }\n.pl-margin-r-2xl { margin-right: var(--pl-space-2xl); }\n.pl-margin-r-3xl { margin-right: var(--pl-space-3xl); }\n\n/* Margin x (left and right) */\n.pl-margin-x-0 { margin-left: 0; margin-right: 0; }\n.pl-margin-x-2xs { margin-left: var(--pl-space-2xs); margin-right: var(--pl-space-2xs); }\n.pl-margin-x-xs { margin-left: var(--pl-space-xs); margin-right: var(--pl-space-xs); }\n.pl-margin-x-s { margin-left: var(--pl-space-s); margin-right: var(--pl-space-s); }\n.pl-margin-x-m { margin-left: var(--pl-space-m); margin-right: var(--pl-space-m); }\n.pl-margin-x-l { margin-left: var(--pl-space-l); margin-right: var(--pl-space-l); }\n.pl-margin-x-xl { margin-left: var(--pl-space-xl); margin-right: var(--pl-space-xl); }\n.pl-margin-x-2xl { margin-left: var(--pl-space-2xl); margin-right: var(--pl-space-2xl); }\n.pl-margin-x-3xl { margin-left: var(--pl-space-3xl); margin-right: var(--pl-space-3xl); }\n\n/* Margin y (top and bottom) */\n.pl-margin-y-0 { margin-top: 0; margin-bottom: 0; }\n.pl-margin-y-2xs { margin-top: var(--pl-space-2xs); margin-bottom: var(--pl-space-2xs); }\n.pl-margin-y-xs { margin-top: var(--pl-space-xs); margin-bottom: var(--pl-space-xs); }\n.pl-margin-y-s { margin-top: var(--pl-space-s); margin-bottom: var(--pl-space-s); }\n.pl-margin-y-m { margin-top: var(--pl-space-m); margin-bottom: var(--pl-space-m); }\n.pl-margin-y-l { margin-top: var(--pl-space-l); margin-bottom: var(--pl-space-l); }\n.pl-margin-y-xl { margin-top: var(--pl-space-xl); margin-bottom: var(--pl-space-xl); }\n.pl-margin-y-2xl { margin-top: var(--pl-space-2xl); margin-bottom: var(--pl-space-2xl); }\n.pl-margin-y-3xl { margin-top: var(--pl-space-3xl); margin-bottom: var(--pl-space-3xl); }\n\n/* Padding utilities */\n.pl-padding-0 { padding: 0; }\n.pl-padding-2xs { padding: var(--pl-space-2xs); }\n.pl-padding-xs { padding: var(--pl-space-xs); }\n.pl-padding-s { padding: var(--pl-space-s); }\n.pl-padding-m { padding: var(--pl-space-m); }\n.pl-padding-l { padding: var(--pl-space-l); }\n.pl-padding-xl { padding: var(--pl-space-xl); }\n.pl-padding-2xl { padding: var(--pl-space-2xl); }\n.pl-padding-3xl { padding: var(--pl-space-3xl); }\n\n/* Padding top */\n.pl-padding-t-0 { padding-top: 0; }\n.pl-padding-t-2xs { padding-top: var(--pl-space-2xs); }\n.pl-padding-t-xs { padding-top: var(--pl-space-xs); }\n.pl-padding-t-s { padding-top: var(--pl-space-s); }\n.pl-padding-t-m { padding-top: var(--pl-space-m); }\n.pl-padding-t-l { padding-top: var(--pl-space-l); }\n.pl-padding-t-xl { padding-top: var(--pl-space-xl); }\n.pl-padding-t-2xl { padding-top: var(--pl-space-2xl); }\n.pl-padding-t-3xl { padding-top: var(--pl-space-3xl); }\n\n/* Padding bottom */\n.pl-padding-b-0 { padding-bottom: 0; }\n.pl-padding-b-2xs { padding-bottom: var(--pl-space-2xs); }\n.pl-padding-b-xs { padding-bottom: var(--pl-space-xs); }\n.pl-padding-b-s { padding-bottom: var(--pl-space-s); }\n.pl-padding-b-m { padding-bottom: var(--pl-space-m); }\n.pl-padding-b-l { padding-bottom: var(--pl-space-l); }\n.pl-padding-b-xl { padding-bottom: var(--pl-space-xl); }\n.pl-padding-b-2xl { padding-bottom: var(--pl-space-2xl); }\n.pl-padding-b-3xl { padding-bottom: var(--pl-space-3xl); }\n\n/* Padding left */\n.pl-padding-l-0 { padding-left: 0; }\n.pl-padding-l-2xs { padding-left: var(--pl-space-2xs); }\n.pl-padding-l-xs { padding-left: var(--pl-space-xs); }\n.pl-padding-l-s { padding-left: var(--pl-space-s); }\n.pl-padding-l-m { padding-left: var(--pl-space-m); }\n.pl-padding-l-l { padding-left: var(--pl-space-l); }\n.pl-padding-l-xl { padding-left: var(--pl-space-xl); }\n.pl-padding-l-2xl { padding-left: var(--pl-space-2xl); }\n.pl-padding-l-3xl { padding-left: var(--pl-space-3xl); }\n\n/* Padding right */\n.pl-padding-r-0 { padding-right: 0; }\n.pl-padding-r-2xs { padding-right: var(--pl-space-2xs); }\n.pl-padding-r-xs { padding-right: var(--pl-space-xs); }\n.pl-padding-r-s { padding-right: var(--pl-space-s); }\n.pl-padding-r-m { padding-right: var(--pl-space-m); }\n.pl-padding-r-l { padding-right: var(--pl-space-l); }\n.pl-padding-r-xl { padding-right: var(--pl-space-xl); }\n.pl-padding-r-2xl { padding-right: var(--pl-space-2xl); }\n.pl-padding-r-3xl { padding-right: var(--pl-space-3xl); }\n\n/* Padding x (left and right) */\n.pl-padding-x-0 { padding-left: 0; padding-right: 0; }\n.pl-padding-x-2xs { padding-left: var(--pl-space-2xs); padding-right: var(--pl-space-2xs); }\n.pl-padding-x-xs { padding-left: var(--pl-space-xs); padding-right: var(--pl-space-xs); }\n.pl-padding-x-s { padding-left: var(--pl-space-s); padding-right: var(--pl-space-s); }\n.pl-padding-x-m { padding-left: var(--pl-space-m); padding-right: var(--pl-space-m); }\n.pl-padding-x-l { padding-left: var(--pl-space-l); padding-right: var(--pl-space-l); }\n.pl-padding-x-xl { padding-left: var(--pl-space-xl); padding-right: var(--pl-space-xl); }\n.pl-padding-x-2xl { padding-left: var(--pl-space-2xl); padding-right: var(--pl-space-2xl); }\n.pl-padding-x-3xl { padding-left: var(--pl-space-3xl); padding-right: var(--pl-space-3xl); }\n\n/* Padding y (top and bottom) */\n.pl-padding-y-0 { padding-top: 0; padding-bottom: 0; }\n.pl-padding-y-2xs { padding-top: var(--pl-space-2xs); padding-bottom: var(--pl-space-2xs); }\n.pl-padding-y-xs { padding-top: var(--pl-space-xs); padding-bottom: var(--pl-space-xs); }\n.pl-padding-y-s { padding-top: var(--pl-space-s); padding-bottom: var(--pl-space-s); }\n.pl-padding-y-m { padding-top: var(--pl-space-m); padding-bottom: var(--pl-space-m); }\n.pl-padding-y-l { padding-top: var(--pl-space-l); padding-bottom: var(--pl-space-l); }\n.pl-padding-y-xl { padding-top: var(--pl-space-xl); padding-bottom: var(--pl-space-xl); }\n.pl-padding-y-2xl { padding-top: var(--pl-space-2xl); padding-bottom: var(--pl-space-2xl); }\n.pl-padding-y-3xl { padding-top: var(--pl-space-3xl); padding-bottom: var(--pl-space-3xl); }\n\n/* Gap utilities for flexbox and grid */\n.pl-gap-0 { gap: 0; }\n.pl-gap-2xs { gap: var(--pl-space-2xs); }\n.pl-gap-xs { gap: var(--pl-space-xs); }\n.pl-gap-s { gap: var(--pl-space-s); }\n.pl-gap-m { gap: var(--pl-space-m); }\n.pl-gap-l { gap: var(--pl-space-l); }\n.pl-gap-xl { gap: var(--pl-space-xl); }\n.pl-gap-2xl { gap: var(--pl-space-2xl); }\n.pl-gap-3xl { gap: var(--pl-space-3xl); } \n\n/*\n Font size\n*/\n\n.pl-font-size-xs {\n font-size: var(--pl-font-size-xs);\n}\n\n.pl-font-size-s {\n font-size: var(--pl-font-size-s);\n}\n\n.pl-font-size-m {\n font-size: var(--pl-font-size-m);\n}\n\n.pl-font-size-l {\n font-size: var(--pl-font-size-l);\n}\n\n.pl-font-size-xl {\n font-size: var(--pl-font-size-xl);\n}\n\n.pl-font-size-2xl {\n font-size: var(--pl-font-size-2xl);\n}\n\n.pl-font-size-3xl {\n font-size: var(--pl-font-size-3xl);\n}\n\n.pl-font-size-4xl {\n font-size: var(--pl-font-size-4xl);\n}\n\n.pl-font-size-5xl {\n font-size: var(--pl-font-size-5xl);\n}\n\n/*\n Caps\n\n Small uppercase label type used throughout the site, such as table headers\n and section labels. The subtle variant dims it with the subtle foreground.\n*/\n\n.pl-caps,\n.pl-caps-subtle {\n font-size: 0.8rem;\n font-weight: 600;\n letter-spacing: 0.075rem;\n text-transform: uppercase;\n vertical-align: middle;\n}\n\n.pl-caps-subtle {\n color: var(--pl-color-fg-subtle);\n}\n\n/*\n Line length\n*/\n\n.pl-line-length {\n max-width: 60ch;\n}\n\n/*\n Border radius\n*/\n\n.pl-border-radius-subtle {\n border-radius: var(--pl-border-radius-subtle);\n}\n\n.pl-border-radius {\n border-radius: var(--pl-border-radius);\n}\n\n/*\n Definition list\n*/\n\n.pl-dl:not(.pl-dl--inline) {\n display: grid;\n grid-row-gap: 0.25rem;\n \n & dt {\n font-weight: 600;\n margin-top: 0.5rem;\n }\n}\n\n@media (min-width: 720px) {\n .pl-dl:not(.pl-dl--inline) {\n grid-template-columns: 12rem 1fr;\n\n & dt {\n grid-column: 1 / 2;\n margin-top: 0;\n padding-right: 1rem;\n }\n\n & dd {\n grid-column: 2 / 3;\n margin-bottom: 0;\n }\n }\n}\n\n@media (min-width: 720px) {\n .pl-dl:not(.pl-dl--inline) dt:not(:first-of-type),\n .pl-dl:not(.pl-dl--inline) dt:not(:first-of-type) + dd {\n padding-top: 0.75rem;\n margin-top: 0.5rem;\n border-top: solid 1px var(--pl-color-bg-subtle-brand);\n }\n}\n\n.pl-dl--inline {\n display: block;\n\n & dt,\n & dd {\n display: inline;\n padding-right: 0.5rem;\n margin-bottom: 0;\n }\n\n & dt {\n font-weight: 600;\n }\n\n & dt:not(:first-of-type)::before {\n content: \"\";\n display: block;\n margin-bottom: 0.25rem;\n }\n\n & dd::after {\n content: \" ·\";\n padding-left: var(--pl-space-xs);\n }\n\n & dd:has(+ dt)::after {\n all: unset;\n }\n\n & > *:last-child::after {\n all: unset;\n }\n\n & a {\n color: var(--pl-color-fg-default);\n text-decoration-style: dotted;\n font-weight: 400;\n\n &:hover {\n text-decoration-style: solid;\n text-decoration-thickness: 2px;\n }\n }\n}\n\n/* Baseline focus indicator: apply the focus pattern to every focusable element.\n `:where()` keeps specificity at 0 so component and utility styles can override. */\n:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {\n outline: none;\n box-shadow: var(--pl-focus-box-shadow);\n}\n\n.pl-button {\n border: none;\n outline: none;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n gap: var(--pl-space-2xs);\n padding: var(--pl-space-xs) var(--pl-space-m);\n font-size: 1rem;\n line-height: 1.5;\n font-family: var(--pl-font-family);\n border-radius: var(--pl-border-radius);\n\n background: var(--pl-color-bg-subtle);\n color: var(--pl-color-fg-default);\n}\n\na.pl-button {\n text-decoration: none;\n}\n\n.pl-button:hover {\n cursor: pointer;\n text-decoration: underline;\n text-underline-offset: var(--pl-link-text-underline-offset);\n text-decoration-thickness: var(--pl-link-text-decoration-thickness);\n}\n\n.pl-button:focus {\n box-shadow: var(--pl-focus-box-shadow);\n}\n\n.pl-button--accent {\n background: var(--pl-color-bg-accent-emphasis);\n color: var(--pl-color-fg-on-emphasis);\n}\n\n.pl-button--success {\n background: var(--pl-color-bg-success-emphasis);\n color: var(--pl-color-fg-on-emphasis);\n}\n\n.pl-button--attention {\n background: var(--pl-color-bg-attention-emphasis);\n color: var(--pl-color-fg-on-emphasis);\n}\n\n.pl-callout {\n padding: var(--pl-space-m) var(--pl-space-l);\n margin-bottom: var(--pl-space-l);\n border: 1px solid var(--pl-color-fg-subtle);\n border-left-width: 0.25rem;\n border-radius: var(--pl-border-radius-subtle);\n border-left-color: var(--pl-color-fg-accent);\n}\n\n/*\n Details\n\n Styles a native <details>/<summary> as a disclosure: a subtle card whose\n border and divider appear when open, with the default marker replaced by a\n chevron that rotates on open. Pure CSS, no JavaScript required. Add\n `.pl-details` to the <details>, `.pl-details__summary` to the <summary>, and\n `.pl-details__content` to the panel that follows it.\n\n Ported from the finding-aids prototype (`.faa-guide__details`).\n*/\n\n.pl-details {\n border-radius: var(--pl-border-radius);\n background: var(--pl-color-bg-subtle);\n border: solid 1px transparent;\n}\n\n.pl-details[open] {\n border-color: var(--pl-color-fg-subtle);\n}\n\n.pl-details[open] > .pl-details__summary {\n border-bottom: solid 1px var(--pl-color-fg-subtle);\n}\n\n/* Headings used as the summary label shouldn't add their own bottom margin. */\n.pl-details__summary :is(h1, h2, h3, h4, h5, h6) {\n margin-bottom: 0;\n}\n\n.pl-details__summary {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--pl-space-s);\n cursor: pointer;\n list-style: none;\n padding: var(--pl-space-xs) var(--pl-space-m);\n}\n\n.pl-details__summary:hover {\n text-decoration: underline;\n text-underline-offset: var(--pl-link-text-underline-offset);\n}\n\n.pl-details__summary:focus-visible {\n outline: none;\n box-shadow: var(--pl-focus-box-shadow);\n}\n\n/* Remove the default disclosure triangle (Safari/Chrome use this marker). */\n.pl-details__summary::-webkit-details-marker {\n display: none;\n}\n\n/* Custom chevron that rotates 180° when the panel is open. */\n.pl-details__summary::after {\n content: '';\n width: 1.25rem;\n height: 1.25rem;\n flex-shrink: 0;\n background: currentColor;\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6 9L12 15L18 9' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\") no-repeat center;\n mask: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6 9L12 15L18 9' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\") no-repeat center;\n transition: transform 0.2s ease;\n}\n\n.pl-details[open] > .pl-details__summary::after {\n transform: rotate(180deg);\n}\n\n/* The content revealed when the disclosure is open. */\n.pl-details__content {\n padding: var(--pl-space-m);\n background: var(--pl-color-bg-default);\n border-radius: 0 0 var(--pl-border-radius) var(--pl-border-radius);\n\n & > .pl-details:first-of-type,\n & > pennlibs-accordion {\n margin-top: var(--pl-space-m);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pl-details__summary::after {\n transition: none;\n }\n}";
|
|
6
6
|
|
|
7
7
|
/*
|
|
8
8
|
Stencil Client Platform v4.38.1 | MIT Licensed | https://stenciljs.com
|
|
@@ -201,6 +201,9 @@ var getAssetPath = (path) => {
|
|
|
201
201
|
return assetUrl.origin !== win.location.origin ? assetUrl.href : assetUrl.pathname;
|
|
202
202
|
};
|
|
203
203
|
var setAssetPath = (path) => plt.$resourcesUrl$ = path;
|
|
204
|
+
|
|
205
|
+
// src/utils/helpers.ts
|
|
206
|
+
var isDef = (v) => v != null && v !== void 0;
|
|
204
207
|
var isComplexType = (o) => {
|
|
205
208
|
o = typeof o;
|
|
206
209
|
return o === "object" || o === "function";
|
|
@@ -711,6 +714,16 @@ var initializeClientHydrate = (hostElm, tagName, hostId, hostRef) => {
|
|
|
711
714
|
const shadowRootNodes = shadowRoot ? [] : null;
|
|
712
715
|
const vnode = newVNode(tagName, null);
|
|
713
716
|
vnode.$elm$ = hostElm;
|
|
717
|
+
let scopeId2;
|
|
718
|
+
{
|
|
719
|
+
const cmpMeta = hostRef.$cmpMeta$;
|
|
720
|
+
if (cmpMeta && cmpMeta.$flags$ & 10 /* needsScopedEncapsulation */ && hostElm["s-sc"]) {
|
|
721
|
+
scopeId2 = hostElm["s-sc"];
|
|
722
|
+
hostElm.classList.add(scopeId2 + "-h");
|
|
723
|
+
} else if (hostElm["s-sc"]) {
|
|
724
|
+
delete hostElm["s-sc"];
|
|
725
|
+
}
|
|
726
|
+
}
|
|
714
727
|
if (win.document && (!plt.$orgLocNodes$ || !plt.$orgLocNodes$.size)) {
|
|
715
728
|
initializeDocumentHydrate(win.document.body, plt.$orgLocNodes$ = /* @__PURE__ */ new Map());
|
|
716
729
|
}
|
|
@@ -814,6 +827,11 @@ var initializeClientHydrate = (hostElm, tagName, hostId, hostRef) => {
|
|
|
814
827
|
}
|
|
815
828
|
}
|
|
816
829
|
}
|
|
830
|
+
if (scopeId2 && slotNodes.length) {
|
|
831
|
+
slotNodes.forEach((slot) => {
|
|
832
|
+
slot.$elm$.parentElement.classList.add(scopeId2 + "-s");
|
|
833
|
+
});
|
|
834
|
+
}
|
|
817
835
|
if (shadowRoot) {
|
|
818
836
|
let rnIdex = 0;
|
|
819
837
|
const rnLen = shadowRootNodes.length;
|
|
@@ -843,6 +861,7 @@ var clientHydrate = (parentVNode, childRenderNodes, slotNodes, shadowRootNodes,
|
|
|
843
861
|
let childIdSplt;
|
|
844
862
|
let childVNode;
|
|
845
863
|
let i2;
|
|
864
|
+
const scopeId2 = hostElm["s-sc"];
|
|
846
865
|
if (node.nodeType === 1 /* ElementNode */) {
|
|
847
866
|
childNodeType = node.getAttribute(HYDRATE_CHILD_ID);
|
|
848
867
|
if (childNodeType) {
|
|
@@ -865,6 +884,10 @@ var clientHydrate = (parentVNode, childRenderNodes, slotNodes, shadowRootNodes,
|
|
|
865
884
|
if (!parentVNode.$children$) {
|
|
866
885
|
parentVNode.$children$ = [];
|
|
867
886
|
}
|
|
887
|
+
if (scopeId2 && childIdSplt[0] === hostId) {
|
|
888
|
+
node["s-si"] = scopeId2;
|
|
889
|
+
childVNode.$attrs$.class += " " + scopeId2;
|
|
890
|
+
}
|
|
868
891
|
const slotName = childVNode.$elm$.getAttribute("s-sn");
|
|
869
892
|
if (typeof slotName === "string") {
|
|
870
893
|
if (childVNode.$tag$ === "slot-fb") {
|
|
@@ -879,6 +902,9 @@ var clientHydrate = (parentVNode, childRenderNodes, slotNodes, shadowRootNodes,
|
|
|
879
902
|
shadowRootNodes,
|
|
880
903
|
slottedNodes
|
|
881
904
|
);
|
|
905
|
+
if (scopeId2) {
|
|
906
|
+
node.classList.add(scopeId2);
|
|
907
|
+
}
|
|
882
908
|
}
|
|
883
909
|
childVNode.$elm$["s-sn"] = slotName;
|
|
884
910
|
childVNode.$elm$.removeAttribute("s-sn");
|
|
@@ -1300,6 +1326,9 @@ function sortedAttrNames(attrNames) {
|
|
|
1300
1326
|
attrNames
|
|
1301
1327
|
);
|
|
1302
1328
|
}
|
|
1329
|
+
|
|
1330
|
+
// src/runtime/vdom/vdom-render.ts
|
|
1331
|
+
var scopeId;
|
|
1303
1332
|
var hostTagName;
|
|
1304
1333
|
var isSvgMode = false;
|
|
1305
1334
|
var createElm = (oldParentVNode, newParentVNode, childIndex) => {
|
|
@@ -1328,6 +1357,9 @@ var createElm = (oldParentVNode, newParentVNode, childIndex) => {
|
|
|
1328
1357
|
{
|
|
1329
1358
|
updateElement(null, newVNode2, isSvgMode);
|
|
1330
1359
|
}
|
|
1360
|
+
if (isDef(scopeId) && elm["s-si"] !== scopeId) {
|
|
1361
|
+
elm.classList.add(elm["s-si"] = scopeId);
|
|
1362
|
+
}
|
|
1331
1363
|
if (newVNode2.$children$) {
|
|
1332
1364
|
for (i2 = 0; i2 < newVNode2.$children$.length; ++i2) {
|
|
1333
1365
|
childNode = createElm(oldParentVNode, newVNode2, i2);
|
|
@@ -1513,10 +1545,34 @@ var nullifyVNodeRefs = (vNode) => {
|
|
|
1513
1545
|
}
|
|
1514
1546
|
};
|
|
1515
1547
|
var insertBefore = (parent, newNode, reference) => {
|
|
1548
|
+
if (typeof newNode["s-sn"] === "string" && !!newNode["s-sr"] && !!newNode["s-cr"]) {
|
|
1549
|
+
addRemoveSlotScopedClass(newNode["s-cr"], newNode, parent, newNode.parentElement);
|
|
1550
|
+
}
|
|
1516
1551
|
{
|
|
1517
1552
|
return parent == null ? void 0 : parent.insertBefore(newNode, reference);
|
|
1518
1553
|
}
|
|
1519
1554
|
};
|
|
1555
|
+
function addRemoveSlotScopedClass(reference, slotNode, newParent, oldParent) {
|
|
1556
|
+
var _a, _b;
|
|
1557
|
+
let scopeId2;
|
|
1558
|
+
if (reference && typeof slotNode["s-sn"] === "string" && !!slotNode["s-sr"] && reference.parentNode && reference.parentNode["s-sc"] && (scopeId2 = slotNode["s-si"] || reference.parentNode["s-sc"])) {
|
|
1559
|
+
const scopeName = slotNode["s-sn"];
|
|
1560
|
+
const hostName = slotNode["s-hn"];
|
|
1561
|
+
(_a = newParent.classList) == null ? void 0 : _a.add(scopeId2 + "-s");
|
|
1562
|
+
if (oldParent && ((_b = oldParent.classList) == null ? void 0 : _b.contains(scopeId2 + "-s"))) {
|
|
1563
|
+
let child = (oldParent.__childNodes || oldParent.childNodes)[0];
|
|
1564
|
+
let found = false;
|
|
1565
|
+
while (child) {
|
|
1566
|
+
if (child["s-sn"] !== scopeName && child["s-hn"] === hostName && !!child["s-sr"]) {
|
|
1567
|
+
found = true;
|
|
1568
|
+
break;
|
|
1569
|
+
}
|
|
1570
|
+
child = child.nextSibling;
|
|
1571
|
+
}
|
|
1572
|
+
if (!found) oldParent.classList.remove(scopeId2 + "-s");
|
|
1573
|
+
}
|
|
1574
|
+
}
|
|
1575
|
+
}
|
|
1520
1576
|
var renderVdom = (hostRef, renderFnResults, isInitialLoad = false) => {
|
|
1521
1577
|
const hostElm = hostRef.$hostElement$;
|
|
1522
1578
|
const cmpMeta = hostRef.$cmpMeta$;
|
|
@@ -1543,6 +1599,9 @@ var renderVdom = (hostRef, renderFnResults, isInitialLoad = false) => {
|
|
|
1543
1599
|
rootVnode.$flags$ |= 4 /* isHost */;
|
|
1544
1600
|
hostRef.$vnode$ = rootVnode;
|
|
1545
1601
|
rootVnode.$elm$ = oldVNode.$elm$ = hostElm.shadowRoot || hostElm ;
|
|
1602
|
+
{
|
|
1603
|
+
scopeId = hostElm["s-sc"];
|
|
1604
|
+
}
|
|
1546
1605
|
patch(oldVNode, rootVnode, isInitialLoad);
|
|
1547
1606
|
};
|
|
1548
1607
|
|
|
@@ -2014,6 +2073,9 @@ var connectedCallback = (elm) => {
|
|
|
2014
2073
|
if (cmpMeta.$flags$ & 1 /* shadowDomEncapsulation */) {
|
|
2015
2074
|
const scopeId2 = addStyle(elm.shadowRoot, cmpMeta);
|
|
2016
2075
|
elm.classList.remove(scopeId2 + "-h", scopeId2 + "-s");
|
|
2076
|
+
} else if (cmpMeta.$flags$ & 2 /* scopedCssEncapsulation */) {
|
|
2077
|
+
const scopeId2 = getScopeId(cmpMeta);
|
|
2078
|
+
elm["s-sc"] = scopeId2;
|
|
2017
2079
|
}
|
|
2018
2080
|
initializeClientHydrate(elm, cmpMeta.$tagName$, hostId, hostRef);
|
|
2019
2081
|
}
|
|
@@ -2272,6 +2334,6 @@ var hostListenerOpts = (flags) => supportsListenerOptions ? {
|
|
|
2272
2334
|
var setNonce = (nonce) => plt.$nonce$ = nonce;
|
|
2273
2335
|
|
|
2274
2336
|
export { Host as H, getElement as a, bootstrapLazy as b, createEvent as c, getAssetPath as d, setAssetPath as e, globalScripts as g, h, promiseResolve as p, registerInstance as r, setNonce as s };
|
|
2275
|
-
//# sourceMappingURL=
|
|
2337
|
+
//# sourceMappingURL=index-BxutzoSj.js.map
|
|
2276
2338
|
|
|
2277
|
-
//# sourceMappingURL=
|
|
2339
|
+
//# sourceMappingURL=index-BxutzoSj.js.map
|