|
@@ -116,6 +116,7 @@
|
|
|
--spry-popover-bg: var(--spry-surface);
|
|
--spry-popover-bg: var(--spry-surface);
|
|
|
--spry-popover-border: var(--spry-border);
|
|
--spry-popover-border: var(--spry-border);
|
|
|
--spry-popover-shadow: var(--spry-shadow-lg);
|
|
--spry-popover-shadow: var(--spry-shadow-lg);
|
|
|
|
|
+ --spry-popover-padding: 1.1rem 1.25rem;
|
|
|
|
|
|
|
|
accent-color: var(--spry-accent);
|
|
accent-color: var(--spry-accent);
|
|
|
}
|
|
}
|
|
@@ -805,6 +806,32 @@ abbr[title] {
|
|
|
.shadow-lg { box-shadow: var(--spry-shadow-lg); }
|
|
.shadow-lg { box-shadow: var(--spry-shadow-lg); }
|
|
|
.shadow-none { box-shadow: none; }
|
|
.shadow-none { box-shadow: none; }
|
|
|
|
|
|
|
|
|
|
+/* Long-form content (markdown, docs, help text) inside cards and dialogs.
|
|
|
|
|
+ The page-scale headings are oversized in those containers, so .prose caps
|
|
|
|
|
+ the measure and steps headings down to a document scale; spacing rides
|
|
|
|
|
+ --spry-space-* so themes and dark mode compose unchanged. */
|
|
|
|
|
+.prose {
|
|
|
|
|
+ max-width: 65ch;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.prose h1 { font-size: 1.5rem; margin-block: var(--spry-space-4) var(--spry-space-2); }
|
|
|
|
|
+.prose h2 { font-size: 1.25rem; margin-block: var(--spry-space-4) var(--spry-space-2); }
|
|
|
|
|
+.prose h3 { font-size: 1.1rem; margin-block: var(--spry-space-3) var(--spry-space-2); }
|
|
|
|
|
+.prose h4 { font-size: 1rem; margin-block: var(--spry-space-3) var(--spry-space-2); }
|
|
|
|
|
+
|
|
|
|
|
+.prose p,
|
|
|
|
|
+.prose ul,
|
|
|
|
|
+.prose ol,
|
|
|
|
|
+.prose dl,
|
|
|
|
|
+.prose blockquote {
|
|
|
|
|
+ margin-block-end: var(--spry-space-3);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/* Flush at both ends — trailing/leading flow margins would sit on top of the
|
|
|
|
|
+ card or dialog padding and make one side look heavier than the other. */
|
|
|
|
|
+.prose > :first-child { margin-block-start: 0; }
|
|
|
|
|
+.prose > :last-child { margin-block-end: 0; }
|
|
|
|
|
+
|
|
|
/* ==========================================================================
|
|
/* ==========================================================================
|
|
|
9. Components — topbar & navigation
|
|
9. Components — topbar & navigation
|
|
|
========================================================================== */
|
|
========================================================================== */
|
|
@@ -1447,6 +1474,19 @@ input[type="radio"] {
|
|
|
backdrop-filter: var(--spry-glass);
|
|
backdrop-filter: var(--spry-glass);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/* Padding comes with the card, so a bare <div class="card"> already looks
|
|
|
|
|
+ right; structural sections carry their own padding flush to the frame, so
|
|
|
|
|
+ a card built from them drops the default. Both rules sit at zero
|
|
|
|
|
+ specificity (:where), the same trick the reset uses — padding utilities
|
|
|
|
|
+ (.p-0, .px-2, …) override them without a specificity fight. */
|
|
|
|
|
+:where(.card) {
|
|
|
|
|
+ padding: var(--spry-card-padding);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+:where(.card:has(> .card-header, > .card-body, > .card-footer)) {
|
|
|
|
|
+ padding: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
.card-flat {
|
|
.card-flat {
|
|
|
box-shadow: none;
|
|
box-shadow: none;
|
|
|
}
|
|
}
|
|
@@ -1729,6 +1769,13 @@ dialog.sm,
|
|
|
dialog.lg,
|
|
dialog.lg,
|
|
|
.dialog-lg { width: min(92vw, 56rem); }
|
|
.dialog-lg { width: min(92vw, 56rem); }
|
|
|
|
|
|
|
|
|
|
+/* A dialog without structural parts (titlebar/body/footer/card sections)
|
|
|
|
|
+ would render its content flush against the frame, so pad it like a
|
|
|
|
|
+ popover. Structural dialogs keep padding: 0 above. */
|
|
|
|
|
+dialog:not(:has(.dialog-titlebar, .dialog-body, .dialog-footer, .card-header, .card-body, .card-footer)) {
|
|
|
|
|
+ padding: var(--spry-popover-padding);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
dialog::backdrop {
|
|
dialog::backdrop {
|
|
|
background: var(--spry-backdrop);
|
|
background: var(--spry-backdrop);
|
|
|
}
|
|
}
|
|
@@ -1863,7 +1910,7 @@ dialog[open]::backdrop,
|
|
|
the reset above zeroes margins, which parks popovers in the top-left */
|
|
the reset above zeroes margins, which parks popovers in the top-left */
|
|
|
margin: auto;
|
|
margin: auto;
|
|
|
width: min(92vw, 26rem);
|
|
width: min(92vw, 26rem);
|
|
|
- padding: 1.1rem 1.25rem;
|
|
|
|
|
|
|
+ padding: var(--spry-popover-padding);
|
|
|
border: var(--spry-border-width) solid var(--spry-popover-border);
|
|
border: var(--spry-border-width) solid var(--spry-popover-border);
|
|
|
border-radius: var(--spry-radius-lg);
|
|
border-radius: var(--spry-radius-lg);
|
|
|
background: var(--spry-popover-bg);
|
|
background: var(--spry-popover-bg);
|