/* NOTE Designframe 0.99.53 Release														*/

/* -------------------------------------------------------------------------------------------- */

/* NOTE Getting Started 																		*/

/* -------------------------------------------------------------------------------------------- */

/* Designframe can be configured using the calculator then implementing output values in the	*/

/* "SECTION CONFIG" sections below.																*/

/* 	* You can edit your Theme, change specific values, and add custom classes in this file.		*/

/* 	* Keeping the default Designframe Preferred Values is strongly recommended.					*/

/* 	* Icon Fonts (e.g. Font Awesome) are implemented independently of Designframe. 				*/

/* 	* Official Tailwind Forms Plug-In REQUIRED 													*/

/* -------------------------------------------------------------------------------------------- */

/* VS CODE USERS: Table of Contents and Sections Anchors are implemented using					*/

/* https://marketplace.visualstudio.com/items?itemName=ExodiusStudios.comment-anchors 			*/

/* with LAYER as a custom anchor tag.															*/

/* -------------------------------------------------------------------------------------------- */

/* ------------------------------------------------------------------------------------------------------------------------------------------------ */

/* PROJECT CUSTOMIZATION GUIDELINES																													*/

/* Any customizations specific to your project should use a unique prefix to avoid conflicts with future Designframe updates. 						*/

/* For example, if your project is called "Example", you could use the prefix "ex-" for all customizations.											*/

/* e.g. ".ex-" for classes, "#ex-" for IDs, and "--ex-" for variables.																				*/

/* ------------------------------------------------------------------------------------------------------------------------------------------------ */

/* All custom CSS variables should be placed in the CONFIG Custom Variables section at the top part of this file.									*/

/* All custom CSS classes and IDs should be placed in the CONFIG Custom CSS Classes section at the bottom of this file.								*/

/* ------------------------------------------------------------------------------------------------------------------------------------------------ */

/* CUSTOMIZATION NOTES 																																*/

/* This file can be customized for your project with custom utilities. 																				*/

/* If you do so, use a prefix for any custom utilities you create, such as "xx".																	*/

/* e.g. ".xx-" for classes, "#xx-" for IDs, and "--xx-" for variables.																				*/

/* Do not use "qs" or "cx" prefixes to avoid conflicts with future Designframe updates.																*/

/* ------------------------------------------------------------------------------------------------------------------------------------------------ */

/* -------------------------------------------------------------------------------------------- */

/* SECTION Required Tailwind Directives - DO NOT EDIT 											*/

/* -------------------------------------------------------------------------------------------- */

*, ::before, ::after {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}

::backdrop {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}

/* ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com														*/

/*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/

*,
::before,
::after {
  box-sizing: border-box;
  /* 1 */
  border-width: 0;
  /* 2 */
  border-style: solid;
  /* 2 */
  border-color: #e5e7eb;
  /* 2 */
}

::before,
::after {
  --tw-content: '';
}

/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
7. Disable tap highlights on iOS
*/

html,
:host {
  line-height: 1.5;
  /* 1 */
  -webkit-text-size-adjust: 100%;
  /* 2 */
  -moz-tab-size: 4;
  /* 3 */
  -o-tab-size: 4;
     tab-size: 4;
  /* 3 */
  font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  /* 4 */
  font-feature-settings: normal;
  /* 5 */
  font-variation-settings: normal;
  /* 6 */
  -webkit-tap-highlight-color: transparent;
  /* 7 */
}

/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/

body {
  margin: 0;
  /* 1 */
  line-height: inherit;
  /* 2 */
}

/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/

hr {
  height: 0;
  /* 1 */
  color: inherit;
  /* 2 */
  border-top-width: 1px;
  /* 3 */
}

/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/

abbr:where([title]) {
  -webkit-text-decoration: underline dotted;
          text-decoration: underline dotted;
}

/*
Remove the default font size and weight for headings.
*/

h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: inherit;
  font-weight: inherit;
}

/*
Reset links to optimize for opt-in styling instead of opt-out.
*/

a {
  color: inherit;
  text-decoration: inherit;
}

/*
Add the correct font weight in Edge and Safari.
*/

b,
strong {
  font-weight: bolder;
}

/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/

code,
kbd,
samp,
pre {
  font-family: var(--font-mono), var(--font-mono-alt1), var(--font-mono-alt2);
  /* 1 */
  font-feature-settings: normal;
  /* 2 */
  font-variation-settings: normal;
  /* 3 */
  font-size: 1em;
  /* 4 */
}

/*
Add the correct font size in all browsers.
*/

small {
  font-size: 80%;
}

/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/

table {
  text-indent: 0;
  /* 1 */
  border-color: inherit;
  /* 2 */
  border-collapse: collapse;
  /* 3 */
}

/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/

button,
input,
optgroup,
select,
textarea {
  font-family: inherit;
  /* 1 */
  font-feature-settings: inherit;
  /* 1 */
  font-variation-settings: inherit;
  /* 1 */
  font-size: 100%;
  /* 1 */
  font-weight: inherit;
  /* 1 */
  line-height: inherit;
  /* 1 */
  letter-spacing: inherit;
  /* 1 */
  color: inherit;
  /* 1 */
  margin: 0;
  /* 2 */
  padding: 0;
  /* 3 */
}

/*
Remove the inheritance of text transform in Edge and Firefox.
*/

button,
select {
  text-transform: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/

button,
input:where([type='button']),
input:where([type='reset']),
input:where([type='submit']) {
  -webkit-appearance: button;
  /* 1 */
  background-color: transparent;
  /* 2 */
  background-image: none;
  /* 2 */
}

/*
Use the modern Firefox focus style for all focusable elements.
*/

:-moz-focusring {
  outline: auto;
}

/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/

:-moz-ui-invalid {
  box-shadow: none;
}

/*
Add the correct vertical alignment in Chrome and Firefox.
*/

progress {
  vertical-align: baseline;
}

/*
Correct the cursor style of increment and decrement buttons in Safari.
*/

::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto;
}

/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/

[type='search'] {
  -webkit-appearance: textfield;
  /* 1 */
  outline-offset: -2px;
  /* 2 */
}

/*
Remove the inner padding in Chrome and Safari on macOS.
*/

::-webkit-search-decoration {
  -webkit-appearance: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/

::-webkit-file-upload-button {
  -webkit-appearance: button;
  /* 1 */
  font: inherit;
  /* 2 */
}

/*
Add the correct display in Chrome and Safari.
*/

summary {
  display: list-item;
}

/*
Removes the default spacing and border for appropriate elements.
*/

blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
  margin: 0;
}

fieldset {
  margin: 0;
  padding: 0;
}

legend {
  padding: 0;
}

ol,
ul,
menu {
  list-style: none;
  margin: 0;
  padding: 0;
}

/*
Reset default styling for dialogs.
*/

dialog {
  padding: 0;
}

/*
Prevent resizing textareas horizontally by default.
*/

textarea {
  resize: vertical;
}

/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/

input::-moz-placeholder, textarea::-moz-placeholder {
  opacity: 1;
  /* 1 */
  color: #9ca3af;
  /* 2 */
}

input::placeholder,
textarea::placeholder {
  opacity: 1;
  /* 1 */
  color: #9ca3af;
  /* 2 */
}

/*
Set the default cursor for buttons.
*/

button,
[role="button"] {
  cursor: pointer;
}

/*
Make sure disabled buttons don't get the pointer cursor.
*/

:disabled {
  cursor: default;
}

/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
   This can trigger a poorly considered lint error in some tools but is included by design.
*/

img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
  display: block;
  /* 1 */
  vertical-align: middle;
  /* 2 */
}

/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/

img,
video {
  max-width: 100%;
  height: auto;
}

/* Make elements with the HTML hidden attribute stay hidden by default */

[hidden]:where(:not([hidden="until-found"])) {
  display: none;
}

input:where([type='text']),input:where(:not([type])),input:where([type='email']),input:where([type='url']),input:where([type='password']),input:where([type='number']),input:where([type='date']),input:where([type='datetime-local']),input:where([type='month']),input:where([type='search']),input:where([type='tel']),input:where([type='time']),input:where([type='week']),select:where([multiple]),textarea,select {
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  background-color: #fff;
  border-color: #6b7280;
  border-width: 1px;
  border-radius: 0px;
  padding-top: 0.5rem;
  padding-right: 0.75rem;
  padding-bottom: 0.5rem;
  padding-left: 0.75rem;
  font-size: 1rem;
  line-height: 1.5rem;
  --tw-shadow: 0 0 #0000;
}

input:where([type='text']):focus, input:where(:not([type])):focus, input:where([type='email']):focus, input:where([type='url']):focus, input:where([type='password']):focus, input:where([type='number']):focus, input:where([type='date']):focus, input:where([type='datetime-local']):focus, input:where([type='month']):focus, input:where([type='search']):focus, input:where([type='tel']):focus, input:where([type='time']):focus, input:where([type='week']):focus, select:where([multiple]):focus, textarea:focus, select:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: #2563eb;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  border-color: #2563eb;
}

input::-moz-placeholder, textarea::-moz-placeholder {
  color: #6b7280;
  opacity: 1;
}

input::placeholder,textarea::placeholder {
  color: #6b7280;
  opacity: 1;
}

::-webkit-datetime-edit-fields-wrapper {
  padding: 0;
}

::-webkit-date-and-time-value {
  min-height: 1.5em;
  text-align: inherit;
}

::-webkit-datetime-edit {
  display: inline-flex;
}

::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field {
  padding-top: 0;
  padding-bottom: 0;
}

select {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
  background-position: right 0.5rem center;
  background-repeat: no-repeat;
  background-size: 1.5em 1.5em;
  padding-right: 2.5rem;
  -webkit-print-color-adjust: exact;
          print-color-adjust: exact;
}

select:where([multiple]),select:where([size]:not([size="1"])) {
  background-image: initial;
  background-position: initial;
  background-repeat: unset;
  background-size: initial;
  padding-right: 0.75rem;
  -webkit-print-color-adjust: unset;
          print-color-adjust: unset;
}

input:where([type='checkbox']),input:where([type='radio']) {
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  padding: 0;
  -webkit-print-color-adjust: exact;
          print-color-adjust: exact;
  display: inline-block;
  vertical-align: middle;
  background-origin: border-box;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
  flex-shrink: 0;
  height: 1rem;
  width: 1rem;
  color: #2563eb;
  background-color: #fff;
  border-color: #6b7280;
  border-width: 1px;
  --tw-shadow: 0 0 #0000;
}

input:where([type='checkbox']) {
  border-radius: 0px;
}

input:where([type='radio']) {
  border-radius: 100%;
}

input:where([type='checkbox']):focus,input:where([type='radio']):focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
  --tw-ring-offset-width: 2px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: #2563eb;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}

input:where([type='checkbox']):checked,input:where([type='radio']):checked {
  border-color: transparent;
  background-color: currentColor;
  background-size: 100% 100%;
  background-position: center;
  background-repeat: no-repeat;
}

input:where([type='checkbox']):checked {
  background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
}

@media (forced-colors: active)  {
  input:where([type='checkbox']):checked {
    -webkit-appearance: auto;
       -moz-appearance: auto;
            appearance: auto;
  }
}

input:where([type='radio']):checked {
  background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");
}

@media (forced-colors: active)  {
  input:where([type='radio']):checked {
    -webkit-appearance: auto;
       -moz-appearance: auto;
            appearance: auto;
  }
}

input:where([type='checkbox']):checked:hover,input:where([type='checkbox']):checked:focus,input:where([type='radio']):checked:hover,input:where([type='radio']):checked:focus {
  border-color: transparent;
  background-color: currentColor;
}

input:where([type='checkbox']):indeterminate {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");
  border-color: transparent;
  background-color: currentColor;
  background-size: 100% 100%;
  background-position: center;
  background-repeat: no-repeat;
}

@media (forced-colors: active)  {
  input:where([type='checkbox']):indeterminate {
    -webkit-appearance: auto;
       -moz-appearance: auto;
            appearance: auto;
  }
}

input:where([type='checkbox']):indeterminate:hover,input:where([type='checkbox']):indeterminate:focus {
  border-color: transparent;
  background-color: currentColor;
}

input:where([type='file']) {
  background: unset;
  border-color: inherit;
  border-width: 0;
  border-radius: 0;
  padding: 0;
  font-size: unset;
  line-height: inherit;
}

input:where([type='file']):focus {
  outline: 1px solid ButtonText;
  outline: 1px auto -webkit-focus-ring-color;
}

/* Do not edit 	*/

/* ---------------------------- */

/* SECTION - FONT IMPORT START  */

/* ---------------------------- */

/* ANCHOR Font Setup 			*/

/* ---------------------------- */

/* Add and name your fonts.		*/

/* Pattern: ONE role-token family name per typography role (display, heading, body, mono),
	 * aliased to one or more @font-face entries. The browser's font-matching algorithm
	 * selects the entry whose font-weight + font-style match the requested style — so
	 * <strong>, <em>, and weight modifiers render with REAL glyphs from the matching file,
	 * never as algorithmically distorted pseudo-variants. The role-token name is the stable
	 * contract; consumers swap src URLs without touching :root vars, Tailwind utilities, or
	 * any downstream rule that references the role.
	 *
	 * Works identically with variable fonts (axis-range entries + optional axis pinning via
	 * `font-variation-settings` descriptor) and non-variable fonts (one entry per weight/style
	 * combo). See the non-variable example block at the end of this section. */

/* Explicit weight & style targeting — how DF curates which physical rendering each
	 * HTML/Tailwind weight request maps to.
	 *
	 * Browser default: Tailwind Preflight applies `b, strong { font-weight: bolder }`. With
	 * default body weight 400 inherited, `bolder` resolves to 700 per CSS Fonts §5.3.2 step
	 * table. So <strong>, <b>, and `.font-bold` all request font-weight: 700.
	 *
	 * DF body (General Sans) chooses to render bold at axis weight 600 — visually appropriate
	 * for body emphasis, less heavy than 700. Achieved by splitting the @font-face range:
	 *   - One entry: font-weight: 200 500    → matches light/normal/medium, renders at requested weight
	 *   - One entry: font-weight: 600 900    → matches semibold+heavier; pins axis to 600 via
	 *                                          `font-variation-settings: 'wght' 600`
	 * Result: every bold-or-heavier Tailwind utility (.font-semibold, .font-bold, .font-extrabold,
	 * .font-black) collapses to the design-curated 600 rendering. Non-variable forks achieve the
	 * same effect by declaring a discrete `font-weight: 700` entry pointing at a SemiBold file —
	 * see CS's NotoSans pattern as the canonical non-variable example at the end of this section.
	 *
	 * DF heading + display (Satoshi) intentionally use the natural axis (no remap) — headings
	 * benefit from the full weight range. DF mono (Commit Mono) ships normal-only axis pinning
	 * for italic via the file's `ital` axis (this single-file variable handles both styles).
	 *
	 * Inline emphasis HTML convention:
	 *   <em>     italic emphasis — semantically correct, cascade dispatches to italic @font-face
	 *   <strong> + <b>   bold emphasis — Preflight makes both request bolder; same rendering
	 *   <i>      RESERVED for Font Awesome icons in DF (e.g. <i class="fa-light fa-heart">).
	 *            Do NOT use <i> for italic text — DF's `i { ... }` rule treats it as an icon
	 *            container. For italic text in DF, always use <em>.
	 * See df-rules.md §1.5 for the normative version of this convention. */

/* ANCHOR Theme Base Variables - Fonts */

/* Designframe ships with — but is not tied to:
	 *   Satoshi       Indian Type Foundry, SIL OFL via Fontshare. Variable wght 300-900,
	 *                 upright + italic (separate file). Display + heading (geometric grotesque).
	 *   General Sans  Indian Type Foundry, SIL OFL via Fontshare. Variable wght 200-700,
	 *                 upright + italic (separate file). Body (grid-derived neutral grotesque).
	 *                 Bold pinned to axis 600 — see explicit-targeting block above.
	 *   Commit Mono   Eigil Nikolajsen, SIL OFL via commitmono.com. Variable wght 200-700 +
	 *                 ital 0-1 (italic IS an axis on the same file — no separate italic file).
	 *                 Mono (code surfaces, ligature-free).
	 *
	 * Forking projects: replace the src URLs with your own font files. Keep the role-token
	 * family names (displayFontFamily / headingFontFamily / bodyFontFamily / monoFontFamily)
	 * unchanged so :root assignments, Tailwind utilities, and every consumer stylesheet keep
	 * resolving correctly. body's `font-synthesis: none` rule (in the base layer below)
	 * catches any missing weight/style variant by falling back to the closest declared file
	 * rather than letting the browser synthesize a distorted glyph. */

/* Display — Satoshi (variable, normal + italic) */

@font-face {
  font-family: 'displayFontFamily';

  /* Do not change — must match --font-display variable */

  src: url('../src/fonts/Satoshi-Variable.woff2') format('woff2-variations');

  font-weight: 300 900;

  /* Variable axis range — use a discrete weight (e.g. 400) for non-variable fonts */

  font-style: normal;

  font-display: swap;
}

@font-face {
  font-family: 'displayFontFamily';

  src: url('../src/fonts/Satoshi-VariableItalic.woff2') format('woff2-variations');

  font-weight: 300 900;

  font-style: italic;

  font-display: swap;
}

/* Heading — Satoshi (variable, normal + italic) — same files as display under a separate role token */

@font-face {
  font-family: 'headingFontFamily';

  /* Do not change — must match --font-heading variable */

  src: url('../src/fonts/Satoshi-Variable.woff2') format('woff2-variations');

  font-weight: 300 900;

  font-style: normal;

  font-display: swap;
}

@font-face {
  font-family: 'headingFontFamily';

  src: url('../src/fonts/Satoshi-VariableItalic.woff2') format('woff2-variations');

  font-weight: 300 900;

  font-style: italic;

  font-display: swap;
}

/* Body — General Sans (variable, normal + italic).
	 * Four entries: light-to-medium ranges render at requested weight; bold-or-heavier ranges
	 * pin the wght axis to 600 (DF's design-curated bold target). See explicit-targeting comment
	 * block above for the full rationale + cross-reference to df-rules.md §1.5. */

@font-face {
  font-family: 'bodyFontFamily';

  /* Do not change — must match --font-body variable */

  src: url('../src/fonts/GeneralSans-Variable.woff2') format('woff2-variations');

  font-weight: 200 500;

  /* Light/normal/medium — variable axis renders at requested weight */

  font-style: normal;

  font-display: swap;
}

@font-face {
  font-family: 'bodyFontFamily';

  /* Bold target: any request 600-900 (semibold, bold, extrabold, black) pins axis to 600 */

  src: url('../src/fonts/GeneralSans-Variable.woff2') format('woff2-variations');

  font-weight: 600 900;

  font-style: normal;

  font-variation-settings: 'wght' 600;

  font-display: swap;
}

@font-face {
  font-family: 'bodyFontFamily';

  src: url('../src/fonts/GeneralSans-VariableItalic.woff2') format('woff2-variations');

  font-weight: 200 500;

  font-style: italic;

  font-display: swap;
}

@font-face {
  font-family: 'bodyFontFamily';

  /* Bold italic target: any italic request 600-900 pins axis to 600 */

  src: url('../src/fonts/GeneralSans-VariableItalic.woff2') format('woff2-variations');

  font-weight: 600 900;

  font-style: italic;

  font-variation-settings: 'wght' 600;

  font-display: swap;
}

/* Mono — Commit Mono (dual-axis variable: wght 200-700 + ital 0-1).
	 * Italic lives on the same physical file via the `ital` axis — both entries point at the
	 * same woff2; the `font-variation-settings` descriptor dials ital to 0 (upright) or 1
	 * (italic). This is cleaner than the Satoshi/General Sans pattern (which uses two separate
	 * physical files) because Commit Mono's italic is a virtual axis, not a separate design. */

@font-face {
  font-family: 'monoFontFamily';

  /* Do not change — must match --font-mono variable */

  src: url('../src/fonts/CommitMono-Variable.woff2') format('woff2-variations');

  font-weight: 200 700;

  font-style: normal;

  font-variation-settings: 'ital' 0;

  /* explicit upright (defensive — browser default is 0 but spelling it out survives weird font-style-to-axis dispatch) */

  font-display: swap;
}

@font-face {
  font-family: 'monoFontFamily';

  src: url('../src/fonts/CommitMono-Variable.woff2') format('woff2-variations');

  font-weight: 200 700;

  font-style: italic;

  font-variation-settings: 'ital' 1;

  /* dial the ital axis to 1 — true italic glyphs from the variable file */

  font-display: swap;
}

/* ---------------------------- */

/* Non-variable font pattern (reference — the CS sibling uses this with NotoSans).
	 * Replace any variable entry above with discrete weight/style entries under the same
	 * role-token name. Each entry maps ONE physical font file to ONE specific weight + style
	 * combination, and the browser cascade dispatches to the matching file natively. The
	 * role-token contract is identical regardless of which mechanism you use:
	 *
	 * @font-face { font-family: 'bodyFontFamily'; src: url('NotoSans-Regular.ttf')        format('truetype'); font-weight: 400; font-style: normal; font-display: swap; }
	 * @font-face { font-family: 'bodyFontFamily'; src: url('NotoSans-Italic.ttf')         format('truetype'); font-weight: 400; font-style: italic; font-display: swap; }
	 * @font-face { font-family: 'bodyFontFamily'; src: url('NotoSans-SemiBold.ttf')       format('truetype'); font-weight: 700; font-style: normal; font-display: swap; }
	 * @font-face { font-family: 'bodyFontFamily'; src: url('NotoSans-SemiBoldItalic.ttf') format('truetype'); font-weight: 700; font-style: italic; font-display: swap; }
	 *
	 * Whichever pattern you choose, keep the role-token family name unchanged. */

/* ---------------------------- */

/* ANCHOR Font Setup - Icon Font */

/* ---------------------------- */

/* Icon Font slot. Designframe reserves <i> for icons (see df-rules.md §1.5).
	 * This slot is designed for two delivery shapes:
	 *
	 *   1) LIGATURE-API libraries (Material Symbols, IcoMoon ligature builds).
	 *      The glyph map is encoded inside the woff2 itself, so declaring
	 *      @font-face here is sufficient. Consumers write <i>favorite</i>
	 *      (no library class) and DF's bare <i> rule paints via the
	 *      --font-icon token (see :root below).
	 *
	 *   2) PROJECT BRAND GLYPH SETS (e.g. custom-icons.woff2 from FontAwesome
	 *      Kit Builder or IcoMoon). When delivered as a ligature font, this
	 *      slot alone is enough. When delivered with sidecar class CSS,
	 *      also load that CSS via <link> in your HTML <head>.
	 *
	 * For CLASS-API libraries (Font Awesome, Phosphor, Tabler), do NOT use
	 * this slot — their ~1,500-rule glyph-lookup tables (.fa-heart:before
	 * { content }, etc.) live in the library's own stylesheets and MUST
	 * be loaded via <link> tags in your HTML <head>. Their class selectors
	 * hard-code font-family at higher specificity and win over this token's
	 * bare <i> rule by CSS cascade — both can coexist without conflict.
	 *
	 * Uncomment below to wire up a ligature-API library. Example uses
	 * Google's Material Symbols Outlined variable font, self-hosted at
	 * src/fonts/. font-display: block (NOT swap) is deliberate — a fallback
	 * to a Latin letter mid-load would render literal text where a glyph
	 * should appear. */

/*
	@font-face {
		font-family: 'iconFontFamily';
		src: url('../src/fonts/material-symbols-outlined.woff2') format('woff2-variations');
		font-weight: 100 700;
		font-style: normal;
		font-display: block;
	}
	*/

/* !SECTION - FONT IMPORT END   */

/* -------------------------------- */

/* Do not edit 	*/

/* ---------------------------- */

/* ---------------------------- */

/* ANCHOR  Backgrounds			*/

/* ---------------------------- */

/* Sets the default colors for base sections. */

body, header, main, footer, .card, .card-base {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
}

/* ---------------------------- */

/* ANCHOR  Typography			*/

/* ---------------------------- */

/* Applies the default styles for basic type elements. */

body {
  font-family: var(--font-body), var(--font-body-alt1), var(--font-body-alt2);
  font-size: var(--text-p3-size);
  line-height: var(--text-p3-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-synthesis: none;
  /* Reject browser pseudo-variants — any missing weight/style combo falls back to the closest declared @font-face entry instead of being algorithmically distorted. Honors the framework's original design intent: real font glyphs only, never synthesized ones. Mitigates the unshipped Commit Mono italic by falling back to upright mono on <code class="italic"> rather than rendering a sheared pseudo-italic. */
}

.card, .card-base {
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-heading), var(--font-heading-alt1), var(--font-heading-alt2);
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

h1 {
  font-size: var(--text-h1-size);
  line-height: var(--text-h1-lh);
}

h2 {
  font-size: var(--text-h2-size);
  line-height: var(--text-h2-lh);
}

h3 {
  font-size: var(--text-h3-size);
  line-height: var(--text-h3-lh);
}

h4 {
  font-size: var(--text-h4-size);
  line-height: var(--text-h4-lh);
}

h5 {
  font-size: var(--text-h5-size);
  line-height: var(--text-h5-lh);
}

h6 {
  font-size: var(--text-h6-size);
  line-height: var(--text-h6-lh);
}

/* nav-tap-target row-height applies only inside opt-in header/topbar contexts.
	 * Bare <nav> elements (sidebars, footer columns, breadcrumbs, dropdowns) inherit
	 * body line-height — they're typically compact text lists, not tap-target rows.
	 * Scope reduced from `nav a` to class-opt-in 2026-05-27 (S—NavB refactor). */

.header-flex nav a,
	.header-base nav a,
	.topbar nav a {
  font-size: var(--text-nav-size);
  line-height: var(--text-nav-lh);
}

a i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

button i {
  font-size: var(--text-nav-size);
  line-height: var(--element-base-size);
}

input label {
  font-size: var(--text-p2-size);
  line-height: var(--text-p2-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

::-moz-placeholder {
  font-size: var(--text-p3-size);
  line-height: var(--text-p3-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

::placeholder {
  font-size: var(--text-p3-size);
  line-height: var(--text-p3-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

ul {
  list-style-position: outside;
  list-style-type: disc;
}

ul > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(var(--layout-unit) * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(var(--layout-unit) * var(--tw-space-y-reverse));
}

ul {
  padding-left: var(--offset-li-base);
}

ol {
  list-style-position: outside;
  list-style-type: decimal;
}

ol > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(var(--layout-unit) * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(var(--layout-unit) * var(--tw-space-y-reverse));
}

ol {
  padding-left: var(--offset-li-base);
}

p.title {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* Set this to text-key or gradient-text-key to apply your chosen key color type (solid vs gradient). */
  font-weight: 700;
}

i {
  line-height: inherit;
}

/* ---------------------------- */

/* ANCHOR  Nav Links			*/

/* ---------------------------- */

/* Sets the default colors for header nav elements. */

nav a, nav a:link, nav a:visited, nav a:focus {
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

nav a:hover {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

nav a:active {
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

nav a.active, nav a.active p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

/* ---------------------------- */

/* ANCHOR  Mobile Menu			*/

/* ---------------------------- */

/* Sets the default colors and structure for mobile menu elements. */

#header-nav-menu {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
}

& #header-nav-menu {
  nav a {
    width: 100%;
  }
  nav a {
    --tw-bg-opacity: 1;
    background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  }
  nav a {
    padding-left: 0px;
    padding-right: 0px;
  }
  nav a {
    text-align: center;
  }
  nav a.nav-gradient {
    /* Do not edit */
  }
  nav a.nav-gradient {
    background-image: linear-gradient(to right, var(--tw-gradient-stops));
  }
  nav a.nav-gradient {
    --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
    --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
    --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  }
  nav a.nav-gradient {
    --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  }
  nav a p {
    padding-left: var(--pad-element-base);
    padding-right: var(--pad-element-base);
  }
  @media (min-width:640px) {
    /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

    nav a p {
      padding-left: var(--pad-element-sm);
      padding-right: var(--pad-element-sm);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }
  @media (min-width:768px) {
    /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

    nav a p {
      padding-left: var(--pad-element-md);
      padding-right: var(--pad-element-md);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }
  @media (min-width:960px) {
    /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

    /* ... */

    nav a p {
      padding-left: var(--pad-element-lg);
      padding-right: var(--pad-element-lg);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }
  @media (min-width:1440px) {
    /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

    /* ... */

    nav a p {
      padding-left: var(--pad-element-xl);
      padding-right: var(--pad-element-xl);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }
  @media (min-width:1600px) {
    /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

    /* ... */

    nav a p {
      padding-left: var(--pad-element-2xl);
      padding-right: var(--pad-element-2xl);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }
  nav a p {
    width: 100%;
  }
  nav a p {
    --tw-bg-opacity: 1;
    background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
  }
  nav a p {
    font-size: var(--text-nav-size);
    line-height: var(--text-nav-lh);
  }
  nav a p {
    --tw-text-opacity: 1;
    color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
  }
  nav a:hover p {
    --tw-bg-opacity: 0;
  }
  nav a:hover p {
    --tw-text-opacity: 1;
    color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  }
}

/* ---------------------------- */

/* ANCHOR  Links & Interactions	*/

/* ---------------------------- */

/* Sets the default colors and behavior for basic interactions. */

button {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

a {
  cursor: pointer;
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

a:hover {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key-end) / var(--tw-text-opacity, 1));
}

:focus-visible {
  outline-color: rgb(var(--color-key));
}

/* ---------------------------- */

/* ANCHOR  Other Elements		*/

/* ---------------------------- */

/* Sets the default colors and behavior for other HTML elements. */

hr {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  grid-column: 1 / -1;
  margin-top: var(--pad-article-base);
  margin-bottom: var(--pad-article-base);
  height: 1px;
  width: 100%;
  border-width: 0px;
  /* DF-specific gradient vs key-color */
}

/* -------------------------------- */

/* Injects Tailwind base styles and any other plugin base styles.								*/

.container {
  width: 100%;
}

@media (min-width: 640px) {
  .container {
    max-width: 640px;
  }
}

@media (min-width: 768px) {
  .container {
    max-width: 768px;
  }
}

@media (min-width: 960px) {
  .container {
    max-width: 960px;
  }
}

@media (min-width: 1440px) {
  .container {
    max-width: 1440px;
  }
}

@media (min-width: 1600px) {
  .container {
    max-width: 1600px;
  }
}

/* Do not edit	*/

/* -------------------------------- */

/* ANCHOR Layout Utilities */

/* HEADER & FOOTER NAVIGATION - Edit the CSS below to set default positioning. */

/* .grid-auto — content-driven auto-fit grid. Browser derives the column
	   count from a min card width (--element-c-lg = 200px); cards reflow 1-up
	   on mobile → ~6-up widescreen with zero per-card class. Sibling of
	   .grid-base (which uses fixed adaptive cols + block-* width slots). Adaptive
	   gutter inherited via the gap-only selector group below (search gap-gutter-base). */

/* .orderable — make a block-flow container (e.g. <main>) reorderable.
	   Establishes a flex column so child `order` takes effect (authored order-*
	   utilities, or the df-editor's transient inline style="order:N"), while
	   children keep their natural block-flow full-width stacking via the default
	   align-items:stretch. Distinct from .flex-base/.section-flex (row-wrap
	   width slots): .orderable does NOT impose block-* width slots — block-*
	   width-slotting is a flex/grid-container concern and already works there.
	   The block-flow→reorder case is the one DF had no primitive for. df-editor
	   reorder dependency. */

@media (min-width:640px) {
  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  .centerframe-grid {
    max-width: 640px;
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:768px) {
  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  .centerframe-grid {
    max-width: 768px;
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:960px) {
  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .centerframe-grid {
    max-width: 960px;
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1440px) {
  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .centerframe-grid {
    max-width: 1440px;
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1600px) {
  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .centerframe-grid {
    max-width: 1600px;
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

.centerframe-grid {
  margin-left: auto;
  margin-right: auto;
  display: grid;
}

/* .centered — vertically centers content, scrolls if it overflows */

.centerframe-grid.centered, .centerframe-flex.centered {
  min-height: 100%;
  place-content: center;
}

/* ---------------------------- */

/* ANCHOR Layout Shell          */

/* ---------------------------- */

/* Body-level Structure class for viewport-locked app shell layouts.
	   Sets up flex-col flow where header/footer shrink and main fills remaining space.
	   Aside and content children get independent scroll contexts.
	   Width on aside comes from block-* classes. Visual styling from aside.sidebar or inline. */

/* ---------------------------- */

/* ANCHOR Scroll Bottom         */

/* ---------------------------- */

/* Bottom-anchored scroll container. Content starts at the bottom and
	   scrolls upward. Used for chat panes, activity feeds, notification panels.
	   Uses flex-col-reverse to flip the scroll anchor. Wrap children in a
	   single <div> to prevent DOM reordering of direct children.
	   Browser note: Firefox may require the inner wrapper div for correct
	   scroll anchoring behavior. */

/* .toggle-set — pill-shaped container for toggle buttons */

/* Default: inactive = transparent + invert text, active = bg-background + key text */

.toggle-set .button,
	.toggle-set .button:hover {
  background-color: transparent;
  background-clip: border-box;
  --tw-ring-color: transparent;
}

.toggle-set .button p, .toggle-set .button i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.toggle-set .button:hover p, .toggle-set .button:hover i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  opacity: 0.75;
}

.toggle-set .button.active {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
  background-image: none;
  background-clip: border-box;
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.toggle-set .button.active p, .toggle-set .button.active i,
	.toggle-set .button.active:hover p, .toggle-set .button.active:hover i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
  opacity: 1;
}

/* .air — light gradient wrapper, all text uses key color */

.toggle-set.air {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-background-start) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-background-start) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-background-end) / 1) var(--tw-gradient-to-position);
  background: linear-gradient(to var(--color-background-direction), rgba(var(--color-background-start-rgb), 1), rgba(var(--color-background-end-rgb), 1)) ;
}

.toggle-set.air .button p, .toggle-set.air .button i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.toggle-set.air .button:hover p, .toggle-set.air .button:hover i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  opacity: 0.75;
}

.toggle-set.air .button.active p, .toggle-set.air .button.active i,
	.toggle-set.air .button.active:hover p, .toggle-set.air .button.active:hover i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  opacity: 1;
}

.datarow.title, .formrow.title {
  align-items: baseline;
}

/* Align-start variant per spec — overrides default space-between to left-align value
	   adjacent to label (for narrow values that look better adjacent vs space-between). */

.data-item.row {
  flex-direction: row;
}

.data-item.col {
  flex-direction: column;
}

/* Datarow variant combo classes — extend the base .datarow primitive with
	   instance-shaped layouts. Apply as `class="datarow search-result"`. Drop
	   in <div> wrapper inside cards/lists. Promoted from custom.css
	   §Utilities → DATAROWS 2026-05-26 (was hyphenated .datarow-search-result
	   wrapper-class form; refactored to combo class per df-rules §3.2). */

.datarow.search-result > .data-item:last-child .button {
  width: 100%;
}

.datarow.stats > hgroup {
  flex-basis: calc(50% - var(--spacing-gutter-base));
}

.datarow.stats hgroup h4,
	.datarow.stats hgroup p {
  text-align: center;
}

.datarow.stats hgroup p {
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

.datarow.stats,
	.datarow.attribute {
  flex-wrap: wrap;
  row-gap: var(--layout-unit);
}

@media (min-width: 640px) {
  .datarow.stats,
	.datarow.attribute {
    flex-wrap: nowrap;
  }
}

.datarow.attribute h5 {
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

.datarow.attribute .data-item:first-child {
  flex-shrink: 1;
  flex-grow: 1;
  flex-basis: calc(50% - var(--spacing-gutter-base));
}

.datarow.attribute .data-item:last-child {
  width: 100%;
}

.stack-row.split, .stack-row-wrap.split, .stack-row-base.split {
  justify-content: space-between;
}

.stack-row.split > div:first-child, .stack-row-wrap.split > div:first-child {
  text-align: left;
}

.stack-row.split > div:last-child, .stack-row-wrap.split > div:last-child {
  text-align: right;
}

.stack-avatar.min {
  isolation: isolate;
  display: flex;
}

.stack-avatar.min > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(calc(var(--offset-element-min) * -1) * var(--tw-space-x-reverse));
  margin-left: calc(calc(var(--offset-element-min) * -1) * calc(1 - var(--tw-space-x-reverse)));
}

.stack-avatar.sm {
  isolation: isolate;
  display: flex;
}

.stack-avatar.sm > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(calc(var(--offset-element-sm) * -1) * var(--tw-space-x-reverse));
  margin-left: calc(calc(var(--offset-element-sm) * -1) * calc(1 - var(--tw-space-x-reverse)));
}

.stack-avatar.md {
  isolation: isolate;
  display: flex;
}

.stack-avatar.md > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(calc(var(--offset-element-md) * -1) * var(--tw-space-x-reverse));
  margin-left: calc(calc(var(--offset-element-md) * -1) * calc(1 - var(--tw-space-x-reverse)));
}

.stack-buttons .button {
  width: 100%;
}

.stack-buttons.col {
  flex-direction: column;
}

.stack-buttons.row {
  flex-direction: row;
}

.stack-buttons.wrap {
  flex-wrap: wrap;
}

/* -------------------------------- */

/* Do not edit	*/

/* ---------------------------------*/

/* ---------------------------- */

/* ANCHOR  Color Utilities		*/

/* ---------------------------- */

.transparent {
  /* Combo-modifier — composes with type classes (.card.transparent, .card-base.transparent, etc.)
		   to render with transparent background. Inside themed contexts, paired with the :not(.transparent)
		   exclusion in card auto-revert rules so this class wins the cascade.
		   See taxonomy.md "The -transparent suffix conventions" for the full pattern. */
  background-color: transparent;
}

.disabled {
  cursor: default !important;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important;
  --tw-grayscale: grayscale(0);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

a.disabled {
  --tw-border-opacity: 1 !important;
  border-color: rgb(var(--color-disabled) / var(--tw-border-opacity, 1)) !important;
  --tw-text-opacity: 1 !important;
  color: rgb(var(--color-disabled) / var(--tw-text-opacity, 1)) !important;
  opacity: 1;
  --tw-ring-opacity: 1 !important;
  --tw-ring-color: rgb(var(--color-disabled) / var(--tw-ring-opacity, 1)) !important;
}

a.disabled:hover {
  background-color: transparent !important;
}

.disabled p, .disabled h2, .disabled h3, .disabled h4, .disabled h5, .disabled h6, .disabled i {
  background-image: none !important;
  --tw-text-opacity: 1 !important;
  color: rgb(var(--color-disabled) / var(--tw-text-opacity, 1)) !important;
}

.disabled .button, .disabled .button::before, .disabled .button:hover::before {
  cursor: default !important;
  --tw-bg-opacity: 1 !important;
  background-color: rgb(var(--color-disabled) / var(--tw-bg-opacity, 1)) !important;
  background-image: none !important;
}

/* 3b-i: disabled buttons key off BOTH the .disabled class AND the :disabled HTML attribute, so
	   React/antd consumers passing `disabled={cond}` on a <button> get DF disabled styling with zero
	   class wiring (closes the S22 follow-up). !bg-none clears the gradient fill — text/icon/standalone
	   alt paint it on ::before, the dropdown paints it on the element background; both are reset below so
	   the flat !bg-disabled reads. (:disabled only matches form elements; <a> buttons still use .disabled.) */

.button.disabled, .button:disabled {
  --tw-bg-opacity: 1 !important;
  background-color: rgb(var(--color-disabled) / var(--tw-bg-opacity, 1)) !important;
  background-image: none !important;
  --tw-text-opacity: 1 !important;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1)) !important;
}

.button.disabled::before, .button:disabled::before {
  --tw-bg-opacity: 1 !important;
  background-color: rgb(var(--color-disabled) / var(--tw-bg-opacity, 1)) !important;
  background-image: none !important;
}

/* !bg-none clears the gradient text-clip image on the <p>/<i> — the .disabled CLASS path gets this from
	   `.disabled p { !bg-none }` (L637, class-only); the :disabled ATTRIBUTE path needs its own parity or
	   gradient-clipped text (secondary/alt) keeps an armed gradient that the hover fill-flip reveals (white-
	   vs-gradient conflict). Primary-gradient disabled is unaffected (its gradient is on ::before, not the p). */

.button.disabled p, .button.disabled i, .button:disabled p, .button:disabled i {
  background-image: none !important;
  --tw-text-opacity: 1 !important;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1)) !important;
}

/* NOTE (3b-i): the original selector here was `.button.secondary.disabled .button.secondary.disabled:hover`
	   — a descendant combinator that never matched (a disabled button nested in a disabled button); corrected
	   to the comma-separated rest+hover pair it was meant to be, and extended with the :disabled attribute. */

.button.secondary.disabled, .button.secondary.disabled:hover,
	.button.secondary:disabled, .button.secondary:disabled:hover {
  --tw-bg-opacity: 1 !important;
  background-color: rgb(var(--color-disabled) / var(--tw-bg-opacity, 1)) !important;
  --tw-text-opacity: 1 !important;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1)) !important;
}

.button.secondary.disabled::before, .button.secondary:disabled::before {
  --tw-bg-opacity: 1 !important;
  background-color: rgb(var(--color-disabled) / var(--tw-bg-opacity, 1)) !important;
  background-image: none !important;
}

.button.secondary.disabled:hover span, .button.secondary:disabled:hover span {
  --tw-bg-opacity: 1 !important;
  background-color: rgb(var(--color-invert) / var(--tw-bg-opacity, 1)) !important;
}

.button.secondary.disabled p, .button.secondary.disabled i, .button.secondary:disabled p, .button.secondary:disabled i {
  background-image: none !important;
  --tw-text-opacity: 1 !important;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1)) !important;
}

/* -------------------------------- */

/* ANCHOR  Font Awesome Specific	*/

/* -------------------------------- */

/* ---------------------------- */

/* ANCHOR  Gradient Utilities	*/

/* ---------------------------- */

/* Edit the XX in bg-gradient-to-XX to change the linear-gradient direction using top, bottom, left, and right combinations. For example, bg-gradient-to-r sets the direction to the right, and bg-gradient-to-tr sets the direction to the top right. You can always use the Tailwind bg-gradient-* utility normally with your gradient-key-start and gradient-key-end and alt colors. */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Single-element gradient BORDER (sibling of gradient-text-key). The padding-box layer
	   paints the themed fill over the border-box gradient; both layers track the derived
	   --color-* tokens, so border + fill re-theme automatically (incl. -alt/dark themes). */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* Do not edit */

/* ---------------------------- */

/* ANCHOR  Effects Utilities	*/

/* ---------------------------- */

/* TODO Convert to TW Extension and confirm no conflict with -inner prefix. */

/* SHADOWS */

/* ---------------------------- */

/* ANCHOR  Shader Utilities		*/

/* ---------------------------- */

/* SHADERS */

/* ---------------------------- */

/* ANCHOR Transition Utilities	*/

/* ---------------------------- */

/* ---------------------------- */

/* ANCHOR  Media Utilities		*/

/* ---------------------------- */

/* ---------------------------- */

/* ANCHOR Animation Utilities 	*/

/* ---------------------------- */

/* GLOWS */

/* ---------------------------- */

/* ANCHOR Badging Utilities 	*/

/* ---------------------------- */

/* Avatar Badge Combo */

.avatar:has(i) {
  position: relative;
}

.avatar i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* Set this to text-key or gradient-text-key to apply your chosen key color type (solid vs gradient). */
}

/* Badge sizing by avatar size — scales icon from i5 (base) down to i6 (min) and up to i1 (xl) */

.avatar i {
  display: block;
  position: absolute;
  bottom: calc(var(--border-button) * -1);
  right: calc(var(--layout-unit) * -1);
  font-size: var(--text-i5-size);
  line-height: var(--text-i5-lh);
  height: var(--text-i5-size);
  width: var(--text-i5-size);
}

.avatar.min i {
  right: calc(var(--layout-unit) / -2);
  font-size: var(--text-i6-size);
  line-height: var(--text-i6-lh);
  height: var(--text-i6-size);
  width: var(--text-i6-size);
}

.avatar.sm i {
  font-size: var(--text-i4-size);
  line-height: var(--text-i4-lh);
  height: var(--text-i4-size);
  width: var(--text-i4-size);
}

.avatar.md i {
  font-size: var(--text-i3-size);
  line-height: var(--text-i3-lh);
  height: var(--text-i3-size);
  width: var(--text-i3-size);
}

.avatar.lg i {
  right: 0;
  font-size: var(--text-i2-size);
  line-height: var(--text-i2-lh);
  height: var(--text-i2-size);
  width: var(--text-i2-size);
}

.avatar.xl i {
  right: 0;
  font-size: var(--text-i1-size);
  line-height: var(--text-i1-lh);
  height: var(--text-i1-size);
  width: var(--text-i1-size);
}

/* ---------------------------- */

/* ANCHOR Other Utilities 		*/

/* ---------------------------- */

.hr-inline.gradient::after {
  content: '';
  background: linear-gradient(to right, rgba(var(--color-key-rgb), 1), rgba(var(--color-key-end-rgb), 1));
}

/* -------------------------------- */

/* Do not edit	*/

/* ---------------------------------*/

div.screen-modal.hide,
	section.screen-modal.hide {
  visibility: hidden;
  --tw-scale-x: 0;
  --tw-scale-y: 0;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  border-radius: var(--screen-xl);
  opacity: 0;
  --tw-blur: blur(var(--blur-max));
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
  --tw-backdrop-blur:  ;
  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
  transition-duration: calc(2 * var(--transition-duration-base));
}

@media (prefers-reduced-motion: reduce) {
  div.screen-modal.hide,
	section.screen-modal.hide {
    transition-property: none;
  }
}

@media (min-width: 960px) {
  div.screen-modal.hide,
	section.screen-modal.hide {
    border-radius: var(--screen-2xl);
  }
}

div.screen-modal.hide .modal-block,
	section.screen-modal.hide .modal-block {
  visibility: hidden;
  --tw-scale-x: .5;
  --tw-scale-y: .5;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  opacity: 0;
  transition-duration: var(--transition-duration-base);
}

@media (prefers-reduced-motion: reduce) {
  div.screen-modal.hide .modal-block,
	section.screen-modal.hide .modal-block {
    transition-property: none;
  }
}

#header-nav-menu-open.hide, #header-nav-menu-close.hide, #header-nav-menu.hide, #mobile-footer-menu-open.hide, #mobile-footer-menu-close.hide, #mobile-footer-menu.hide {
  display: none;
}

/* ---------------------------- */

/* ANCHOR Buttons & Forms		*/

/* ---------------------------- */

/* Combo button grammar (.button.gradient.secondary etc.) is the sole authoring API as of v1.0;
	   the legacy hyphenated forms (.button-secondary-gradient) were removed (S100, 6th/final family).
	   Combo bases: .button, .button.gradient[.secondary][.air],
	   .button.icon[.round][.dropdown][.base], .button.glass. Mapping archived at
	   docs/archive/legacy-hyphenated-api-map-2026-06-11.md. (CS pins its own legacy DF copy — ADR-040.) */

.button.icon,
	.button.icon.round {
  height: var(--element-base-size);
  width: var(--element-base-size);
  background-color: transparent;
  text-align: center;
  font-size: var(--text-nav-size);
  line-height: var(--element-base-size);
}

.button.icon:hover,
	.button.icon.round:hover {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--border-button) + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-inset: inset;
}

.button.icon.gradient p,
	.button.icon.round.gradient p {
  font-size: var(--text-nav-size);
  line-height: calc(var(--text-button-lh) - var(--border-base) - var(--border-base));
}

.button.icon.gradient span,
	.button.icon.round.gradient span {
  width: 100%;
}

.button.icon.dropdown {
  display: flex;
  height: var(--element-base-size);
  width: 100%;
  min-width: -moz-min-content;
  min-width: min-content;
  align-items: center;
  justify-content: space-between;
  padding-left: var(--pad-element-base);
  padding-right: var(--pad-element-base);
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--border-button) + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-inset: inset;
}

.button.icon.dropdown p {
  margin-left: auto;
  margin-right: auto;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
  flex-grow: 1;
  text-align: center;
  font-size: var(--text-button-size);
}

@media (min-width: 960px) {
  .button.icon.dropdown p {
    font-size: var(--text-p3-size);
    line-height: var(--text-p3-lh);
  }
}

.button.icon.dropdown i {
  min-width: var(--element-sub-size);
}

/* Combo: two model-swaps required — `inline-flex` overrides .button.icon.dropdown's `flex`, and `p-border-button` overrides .button.icon.dropdown's `px-element-base` to restore symmetric padding (matches base .button vertical padding); other foundational layout inherited from .button base */

.button.icon.dropdown.gradient {
  display: inline-flex;
  padding: var(--border-button);
}

.button.icon.dropdown.gradient span {
  display: flex;
  height: 100%;
  width: 100%;
  flex-grow: 1;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  padding-left: var(--pad-element-base);
  padding-right: var(--pad-element-base);
}

.button.icon.dropdown.gradient p {
  margin-left: auto;
  margin-right: auto;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
  font-size: var(--text-button-size);
}

.button.icon.dropdown.gradient i {
  line-height: calc(var(--text-button-lh) - var(--border-base) - var(--border-base));
}

.button.icon.base.gradient {
  height: var(--element-base-size);
  font-size: var(--text-h4-size);
  line-height: var(--text-h4-lh);
}

.dropdown-menu p.title {
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

/* Combo button/a: only cursor-pointer model-swap — others inherited from .dropdown-menu button/a (L2507+) */

.dropdown-menu.gradient button, .dropdown-menu.gradient a {
  cursor: pointer;
}

/* Combo li: full declarations needed (no base .dropdown-menu li rule exists) */

.dropdown-menu.gradient li {
  display: block;
  width: 100%;
  cursor: pointer;
  padding-left: var(--pad-element-base);
  padding-right: var(--pad-element-base);
  padding-top: var(--spacing-sub-base);
  padding-bottom: var(--spacing-sub-base);
  text-align: left;
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

/* Combo ul positioning */

ul.dropdown-menu.gradient {
  position: absolute;
  margin-left: var(--pad-element-base);
  margin-right: var(--pad-element-base);
  margin-top: 0px;
  border-top-left-radius: 0px;
  border-top-right-radius: 0px;
  padding: 0px;
  width: calc(100% - 32px);
}

/* Combo ul li last-child rounding */

ul.dropdown-menu.gradient li:last-child {
  border-bottom-right-radius: var(--rounded-corner);
  border-bottom-left-radius: var(--rounded-corner);
}

/* Combo ul li styling */

ul.dropdown-menu.gradient li {
  position: relative;
  list-style-type: none;
  border-top-width: 0px;
  text-align: center;
}

/* Combo ul hide state */

ul.dropdown-menu.gradient.hide {
  display: none;
}

.form-input-dropdown.gradient span p,
	.form-input-dropdown.gradient span i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.form-input-dropdown.air {
  display: flex;
  flex-direction: column;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

.form-input-dropdown.air span {
  display: flex;
  flex-direction: row;
  align-items: center;
}

.form-input.gradient > span,
	.form-input-file.gradient > span {
  display: flex;
  flex-direction: row;
  align-items: center;
  position: relative;
  z-index: 1;
}

.form-input.gradient.expandable::before {
  border-radius: var(--rounded-field);
}

.form-input.gradient.expandable > span {
  border-radius: calc(var(--rounded-field) - var(--border-button));
}

.form-input.gradient.expandable textarea {
  align-items: flex-start;
  border-width: 0px;
  border-color: transparent;
  margin-right: var(--rounded-field);
}

.form-input.gradient.expandable textarea:focus {
  --tw-ring-color: transparent;
}

.form-textarea.air > label {
  width: 100%;
  padding-left: 0px;
  padding-bottom: var(--layout-unit);
  font-size: var(--text-p3-size);
  line-height: var(--text-p3-lh);
}

.form-textarea.air textarea {
  border-left-width: 0px;
  border-right-width: 0px;
  border-top-width: 0px;
  border-color: transparent;
}

/* ANCHOR Combo: .form-select */

.form-select.air {
  display: flex;
  flex-direction: column;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

.form-select.air > label {
  width: 100%;
  padding-left: 0px;
  padding-bottom: var(--layout-unit);
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

@media (min-width: 640px) {
  .form-select.air > label {
    font-size: var(--text-p3-size);
    line-height: var(--text-p3-lh);
  }
}

.form-select.air > select {
  margin: 0px;
  width: 100%;
}

.form-select.gradient > span {
  display: flex;
  flex-direction: row;
  align-items: center;
  position: relative;
  z-index: 1;
}

.form-input.air,
	.form-input-file.air {
  display: flex;
  flex-direction: column;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

.form-input.air > label,
	.form-input-file.air > label {
  width: 100%;
  padding-left: 0px;
  padding-bottom: var(--layout-unit);
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

@media (min-width: 640px) {
  .form-input.air > label,
	.form-input-file.air > label {
    font-size: var(--text-p3-size);
    line-height: var(--text-p3-lh);
  }
}

.form-input.air > input,
	.form-input-file.air > input {
  margin: 0px;
  width: 100%;
}

.form-input-media.sm, .form-input-media.sm a {
  height: var(--element-c-sm);
}

.form-input-media.md, .form-input-media.md a {
  height: var(--element-c-md);
}

.form-input-media.air {
  border-radius: var(--rounded-base);
  background-color: rgb(var(--color-invert) / var(--shader-base));
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  --tw-ring-color: transparent;
}

.form-input-media.air > video {
  border-radius: var(--rounded-base);
}

.form-input-media.air a:hover {
  background-color: rgb(var(--color-invert) / 0.5);
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--border-button) + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.form-input-media.air.corner-i a:hover {
  --tw-ring-color: transparent;
}

.form-input-media.square, .form-input-media.square a {
  aspect-ratio: 1 / 1;
}

.form-input-media.video, .form-input-media.video a {
  aspect-ratio: 16 / 9;
}

.form-input-media.circle, .form-input-media.circle a {
  aspect-ratio: 1 / 1;
  border-radius: 9999px;
}

.form-input-media.circle > video {
  border-radius: 9999px;
}

.form-input-media.corner-i a i, .form-input-media.sm.corner-i a i {
  display: block;
  position: absolute;
  top: calc( (var(--text-i5-size) / 4) * -1);
  right: calc( (var(--text-i5-size) / 4) * -1);
  font-size: var(--text-i5-size);
  line-height: var(--text-i5-lh);
  height: var(--text-i5-size);
  width: var(--text-i5-size);
  transition: none;
}

.form-input-media.md.corner-i a i {
  display: block;
  position: absolute;
  top: calc( var(--layout-unit) * -1);
  right: calc( var(--layout-unit) * -1);
  font-size: var(--text-i4-size);
  line-height: var(--text-i4-lh);
  height: var(--text-i4-size);
  width: var(--text-i4-size);
  transition: none;
}

.form-input-checkbox.row {
  width: 100%;
  flex-direction: row;
  -moz-column-gap: var(--layout-unit);
       column-gap: var(--layout-unit);
}

.form-input-checkbox .checkbox {
  display: flex;
  aspect-ratio: 1 / 1;
  min-height: var(--element-sub-size);
  min-width: var(--element-sub-size);
  align-items: center;
}

.form-input-checkbox .checkbox input {
  /* TODO Convert to Variables Basis */
}

.form-input-checkbox .checkbox input:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.form-input-checkbox .checkbox input {
  /* Set this to focus-set to apply the focus defaults or change/add your chosen properties by applying Tailwind "focus:CLASS" format classes for all theme and non-theme states. */
  aspect-ratio: 1 / 1;
  height: 100%;
  width: 100%;
  --tw-border-opacity: 1;
  border-color: rgb(var(--color-key) / var(--tw-border-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.form-input-checkbox.sm {
  -moz-column-gap: var(--layout-unit);
       column-gap: var(--layout-unit);
}

.form-input-checkbox.md {
  -moz-column-gap: var(--spacing-sub-base);
       column-gap: var(--spacing-sub-base);
}

.form-input-checkbox.sm .checkbox {
  height: var(--element-sub-size);
  width: var(--element-sub-size);
  min-width: var(--element-sub-size);
}

.form-input-checkbox.md .checkbox {
  height: calc(var(--element-sub-size) + var(--layout-unit));
  width: calc(var(--element-sub-size) + var(--layout-unit));
  min-width: calc(var(--element-sub-size) + var(--layout-unit));
}

.form-input-checkbox.lg .checkbox {
  height: var(--element-min-size);
  width: var(--element-min-size);
  min-width: var(--element-min-size);
}

.form-input-checkbox.rounded .checkbox {
  border-radius: var(--rounded-min);
}

.form-input-checkbox.rounded .checkbox input {
  border-radius: calc(var(--rounded-min) - var(--border-button));
}

.form-input-checkbox.circle .checkbox {
  border-radius: 9999px;
}

.form-input-checkbox.circle .checkbox input {
  border-radius: 9999px;
}

.form-input-checkbox.gradient .checkbox {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  padding: var(--border-button);
}

.form-input-checkbox.gradient .checkbox input {
  border-width: 0px;
}

.form-input-checkbox.gradient .checkbox input:checked {
  background-color: transparent;
}

.form-input-checkbox.sm div p {
  font-size: var(--text-p4-size);
  line-height: var(--text-p3-lh);
}

.form-input-checkbox.md div p {
  font-size: var(--text-p3-size);
  line-height: var(--text-p3-lh);
}

.form-radio-set.simple legend {
  margin-bottom: var(--gap-hgroup-title);
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

.form-radio-set.simple > p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.form-radio-set.simple .form-stack-radio-options {
  margin-top: var(--pad-element-base);
  display: flex;
  flex-direction: column;
  row-gap: var(--gap-form-sm);
}

.form-radio-set.card-stack.gradient.secondary .form-stack-radio-options label {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  padding: var(--border-button);
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.form-radio-set.card-stack.gradient.secondary .form-stack-radio-options label > div {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  display: flex;
  height: 100%;
  width: 100%;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  border-radius: calc(var(--rounded-corner) - var(--border-button));
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-invert) / var(--tw-bg-opacity, 1));
  --tw-bg-opacity: var(--color-key-gradient-invert-opacity);
  padding: var(--pad-element-base);
}

.form-radio-set.card-stack.gradient.secondary .form-stack-radio-options label:hover > div,
	.form-radio-set.card-stack.gradient.secondary .form-stack-radio-options label:has(input[type="radio"]:checked) > div {
  background-color: transparent;
}

.form-radio-set.card-stack.gradient.secondary .form-stack-radio-options label:hover > div p,
	.form-radio-set.card-stack.gradient.secondary .form-stack-radio-options label:has(input[type="radio"]:checked) > div p,
	.form-radio-set.card-stack.gradient.secondary .form-stack-radio-options label:hover > div i,
	.form-radio-set.card-stack.gradient.secondary .form-stack-radio-options label:has(input[type="radio"]:checked) > div i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.form-radio-set.card-block.gradient {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  border-radius: var(--rounded-corner);
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.form-radio-set.card-block.gradient.secondary {
  padding: var(--border-button);
}

.form-radio-set.card-block.gradient.secondary .form-stack-radio-options {
  display: flex;
  flex-direction: column;
  row-gap: 1px;
}

.form-radio-set.card-block.gradient.secondary.row .form-stack-radio-options {
  display: flex;
  flex-direction: row;
  -moz-column-gap: 1px;
       column-gap: 1px;
}

.form-radio-set.card-block.gradient.secondary .form-stack-radio-options label {
  --tw-bg-opacity: var(--color-key-gradient-invert-opacity);
}

.form-radio-set.card-block.gradient.secondary .form-stack-radio-options label span:first-child p {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  font-weight: 700;
}

.form-radio-set.card-block.gradient.secondary .form-stack-radio-options label:hover span:first-child p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.form-radio-set.card-block.row .form-stack-radio-options > .form-radio-option:first-child {
  border-top-left-radius: calc(var(--rounded-corner) - var(--border-button));
  border-bottom-left-radius: calc(var(--rounded-corner) - var(--border-button));
  border-top-right-radius: 0px;
}

.form-radio-set.card-block.row .form-stack-radio-options > .form-radio-option:last-child {
  border-top-right-radius: calc(var(--rounded-corner) - var(--border-button));
  border-bottom-right-radius: calc(var(--rounded-corner) - var(--border-button));
  border-bottom-left-radius: 0px;
}

.form-radio-set.card-block.secondary label:has(input[type="radio"]:checked) :first-child p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

/* ---------------------------- */

/* ANCHOR Alerts				*/

/* ---------------------------- */

/* Alert Structure - All */

.alert .button {
  height: var(--element-min-size);
  white-space: nowrap;
  padding-left: var(--spacing-sub-2xl);
  padding-right: var(--spacing-sub-2xl);
  padding-top: 0px;
  padding-bottom: 0px;
  font-size: var(--text-heb-size);
  line-height: var(--text-h6-lh);
}

.alert .content > hgroup, .alert .content > div {
  gap: var(--gap-hgroup-heading);
}

.alert .content p {
  font-size: var(--text-p4-size);
  line-height: var(--text-h6-lh);
}

/* Alert Structure - Banner */

.alert.banner {
  box-shadow: 0 4px 4px -4px rgba(0, 0, 0, var(--shadow-alpha-light)),
					0 -4px 4px -4px rgba(0, 0, 0, var(--shadow-alpha-light));
  width: 100%;
}

.alert.banner .content {
  display: flex;
  width: 100%;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  -moz-column-gap: var(--gap-article-base);
       column-gap: var(--gap-article-base);
  row-gap: calc(var(--layout-unit) / 2);
}

.alert.banner .content > hgroup, .alert.banner .content > div {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}

.alert.banner .action a i {
  width: var(--element-min-size);
  text-align: center;
}

.alert.banner .action {
  min-width: var(--element-min-size);
  max-width: -moz-fit-content;
  max-width: fit-content;
  align-items: center;
  font-size: var(--text-p3-size);
  line-height: var(--text-h6-lh);
}

/* Alert Structure - Callout */

.alert.callout {
  margin-top: var(--pad-element-base);
  margin-bottom: var(--pad-element-base);
  justify-content: center;
  border-radius: var(--rounded-field);
  padding-left: var(--pad-element-base);
  padding-right: var(--pad-element-base);
}

.card .alert.callout .content h6, .card .alert.callout .content p {
  line-height: var(--text-p5-lh);
}

.alert.callout .content > hgroup, .alert.callout .content > div {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}

.alert.callout .action a i {
  padding-left: calc(var(--layout-unit) / 2);
}

.alert.callout .content h6 i, .alert.callout .content p i {
  padding-right: calc(var(--layout-unit) / 2);
}

/* Alert Structure - Box */

.alert.box {
  margin-top: var(--pad-element-base);
  margin-bottom: var(--pad-element-base);
  width: 100%;
  border-radius: var(--rounded-corner);
  padding: var(--pad-element-base);
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.alert.box .action a i {
  padding-left: calc(var(--layout-unit) / 2);
}

.alert.box .content {
  display: flex;
  width: 100%;
  flex-direction: column;
  row-gap: var(--gap-article-base);
}

.alert.box .content ul li {
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

/* Alert Theme - Default */

.alert div .button {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-invert) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.alert div .button:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.alert .action a i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.alert .action a:hover i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

/* Alert Theme - Key */

.alert.\!key {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.alert.key {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.alert.\!key h6 {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.alert.key h6 {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.alert.\!key a {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.alert.\!key a:hover {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key-end) / var(--tw-text-opacity, 1));
}

.alert.key a {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.alert.key a:hover {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key-end) / var(--tw-text-opacity, 1));
}

.alert.\!key .button {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-invert) / var(--tw-ring-opacity, 1));
}

.alert.\!key .button:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-invert) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.alert.key .button {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-invert) / var(--tw-ring-opacity, 1));
}

.alert.key .button:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-invert) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.alert.\!key .action a i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  opacity: var(--color-key-gradient-active-opacity);
}

.alert.key .action a i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  opacity: var(--color-key-gradient-active-opacity);
}

.alert.\!key .action a:hover i {
  opacity: 1;
}

.alert.key .action a:hover i {
  opacity: 1;
}

/* Alert Theme - Key Gradient */

.alert.key-gradient .button {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-invert) / var(--tw-ring-opacity, 1));
}

.alert.key-gradient .button:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-invert) / var(--tw-bg-opacity, 1));
  --tw-bg-opacity: var(--color-key-gradient-active-opacity);
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.alert.key-gradient .action a i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  opacity: var(--color-key-gradient-active-opacity);
}

.alert.key-gradient .action a:hover i {
  opacity: 1;
}

/* Alert Theme - Notify */

.alert.notify {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-alert-notify-background) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-notify-text) / var(--tw-text-opacity, 1));
}

.alert.notify h6 {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-notify-heading) / var(--tw-text-opacity, 1));
}

.alert.notify a {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-notify) / var(--tw-text-opacity, 1));
}

.alert.notify a:hover {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-notify-heading) / var(--tw-text-opacity, 1));
}

.alert.notify .button {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-notify-heading) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-alert-notify-heading) / var(--tw-ring-opacity, 1));
}

.alert.notify .button:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-alert-notify) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-notify-background) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-alert-notify) / var(--tw-ring-opacity, 1));
}

.alert.notify .action a i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-notify) / var(--tw-text-opacity, 1));
}

.alert.notify .action a:hover i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-notify-heading) / var(--tw-text-opacity, 1));
}

/* Alert Theme - Warning */

.alert.warning {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-alert-warning-background) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-warning-text) / var(--tw-text-opacity, 1));
}

.alert.warning h6 {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-warning-heading) / var(--tw-text-opacity, 1));
}

.alert.warning a {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-warning) / var(--tw-text-opacity, 1));
}

.alert.warning a:hover {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-warning-heading) / var(--tw-text-opacity, 1));
}

.alert.warning .button {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-warning-heading) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-alert-warning-heading) / var(--tw-ring-opacity, 1));
}

.alert.warning .button:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-alert-warning) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-warning-background) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-alert-warning) / var(--tw-ring-opacity, 1));
}

.alert.warning .action a i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-warning) / var(--tw-text-opacity, 1));
}

.alert.warning .action a:hover i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-warning-heading) / var(--tw-text-opacity, 1));
}

/* Alert Theme - Error */

.alert.error {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-alert-error-background) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-error-text) / var(--tw-text-opacity, 1));
}

.alert.error h6 {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-error-heading) / var(--tw-text-opacity, 1));
}

.alert.error a {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-error) / var(--tw-text-opacity, 1));
}

.alert.error a:hover {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-error-heading) / var(--tw-text-opacity, 1));
}

.alert.error .button {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-error-heading) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-alert-error-heading) / var(--tw-ring-opacity, 1));
}

.alert.error .button:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-alert-error) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-error-background) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-alert-error) / var(--tw-ring-opacity, 1));
}

.alert.error .action a i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-error) / var(--tw-text-opacity, 1));
}

.alert.error .action a:hover i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-error-heading) / var(--tw-text-opacity, 1));
}

/* Alert Theme - Success */

.alert.success {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-alert-success-background) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-success-text) / var(--tw-text-opacity, 1));
}

.alert.success h6 {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-success-heading) / var(--tw-text-opacity, 1));
}

.alert.success a {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-error) / var(--tw-text-opacity, 1));
}

.alert.success a:hover {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-error-heading) / var(--tw-text-opacity, 1));
}

.alert.success .button {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-success-heading) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-alert-success-heading) / var(--tw-ring-opacity, 1));
}

.alert.success .button:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-alert-success) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-success-background) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-alert-success) / var(--tw-ring-opacity, 1));
}

.alert.success .action a i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-success) / var(--tw-text-opacity, 1));
}

.alert.success .action a:hover i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-success-heading) / var(--tw-text-opacity, 1));
}

/* ---------------------------- */

/* ANCHOR Special Blocks		*/

/* ---------------------------- */

/* ---------------------------- */

/* ANCHOR Other Elements		*/

/* ---------------------------- */

/* ---------------------------- */

/* ANCHOR Menu					*/

/* ---------------------------- */

/* Full-screen overlay menu. Apply on <nav> element: nav.menu
	   Designed for combo class extension: nav.menu.gradient, nav.menu.dark, etc. */

nav.menu {
  padding-top: var(--pad-header-base);
  padding-bottom: var(--pad-header-base);
}

@media (min-width:640px) {
  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  nav.menu {
    padding-top: var(--pad-header-sm);
    padding-bottom: var(--pad-header-sm);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:768px) {
  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  nav.menu {
    padding-top: var(--pad-header-md);
    padding-bottom: var(--pad-header-md);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:960px) {
  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  nav.menu {
    padding-top: var(--pad-header-lg);
    padding-bottom: var(--pad-header-lg);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1440px) {
  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  nav.menu {
    padding-top: var(--pad-header-xl);
    padding-bottom: var(--pad-header-xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1600px) {
  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  nav.menu {
    padding-top: var(--pad-header-2xl);
    padding-bottom: var(--pad-header-2xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

nav.menu {
  display: flex;
  height: 100dvh;
  width: 100%;
  flex-direction: column;
  align-items: center;
}

nav.menu a {
  width: 100%;
  text-align: center;
}

nav.menu a p {
  padding-left: var(--pad-element-base);
  padding-right: var(--pad-element-base);
}

@media (min-width:640px) {
  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  nav.menu a p {
    padding-left: var(--pad-element-sm);
    padding-right: var(--pad-element-sm);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:768px) {
  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  nav.menu a p {
    padding-left: var(--pad-element-md);
    padding-right: var(--pad-element-md);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:960px) {
  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  nav.menu a p {
    padding-left: var(--pad-element-lg);
    padding-right: var(--pad-element-lg);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1440px) {
  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  nav.menu a p {
    padding-left: var(--pad-element-xl);
    padding-right: var(--pad-element-xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1600px) {
  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  nav.menu a p {
    padding-left: var(--pad-element-2xl);
    padding-right: var(--pad-element-2xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

nav.menu a p {
  width: 100%;
  font-size: var(--text-nav-size);
  line-height: var(--text-nav-lh);
}

/* ---------------------------- */

/* ANCHOR Header				*/

/* ---------------------------- */

/* Combo modifier for .header-base elements used in body-scroll docs / marketing
	   page paradigms where content visibly scrolls UNDER the header. Pair with the
	   .theme class on the same element (the canonical .header-base.theme combo).
	   Selector at (0,2,0) per S41 P1-A canonical-resolution — beats header.theme
	   (0,1,1) via specificity + source-order.

	   .glass     — sticky frosted backdrop; semi-transparent bg + backdrop-filter.
	                Idle bg opacity stays low (0.55) so the backdrop blur reads as
	                real frosted glass; no border line.
	   .scrolled  — toggled via JS scroll-spy past first ~8px scrollY; firms bg
	                opacity to 0.70 for legibility + casts a soft directional shadow
	                downward (--shadow-alpha-light, §13.7) for visual delineation
	   reduced-transparency media query — disables blur + restores opaque bg for
	                users with prefers-reduced-transparency: reduce. */

.header-base.glass {
  position: sticky;
  top: 0;
  z-index: 10;
  background-image: none;
  /* combo paints flat bg-color; suppress the .glass family alpha-gradient */
  background-color: rgb(var(--color-background) / 0.55);
  -webkit-backdrop-filter: blur(var(--qs-glass-blur)) saturate(var(--qs-glass-saturation));
  backdrop-filter: blur(var(--qs-glass-blur)) saturate(var(--qs-glass-saturation));
  transition: box-shadow var(--qs-duration-slow) var(--qs-ease-standard), background-color var(--qs-duration-slow) var(--qs-ease-standard);
}

.header-base.glass.scrolled {
  background-color: rgb(var(--color-background) / 0.70);
  box-shadow: 0 4px 8px -4px rgba(0, 0, 0, var(--shadow-alpha-light));
}

@media (prefers-reduced-transparency: reduce) {
  .header-base.glass {
    background-color: rgb(var(--color-background));
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }
}

/* ---------------------------- */

/* ANCHOR Sidebar				*/

/* ---------------------------- */

/* Content class for aside elements that function as sidebars.
	   Provides structural defaults (shrink-0, flex-col) and base spacing.
	   Width comes from block-* classes on the aside.
	   Scroll behavior inherited from body.layout-split or added inline.
	   Mobile hide/show handled inline (hidden lg:flex).
	   Theme and visual styling applied via theme classes or inline. */

/* .sidebar.sticky — combo modifier for body-scroll page paradigms. Sticks
	   under the header on scroll with independent scroll context for long nav
	   lists. Consumer overrides --sidebar-sticky-offset to match their header
	   height + gutter (default 5rem ≈ header height + ~1rem gutter). */

.sidebar.sticky {
  position: sticky;
  top: var(--sidebar-sticky-offset, 5rem);
  align-self: start;
  max-height: calc(100dvh - var(--sidebar-sticky-offset, 5rem));
  overflow-y: auto;
}

/* Sidebar↔content separator — a soft shadow the content casts leftward onto
	   the recessed sticky sidebar, appearing ONLY on scroll in lockstep with the
	   .header-base.glass on-scroll shadow (keyed off the header's .scrolled flag
	   via the sibling combinator — zero extra JS, guaranteed in sync). Scoped lg+.
	   Transition + stacking context live on the BASE element (always present) so
	   the shadow fades both in AND out (500ms, matching the header). */

@media (min-width: 960px) {
  .sidebar.sticky + .section-grid {
    position: relative;
    z-index: 1;
    transition: box-shadow var(--qs-duration-slow) var(--qs-ease-standard);
  }

  .header-base.glass.scrolled ~ main .sidebar.sticky + .section-grid {
    box-shadow: -4px 0 8px -4px rgba(0, 0, 0, var(--shadow-alpha-light));
  }
}

/* Sidebar nav link label truncation — prevents mid-word hard-clip at the
	   ~960-1100px dead zone where block-sm sidebar width is narrower than the
	   longest label ("Typography", "Navigation"). Without ellipsis, labels
	   silently clip; with ellipsis they signal "more here, hidden". Scoped
	   to the <p> only to preserve the parent button's flex sizing behavior. */

/* ---------------------------- */

/* ANCHOR Chat					*/

/* ---------------------------- */

/* Chat message and bubble components for messaging/comment UIs.
	   chat-message: flex row container for avatar + bubble.
	   chat-bubble: message bubble with padding, bg, shadow, and symmetric radius.
	   Asymmetric radius applied automatically based on avatar sibling position:
	     avatar before bubble → square top-left corner
	     bubble before avatar → square top-right corner
	     no avatar → fully symmetric radius
	   Uses :has() for backward sibling detection (Chrome 105+, Safari 15.4+, Firefox 121+). */

.chat-message .avatar ~ .chat-bubble {
  border-top-left-radius: 0;
}

.chat-message .chat-bubble:has(~ .avatar) {
  border-top-right-radius: 0;
}

/* ---------------------------- */

/* ANCHOR Breadcrumbs			*/

/* ---------------------------- */

/* Breadcrumb navigation with auto-generated chevron separators.
	   Apply on <nav> element: nav.breadcrumbs
	   Links inside <p> elements, separators generated via ::after */

nav.breadcrumbs p a:hover, nav.breadcrumbs p a.active {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

/* ---------------------------- */

/* ANCHOR Sidebar Nav			*/

/* ---------------------------- */

/* Vertical text-link navigation for app shells (e.g. inside aside.sidebar).
	   Apply on <nav> element: nav.sidebar-nav
	   Children: <ul role="list"><li><a>; plus optional <hr>, .nav-section-label, .nav-profile.
	   Inherits DF nav a cascade (text-secondary default → text-key on hover/active).
	   Source: SS playground 01-navigation, TW+ navigation/sidebar-navigation/01-light. */

nav.sidebar-nav ul {
  margin: 0px;
  display: flex;
  list-style-type: none;
  flex-direction: column;
  padding: 0px;
  gap: 2px;
}

nav.sidebar-nav a {
  display: flex;
  align-items: center;
  gap: var(--spacing-sub-base);
  border-radius: var(--rounded-corner);
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
  font-weight: 500;
  text-decoration-line: none;
  padding: 6px var(--spacing-sub-base);
}

nav.sidebar-nav a.active {
  font-weight: 600;
}

nav.sidebar-nav a i {
  flex-shrink: 0;
  text-align: center;
  font-size: var(--text-i5-size);
  line-height: var(--text-i5-lh);
  width: 20px;
  color: inherit;
}

nav.sidebar-nav .nav-count {
  margin-left: auto;
  display: inline-flex;
  height: var(--element-min-size);
  min-width: var(--element-min-size);
  align-items: center;
  justify-content: center;
  border-radius: 9999px;
  background-color: rgb(var(--color-secondary) / var(--shader-light));
  font-size: var(--text-chip-size);
  line-height: var(--text-chip-lh);
  font-weight: 500;
  padding: 0 6px;
}

nav.sidebar-nav a.active .nav-count {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

nav.sidebar-nav hr {
  margin-top: var(--spacing-sub-base);
  margin-bottom: var(--spacing-sub-base);
  border-width: 0px;
  border-top: 1px solid rgb(var(--color-secondary) / var(--shader-light));
}

nav.sidebar-nav .nav-section-label {
  font-size: var(--text-p5-size);
  line-height: var(--text-p5-lh);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  --tw-text-opacity: 1;
  color: rgb(var(--color-tertiary) / var(--tw-text-opacity, 1));
  padding: var(--spacing-sub-base) var(--spacing-sub-base) 4px;
}

nav.sidebar-nav .nav-profile {
  margin-top: var(--spacing-sub-base);
  display: flex;
  align-items: center;
  gap: var(--spacing-sub-base);
  padding: var(--spacing-sub-base);
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
  font-weight: 600;
  text-decoration-line: none;
  border-top: 1px solid rgb(var(--color-secondary) / var(--shader-light));
}

/* ---------------------------- */

/* ANCHOR Topbar				*/

/* ---------------------------- */

/* Sticky page header with breadcrumbs/title on the left and action buttons on the right.
	   Apply on a <div>: <div class="topbar"> ... </div>
	   Children: free content on the left (breadcrumbs/hgroup/etc.), .topbar-actions wrapper on the right.
	   Source: SS playground 01-navigation, TW+ headings/page-headings/03-with-actions-and-breadcrumbs. */

.sidebar.topbar {
  position: sticky;
  top: var(--sidebar-sticky-offset, 5rem);
  align-self: start;
  max-height: calc(100dvh - var(--sidebar-sticky-offset, 5rem));
  overflow-y: auto;
}

@media (min-width: 960px) {
  .sidebar.topbar + .section-grid {
    position: relative;
    z-index: 1;
    transition: box-shadow var(--qs-duration-slow) var(--qs-ease-standard);
  }

  .header-base.glass.scrolled ~ main .sidebar.topbar + .section-grid {
    box-shadow: -4px 0 8px -4px rgba(0, 0, 0, var(--shadow-alpha-light));
  }

  .sidebar.topbar + .section-grid {
    position: relative;
    z-index: 1;
    transition: box-shadow var(--qs-duration-slow) var(--qs-ease-standard);
  }

  .header-base.glass.scrolled ~ main .sidebar.topbar + .section-grid {
    box-shadow: -4px 0 8px -4px rgba(0, 0, 0, var(--shadow-alpha-light));
  }
}

.data-table.topbar thead {
  position: sticky;
  top: 0;
  z-index: 1;
  /* local stacking; above tbody only */
}

.topbar {
  position: sticky;
  top: 0px;
  z-index: 10;
  display: flex;
  align-items: center;
  justify-content: space-between;
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
  padding-top: var(--spacing-sub-base);
  padding-bottom: var(--spacing-sub-base);
  padding-left: var(--pad-article-base);
  padding-right: var(--pad-article-base);
  gap: var(--pad-element-base);
  border-bottom: 1px solid rgb(var(--color-secondary) / var(--shader-light));
}

/* ---------------------------- */

/* ANCHOR Tab Nav				*/

/* ---------------------------- */

/* Underline tab navigation. Apply on <nav> element: nav.tab-nav
	   Children: <a> per tab; optional .tab-count badge.
	   Vertical variant: nav.tab-nav.vertical (right border instead of bottom).
	   Inherits DF nav a color cascade (text-secondary default → text-key on hover/active).
	   Source: SS playground 01-navigation, TW+ navigation/tabs/08-tabs-with-underline-and-badges. */

nav.tab-nav a.active {
  font-weight: 600;
  border-bottom-color: rgb(var(--color-key));
}

nav.tab-nav a.active .tab-count {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

/* Vertical variant — right border instead of bottom. */

nav.tab-nav.vertical {
  flex-direction: column;
  border-bottom: none;
  border-right: 1px solid rgb(var(--color-secondary) / var(--shader-light));
}

nav.tab-nav.vertical a {
  border-bottom: none;
  border-right: 2px solid transparent;
  margin-bottom: 0;
  margin-right: -1px;
}

nav.tab-nav.vertical a:hover {
  border-right-color: rgb(var(--color-key));
  border-bottom-color: transparent;
}

nav.tab-nav.vertical a.active {
  border-right-color: rgb(var(--color-key));
  border-bottom-color: transparent;
}

/* ---------------------------- */

/* ANCHOR Footer Cluster		*/

/* ---------------------------- */

/* Adaptive footer chrome primitives — brand block + localization + spacer + nav-stack + copyright.
	   Compose inside <footer class="theme section-grid"> with block-* + content-row siblings.
	   Source: promoted from custom.css §Custom CSS Classes (2026-05-26 cleanup arc); previously
	   shipped unprefixed as user-customization layer rules. Class names framework-neutral; rule
	   bodies generic responsive layouts that compose with existing DF block-* + stack primitives. */

/* ---------------------------- */

/* ANCHOR Mobile Menu			*/

/* ---------------------------- */

/* Free DF mobile-menu drawer component. Applied to the off-canvas drawer
	   wrapper element; full-viewport-height + top-padding for header offset +
	   inner shadow at the top edge. Inner <nav> stacks children vertically and
	   centers them. Source: promoted from custom.css §SECTION Header 2026-05-26
	   per Mike decision 3 (Free DF). Used by df-ui docs site mobile nav. */

/* ---------------------------- */

/* ANCHOR DF Dashboard			*/

/* ---------------------------- */

/* Free DF dashboard layout primitive family. .df-dash is a feed/dashboard
	   wrapper; .df-dash-content is its main column; .df-dash-spacer is a
	   responsive column-filler (mobile-hidden, desktop-only spacer).
	   .df-sidebar-nav is the paired sidebar nav (mobile horizontal row, desktop
	   vertical sticky column); inner <nav a> rows compose icon-span + label-span
	   with hover gradient-text-key. The :not(:has(.df-pagination)) selector
	   adjusts spacing when no pagination row is present (margin-bottom collapses
	   on .centerframe-grid + .df-dash-content). Source: promoted from custom.css
	   §SECTION Header 2026-05-26 per Mike decisions 1.4 + 1.6 (Free DF). */

.df-dash:not(:has(.df-pagination)) .centerframe-grid {
  margin-bottom: 0px;
}

@media (min-width: 640px) {
  .df-dash:not(:has(.df-pagination)) .centerframe-grid {
    margin-bottom: var(--element-base-unit);
  }
}

/* ---------------------------- */

/* ANCHOR Stack Link Icons		*/

/* ---------------------------- */

/* Icon-link row layout — adaptive alignment (center on mobile, left-align
	   on desktop) + mobile top-padding for spacing rhythm. Used inside
	   footer-brand social-icon clusters (see ANCHOR Footer Cluster). Composes
	   with <nav> or <div> wrapper + <a><i>…</i></a> children.
	   Mobile @media variant (base-only top-padding) lives in the BASE screens
	   block of SECTION DF Adaptives. Source: promoted from custom.css
	   §Mobile & Adaptive + §CX Custom Mobile Menu @media 2026-05-26. */

/* ---------------------------- */

/* ANCHOR Mobile Link Viewall	*/

/* ---------------------------- */

/* Mobile-only "View All" expansion link — visible at base breakpoint only
	   (sm:hidden suppresses on >=640px viewports), spans full column, centered,
	   p1 text size. Drop in any grid row where mobile users need a "more"
	   affordance that desktop layouts don't require.
	   Source: promoted from custom.css §Mobile & Adaptive 2026-05-26. */

/* ---------------------------- */

/* ANCHOR Overlay Pane (Free)	*/

/* ---------------------------- */

/* Non-modal persistent overlay primitive. Multi-position via .left/.right/.top/.bottom modifiers. Semi-transparent bg + backdrop blur — content stays visible behind. No JavaScript required.
	   Spec: docs/superpowers/specs/2026-05-20-dfp-overlay-pane.md
	   Pro tier .dfp-overlay-pane adds state machine (dock + cycle + resize). */

/* Shared appearance for Free + Pro overlay states. Split per S70 audit (2026-05-25)
	   Pattern 1 (cross-namespace :where() mixin) into per-namespace rules. :where()
	   wrappers preserved on both halves to maintain original 0,0,0 specificity.
	   Free half stays in Components Structure; Pro half marked DFP-MOVE for Chunk 4 bulk-move. */

/* Position modifiers — shared between Free .overlay-pane and Pro .dfp-overlay-pane (when not .docked).
	   Bottom-anchored states compose three offset sources:
	     12px               — base gap from the viewport edge
	     env(safe-area-inset-bottom, 0px) — home-indicator clearance on iOS (0 on other devices)
	     var(--keyboard-offset, 0px)      — lift above the iOS soft keyboard when consumer writes
	                                        the var via a visualViewport hook (0 otherwise)
	   All three default to 0 when not applicable, so the rule reduces to `bottom: 12px` for
	   consumers that don't opt into either iOS mechanism. See `docs/df-knowledge.md` §
	   "Overlay-pane: keyboard-aware bottom anchoring" for the consumer-contract. */

:where(.overlay-pane).left {
  left: 12px;
  top: 12px;
  bottom: calc(12px + env(safe-area-inset-bottom, 0px) + var(--keyboard-offset, 0px));
  width: var(--df-overlay-pane-side-width);
  height: auto;
}

:where(.overlay-pane).right {
  right: 12px;
  top: 12px;
  bottom: calc(12px + env(safe-area-inset-bottom, 0px) + var(--keyboard-offset, 0px));
  left: auto;
  width: var(--df-overlay-pane-side-width);
  height: auto;
}

:where(.overlay-pane).top {
  top: 12px;
  left: 50%;
  transform: translateX(-50%);
  width: min(60vw, 480px);
  height: var(--df-overlay-pane-tb-height);
  bottom: auto;
  right: auto;
}

:where(.overlay-pane).bottom {
  bottom: calc(12px + env(safe-area-inset-bottom, 0px) + var(--keyboard-offset, 0px));
  left: 50%;
  transform: translateX(-50%);
  width: min(60vw, 480px);
  height: var(--df-overlay-pane-tb-height);
  top: auto;
  right: auto;
}

/* Sub-element containers — used by both Free and Pro overlay panes. */

/* ---------------------------- */

/* ANCHOR Card Head				*/

/* ---------------------------- */

/* Unscoped Free primitives — apply to any element, tuned for card-internal
	   head rows (gap-sub-base sizing). For section-level head rows use .header-flex
	   (<HEADER>) or compose with .section-flex. Companion .card-head-actions
	   auto-right-pushes via ml-auto. */

/* ---------------------------- */

/* ANCHOR Card Variants			*/

/* ---------------------------- */

/* .card.content — horizontal card with media slot (icon or image) + body.
	   Sub-elements: .card-media, .card-body, .card-meta.
	   Source: SS playground 03-cards. */

.card.content {
  display: flex;
  cursor: pointer;
  flex-direction: row;
  gap: var(--pad-element-base);
  transition: box-shadow var(--qs-duration-fast) var(--qs-ease-standard);
}

.card.content:hover {
  --tw-shadow: var(--shadow-base);
  --tw-shadow-colored: var(--shadow-base);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.card.content .card-media {
  display: flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  border-radius: var(--rounded-corner);
  background-color: rgb(var(--color-secondary) / var(--shader-light));
  width: 64px;
  height: 64px;
}

.card.content .card-media img {
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
     object-fit: cover;
}

.card.content .card-media i {
  font-size: var(--text-i4-size);
  line-height: var(--text-i4-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.card.content .card-body {
  min-width: 0px;
  flex: 1 1 0%;
}

.card.content .card-body h5 {
  margin-bottom: 2px;
}

.card.content .card-meta {
  font-size: var(--text-p5-size);
  line-height: var(--text-p5-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-tertiary) / var(--tw-text-opacity, 1));
  margin-top: 4px;
}

/* .card.selectable — radio-card with JS-free state via :has(:checked).
	   Sub-elements: .card-tag, .card-icon, .card-details, .card-check.
	   Source: SS playground 03-cards, TW+ radio-groups/10-cards. */

.card.selectable {
  position: relative;
  cursor: pointer;
  border: 2px solid transparent;
  transition: all var(--qs-duration-fast) var(--qs-ease-standard);
}

.card.selectable:hover {
  border-color: rgb(var(--color-secondary) / var(--shader-light));
  --tw-shadow: var(--shadow-base);
  --tw-shadow-colored: var(--shadow-base);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.card.selectable:has(:checked) {
  border-color: rgb(var(--color-key));
  /* §14.1: comma-combined to preserve hover's shadow-base when both states apply. */
  box-shadow: 0 0 0 3px rgb(var(--color-key) / var(--shader-light)), var(--shadow-base);
}

.card.selectable .card-tag {
  margin-bottom: var(--spacing-sub-base);
  font-size: var(--text-p5-size);
  line-height: var(--text-p5-lh);
  font-weight: 600;
  text-transform: uppercase;
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
  letter-spacing: 0.03em;
}

.card.selectable .card-icon {
  font-size: var(--text-i3-size);
  line-height: var(--text-i3-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
  margin-bottom: var(--pad-element-base);
}

.card.selectable .card-details {
  margin-top: var(--spacing-sub-base);
  font-size: var(--text-p5-size);
  line-height: var(--text-p5-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-tertiary) / var(--tw-text-opacity, 1));
}

.card.selectable .card-check {
  visibility: hidden;
  position: absolute;
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
  top: var(--pad-element-base);
  right: var(--pad-element-base);
}

.card.selectable:has(:checked) .card-check {
  visibility: visible;
}

/* .card.summary — project summary card with footer stats row.
	   Sub-elements: .card-footer, .status-label, .card-footer-stat.
	   Uses .status-dot from primitives below. */

.card.summary {
  cursor: pointer;
  transition: box-shadow var(--qs-duration-fast) var(--qs-ease-standard);
}

.card.summary:hover {
  --tw-shadow: var(--shadow-base);
  --tw-shadow-colored: var(--shadow-base);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.card.summary .card-footer {
  display: flex;
  align-items: center;
  gap: var(--pad-element-base);
  margin-top: var(--pad-element-base);
  padding-top: var(--pad-element-base);
  border-top: 1px solid rgb(var(--color-secondary) / var(--shader-light));
}

.card.summary .card-footer-stat {
  font-size: var(--text-p5-size);
  line-height: var(--text-p5-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-tertiary) / var(--tw-text-opacity, 1));
}

/* .card.brief — left-bordered context banner card with icon + body.
	   Sub-elements: .brief-icon, .brief-body.
	   Source: SS playground 03-cards. */

.card.brief {
  display: flex;
  flex-direction: row;
  gap: var(--pad-element-base);
  border-left: 4px solid rgb(var(--color-key));
}

.card.brief .brief-icon {
  flex-shrink: 0;
  font-size: var(--text-i4-size);
  line-height: var(--text-i4-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
  padding-top: 2px;
}

.card.brief .brief-body h6 {
  margin-bottom: 4px;
}

/* ---------------------------- */

/* ANCHOR Excerpt				*/

/* ---------------------------- */

/* Article excerpt card — preview image + heading + clamped description.
	   Standalone primitive: works without .card on the same element (no visible
	   container; default DF corners on the img child). Composes with .card for
	   card-shell visuals. Drop in <article> + block-* + stack-y wrapper.
	   Aspect ratio of the preview image is consumer-controlled via inline
	   aspect-* utility (no hardcoded default); description line-clamp defaults
	   to 6 but can be overridden via inline line-clamp-* utility.
	   Source: promoted from custom.css §Card Instances 2026-05-26 (drop
	   .excerpt-update content-type variant — consumer-product concern). */

/* ---------------------------- */

/* ANCHOR Status Dot			 */

/* ---------------------------- */

/* Small color-coded indicator dot. Primitive — used inside other components
	   (e.g. .card.summary footer, transcript entries, lists).
	   Source: SS playground 02-indicators (canonical), promoted ahead of 02's batch
	   because .card.summary in 03 consumes it. */

.status-dot.active    {
  background: rgb(var(--color-alert-success));
}

.status-dot.completed {
  background: rgb(var(--color-key));
}

.status-dot.pending   {
  background: rgb(var(--color-alert-warning));
}

.status-dot.declined  {
  background: rgb(var(--color-alert-error));
}

/* ---------------------------- */

/* ANCHOR Data Table			*/

/* ---------------------------- */

/* Standard data table with header styling, row hover, and cell padding.
	   Uses DF typography tokens for sizing. Wrap in .table-scroll for mobile horizontal scroll.
	   Source: SS playground 05-data-display, TW+ tables/01-simple. */

/* Table scroll wrapper — horizontal overflow on narrow viewports. */

/* Data Table Set — single canonical wrapper per spec 2026-05-23-data-table-datarow-v1-design.md §7.
	   Parallels .form-radio-set / .toggle-set naming (-set = primary component + grouped siblings).
	   Carries empty/loading state for the data-table component; groups table + .empty-state + .pagination siblings. */

.data-table-set.empty > .table-scroll,
	.data-table-set.empty > .data-table {
  display: none;
}

.data-table-set.empty > .empty-state {
  display: flex;
}

/* Selectable rows — adds checkbox column + selected-row state.
	   Per spec §2: bare <input type="checkbox"> in cells (no .form-input-checkbox wrapper —
	   the column <th> IS the label per WAI-ARIA table semantics; the cell IS the positioning context). */

.data-table tr.active {
  background: rgb(var(--color-key) / var(--shader-light));
}

.data-table tr.active:hover {
  background: rgb(var(--color-key) / var(--shader-base));
}

/* Sortable headers — visual convention only; consumer wires click handler + icon swap.
	   Per spec §3: icon classes (fa-arrow-up etc.) are conventional, not enforced. */

.data-table th.sortable.asc,
	.data-table th.sortable.desc {
  color: rgb(var(--color-primary));
}

.data-table th.sortable.asc i,
	.data-table th.sortable.desc i {
  color: rgb(var(--color-key));
}

/* Sticky header — for long tables inside .table-scroll vertical context.
	   z-index: 1 is local stacking only — sticky creates its own stacking context
	   within .table-scroll, and thead just needs to outrank tbody rows. Does NOT
	   need a DF z-index scale token; see spec §4 for full reasoning. */

.data-table.sticky thead {
  position: sticky;
  top: 0;
  z-index: 1;
  /* local stacking; above tbody only */
}

/* Density variants per spec §5. Default cell padding lives on .data-table tbody td. */

.data-table.compact tbody td {
  padding: var(--spacing-half-unit) var(--pad-element-base);
}

/* Row-level actions per spec §6. .col-actions is the trailing column;
	   td.actions is the cell carrying the action buttons (flex-justify-end). */

.data-table th.col-actions,
	.data-table td.col-actions,
	.data-table td.actions {
  width: 1%;
  white-space: nowrap;
  text-align: right;
}

.data-table td.actions {
  display: flex;
  justify-content: flex-end;
  gap: var(--spacing-sub-base);
}

/* Column-width modifiers per spec §9. Applied to <th> and/or <td>. */

/* Footer row per spec §10. <tfoot> for totals/aggregates. Top-border emphasis
	   + bold values; no row hover (totals don't need hover affordance). */

/* ---------------------------- */

/* ANCHOR Status Label			*/

/* ---------------------------- */

/* Inline status label: pairs .status-dot (above) with a text label.
	   Standalone primitive — used in cards, tables, lists.
	   Source: SS playground 05-data-display + 03-cards (.card.summary footer). */

/* Table avatar cell — pairs DF .avatar.min with name + subtitle stacked. */

.table-avatar-cell .avatar-info .name {
  font-weight: 600;
}

.table-avatar-cell .avatar-info .subtitle {
  font-size: var(--text-p5-size);
  line-height: var(--text-p5-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-tertiary) / var(--tw-text-opacity, 1));
}

/* ---------------------------- */

/* ANCHOR Tag List				*/

/* ---------------------------- */

/* Flex-wrap container for DF .chip children. Use with chips inside.
	   .tag-more — italic overflow indicator. */

/* Pagination results summary text. */

/* ---------------------------- */

/* ANCHOR Empty State			*/

/* ---------------------------- */

/* Centered placeholder for empty lists/search results.
	   Icon + heading + description + optional CTA button.
	   Variants: .empty-state-dashed (dashed border), .empty-state.contained (shaded bg). */

/* §12.5: <h4> assumes section-level context (parent <section> with <h2>/<h3>).
	   Consumers should override the heading element if embedded in a deeper context. */

.empty-state.contained {
  border-radius: var(--rounded-corner);
  background-color: rgb(var(--color-secondary) / var(--shader-light));
}

/* ---------------------------- */

/* ANCHOR Skeleton				*/

/* ---------------------------- */

/* Animated pulse loading placeholders.
	   Variants: .text (line), .circle (avatar), .rect (image/card).
	   Width modifiers on .text: .short, .medium, .heading. */

@keyframes skeleton-pulse {
  0%   {
    opacity: 1;
  }

  50%  {
    opacity: 0.4;
  }

  100% {
    opacity: 1;
  }
}

.skeleton {
  border-radius: var(--rounded-corner);
  background-color: rgb(var(--color-secondary) / var(--shader-light));
  animation: skeleton-pulse 1.5s ease-in-out infinite;
}

.skeleton.text {
  height: var(--element-sub-size);
  width: 100%;
  border-radius: var(--rounded-min);
}

.skeleton.\!text {
  height: var(--element-sub-size);
  width: 100%;
  border-radius: var(--rounded-min);
}

.skeleton.text.short   {
  width: 60%;
}

.skeleton.\!text.short   {
  width: 60% !important;
}

.skeleton.text.medium  {
  width: 80%;
}

.skeleton.\!text.medium  {
  width: 80% !important;
}

.skeleton.text.heading {
  height: var(--element-min-size);
  width: 40%;
}

.skeleton.\!text.heading {
  height: var(--element-min-size) !important;
  width: 40% !important;
}

.skeleton.circle {
  flex-shrink: 0;
  border-radius: 9999px;
  width: var(--element-r-sm);
  height: var(--element-r-sm);
}

/* §13.8 carve-out: .rect heights are single-component geometry (no matching --element-* token). */

.skeleton.rect    {
  height: 120px;
  width: 100%;
}

.skeleton.rect.sm {
  height: 64px;
}

/* ---------------------------- */

/* ANCHOR Badge					*/

/* ---------------------------- */

/* Inline pill-shape label with semantic color variants.
	   Variants: .success / .warning / .notify / (default = secondary-shader).
	   Source: SS playground 02-indicators (canonical), promoted ahead of 02's batch
	   because 07-panels' .dfp-tool-panel result row consumes it. */

/* Adapted from TW+ elements/badges/08-flat — flat rounded-corner shape (not pill).
	   Variants: semantic colors (.success / .warning / .error / .notify), size .sm,
	   shape .pill, sub-shapes .dot (decorative status) + .count (absolute notification). */

.badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  white-space: nowrap;
  border-radius: var(--rounded-corner);
  background-color: rgb(var(--color-secondary) / var(--shader-light));
  font-size: var(--text-p5-size);
  font-weight: 600;
  padding: 2px var(--spacing-sub-base);
  line-height: var(--text-p5-lh);
  color: rgb(var(--color-primary));
}

.badge.success {
  background: rgb(var(--color-alert-success-background));
  color: rgb(var(--color-alert-success-heading));
}

.badge.warning {
  background: rgb(var(--color-alert-warning-background));
  color: rgb(var(--color-alert-warning-heading));
}

.badge.error   {
  background: rgb(var(--color-alert-error-background));
  color: rgb(var(--color-alert-error-heading));
}

.badge.notify  {
  background: rgb(var(--color-alert-notify-background));
  color: rgb(var(--color-alert-notify-heading));
}

.badge.sm {
  font-size: var(--text-chip-size);
  line-height: var(--text-chip-lh);
  padding: 1px 6px;
}

/* .pill — full-round variant for status/notification chips. */

.badge.pill {
  border-radius: 9999px;
}

/* .dot — decorative status indicator (no text), sub-base square clipped to circle. */

.badge.dot {
  border-radius: 9999px;
  width: var(--spacing-sub-base);
  height: var(--spacing-sub-base);
  padding: 0;
}

.badge.dot.success {
  background: rgb(var(--color-alert-success));
}

.badge.dot.warning {
  background: rgb(var(--color-alert-warning));
}

.badge.dot.error   {
  background: rgb(var(--color-alert-error));
}

.badge.dot.notify  {
  background: rgb(var(--color-alert-notify));
}

/* .count — absolute-positioned notification count on a parent (parent needs relative). */

.badge.count {
  position: absolute;
  border-radius: 9999px;
  font-size: var(--text-chip-size);
  line-height: var(--text-chip-lh);
  top: -4px;
  right: -4px;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  background: rgb(var(--color-alert-error));
  color: rgb(var(--color-invert));
}

/* ---------------------------- */

/* ANCHOR Announcement Pill		*/

/* ---------------------------- */

/* Small pill-shape badge above hero headings for "What's new" / version
	   announcements. Pairs with .dfp-hero + marketing pages. Often used as <a>
	   (transitions on hover via a.announcement-pill:hover).
	   Free-tier per S44 H2=B — single-element primitive, peer to .badge.
	   Source: TW+ heroes/02-split-with-screenshot lines 21-29. */

/* ---------------------------- */

/* ANCHOR Loader					*/

/* ---------------------------- */

/* Spinner element. Apply on a wrapper: <div class="loader"><i class="fa-light fa-spinner"></i></div>.
	   Variants: .page (fullscreen overlay), .inline (in-flow). */

@keyframes spin {
  from {
    transform: rotate(0deg);
  }

  to   {
    transform: rotate(360deg);
  }
}

.loader.page {
  background-color: rgb(var(--color-background) / var(--shader-heavy));
  position: fixed;
  inset: 0;
  -webkit-backdrop-filter: blur(4px);
          backdrop-filter: blur(4px);
  z-index: 9999;
}

.loader.page i {
  font-size: var(--text-i2-size);
}

.loader.inline {
  padding: var(--pad-article-base);
}

.loader.inline i {
  font-size: var(--text-i4-size);
}

/* ---------------------------- */

/* ANCHOR Rating				*/

/* ---------------------------- */

/* Star rating display. Apply on inline wrapper: <span class="rating">.
	   Children: <i> per star. Variants: .sm / .lg, .interactive (hover scale).
	   Empty stars: <i class="empty"> uses tertiary color. */

.rating {
  display: inline-flex;
  align-items: center;
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
  gap: 4px;
}

.rating i              {
  font-size: var(--text-i5-size);
}

.rating.sm i           {
  font-size: var(--text-i6-size);
}

.rating.lg i           {
  font-size: var(--text-i4-size);
}

.rating.interactive i  {
  cursor: pointer;
  transition: transform var(--qs-duration-fast) var(--qs-ease-standard);
}

.rating.interactive i:hover {
  transform: scale(1.2);
}

.rating i.empty        {
  color: rgb(var(--color-tertiary));
}

/* ---------------------------- */

/* ANCHOR Toggle Switch			*/

/* ---------------------------- */

/* Native-checkbox toggle (no JS). Apply on <label class="toggle-switch">.
	   Children: hidden <input type="checkbox"> + <span class="toggle-track"><span class="toggle-thumb">.
	   :has(:checked) drives on-state; :has(:focus-visible) drives keyboard focus ring. */

/* ---------------------------- */

/* ANCHOR Form Textarea Featured */

/* ---------------------------- */

/* Size + prominence variant for primary/featured textareas.
	   Extends DF .form-textarea (wrapper provides flex + rounded-field + ring-form).
	   Featured: 2px inset key ring on wrapper + inner textarea border:0.
	   S42 Bug 2 fix preserved verbatim. Source: SS playground 04-forms-extended. */

.form-textarea.featured {
  box-shadow: inset 0 0 0 2px rgb(var(--color-key));
}

.form-textarea.featured textarea {
  padding: var(--pad-article-base);
  font-size: var(--text-p2-size);
  line-height: var(--text-p2-lh);
  min-height: 120px;
  border: 0;
  resize: vertical;
}

/* -------------------------------- */

/* Do not edit	*/

/* ---------------------------------*/

/* ---------------------------- */

/* ANCHOR Links					*/

/* ---------------------------- */

nav a, nav a:link, nav a:visited, main p a, main p a:link, main p a:visited, footer p a, footer p a:link, footer p a:visited {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
}

#header-nav-menu nav a, #header-nav-menu nav a p {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
}

/* ---------------------------- */

/* ANCHOR Avatars				*/

/* ---------------------------- */

/* NOTE Avatar variants known incomplete — current set covers core sizes/shapes; full variant matrix (color modifiers, status overlays, etc.) deferred to a focused avatar pass. */

/* Avatar New Combo */

.avatar {
  display: flex;
  aspect-ratio: 1 / 1;
  width: var(--element-base-size);
  height: var(--element-base-size);
  align-items: center;
  justify-content: center;
  border-radius: 9999px;
  border-width: 0px;
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  padding: var(--border-button);
  text-align: center;
  line-height: 1;
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.avatar:hover {
  --tw-brightness: brightness(1.1);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.avatar img {
  aspect-ratio: 1 / 1;
  height: 100%;
  width: 100%;
  border-radius: 9999px;
  -o-object-fit: cover;
     object-fit: cover;
  -o-object-position: center;
     object-position: center;
}

.avatar.preview, .avatar.preview img {
  aspect-ratio: 432 / 280;
  width: auto;
  border-radius: var(--rounded-base);
}

.avatar.preview.sm, .avatar.preview.sm img,
	.avatar.preview-rounded.sm, .avatar.preview-rounded.sm img {
  height: var(--element-c-sm);
  width: auto;
}

.avatar.preview-rounded, .avatar.preview-rounded img {
  aspect-ratio: 432 / 280;
  width: auto;
  border-radius: var(--rounded-corner);
}

.avatar.gradient {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
}

.avatar.min {
  width: var(--element-min-size);
  height: var(--element-min-size);
}

.avatar.sm {
  width: var(--element-c-sm);
  height: var(--element-c-sm);
}

.avatar.md {
  width: var(--element-c-md);
  height: var(--element-c-md);
}

.avatar.lg {
  width: var(--element-c-lg);
  height: var(--element-c-lg);
}

.avatar.xl {
  width: var(--element-c-xl);
  height: var(--element-c-xl);
}

/* .squared / .square — rounded-base (square with subtle rounding) */

.avatar.squared, .avatar.squared img,
	.avatar.square, .avatar.square img {
  border-radius: var(--rounded-base);
}

/* .cornered — rounded-corner (soft rounded corners) */

.avatar.cornered {
  border-radius: var(--rounded-corner);
}

.avatar.cornered img {
  border-radius: calc(var(--rounded-corner) - var(--border-button));
}

.avatar.circle, .avatar.circle img {
  border-radius: 9999px;
}

.avatar.hexagon, .avatar.hexagon img {
  border-radius: 0;
  clip-path: polygon(25% 5%, 75% 5%, 100% 50%, 75% 95%, 25% 95%, 0% 50%);
}

.avatar.hexagon-rounded, .avatar.hexagon-rounded img {
  border-radius: 0;
  clip-path: polygon( 1.336% 54.545%,1.336% 54.545%,0.942% 53.683%,0.636% 52.79%,0.417% 51.873%,0.286% 50.94%,0.242% 50%,0.286% 49.06%,0.417% 48.127%,0.636% 47.21%,0.942% 46.317%,1.336% 45.455%,22.133% 5.339%,22.133% 5.339%,22.607% 4.529%,23.148% 3.787%,23.752% 3.117%,24.412% 2.524%,25.121% 2.012%,25.874% 1.584%,26.665% 1.244%,27.488% 0.997%,28.336% 0.845%,29.203% 0.794%,70.797% 0.794%,70.797% 0.794%,71.664% 0.845%,72.512% 0.997%,73.335% 1.244%,74.126% 1.584%,74.879% 2.012%,75.588% 2.524%,76.248% 3.117%,76.852% 3.787%,77.393% 4.529%,77.867% 5.339%,98.664% 45.455%,98.664% 45.455%,99.058% 46.317%,99.364% 47.21%,99.583% 48.127%,99.714% 49.06%,99.758% 50%,99.714% 50.94%,99.583% 51.873%,99.364% 52.79%,99.058% 53.683%,98.664% 54.545%,77.867% 94.661%,77.867% 94.661%,77.393% 95.471%,76.852% 96.213%,76.248% 96.883%,75.588% 97.476%,74.879% 97.988%,74.126% 98.416%,73.335% 98.756%,72.512% 99.003%,71.664% 99.155%,70.797% 99.206%,29.203% 99.206%,29.203% 99.206%,28.336% 99.155%,27.488% 99.003%,26.665% 98.756%,25.874% 98.416%,25.121% 97.988%,24.412% 97.476%,23.752% 96.883%,23.148% 96.213%,22.607% 95.471%,22.133% 94.661%,1.336% 54.545%);
}

/* Style: bordered — border replaces bg+padding, keeps shadow. Image same effective size. */

.avatar.bordered {
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(var(--color-key) / var(--tw-border-opacity, 1));
  background-color: transparent;
  padding: 0px;
}

/* Style: basic — no bg, no border, no padding, no shadow. Image fills full avatar dimensions. */

.avatar.basic {
  border-width: 0px;
  background-color: transparent;
  padding: 0px;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

/* .hexagon-compact — a soft hexagon inset within the square (≈1–99% x, 5–95% y), reading more
	   compact than .hexagon-rounded, which fills the box corner-to-corner. Renamed from .avatar-item
	   (0.99.x) — the old name read as a structural/layout class, not a shape. */

.avatar.hexagon-compact, .avatar.hexagon-compact img {
  border-radius: 0;
  clip-path: polygon(
			25% 10%, 26% 8%, 28% 6%, 30% 5%,
		 	70% 5%, 72% 6%, 74% 8%, 75% 10%,
			98% 46%, 99% 49%, 99% 51%, 98% 54%,
			75% 90%, 74% 92%, 72% 94%, 70% 95%,
			30% 95%, 28% 94%, 26% 92%, 25% 90%,
			2% 54%, 1% 51%, 1% 49%, 2% 46%);
}

a.avatar:hover img {
  --tw-brightness: brightness(1.1);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

/* ---------------------------- */

/* ANCHOR Icon Element			*/

/* ---------------------------- */

/* Bare <i> baseline. DF reserves <i> for icons (df-rules.md §1.5) and is
	   library-agnostic for delivery. This rule binds <i>'s font-family to the
	   --font-icon role token (declared in config.css :root) so ligature-API
	   libraries (Material Symbols) and project brand glyph fonts paint via
	   bare <i> with no library class. The `, inherit` fallback prevents
	   no-setup-defined from rendering as broken glyphs — bare <i> falls
	   through to the inherited body font instead.
	   Class-API libraries (Font Awesome, Phosphor, Tabler) override this rule
	   via their own class selectors at higher specificity (0,1,0 > 0,0,1) —
	   both coexist without conflict. line-height: 1 matches the text-i1..i6
	   icon-sizing convention from config.css (icon-tight box alignment).
	   See df-rules.md §1.5 for the full delivery-shape contract. */

i {
  font-family: var(--font-icon, inherit);
  line-height: 1;
}

/* ---------------------------- */

/* ANCHOR Inline-Icon Paragraph Line-Height */

/* ---------------------------- */

/* Inline icons in paragraphs should inherit the paragraph's line-height
	   rather than the library's default (typically line-height: 1 from the
	   library's class CSS). Without this defense, inline FA-regular icons
	   (or Phosphor regular/weighted icons) stick up/down relative to
	   surrounding paragraph text.
	   Library-coupled by necessity — agnostic `p i { line-height: inherit; }`
	   at 0,0,2 specificity does NOT override library class rules at 0,1,0,
	   so each library needs its own override. Phosphor sibling rule below
	   matches the FA precedent; if/when future libraries land (Tabler,
	   Material Symbols ligature-API, etc.), add `p i.{class} { line-height:
	   inherit; }` overrides per the same shape at matching specificity.
	   See df-knowledge.md "Library-specific paragraph-icon line-height defense"
	   for the specificity rationale.
	   ---
	   NOTE (2026-05-27): The previous hollow-fill mask trick that lived here
	   (i.fa-circle-xmark / i.fa-badge-check { position:relative } + ::before
	   /::after disc-painters) was removed when Phosphor became the DF brand-
	   default. Phosphor's `ph-fill` weight provides natively solid glyphs that
	   don't need the workaround. Consumers needing "hollow-center icon over
	   arbitrary background" can use inline SVG inside <i> — see icons.md for
	   the agnostic pattern. */

p i.ph,
	p i.ph-light,
	p i.ph-bold,
	p i.ph-fill {
  line-height: inherit;
}

/* ---------------------------- */

/* ANCHOR Buttons & Forms		*/

/* ---------------------------- */

/* Combo: only rounded-base swap (square shape overrides base .button's rounded-full) — config-focus-set inherited from .button (L3819+) */

.button.icon.square.gradient {
  border-radius: var(--rounded-base);
}

/* Form input/combo wrappers — rounded-full (combo .button.icon.gradient span inherits from base .button > span at L3836+) */

/* Combo: rounded-base overrides base .button > span's rounded-full (L3836+); config-focus-set is additive (base .button > span has no focus rule) */

.button.icon.square.gradient span {
  /* TODO Convert to Variables Basis */
}

.button.icon.square.gradient span:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.button.icon.square.gradient span {
  /* Set this to focus-set to apply the focus defaults or change/add your chosen properties by applying Tailwind "focus:CLASS" format classes for all theme and non-theme states. */
  border-radius: var(--rounded-base);
}

/* Base — combo .dropdown-menu.gradient inherits rounded-corner + shadow-base via subset matching */

/* Current-page state — first-class so the active item inverts like hover.
	   Needed because an inline `text-invert` utility (0,1,0) loses to the base
	   `nav.pagination a` text-secondary (0,1,2); this selector is (0,2,2). Mark the
	   current page with aria-current="page" (a11y) or .active. */

nav.pagination a.active, nav.pagination a[aria-current="page"] {
  z-index: 10;
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

/* Canonical combo: .pagination.air — transparent/gradient-text treatment that fills on hover.
	   Layers on the .pagination base (inherits layout + .pagination-extra/-next/-previous/-ellipsis);
	   overrides the base solid model (ring + colors) and RESETS the base hover (bg-transparent
	   ring-transparent) so the air ::before gradient wins. The gradient text survives hover because
	   `.air a` color:transparent (0,2,2, from gradient-text-key's bg-clip:text) ties the base
	   `a:hover` (0,2,2) and wins on SOURCE ORDER (declared later); -webkit-text-fill-color then
	   follows that transparent color. (The current-page rule below sets text-fill explicitly because
	   bg-clip-border alone wouldn't override the inherited transparent fill.) */

nav.pagination.air {
  border-radius: var(--rounded-corner);
}

nav.pagination.air a, nav.pagination.air span.pagination-ellipsis {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* TODO Convert to Variables Basis */
}

nav.pagination.air a:focus, nav.pagination.air span.pagination-ellipsis:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

nav.pagination.air a, nav.pagination.air span.pagination-ellipsis {
  /* Set this to focus-set to apply the focus defaults or change/add your chosen properties by applying Tailwind "focus:CLASS" format classes for all theme and non-theme states. */
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  min-width: var(--element-base-size);
  border-radius: var(--rounded-corner);
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  --tw-ring-color: transparent;
}

@media (min-width: 640px) {
  nav.pagination.air a, nav.pagination.air span.pagination-ellipsis {
    min-width: calc(var(--element-base-size) + var(--layout-unit) + var(--layout-unit));
  }
}

nav.pagination.air a::before, nav.pagination.air span.pagination-ellipsis::before {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  position: absolute;
  top: 0px;
  left: 0px;
  height: 100%;
  width: 100%;
  border-radius: var(--rounded-corner);
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  content: '';
  z-index: 0;
  opacity: 0;
}

nav.pagination.air a:hover, nav.pagination.air span.pagination-ellipsis:hover {
  z-index: 50;
  background-color: transparent;
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  --tw-ring-color: transparent;
}

nav.pagination.air a:hover::before, nav.pagination.air span.pagination-ellipsis:hover::before {
  z-index: 30;
  opacity: calc(1 - var(--color-key-gradient-invert-opacity));
}

nav.pagination.air a:active {
  z-index: 40;
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  background-clip: border-box;
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

/* Air current-page state — mirrors the air :hover (gradient ::before fills in,
	   gradient text preserved) so the current page reads as persistently "filled". */

nav.pagination.air a.active, nav.pagination.air a[aria-current="page"] {
  z-index: 50;
  background-color: transparent;
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  --tw-ring-color: transparent;
}

nav.pagination.air a.active::before, nav.pagination.air a[aria-current="page"]::before {
  z-index: 30;
  opacity: calc(1 - var(--color-key-gradient-invert-opacity));
}

.button.icon.square.gradient.air {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* TODO Convert to Variables Basis */
}

.button.icon.square.gradient.air:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.button.icon.square.gradient.air {
  /* Set this to focus-set to apply the focus defaults or change/add your chosen properties by applying Tailwind "focus:CLASS" format classes for all theme and non-theme states. */
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  position: relative;
  display: inline-flex;
  height: var(--element-base-size);
  width: var(--element-base-size);
  align-items: center;
  justify-content: center;
  border-radius: var(--rounded-corner);
  padding: var(--layout-unit);
  font-size: var(--text-p3-size);
  line-height: var(--text-p3-lh);
  font-weight: 700;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-inset: inset;
  --tw-ring-color: transparent;
}

.button.icon.square.gradient.air::before {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  position: absolute;
  top: 0px;
  left: 0px;
  height: 100%;
  width: 100%;
  border-radius: var(--rounded-corner);
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  content: '';
  z-index: 0;
  opacity: 0;
}

.button.icon.square.gradient.air:hover {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.button.icon.square.gradient.air:active {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  background-clip: border-box;
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.button.icon.square.gradient.air:hover::before {
  opacity: calc(1 - var(--color-key-gradient-invert-opacity));
}

/* ANCHOR Combo: .button.air */

.button.air {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-inset: inset;
  --tw-ring-color: transparent;
}

.button.air p, .button.air i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.button.air::before {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  position: absolute;
  top: 0px;
  left: 0px;
  height: 100%;
  width: 100%;
  border-radius: 9999px;
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  content: '';
  z-index: 0;
  opacity: 0;
}

.button.air > span {
  position: relative;
  background-color: transparent;
  z-index: 1;
}

.button.air:hover > span, .button.air.active > span {
  background-color: transparent;
}

.button.air:hover, .button.air.active {
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.button.air:hover p, .button.air:hover i,
	.button.air.active p, .button.air.active i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.button.air:hover::before, .button.air.active::before {
  opacity: calc(1 - var(--color-key-gradient-invert-opacity));
}

/* Combo: .button.gradient.air */

.button.gradient.air {
  background-color: transparent;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-inset: inset;
  --tw-ring-color: transparent;
}

.button.gradient.air p, .button.gradient.air i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.button.gradient.air::before {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  position: absolute;
  top: 0px;
  left: 0px;
  height: 100%;
  width: 100%;
  border-radius: 9999px;
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  content: '';
  z-index: 0;
  opacity: 0;
}

.button.gradient.air > span {
  position: relative;
  background-color: transparent;
  z-index: 1;
}

.button.gradient.air:hover > span, .button.gradient.air.active > span {
  background-color: transparent;
}

.button.gradient.air:hover, .button.gradient.air.active {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.button.gradient.air:hover p, .button.gradient.air:hover i,
	.button.gradient.air.active p, .button.gradient.air.active i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.button.gradient.air:hover::before, .button.gradient.air.active::before {
  opacity: calc(1 - var(--color-key-gradient-invert-opacity));
}

.button.icon.base.gradient {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.button.icon.base.gradient:hover {
  opacity: 0.9;
}

.button.icon.base.gradient {
  active:gradient-text-key;
}

.form-input-dropdown.air span,
	.form-input.air input,
	.form-select.air select {
  border-top-left-radius: 0px;
  border-bottom-left-radius: 0px;
  border-top-right-radius: 0px;
  border-bottom-right-radius: 0px;
}

/* ---------------------------- */

/* ANCHOR Other Elements		*/

/* ---------------------------- */

/* Base — combo .chip.gradient inherits rounded-chip + config-focus-set + config-transition-set via subset matching */

.chip {
  /* TODO Convert to Variables Basis */
}

.chip:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.chip {
  /* Set this to focus-set to apply the focus defaults or change/add your chosen properties by applying Tailwind "focus:CLASS" format classes for all theme and non-theme states. */
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  border-radius: var(--rounded-chip);
}

/* -------------------------------- */

/* Do not edit	*/

/* ---------------------------------*/

/* ---------------------------- */

/* ANCHOR Containers			*/

/* ---------------------------- */

/* Card transparent variants — replaced by `.transparent` combo modifier (df-input.css:1652).
	   Use `<article class="card transparent">` or `<article class="card-base transparent">` instead.
	   The `.transparent` class composes via the combo class taxonomy (Style modifier slot, alongside
	   .gradient and .air) and pairs with `:not(.transparent)` exclusions in the card auto-revert
	   rules across all 6 theme variant blocks. */

/* ---------------------------- */

/* ANCHOR Buttons & Forms		*/

/* ---------------------------- */

/* SECTION COMBO BUTTON CLASSES ----------------------------------------- */

/* Base */

.button {
  /* TODO Convert to Variables Basis */
}

.button:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.button {
  /* Set this to focus-set to apply the focus defaults or change/add your chosen properties by applying Tailwind "focus:CLASS" format classes for all theme and non-theme states. */
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  position: relative;
  display: inline-flex;
  height: var(--element-base-size);
  align-items: center;
  justify-content: center;
  border-radius: 9999px;
  padding: var(--border-button);
  text-align: center;
  font-size: var(--text-button-size);
  line-height: var(--text-button-lh);
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--border-button) + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-inset: inset;
  z-index:1;
}

/* TODO Need to resolve standard i position in span vs in p element to ensure vertical spacing alignment. */

/* Fallback padding for buttons without <span> wrapper (bare text usage) */

.button:not(:has(> span)) {
  padding-left: var(--pad-element-base);
  padding-right: var(--pad-element-base);
}

.button > span {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  display: flex;
  height: 100%;
  width: 100%;
  align-items: center;
  justify-content: center;
  -moz-column-gap: var(--spacing-sub-base);
       column-gap: var(--spacing-sub-base);
  border-radius: 9999px;
  padding-left: var(--pad-element-base);
  padding-right: var(--pad-element-base);
}

.button i {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  font-size: var(--text-button-size);
  line-height: var(--text-button-lh);
}

/* Element-qualified combo override: `<button class="button secondary">` with a span child gets symmetric
	   padding. Flagged during the v1.0 legacy removal (S100) as an element-qualified combo selector and kept
	   per flag-not-fix — it targets the combo `.button.secondary` grammar on `<button>` elements, not a legacy form. */

button.button.secondary:has(> span) {
  padding-left: var(--border-button);
  padding-right: var(--border-button);
}

.form-input.gradient,
	.form-input-file.gradient,
	.form-select.gradient {
  position: relative;
  padding: var(--border-button);
}

.form-input.gradient > span,
	.form-input-file.gradient > span,
	.form-select.gradient > span {
  border-radius: 9999px;
}

.form-input.gradient::before,
	.form-input-file.gradient::before,
	.form-select.gradient::before,
	.button.gradient::before {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  position: absolute;
  top: 0px;
  left: 0px;
  height: 100%;
  width: 100%;
  border-radius: 9999px;
  content: '';
  z-index: 0;
}

.form-input.gradient,
	.form-input-file.gradient,
	.form-select.gradient,
	.button.gradient {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

.form-input.gradient > span,
	.form-input-file.gradient > span,
	.form-select.gradient > span,
	.button.gradient > span {
  position: relative;
  z-index: 1;
}

.button.gradient > span > p {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
}

/* Colors */

.button,
	.button.secondary:hover, .button.secondary.active {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.button p, .button i {
  white-space: nowrap;
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.button:hover, .button.active,
	.button.secondary {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.button:hover p, .button:hover i,
	.button.secondary p, .button.secondary i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.button.secondary:hover p, .button.secondary:hover i,
	.button.secondary.active p, .button.secondary.active i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.form-input.gradient::before,
	.form-input-file.gradient::before,
	.form-select.gradient::before,
	.button.gradient::before {
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
}

.form-input.gradient,
	.form-input-file.gradient,
	.form-select.gradient,
	.button.gradient {
  background-color: transparent;
}

.button.gradient > span,
	.button.gradient.secondary:hover > span, 
	.button.gradient.secondary.active > span {
  background-color: rgb(var(--color-key-gradient-invert) / var(--tw-bg-opacity, 1));
  --tw-bg-opacity: 0;
}

.form-input.gradient > span,
	.form-input-file.gradient > span,
	.form-select.gradient > span,
	.button.gradient:hover > span, .button.gradient.active > span,
	.button.gradient.secondary > span {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key-gradient-invert) / var(--tw-bg-opacity, 1));
  --tw-bg-opacity: var(--color-key-gradient-invert-opacity);
}

.button.gradient > span p, .button.gradient > span i,
	.button.gradient.secondary:hover > span p, .button.gradient.secondary:hover > span i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.button.gradient:hover > span p, .button.gradient:hover > span i,
	.button.gradient.secondary > span p, .button.gradient.secondary > span i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

/* Sizing */

.button.sm {
  height: var(--element-min-size);
  text-align: center;
  font-size: var(--text-p4-size);
  line-height: var(--text-p3-lh);
}

.button.md {
  height: calc(var(--element-min-size) + var(--layout-unit) + var(--layout-unit));
  text-align: center;
  font-size: var(--text-p3-size);
  line-height: var(--text-h3-lh);
}

/* Sm icon buttons need smaller icons (12px) to fit reduced h-element-min — overrides base .button i { text-button } (18px) at L3841+ */

.button.icon.sm i {
  font-size: var(--text-i6-size);
  line-height: var(--text-i6-lh);
}

/* Shaping */

/* .cornered — rounded-corner (soft rounded corners) */

.button.cornered, .button.cornered::before,
	.button.air.cornered::before,
	.button.gradient.air.cornered::before,
	.button.rounded-corners , .button.rounded-corners::before {
  border-radius: var(--rounded-corner);
}

.button.cornered span,
	.button.rounded-corners span {
  border-radius: calc(var(--rounded-corner) - var(--border-button));
}

/* .squared / .square — rounded-base (square with subtle rounding) */

.button.squared, .button.squared::before,
	.button.square, .button.square::before,
	.button.air.squared::before, .button.air.square::before,
	.button.gradient.air.squared::before, .button.gradient.air.square::before,
	.button.rounded-corners-base , .button.rounded-corners-base::before {
  border-radius: var(--rounded-base);
}

.button.squared span, .button.square span,
	.button.rounded-corners-base span {
  border-radius: calc(var(--rounded-base) - var(--border-button));
}

/* .pill — rounded-full (explicit alias for default shape) */

.button.pill, .button.pill::before {
  border-radius: 9999px;
}

.button.pill span {
  border-radius: 9999px;
}

/* Spacing */

.button.dropdown > span,
	.button.distribute > span {
  justify-content: space-between;
}

.button.dropdown > span > i:first-child {
  width: var(--element-base-size);
  padding-right: 0px;
  text-align: left;
}

.button.dropdown > span > i:last-child {
  width: var(--element-base-size);
  padding-left: 0px;
  text-align: right;
}

.button.centered.dropdown > span > p {
  width: 100%;
  padding-left: var(--element-base-unit);
}

/* !SECTION COMBO BUTTON CLASSES ----------------------------------------- */

.button.icon.dropdown.gradient {
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
}

.button.icon.gradient > span {
  background-color: rgb(var(--color-key-gradient-invert) / var(--tw-bg-opacity, 1));
  --tw-bg-opacity: 0;
}

.button.icon.gradient:hover span {
  --tw-bg-opacity: var(--color-key-gradient-invert-opacity);
}

.button.icon.dropdown.gradient {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

.button.icon.dropdown.gradient p, .button.icon.dropdown.gradient i,
	.button.icon.dropdown:hover p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.button.icon.gradient p, .button.icon.gradient p i,
	.button.icon.dropdown.gradient:hover p, .button.icon.dropdown.gradient:hover i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.button.icon.dropdown.gradient:hover span {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key-gradient-invert) / var(--tw-bg-opacity, 1));
  --tw-bg-opacity: var(--color-key-gradient-invert-opacity);
}

/* ANCHOR Combo: .button.icon.dropdown.gradient.air — re-assert air model over the solid dropdown gradient */

/* The .button.icon.dropdown.gradient* rules above paint the SOLID model: element gradient (L4261+),
	   rest-state white/invert label (L4304+). All sit at (0,4,0)–(0,5,1), out-specifying .button.gradient.air (0,3,0),
	   so adding .air to a dropdown otherwise changes nothing. These overrides carry one extra class each,
	   strictly beating the solid rules at every breakpoint (specificity > source order), and restore the
	   air model: transparent element + span, gradient-clipped label, fill-on-hover via the inherited
	   .button.gradient.air::before (L3943/L3963). */

/* bg-none (background-image: none) is the operative reset here — the solid dropdown gradient is
	   painted on the ELEMENT's background-image (L4261+), unlike .button.gradient which uses ::before.
	   bg-transparent (background-color) alone would leave the gradient image intact. */

.button.icon.dropdown.gradient.air,
	.button.icon.dropdown.gradient.secondary.air {
  background-color: transparent;
  background-image: none;
}

.button.icon.dropdown.gradient.air > span,
	.button.icon.dropdown.gradient.secondary.air > span {
  background-color: transparent;
  background-image: none;
}

.button.icon.dropdown.gradient.air p, .button.icon.dropdown.gradient.air i,
	.button.icon.dropdown.gradient.secondary.air p, .button.icon.dropdown.gradient.secondary.air i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

/* ANCHOR Combo: .button.glass — on-media low-emphasis Style (frosted theme-aware plate).
	   Self-contrast plate (backdrop-filter) reads on ANY backdrop — photo/colored/gradient. Plate opacity =
	   shader tokens (--shader-base rest -> --shader-heavy hover). On hover the plate firms + a key ring +
	   key text appear (the over-media role the removed .alt variant used to serve). Text/icon read the
	   theme color (not gradient-clipped) — .button.glass p,i (0,2,1) beats base .button p (0,1,1), no ! needed.
	   Theme-adapts at PAGE level (.df-dark flips --color-background) like .header-base.glass (L2279); section
	   .theme-invert does NOT re-declare --color-background, so the plate stays light there — still legible, the
	   plate self-contrasts (light plate + dark text reads over any backdrop). prefers-reduced-transparency drops
	   the blur + makes the plate opaque, mirroring the header. No edge ring (removed 0.99.67, matching the .glass family); the plate reads via blur + tint
	   alone. Canonical: `button glass`, `button icon round glass`, `button glass secondary`. */

/* .button.icon.glass is listed alongside .button.glass so the plate resolves at (0,3,0)/(0,4,0) and beats
	   .button.icon[.round] { bg-transparent } (L1375, 0,3,0) + the icon hover bg-key/ring-key/text-invert flip
	   (L4559+) — otherwise a hovered glass icon becomes a solid key fill with white-on-near-white text. */

.button.glass, .button.icon.glass {
  --qs-glass-blur: 12px;
  /* component-scale blur — deliberate, see df-rules §21 */
  background-image: none;
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-inset: inset;
  --tw-ring-color: transparent;
  /* rest: no visible ring (nulls base ring-button); the key ring appears on hover */
  background-color: rgb(var(--color-background) / var(--shader-base));
  -webkit-backdrop-filter: blur(var(--qs-glass-blur)) saturate(var(--qs-glass-saturation));
  backdrop-filter: blur(var(--qs-glass-blur)) saturate(var(--qs-glass-saturation));
}

.button.glass:hover, .button.glass.active,
	.button.icon.glass:hover, .button.icon.glass.active {
  background-color: rgb(var(--color-background) / var(--shader-heavy));
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-inset: inset;
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
  /* hover borrows alt's key ring — the plate stays frosted */
}

/* Rest: neutral primary text/icon over the frosted plate. */

.button.glass p, .button.glass i,
	.button.icon.glass p, .button.icon.glass i {
  background-image: none;
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

/* Hover/active: key-colored text/icon (alt's accent identity) — NOT text-invert, so it stays legible on the
	   light frosted plate (the white-on-glass hazard the .icon.glass specificity note above guards against). */

.button.glass:hover p, .button.glass:hover i,
	.button.glass.active p, .button.glass.active i,
	.button.icon.glass:hover p, .button.icon.glass:hover i,
	.button.icon.glass.active p, .button.icon.glass.active i {
  background-image: none;
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

@media (prefers-reduced-transparency: reduce) {
  .button.glass, .button.icon.glass {
    background-color: rgb(var(--color-background));
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }
}

/* Combo: .button.glass.gradient — brand-gradient-tinted frosted plate. Same frost (blur on the element) as
	   plain glass, but the gradient styles' opaque ::before is re-painted at glass alpha (--shader-base →
	   --shader-heavy on hover) so it reads as a TRANSLUCENT tint and the frost shows through. An opaque gradient
	   would negate the glass (that's why bare `.button.gradient` over glass looked solid); the alpha keeps it
	   canonical. The blur lives on the element (backdrop-filter filters what's BEHIND), so a translucent ::before
	   on top still lets the blurred backdrop read. Text follows the glass model (primary rest → key hover), not
	   gradient's invert. blur + reduced-transparency fallback inherited from the .button.glass base. */

.button.glass.gradient::before, .button.icon.glass.gradient::before {
  background-image: linear-gradient(to right,
			rgba(var(--color-key-rgb), var(--shader-base)),
			rgba(var(--color-key-end-rgb), var(--shader-base)));
  opacity: 1;
}

.button.glass.gradient:hover::before, .button.glass.gradient.active::before,
	.button.icon.glass.gradient:hover::before, .button.icon.glass.gradient.active::before {
  background-image: linear-gradient(to right,
			rgba(var(--color-key-rgb), var(--shader-heavy)),
			rgba(var(--color-key-end-rgb), var(--shader-heavy)));
}

/* Text: glass model — primary at rest, key on hover/active (NOT gradient's invert/white). */

.button.glass.gradient > span p, .button.glass.gradient > span i,
	.button.icon.glass.gradient p, .button.icon.glass.gradient i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

.button.glass.gradient:hover > span p, .button.glass.gradient:hover > span i,
	.button.glass.gradient.active > span p, .button.glass.gradient.active > span i,
	.button.icon.glass.gradient:hover p, .button.icon.glass.gradient:hover i,
	.button.icon.glass.gradient.active p, .button.icon.glass.gradient.active i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

@media (prefers-reduced-transparency: reduce) {
  .button.glass.gradient::before, .button.icon.glass.gradient::before {
    background-image: linear-gradient(to right, rgb(var(--color-key-rgb)), rgb(var(--color-key-end-rgb)));
  }
}

.button.icon {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

/* Combo: propagate text-key to p/i descendants — overrides base .button p, .button i { text-invert } at L3897+. Gradient forms (.button.icon.gradient, .button.icon.dropdown.gradient*) retain their own colors via higher-specificity rules at .button.gradient > span i (L3950+) and L4099-4126 */

.button.icon p, .button.icon i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.button.icon:hover, .button.icon.active {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

/* On hover/active, .button.icon p/i flip to text-invert (readable on filled key bg) — mirrors .button.secondary:hover p/i at L3913+ */

.button.icon:hover p, .button.icon:hover i,
	.button.icon.active p, .button.icon.active i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

/* Combo: .button.icon.air — re-assert the air ghost over the icon-hover flip above.
	   .button.icon:hover { bg-key } + .button.icon:hover i { text-invert } (L3855/3859, 0,2,1) would otherwise
	   paint a hovered air icon as a SOLID key fill with a white glyph — the icon default, not air's ghost.
	   These (0,3,1)/(0,3,0) rules win and keep air's behavior: transparent element (the ::before fades in to
	   carry hover feedback), key glyph. Same fix pattern as .button.icon.glass (L3812). */

.button.icon.air:hover, .button.icon.air.active {
  background-color: transparent;
  --tw-ring-color: transparent;
}

.button.icon.air:hover i, .button.icon.air:hover p,
	.button.icon.air.active i, .button.icon.air.active p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

/* gradient air icon: same ghost, but gradient-clipped glyph (matches .button.gradient.air) */

.button.icon.gradient.air:hover i, .button.icon.gradient.air:hover p,
	.button.icon.gradient.air.active i, .button.icon.gradient.air.active p {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.button.icon.gradient {
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 0) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 0) var(--tw-gradient-to-position);
}

.button.icon.gradient:hover {
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
}

.button.icon.dropdown {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.button.icon.dropdown:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

/* Base — combo .dropdown-menu.gradient inherits bg-default + ring-secondary via subset matching */

/* Base — combo .dropdown-menu.gradient p.title inherits text-secondary via subset matching */

.dropdown-menu p.title {
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

/* Base button/a — combo .dropdown-menu.gradient button/a inherit text-primary via subset matching */

/* Combo li — full declaration needed (no base .dropdown-menu li rule) */

.dropdown-menu.gradient li {
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

/* Combo button/a hover — only gradient-key model-swap (overrides base .dropdown-menu button:hover's bg-key at L4344+); text-invert inherited from base */

.dropdown-menu.gradient button:hover, .dropdown-menu.gradient a:hover {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  /* Use bg-key instead of gradient-key for solid color background */
}

/* Combo li hover — full declarations needed (no base .dropdown-menu li:hover rule) */

.dropdown-menu.gradient li:hover {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.form-input-dropdown.air span,
	.form-input.air input, .form-textarea.air textarea {
  background-color: rgb(var(--color-invert) / var(--shader-base));
}

.form-input-dropdown.air span:hover,
	.form-input.air input:hover, .form-input.air input:focus, .form-textarea.air textarea:hover, .form-textarea.air textarea:focus {
  border-left-width: 0px;
  border-right-width: 0px;
  border-bottom-width: 1px;
  border-top-width: 0px;
  --tw-border-opacity: 1;
  border-color: rgb(var(--color-key) / var(--tw-border-opacity, 1));
}

/* ---------------------------- */

/* ANCHOR Alerts				*/

/* ---------------------------- */

/* ---------------------------- */

/* ANCHOR Other Elements		*/

/* ---------------------------- */

/* .chip.primary = explicit primary-role alias of the filled default chip (symmetric with .chip.secondary).
	   Keeps the `.primary` role token valid post legacy-button removal — the tier-badge convention uses
	   `chip primary` (Mixed) / `chip secondary` (Free). */

.chip,
	.chip.primary {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--border-button) + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-inset: inset;
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.chip:hover, .chip.primary:hover {
  background-color: rgb(var(--color-key) / 0.05);
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.chip.secondary {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--border-button) + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-inset: inset;
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.chip.secondary:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

/* Combo gradient style */

.chip.gradient {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  background-clip: border-box;
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

/* Combo gradient hover */

.chip.gradient:hover {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

/* Menu Visuals */

nav.menu {
  box-shadow: inset 0 4px 4px -4px rgba(0, 0, 0, var(--shadow-alpha-light));
}

nav.menu a p {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

nav.menu a:hover p {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

nav.menu a.nav-gradient {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
}

/* -------------------------------- */

/* Do not edit	*/

/* ---------------------------------*/

/* IMPORTANT Only change the CSS below if you changed the default screen values or if you want to change the theme color logic. */

/* -------------------------------------------------------------------- */

/* SECTION Global														*/

/* -------------------------------------------------------------------- */

/* ---------------------------- */

/* ANCHOR Text					*/

/* ---------------------------- */

h1, h2 ,h3 ,h4 ,h5, h6 {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* Set this to text-key or gradient-text-key to apply your chosen key color type (solid vs gradient). */
}

h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  text-decoration-line: none;
  /* Set this to text-key or gradient-text-key (solid vs gradient), and add any additional default global styles. */
}

h1 a:link, h2 a:link, h3 a:link, h4 a:link, h5 a:link, h6 a:link, h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited, h1 a:focus, h2 a:focus, h3 a:focus, h4 a:focus, h5 a:focus, h6 a:focus {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  text-decoration-line: none;
  /* Set this to text-key or gradient-text-key (solid vs gradient), and add any additional default global styles. */
}

h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  opacity: var(--color-key-gradient-active-opacity);
  /* Set this to text-key or gradient-text-key (solid vs gradient), and add hover plus any additional default global styles. */
}

h1 a:active, h2 a:active, h3 a:active, h4 a:active, h5 a:active, h6 a:active {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  opacity: var(--color-key-gradient-active-opacity);
  /* Set this to text-key or gradient-text-key (solid vs gradient), and add any additional default global styles. */
}

p a {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  font-style: italic;
  text-decoration-line: none;
}

.df-block-code p.token a {
  font-style: italic;
}

p a {
  /* Set this to text-key or gradient-text-key (solid vs gradient), and add any additional default global styles. */
}

p a:link, p a:visited, p a:focus {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  font-style: italic;
  text-decoration-line: none;
}

.df-block-code p.token a:link,.df-block-code  p.token a:visited,.df-block-code  p.token a:focus {
  font-style: italic;
}

p a:link, p a:visited, p a:focus {
  /* Set this to text-key or gradient-text-key (solid vs gradient), and add any additional default global styles. */
}

p a:hover {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  opacity: var(--color-key-gradient-active-opacity);
  /* Set this to text-key or gradient-text-key (solid vs gradient), and add hover plus any additional default global styles. */
}

p a:active {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  opacity: var(--color-key-gradient-active-opacity);
  /* Set this to text-key or gradient-text-key (solid vs gradient), and add any additional default global styles. */
}

/* -------------------------------------------------------------------- */

/* !SECTION Global														*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme & Theme Transparent									*/

/* -------------------------------------------------------------------- */

/* Currently, no theme/theme-transparent overrides of DF Core/Component Visuals styles are needed here. */

/* -------------------------------------------------------------------- */

/* !SECTION Theme & Theme Transparent									*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Invert & Theme Invert Transparent						*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* !SECTION Theme Invert & Theme Invert Transparent						*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Key & Theme Key Gradient								*/

/* -------------------------------------------------------------------- */

/* Key themes invert the contrast model: components use bg-invert/		*/

/* text-key instead of bg-key/text-invert. Shared selector covers both	*/

/* theme-key (main palette) and theme-key-alt (alt palette via cascade).*/

/* -------------------------------------------------------------------- */

/* !SECTION Theme Key & Theme Key Gradient								*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Alt Variable Cascade									*/

/* -------------------------------------------------------------------- */

/* Reassign core color variables so all DF components automatically		*/

/* use the alt palette within theme-alt containers via CSS cascade.		*/

/* -------------------------------------------------------------------- */

/* !SECTION Theme Alt Variable Cascade									*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Alt & Theme Alt Transparent							*/

/* -------------------------------------------------------------------- */

/* Currently, no theme-alt/theme-alt-transparent overrides are needed here. */

/* Alt palette colors cascade via the Theme Alt Variable Cascade above. */

/* -------------------------------------------------------------------- */

/* !SECTION Theme Alt & Theme Alt Transparent							*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Alt Invert & Theme Alt Invert Transparent				*/

/* -------------------------------------------------------------------- */

/* Currently, no separate theme-alt-invert overrides are needed here.	*/

/* Alt palette cascades via Variable Cascade; invert-specific gradient	*/

/* span behavior is handled by the extended Theme Invert selector above.*/

/* -------------------------------------------------------------------- */

/* !SECTION Theme Alt Invert & Theme Alt Invert Transparent				*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Key Alt & Theme Key Alt Gradient						*/

/* -------------------------------------------------------------------- */

/* Currently, no separate theme-key-alt overrides are needed here.		*/

/* Alt palette cascades via Variable Cascade; key contrast overrides		*/

/* are handled by the shared Theme Key selector above.					*/

/* -------------------------------------------------------------------- */

/* !SECTION Theme Key Alt & Theme Key Alt Gradient						*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Background Media										*/

/* -------------------------------------------------------------------- */

/* Free DF theme-bg-{image,video} modifier classes that compose with .theme
	   to apply a cover-positioned background image OR background video to a
	   <MAIN> or <SECTION> element. Author-set CSS variables
	   --theme-bg-image / --theme-bg-image-position / --theme-bg-video-position
	   (+ -alt-* equivalents) drive the position; the image/video URL or <video>
	   child is consumer-supplied. Uppercase MAIN/SECTION selectors are
	   intentional per CSS Selectors-4 case-insensitive matching. Promoted from
	   custom.css §Theming Special Variable Applications 2026-05-26. */

/* --- Theme Background Image (cover) --- */

/* --- Theme Background Video (cover, parallel API to theme-bg-image) --- */

/* Compose <video> as direct child; positioned cover w/ z-index 0.
		   Content children (.centerframe-grid, .section-grid) lift to z-index 1.
		   Transparent theme variants suppress the video.
		   Replaces the legacy .df-main > SECTION > #hero-bg-video cascade — that
		   form was ID-coupled (single-instance) and depended on a .df-main parent
		   class that had no consumers. The new class-based API is multi-instance
		   and works on any <MAIN> or <SECTION>. */

MAIN.theme-bg-video > .centerframe-grid,
		SECTION.theme-bg-video > .centerframe-grid,
		MAIN.theme-bg-video > .section-grid,
		SECTION.theme-bg-video > .section-grid {
  position: relative;
  z-index: 1;
}

MAIN.theme-alt-bg-video > .centerframe-grid,
		SECTION.theme-alt-bg-video > .centerframe-grid,
		MAIN.theme-alt-bg-video > .section-grid,
		SECTION.theme-alt-bg-video > .section-grid {
  position: relative;
  z-index: 1;
}

/* -------------------------------------------------------------------- */

/* !SECTION Theme Background Media										*/

/* -------------------------------------------------------------------- */

/* -------------------------------- */

/* Do not edit 	*/

/* -------------------------------- */

/* --------------------------------------------------------------------	*/

/* SECTION UTILITIES - ALL SCREENS										*/

/* DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* --------------------------------------------------------------------	*/

/* --------------------------------------------------------------------	*/

/* /DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* !SECTION UTILITIES - ALL SCREENS										*/

/* --------------------------------------------------------------------	*/

/* TODO Re-Factor Adaptives to use TW Screen Prefixes */

/* --------------------------------------------------------------------	*/

/* SECTION BASE (<640px & undefined) Screens 										*/

/* DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* --------------------------------------------------------------------	*/

header {
  padding-left: var(--spacing-shoulder-base);
  padding-right: var(--spacing-shoulder-base);
  padding-top: var(--pad-header-base);
  padding-bottom: var(--pad-header-base);
}

footer {
  padding-left: var(--spacing-shoulder-base);
  padding-right: var(--spacing-shoulder-base);
  padding-top: var(--pad-section-base);
  padding-bottom: var(--pad-section-base);
}

section {
  padding-left: var(--spacing-shoulder-base);
  padding-right: var(--spacing-shoulder-base);
  padding-top: var(--pad-section-base);
  padding-bottom: var(--pad-section-base);
}

.section-grid, .centerframe-grid, .grid-base, main.main-grid {
  grid-template-columns: repeat(var(--layout-cols-base), minmax(0, 1fr));
  gap: var(--spacing-gutter-base);
}

.section-grid.gap-2gutter, .centerframe-grid.gap-2gutter, .grid-base.gap-2gutter, .section-flex.gap-2gutter, .centerframe-flex.gap-2gutter, .flex-base.gap-2gutter, main.main-flex.gap-2gutter {
  gap: calc(2 * var(--spacing-gutter-base));
}

.section-grid .block-xs, .centerframe-grid .block-xs, .grid-base .block-xs, main.main-grid .block-xs {
  grid-column: span var(--layout-cols-base-min) / span var(--layout-cols-min-base);
}

.section-grid .block-sm, .centerframe-grid .block-sm, .grid-base .block-sm, main.main-grid .block-sm {
  grid-column: span var(--layout-cols-base-half) / span var(--layout-cols-base-half);
}

.section-grid .block-smx, .centerframe-grid .block-smx, .grid-base .block-smx, main.main-grid .block-smx {
  grid-column: span var(--layout-cols-base) / span var(--layout-cols-base);
}

.section-grid .block-md, .centerframe-grid .block-md, .grid-base .block-md, main.main-grid .block-md {
  grid-column: span var(--layout-cols-base) / span var(--layout-cols-base);
}

.section-grid .block-mdx, .centerframe-grid .block-mdx, .grid-base .block-mdx, main.main-grid .block-mdx {
  grid-column: span var(--layout-cols-base) / span var(--layout-cols-base);
}

.section-grid .block-lg, .centerframe-grid .block-lg, .grid-base .block-lg, main.main-grid .block-lg {
  grid-column: span var(--layout-cols-base) / span var(--layout-cols-base);
}

.section-grid .block-lgx, .centerframe-grid .block-lgx, .grid-base .block-lgx, main.main-grid .block-lgx {
  grid-column: span var(--layout-cols-base) / span var(--layout-cols-base);
}

.section-grid .block-xl, .centerframe-grid .block-xl, .grid-base .block-xl, main.main-grid .block-xl {
  grid-column: span var(--layout-cols-base) / span var(--layout-cols-base);
}

.section-grid .block-xlx, .centerframe-grid .block-xlx, .grid-base .block-xlx, main.main-grid .block-xlx {
  grid-column: span var(--layout-cols-base) / span var(--layout-cols-base);
}

.section-grid .block-2xl, .centerframe-grid .block-2xl, .grid-base .block-2xl, main.main-grid .block-2xl {
  grid-column: span var(--layout-cols-base) / span var(--layout-cols-base);
}

.section-grid .block-2xlx, .centerframe-grid .block-2xlx, .grid-base .block-2xlx, main.main-grid .block-2xlx {
  grid-column: span var(--layout-cols-base) / span var(--layout-cols-base);
}

.section-grid .block-full, .centerframe-grid .block-full, .grid-base .block-full, main.main-grid .block-full {
  grid-column: 1 / -1;
}

.section-flex .block-sm, .centerframe-flex .block-sm, .flex-base .block-sm, main.main-flex .block-sm {
  flex-shrink: 1;
  flex-grow: 1;
  flex-basis: calc(50% - var(--spacing-gutter-base));
}

.section-flex .block-md, .centerframe-flex .block-md, .flex-base .block-md, main.main-flex .block-md {
  flex-shrink: 1;
  flex-grow: 1;
  flex-basis: 100%;
}

.section-flex .block-full, .centerframe-flex .block-full, .flex-base .block-full, main.main-flex .block-full {
  flex-shrink: 1;
  flex-grow: 1;
  flex-basis: 100%;
}

.card {
  border-radius: var(--rounded-article-base);
  padding: var(--pad-article-base);
}

.card.interactive {
  cursor: pointer;
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.card.interactive:hover {
  --tw-translate-y: -1px;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  --tw-shadow: var(--shadow-base);
  --tw-shadow-colored: var(--shadow-base);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.block-base > :not([hidden]) ~ :not([hidden]), .block-xs > :not([hidden]) ~ :not([hidden]), .block-sm > :not([hidden]) ~ :not([hidden]), .block-smx > :not([hidden]) ~ :not([hidden]), .block-md > :not([hidden]) ~ :not([hidden]), .block-mdx > :not([hidden]) ~ :not([hidden]), .block-lg > :not([hidden]) ~ :not([hidden]), .block-lgx > :not([hidden]) ~ :not([hidden]), .block-xl > :not([hidden]) ~ :not([hidden]), .block-xlx > :not([hidden]) ~ :not([hidden]), .block-2xl > :not([hidden]) ~ :not([hidden]), .block-2xlx > :not([hidden]) ~ :not([hidden]), .block-full > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(var(--spacing-block-base) * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(var(--spacing-block-base) * var(--tw-space-y-reverse));
}

.block-base.card > :not([hidden]) ~ :not([hidden]), .block-xs.card > :not([hidden]) ~ :not([hidden]), .block-sm.card > :not([hidden]) ~ :not([hidden]), .block-smx.card > :not([hidden]) ~ :not([hidden]), .block-md.card > :not([hidden]) ~ :not([hidden]), .block-mdx.card > :not([hidden]) ~ :not([hidden]), .block-lg.card > :not([hidden]) ~ :not([hidden]), .block-lgx.card > :not([hidden]) ~ :not([hidden]), .block-xl.card > :not([hidden]) ~ :not([hidden]), .block-xlx.card > :not([hidden]) ~ :not([hidden]), .block-2xl.card > :not([hidden]) ~ :not([hidden]), .block-2xlx.card > :not([hidden]) ~ :not([hidden]), .block-full.card > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(var(--spacing-card-base) * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(var(--spacing-card-base) * var(--tw-space-y-reverse));
}

.block-base.card-base > :not([hidden]) ~ :not([hidden]), .block-xs.card-base > :not([hidden]) ~ :not([hidden]), .block-sm.card-base > :not([hidden]) ~ :not([hidden]), .block-smx.card-base > :not([hidden]) ~ :not([hidden]), .block-md.card-base > :not([hidden]) ~ :not([hidden]), .block-mdx.card-base > :not([hidden]) ~ :not([hidden]), .block-lg.card-base > :not([hidden]) ~ :not([hidden]), .block-lgx.card-base > :not([hidden]) ~ :not([hidden]), .block-xl.card-base > :not([hidden]) ~ :not([hidden]), .block-xlx.card-base > :not([hidden]) ~ :not([hidden]), .block-2xl.card-base > :not([hidden]) ~ :not([hidden]), .block-2xlx.card-base > :not([hidden]) ~ :not([hidden]), .block-full.card-base > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0px * var(--tw-space-y-reverse));
}

.stack-y > :not([hidden]) ~ :not([hidden]), .block-base.stack-y > :not([hidden]) ~ :not([hidden]), .block-xs.stack-y > :not([hidden]) ~ :not([hidden]), .block-sm.stack-y > :not([hidden]) ~ :not([hidden]), .block-smx.stack-y > :not([hidden]) ~ :not([hidden]), .block-md.stack-y > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-y > :not([hidden]) ~ :not([hidden]), .block-lg.stack-y > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-y > :not([hidden]) ~ :not([hidden]), .block-xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(var(--spacing-card-base) * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(var(--spacing-card-base) * var(--tw-space-y-reverse));
}

.stack-x > :not([hidden]) ~ :not([hidden]), .block-base.stack-x > :not([hidden]) ~ :not([hidden]), .block-xs.stack-x > :not([hidden]) ~ :not([hidden]), .block-sm.stack-x > :not([hidden]) ~ :not([hidden]), .block-smx.stack-x > :not([hidden]) ~ :not([hidden]), .block-md.stack-x > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-x > :not([hidden]) ~ :not([hidden]), .block-lg.stack-x > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-x > :not([hidden]) ~ :not([hidden]), .block-xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(var(--spacing-card-base) * var(--tw-space-x-reverse));
  margin-left: calc(var(--spacing-card-base) * calc(1 - var(--tw-space-x-reverse)));
}

.card .datarow, .card-base .datarow,
	.card .formrow, .card-base .formrow {
  -moz-column-gap: var(--spacing-card-base);
       column-gap: var(--spacing-card-base);
  row-gap: var(--spacing-sub-base);
}

.stack-col, .stack {
  display: flex;
  flex-direction: column;
  gap: var(--gap-stack-base);
}

.card .stack-row, .card-base .stack-row {
  display: flex;
  flex-direction: row;
  -moz-column-gap: var(--spacing-card-base);
       column-gap: var(--spacing-card-base);
}

.card .stack-row-wrap, .card-base .stack-row-wrap {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  -moz-column-gap: var(--spacing-card-base);
       column-gap: var(--spacing-card-base);
  row-gap: var(--gap-stack-base);
}

.card .stack-col, .card-base .stack-col, .card .stack, .card-base .stack {
  display: flex;
  flex-direction: column;
  row-gap: var(--spacing-card-base);
}

img.card > :not([hidden]) ~ :not([hidden]), video.card > :not([hidden]) ~ :not([hidden]), img.card-base > :not([hidden]) ~ :not([hidden]), video.card-base > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0px * var(--tw-space-y-reverse));
  --tw-space-x-reverse: 0;
  margin-right: calc(0px * var(--tw-space-x-reverse));
  margin-left: calc(0px * calc(1 - var(--tw-space-x-reverse)));
}

img.card, video.card, img.card-base, video.card-base {
  -o-object-fit: cover;
     object-fit: cover;
  -o-object-position: center;
     object-position: center;
  padding: 0px;
}

hgroup.display > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(var(--gap-hgroup-display) * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(var(--gap-hgroup-display) * var(--tw-space-y-reverse));
}

hgroup.heading > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(var(--gap-hgroup-heading) * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(var(--gap-hgroup-heading) * var(--tw-space-y-reverse));
}

hgroup.title > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(var(--gap-hgroup-title) * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(var(--gap-hgroup-title) * var(--tw-space-y-reverse));
}

/* ---------------------------- */

/* ANCHOR Adaptive Text			*/

/* ---------------------------- */

.text-d3 {
  font-size: var(--text-d3a-size) !important;
  line-height: var(--text-d3a-lh) !important;
}

h1 {
  font-size: var(--text-h1a-size);
  line-height: var(--text-h1a-lh);
}

header nav a.nav, header nav a:link.nav, header nav a:visited {
  font-size: var(--text-nava-size);
  line-height: var(--text-nava-lh);
}

footer nav a.nav, footer nav a:link.nav, footer nav a:visited {
  font-size: var(--text-nava-size);
  line-height: var(--text-p2-lh);
}

/* Stack Link Icons — base-only top-padding for spacing rhythm
	   (pairs with ANCHOR Stack Link Icons in Components Structure) */

/* --------------------------------------------------------------------	*/

/* /DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* !SECTION BASE (<640px) Screens 										*/

/* --------------------------------------------------------------------	*/

/* --------------------------------------------------------------------	*/

/* SECTION SM (640px+) Screens											*/

/* DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* --------------------------------------------------------------------	*/

@media (min-width:640px) {
  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  header {
    padding-left: var(--spacing-shoulder-sm);
    padding-right: var(--spacing-shoulder-sm);
    padding-top: var(--pad-header-sm);
    padding-bottom: var(--pad-header-sm);
  }

  .header-base {
    padding-left: 0px;
    padding-right: 0px;
    padding-top: 0px;
    padding-bottom: 0px;
  }

  .header-grid nav {
    grid-template-columns: repeat(var(--layout-cols-sm), minmax(0, 1fr));
    -moz-column-gap: var(--spacing-gutter-sm);
         column-gap: var(--spacing-gutter-sm);
  }

  .header-flex nav {
    -moz-column-gap: var(--spacing-gutter-sm);
         column-gap: var(--spacing-gutter-sm);
  }

  footer {
    padding-left: var(--spacing-shoulder-sm);
    padding-right: var(--spacing-shoulder-sm);
    padding-top: var(--pad-section-sm);
    padding-bottom: var(--pad-section-sm);
  }

  .footer-base {
    padding-left: 0px;
    padding-right: 0px;
    padding-top: 0px;
    padding-bottom: 0px;
  }

  .footer-grid {
    grid-template-columns: repeat(var(--layout-cols-sm), minmax(0, 1fr));
    gap: var(--spacing-gutter-sm);
  }

  .footer-flex nav {
    gap: var(--spacing-gutter-sm);
  }

  section {
    padding-left: var(--spacing-shoulder-sm);
    padding-right: var(--spacing-shoulder-sm);
    padding-top: var(--pad-section-sm);
    padding-bottom: var(--pad-section-sm);
  }

  .section-grid, .centerframe-grid, .grid-base, main.main-grid {
    grid-template-columns: repeat(var(--layout-cols-sm), minmax(0, 1fr));
    gap: var(--spacing-gutter-sm);
  }

  .grid-cols {
    grid-template-columns: repeat(var(--layout-cols-sm), minmax(0, 1fr));
  }

  .section-flex, .centerframe-flex, .flex-base, main.main-flex, .grid-auto {
    gap: var(--spacing-gutter-sm);
  }

  .mt-gutter {
    margin-top: var(--spacing-gutter-sm);
  }

  .mb-gutter {
    margin-bottom: var(--spacing-gutter-sm);
  }

  .ml-gutter {
    margin-left: var(--spacing-gutter-sm);
  }

  .mr-gutter {
    margin-right: var(--spacing-gutter-sm);
  }

  .pt-gutter {
    padding-top: var(--spacing-gutter-sm);
  }

  .pb-gutter {
    padding-bottom: var(--spacing-gutter-sm);
  }

  .pl-gutter {
    padding-left: var(--spacing-gutter-sm);
  }

  .pr-gutter {
    padding-right: var(--spacing-gutter-sm);
  }

  .mt-article {
    margin-top: var(--pad-article-sm);
  }

  .mb-article {
    margin-bottom: var(--pad-article-sm);
  }

  .ml-article {
    margin-left: var(--pad-article-sm);
  }

  .mr-article {
    margin-right: var(--pad-article-sm);
  }

  .gap-form {
    gap: var(--gap-form-sm);
  }

  .gap-gutter {
    gap: var(--spacing-gutter-sm);
  }

  .gap-gutterx {
    gap: calc(var(--spacing-gutter-sm) + var(--layout-unit));
  }

  .gap-x-gutterx {
    -moz-column-gap: calc(var(--spacing-gutter-sm) + var(--layout-unit));
         column-gap: calc(var(--spacing-gutter-sm) + var(--layout-unit));
  }

  .gap-y-gutterx {
    row-gap: calc(var(--spacing-gutter-sm) + var(--layout-unit));
  }

  .gap-gutterxx {
    gap: calc(var(--spacing-gutter-sm) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-x-gutterxx {
    -moz-column-gap: calc(var(--spacing-gutter-sm) + var(--layout-unit) + var(--layout-unit));
         column-gap: calc(var(--spacing-gutter-sm) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-y-gutterxx {
    row-gap: calc(var(--spacing-gutter-sm) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-section {
    gap: var(--gap-section-sm);
  }

  .gap-article {
    gap: var(--gap-article-sm);
  }

  .gap-block {
    gap: var(--spacing-block-sm);
  }

  .gap-card {
    gap: var(--spacing-card-sm);
  }

  .gap-sub {
    gap: var(--spacing-sub-sm);
  }

  .gap-stack {
    gap: var(--gap-stack-sm);
  }

  .gap-y-stack {
    row-gap: var(--gap-stack-sm);
  }

  .gap-x-stack {
    -moz-column-gap: var(--gap-stack-sm);
         column-gap: var(--gap-stack-sm);
  }

  .space-y-card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-sm) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-sm) * var(--tw-space-y-reverse));
  }

  .space-x-card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(var(--spacing-card-sm) * var(--tw-space-x-reverse));
    margin-left: calc(var(--spacing-card-sm) * calc(1 - var(--tw-space-x-reverse)));
  }

  .section-grid.gap-2gutter, .centerframe-grid.gap-2gutter, .grid-base.gap-2gutter, .section-flex.gap-2gutter, .centerframe-flex.gap-2gutter, .flex-base.gap-2gutter, main.main-flex.gap-2gutter {
    gap: calc(2 * var(--spacing-gutter-sm));
  }

  .gap-2gutter {
    gap: calc(2 * var(--spacing-gutter-sm));
  }

  .gap-x-gutter {
    -moz-column-gap: var(--spacing-gutter-sm);
         column-gap: var(--spacing-gutter-sm);
  }

  .gap-y-gutter {
    row-gap: var(--spacing-gutter-sm);
  }

  .gap-x-2gutter {
    -moz-column-gap: calc(2 * var(--spacing-gutter-sm));
         column-gap: calc(2 * var(--spacing-gutter-sm));
  }

  .gap-y-2gutter {
    row-gap: calc(2 * var(--spacing-gutter-sm));
  }

  .section-grid .block-xs, .centerframe-grid .block-xs, .grid-base .block-xs, main.main-grid .block-xs {
    grid-column: span var(--layout-cols-sm-min) / span var(--layout-cols-sm-min);
  }

  .section-grid .block-sm, .centerframe-grid .block-sm, .grid-base .block-sm, main.main-grid .block-sm {
    grid-column: span var(--layout-cols-sm-third) / span var(--layout-cols-sm-third);
  }

  .section-grid .block-smx, .centerframe-grid .block-smx, .grid-base .block-smx, main.main-grid .block-smx {
    grid-column: span var(--layout-cols-sm-half) / span var(--layout-cols-sm-half);
  }

  .section-grid .block-md, .centerframe-grid .block-md, .grid-base .block-md, main.main-grid .block-md {
    grid-column: span var(--layout-cols-sm) / span var(--layout-cols-sm);
  }

  .section-grid .block-mdx, .centerframe-grid .block-mdx, .grid-base .block-mdx, main.main-grid .block-mdx {
    grid-column: span var(--layout-cols-sm) / span var(--layout-cols-sm);
  }

  .section-grid .block-lg, .centerframe-grid .block-lg, .grid-base .block-lg, main.main-grid .block-lg {
    grid-column: span var(--layout-cols-sm) / span var(--layout-cols-sm);
  }

  .section-grid .block-lgx, .centerframe-grid .block-lgx, .grid-base .block-lgx, main.main-grid .block-lgx {
    grid-column: span var(--layout-cols-sm) / span var(--layout-cols-sm);
  }

  .section-grid .block-xl, .centerframe-grid .block-xl, .grid-base .block-xl, main.main-grid .block-xl {
    grid-column: span var(--layout-cols-sm) / span var(--layout-cols-sm);
  }

  .section-grid .block-xlx, .centerframe-grid .block-xlx, .grid-base .block-xlx, main.main-grid .block-xlx {
    grid-column: span var(--layout-cols-sm) / span var(--layout-cols-sm);
  }

  .section-grid .block-2xl, .centerframe-grid .block-2xl, .grid-base .block-2xl, main.main-grid .block-2xl {
    grid-column: span var(--layout-cols-sm) / span var(--layout-cols-sm);
  }

  .section-grid .block-2xlx, .centerframe-grid .block-2xlx, .grid-base .block-2xlx, main.main-grid .block-2xlx {
    grid-column: span var(--layout-cols-sm) / span var(--layout-cols-sm);
  }

  .section-grid .block-full, .centerframe-grid .block-full, .grid-base .block-full, main.main-grid .block-full {
    grid-column: 1 / -1;
  }

  .section-flex .block-xs, .centerframe-flex .block-xs, .flex-base .block-xs, main.main-flex .block-xs {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(16.666666% - var(--spacing-gutter-sm));
  }

  .section-flex .block-sm, .centerframe-flex .block-sm, .flex-base .block-sm, main.main-flex .block-sm {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(33.333333% - var(--spacing-gutter-sm));
  }

  .section-flex .block-smx, .centerframe-flex .block-smx, .flex-base .block-smx, main.main-flex .block-smx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(50% - var(--spacing-gutter-sm));
  }

  .section-flex .block-md, .centerframe-flex .block-md, .flex-base .block-md, main.main-flex .block-md {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-mdx, .centerframe-flex .block-mdx, .flex-base .block-mdx, main.main-flex .block-mdx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-lg, .centerframe-flex .block-lg, .flex-base .block-lg, main.main-flex .block-lg {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-lgx, .centerframe-flex .block-lgx, .flex-base .block-lgx, main.main-flex .block-lgx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-xl, .centerframe-flex .block-xl, .flex-base .block-xl, main.main-flex .block-xl {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-xlx, .centerframe-flex .block-xlx, .flex-base .block-xlx, main.main-flex .block-xlx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-2xl, .centerframe-flex .block-2xl, .flex-base .block-2xl, main.main-flex .block-2xl {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-2xlx, .centerframe-flex .block-2xlx, .flex-base .block-2xlx, main.main-flex .block-2xlx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-full, .centerframe-flex .block-full, .flex-base .block-full, main.main-flex .block-full {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .rounded-card {
    border-radius: var(--rounded-article-sm);
  }

  .rounded-t-card {
    border-top-left-radius: var(--rounded-article-sm);
    border-top-right-radius: var(--rounded-article-sm);
  }

  .rounded-b-card {
    border-bottom-right-radius: var(--rounded-article-sm);
    border-bottom-left-radius: var(--rounded-article-sm);
  }

  .rounded-l-card {
    border-top-left-radius: var(--rounded-article-sm);
    border-bottom-left-radius: var(--rounded-article-sm);
  }

  .rounded-r-card {
    border-top-right-radius: var(--rounded-article-sm);
    border-bottom-right-radius: var(--rounded-article-sm);
  }

  .card {
    border-radius: var(--rounded-article-sm);
    padding: var(--pad-article-sm);
  }

  .card-base {
    border-radius: var(--rounded-article-sm);
  }

  .block-base > :not([hidden]) ~ :not([hidden]), .block-xs > :not([hidden]) ~ :not([hidden]), .block-sm > :not([hidden]) ~ :not([hidden]), .block-smx > :not([hidden]) ~ :not([hidden]), .block-md > :not([hidden]) ~ :not([hidden]), .block-mdx > :not([hidden]) ~ :not([hidden]), .block-lg > :not([hidden]) ~ :not([hidden]), .block-lgx > :not([hidden]) ~ :not([hidden]), .block-xl > :not([hidden]) ~ :not([hidden]), .block-xlx > :not([hidden]) ~ :not([hidden]), .block-2xl > :not([hidden]) ~ :not([hidden]), .block-2xlx > :not([hidden]) ~ :not([hidden]), .block-full > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-block-sm) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-block-sm) * var(--tw-space-y-reverse));
  }

  .block-base.card > :not([hidden]) ~ :not([hidden]), .block-xs.card > :not([hidden]) ~ :not([hidden]), .block-sm.card > :not([hidden]) ~ :not([hidden]), .block-smx.card > :not([hidden]) ~ :not([hidden]), .block-md.card > :not([hidden]) ~ :not([hidden]), .block-mdx.card > :not([hidden]) ~ :not([hidden]), .block-lg.card > :not([hidden]) ~ :not([hidden]), .block-lgx.card > :not([hidden]) ~ :not([hidden]), .block-xl.card > :not([hidden]) ~ :not([hidden]), .block-xlx.card > :not([hidden]) ~ :not([hidden]), .block-2xl.card > :not([hidden]) ~ :not([hidden]), .block-2xlx.card > :not([hidden]) ~ :not([hidden]), .block-full.card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-sm) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-sm) * var(--tw-space-y-reverse));
  }

  .stack-y > :not([hidden]) ~ :not([hidden]), .block-base.stack-y > :not([hidden]) ~ :not([hidden]), .block-xs.stack-y > :not([hidden]) ~ :not([hidden]), .block-sm.stack-y > :not([hidden]) ~ :not([hidden]), .block-smx.stack-y > :not([hidden]) ~ :not([hidden]), .block-md.stack-y > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-y > :not([hidden]) ~ :not([hidden]), .block-lg.stack-y > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-y > :not([hidden]) ~ :not([hidden]), .block-xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-sm) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-sm) * var(--tw-space-y-reverse));
  }

  .stack-x > :not([hidden]) ~ :not([hidden]), .block-base.stack-x > :not([hidden]) ~ :not([hidden]), .block-xs.stack-x > :not([hidden]) ~ :not([hidden]), .block-sm.stack-x > :not([hidden]) ~ :not([hidden]), .block-smx.stack-x > :not([hidden]) ~ :not([hidden]), .block-md.stack-x > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-x > :not([hidden]) ~ :not([hidden]), .block-lg.stack-x > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-x > :not([hidden]) ~ :not([hidden]), .block-xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(var(--spacing-card-sm) * var(--tw-space-x-reverse));
    margin-left: calc(var(--spacing-card-sm) * calc(1 - var(--tw-space-x-reverse)));
  }

  .datarow, .formrow, .controlrow {
    gap: var(--gap-stack-sm);
  }

  .card .datarow, .card-base .datarow,
		.card .formrow, .card-base .formrow {
    gap: var(--spacing-card-sm);
  }

  .stack-row {
    display: flex;
    flex-direction: row;
    -moz-column-gap: var(--gap-stack-sm);
         column-gap: var(--gap-stack-sm);
  }

  .stack-row-wrap {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    -moz-column-gap: var(--gap-stack-sm);
         column-gap: var(--gap-stack-sm);
    row-gap: var(--gap-stack-sm);
  }

  .stack-col, .stack {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-sm);
  }

  .stack-form-col {
    display: flex;
    flex-direction: column;
    gap: var(--gap-form-sm);
  }

  .card .stack-row, .card-base .stack-row {
    display: flex;
    flex-direction: row;
    -moz-column-gap: var(--spacing-card-sm);
         column-gap: var(--spacing-card-sm);
  }

  .card .stack-row-wrap, .card-base .stack-row-wrap {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    -moz-column-gap: var(--spacing-card-sm);
         column-gap: var(--spacing-card-sm);
    row-gap: var(--gap-stack-sm);
  }

  .card .stack-col, .card-base .stack-col, .card .stack, .card-base .stack {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-sm);
  }

  .pl-half-gutter {
    padding-left: calc(var(--spacing-gutter-sm) / 2);
  }

  .pr-half-gutter {
    padding-right: calc(var(--spacing-gutter-sm) / 2);
  }

  .ml-half-gutter {
    margin-left: calc(var(--spacing-gutter-sm) / 2);
  }

  .mr-half-gutter {
    margin-right: calc(var(--spacing-gutter-sm) / 2);
  }

  .max-w-half-breakpoint-less-gutter {
    max-width: calc((var(--screen-sm) / 2) - var(--spacing-gutter-sm));
  }

  .max-w-half-breakpoint {
    max-width: calc(var(--screen-sm) / 2);
  }

  .max-w-breakpoint {
    max-width: 640px;
  }

  .pr-col {
    padding-right: var(--layout-col-width-sm);
  }

  .pl-col {
    padding-left: var(--layout-col-width-sm);
  }

  .p-header-safeview {
    padding-top: max(var(--pad-header-sm), env(safe-area-inset-top));
    padding-left: max(var(--spacing-shoulder-sm), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-sm), env(safe-area-inset-right));
    padding-bottom: var(--pad-header-sm);
  }

  .p-section-safeview {
    padding-top: max(var(--pad-section-sm), env(safe-area-inset-top));
    padding-left: max(var(--spacing-shoulder-sm), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-sm), env(safe-area-inset-right));
    padding-bottom: max(var(--pad-section-sm), env(safe-area-inset-bottom));
  }

  .pt-section-safeview {
    padding-top: max(var(--pad-section-sm), env(safe-area-inset-top));
  }

  .pb-section-safeview {
    padding-bottom: max(var(--pad-section-sm), env(safe-area-inset-bottom));
  }

  .pl-section-safeview {
    padding-left: max(var(--spacing-shoulder-sm), env(safe-area-inset-left));
  }

  .pr-section-safeview {
    padding-right: max(var(--spacing-shoulder-sm), env(safe-area-inset-right));
  }

  .px-section-safeview {
    padding-left: max(var(--spacing-shoulder-sm), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-sm), env(safe-area-inset-right));
  }

  .py-section-safeview {
    padding-top: max(var(--pad-section-sm), env(safe-area-inset-top));
    padding-bottom: max(var(--pad-section-sm), env(safe-area-inset-bottom));
  }

  .p-footer-safeview {
    padding-top: var(--pad-section-sm);
    padding-left: max(var(--spacing-shoulder-sm), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-sm), env(safe-area-inset-right));
    padding-bottom: max(var(--pad-section-sm), env(safe-area-inset-bottom));
  }

  .m-header-safeview {
    margin-top: max(var(--pad-header-sm), env(safe-area-inset-top));
    margin-left: max(var(--spacing-shoulder-sm), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-sm), env(safe-area-inset-right));
    margin-bottom: var(--pad-header-sm);
  }

  .m-section-safeview {
    margin-top: max(var(--pad-section-sm), env(safe-area-inset-top));
    margin-left: max(var(--spacing-shoulder-sm), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-sm), env(safe-area-inset-right));
    margin-bottom: max(var(--pad-section-sm), env(safe-area-inset-bottom));
  }

  .ml-section-safeview {
    margin-left: max(var(--spacing-shoulder-sm), env(safe-area-inset-left));
  }

  .mr-section-safeview {
    margin-right: max(var(--spacing-shoulder-sm), env(safe-area-inset-right));
  }

  .mt-section-safeview {
    margin-top: max(var(--pad-section-sm), env(safe-area-inset-top));
  }

  .mb-section-safeview {
    margin-bottom: max(var(--pad-section-sm), env(safe-area-inset-bottom));
  }

  .mx-section-safeview {
    margin-left: max(var(--spacing-shoulder-sm), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-sm), env(safe-area-inset-right));
  }

  .my-section-safeview {
    margin-top: max(var(--pad-section-sm), env(safe-area-inset-top));
    margin-bottom: max(var(--pad-section-sm), env(safe-area-inset-bottom));
  }

  .m-footer-safeview {
    margin-top: var(--pad-section-sm);
    margin-left: max(var(--spacing-shoulder-sm), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-sm), env(safe-area-inset-right));
    margin-bottom: max(var(--pad-section-sm), env(safe-area-inset-bottom));
  }

  .p-header {
    padding-left: var(--spacing-shoulder-sm);
    padding-right: var(--spacing-shoulder-sm);
    padding-top: var(--pad-header-sm);
    padding-bottom: var(--pad-header-sm);
  }

  .p-footer {
    padding-left: var(--spacing-shoulder-sm);
    padding-right: var(--spacing-shoulder-sm);
    padding-top: var(--pad-section-sm);
    padding-bottom: var(--pad-section-sm);
  }

  .px-header {
    padding-left: var(--spacing-shoulder-sm);
    padding-right: var(--spacing-shoulder-sm);
  }

  .py-header {
    padding-top: var(--pad-header-sm);
    padding-bottom: var(--pad-header-sm);
  }

  .p-shoulder {
    padding: var(--spacing-shoulder-sm);
  }

  .px-shoulder {
    padding-left: var(--spacing-shoulder-sm);
    padding-right: var(--spacing-shoulder-sm);
  }

  .pl-shoulder {
    padding-left: var(--spacing-shoulder-sm);
  }

  .pr-shoulder {
    padding-right: var(--spacing-shoulder-sm);
  }

  .p-section {
    padding: var(--pad-section-sm);
  }

  .px-section {
    padding-left: var(--pad-section-sm);
    padding-right: var(--pad-section-sm);
  }

  .py-section {
    padding-top: var(--pad-section-sm);
    padding-bottom: var(--pad-section-sm);
  }

  .pt-section {
    padding-top: var(--pad-section-sm);
  }

  .pb-section {
    padding-bottom: var(--pad-section-sm);
  }

  .pl-section {
    padding-left: var(--pad-section-sm);
  }

  .pr-section {
    padding-right: var(--pad-section-sm);
  }

  .p-article {
    padding: var(--pad-article-sm);
  }

  .px-article {
    padding-left: var(--pad-article-sm);
    padding-right: var(--pad-article-sm);
  }

  .py-article {
    padding-top: var(--pad-article-sm);
    padding-bottom: var(--pad-article-sm);
  }

  .p-block {
    padding: var(--spacing-block-sm);
  }

  .px-block {
    padding-left: var(--spacing-block-sm);
    padding-right: var(--spacing-block-sm);
  }

  .py-block {
    padding-top: var(--spacing-block-sm);
    padding-bottom: var(--spacing-block-sm);
  }

  .p-card {
    padding: var(--spacing-card-sm);
  }

  .px-card {
    padding-left: var(--spacing-card-sm);
    padding-right: var(--spacing-card-sm);
  }

  .py-card {
    padding-top: var(--spacing-card-sm);
    padding-bottom: var(--spacing-card-sm);
  }

  .p-element {
    padding: var(--pad-element-sm);
  }

  .px-element {
    padding-left: var(--pad-element-sm);
    padding-right: var(--pad-element-sm);
  }

  .py-element {
    padding-top: var(--pad-element-sm);
    padding-bottom: var(--pad-element-sm);
  }

  .pl-element {
    padding-left: var(--pad-element-sm);
  }

  .pr-element {
    padding-right: var(--pad-element-sm);
  }

  .pt-element {
    padding-top: var(--pad-element-sm);
  }

  .pb-element {
    padding-bottom: var(--pad-element-sm);
  }

  .p-sub {
    padding: var(--spacing-sub-sm);
  }

  .pt-sub {
    padding-top: var(--spacing-sub-sm);
  }

  .pb-sub {
    padding-bottom: var(--spacing-sub-sm);
  }

  .pl-sub {
    padding-left: var(--spacing-sub-sm);
  }

  .pr-sub {
    padding-right: var(--spacing-sub-sm);
  }

  .px-sub {
    padding-left: var(--spacing-sub-sm);
    padding-right: var(--spacing-sub-sm);
  }

  .py-sub {
    padding-top: var(--spacing-sub-sm);
    padding-bottom: var(--spacing-sub-sm);
  }

  .p-base {
    padding: var(--pad-base-sm);
  }

  .px-base {
    padding-left: var(--pad-base-sm);
    padding-right: var(--pad-base-sm);
  }

  .py-base {
    padding-top: var(--pad-base-sm);
    padding-bottom: var(--pad-base-sm);
  }

  .h-1row {
    height: var(--layout-row-height-sm);
  }

  .h-2row {
    height: calc(2 * var(--layout-row-height-sm) + var(--spacing-gutter-sm));
  }

  .h-3row {
    height: calc(3 * var(--layout-row-height-sm) + 2 * var(--spacing-gutter-sm));
  }

  .h-4row {
    height: calc(4 * var(--layout-row-height-sm) + 3 * var(--spacing-gutter-sm));
  }

  .h-5row {
    height: calc(5 * var(--layout-row-height-sm) + 4 * var(--spacing-gutter-sm));
  }

  .h-6row {
    height: calc(6 * var(--layout-row-height-sm) + 5 * var(--spacing-gutter-sm));
  }

  .h-7row {
    height: calc(7 * var(--layout-row-height-sm) + 6 * var(--spacing-gutter-sm));
  }

  .h-8row {
    height: calc(8 * var(--layout-row-height-sm) + 7 * var(--spacing-gutter-sm));
  }

  .max-h-element {
    max-height: var(--element-max-h-sm);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  .text-d1 {
    font-size: var(--text-d1a-size) !important;
    line-height: var(--text-d1a-lh) !important;
  }

  .text-d2 {
    font-size: var(--text-d2a-size) !important;
    line-height: var(--text-d2a-lh) !important;
  }

  .text-d3 {
    font-size: var(--text-d3a-size) !important;
    line-height: var(--text-d3a-lh) !important;
  }

  .text-i1 {
    font-size: var(--text-i1a-size) !important;
    line-height: var(--text-i1a-lh) !important;
  }

  h1 {
    font-size: var(--text-h1a-size);
    line-height: var(--text-h1a-lh);
  }

  header nav a.nav, header nav a:link.nav, header nav a:visited {
    font-size: var(--text-nava-size);
    line-height: var(--text-nava-lh);
  }

  footer nav a.nav, footer nav a:link.nav, footer nav a:visited {
    font-size: var(--text-nava-size);
    line-height: var(--text-p2-lh);
  }
}

/* --------------------------------------------------------------------	*/

/* /DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* !SECTION SM (640px+) Screens											*/

/* --------------------------------------------------------------------	*/

/* --------------------------------------------------------------------	*/

/* SECTION MD (768px+) Screens 											*/

/* DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* --------------------------------------------------------------------	*/

@media (min-width:768px) {
  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  header {
    padding-left: var(--spacing-shoulder-md);
    padding-right: var(--spacing-shoulder-md);
    padding-top: var(--pad-header-md);
    padding-bottom: var(--pad-header-md);
  }

  .header-base {
    padding-left: 0px;
    padding-right: 0px;
    padding-top: 0px;
    padding-bottom: 0px;
  }

  .header-grid nav {
    grid-template-columns: repeat(var(--layout-cols-md), minmax(0, 1fr));
    -moz-column-gap: var(--spacing-gutter-md);
         column-gap: var(--spacing-gutter-md);
  }

  .header-flex nav {
    -moz-column-gap: var(--spacing-gutter-md);
         column-gap: var(--spacing-gutter-md);
  }

  footer {
    padding-left: var(--spacing-shoulder-md);
    padding-right: var(--spacing-shoulder-md);
    padding-top: var(--pad-section-md);
    padding-bottom: var(--pad-section-md);
  }

  .footer-base {
    padding-left: 0px;
    padding-right: 0px;
    padding-top: 0px;
    padding-bottom: 0px;
  }

  .footer-grid {
    grid-template-columns: repeat(var(--layout-cols-md), minmax(0, 1fr));
    gap: var(--spacing-gutter-md);
  }

  .footer-flex nav {
    gap: var(--spacing-gutter-md);
  }

  section {
    padding-left: var(--spacing-shoulder-md);
    padding-right: var(--spacing-shoulder-md);
    padding-top: var(--pad-section-md);
    padding-bottom: var(--pad-section-md);
  }

  .section-grid, .centerframe-grid, .grid-base, main.main-grid {
    grid-template-columns: repeat(var(--layout-cols-md), minmax(0, 1fr));
    gap: var(--spacing-gutter-md);
  }

  .grid-cols {
    grid-template-columns: repeat(var(--layout-cols-md), minmax(0, 1fr));
  }

  .section-flex, .centerframe-flex, .flex-base, main.main-flex, .grid-auto {
    gap: var(--spacing-gutter-md);
  }

  .mt-gutter {
    margin-top: var(--spacing-gutter-md);
  }

  .mb-gutter {
    margin-bottom: var(--spacing-gutter-md);
  }

  .ml-gutter {
    margin-left: var(--spacing-gutter-md);
  }

  .mr-gutter {
    margin-right: var(--spacing-gutter-md);
  }

  .pt-gutter {
    padding-top: var(--spacing-gutter-md);
  }

  .pb-gutter {
    padding-bottom: var(--spacing-gutter-md);
  }

  .pl-gutter {
    padding-left: var(--spacing-gutter-md);
  }

  .pr-gutter {
    padding-right: var(--spacing-gutter-md);
  }

  .mt-article {
    margin-top: var(--pad-article-md);
  }

  .mb-article {
    margin-bottom: var(--pad-article-md);
  }

  .ml-article {
    margin-left: var(--pad-article-md);
  }

  .mr-article {
    margin-right: var(--pad-article-md);
  }

  .gap-form {
    gap: var(--gap-form-md);
  }

  .gap-gutter {
    gap: var(--spacing-gutter-md);
  }

  .gap-gutterx {
    gap: calc(var(--spacing-gutter-md) + var(--layout-unit));
  }

  .gap-x-gutterx {
    -moz-column-gap: calc(var(--spacing-gutter-md) + var(--layout-unit));
         column-gap: calc(var(--spacing-gutter-md) + var(--layout-unit));
  }

  .gap-y-gutterx {
    row-gap: calc(var(--spacing-gutter-md) + var(--layout-unit));
  }

  .gap-gutterxx {
    gap: calc(var(--spacing-gutter-md) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-x-gutterxx {
    -moz-column-gap: calc(var(--spacing-gutter-md) + var(--layout-unit) + var(--layout-unit));
         column-gap: calc(var(--spacing-gutter-md) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-y-gutterxx {
    row-gap: calc(var(--spacing-gutter-md) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-section {
    gap: var(--gap-section-md);
  }

  .gap-article {
    gap: var(--gap-article-md);
  }

  .gap-block {
    gap: var(--spacing-block-md);
  }

  .gap-card {
    gap: var(--spacing-card-md);
  }

  .gap-sub {
    gap: var(--spacing-sub-md);
  }

  .gap-stack {
    gap: var(--gap-stack-md);
  }

  .gap-y-stack {
    row-gap: var(--gap-stack-md);
  }

  .gap-x-stack {
    -moz-column-gap: var(--gap-stack-md);
         column-gap: var(--gap-stack-md);
  }

  .space-y-card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-md) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-md) * var(--tw-space-y-reverse));
  }

  .space-x-card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(var(--spacing-card-md) * var(--tw-space-x-reverse));
    margin-left: calc(var(--spacing-card-md) * calc(1 - var(--tw-space-x-reverse)));
  }

  .section-grid.gap-2gutter, .centerframe-grid.gap-2gutter, .grid-base.gap-2gutter, .section-flex.gap-2gutter, .centerframe-flex.gap-2gutter, .flex-base.gap-2gutter, main.main-flex.gap-2gutter {
    gap: calc(2 * var(--spacing-gutter-md));
  }

  .gap-2gutter {
    gap: calc(2 * var(--spacing-gutter-md));
  }

  .gap-x-gutter {
    -moz-column-gap: var(--spacing-gutter-md);
         column-gap: var(--spacing-gutter-md);
  }

  .gap-y-gutter {
    row-gap: var(--spacing-gutter-md);
  }

  .gap-x-2gutter {
    -moz-column-gap: calc(2 * var(--spacing-gutter-md));
         column-gap: calc(2 * var(--spacing-gutter-md));
  }

  .gap-y-2gutter {
    row-gap: calc(2 * var(--spacing-gutter-md));
  }

  .section-grid .block-xs, .centerframe-grid .block-xs, .grid-base .block-xs, main.main-grid .block-xs {
    grid-column: span var(--layout-cols-md-min) / span var(--layout-cols-md-min);
  }

  .section-grid .block-sm, .centerframe-grid .block-sm, .grid-base .block-sm, main.main-grid .block-sm {
    grid-column: span var(--layout-cols-md-third) / span var(--layout-cols-md-third);
  }

  .section-grid .block-smx, .centerframe-grid .block-smx, .grid-base .block-smx, main.main-grid .block-smx {
    grid-column: span var(--layout-cols-md-half) / span var(--layout-cols-md-half);
  }

  .section-grid .block-md, .centerframe-grid .block-md, .grid-base .block-md, main.main-grid .block-md {
    grid-column: span var(--layout-cols-md) / span var(--layout-cols-md);
  }

  .section-grid .block-mdx, .centerframe-grid .block-mdx, .grid-base .block-mdx, main.main-grid .block-mdx {
    grid-column: span var(--layout-cols-md) / span var(--layout-cols-md);
  }

  .section-grid .block-lg, .centerframe-grid .block-lg, .grid-base .block-lg, main.main-grid .block-lg {
    grid-column: span var(--layout-cols-md) / span var(--layout-cols-md);
  }

  .section-grid .block-lgx, .centerframe-grid .block-lgx, .grid-base .block-lgx, main.main-grid .block-lgx {
    grid-column: span var(--layout-cols-md) / span var(--layout-cols-md);
  }

  .section-grid .block-xl, .centerframe-grid .block-xl, .grid-base .block-xl, main.main-grid .block-xl {
    grid-column: span var(--layout-cols-md) / span var(--layout-cols-md);
  }

  .section-grid .block-xlx, .centerframe-grid .block-xlx, .grid-base .block-xlx, main.main-grid .block-xlx {
    grid-column: span var(--layout-cols-md) / span var(--layout-cols-md);
  }

  .section-grid .block-2xl, .centerframe-grid .block-2xl, .grid-base .block-2xl, main.main-grid .block-2xl {
    grid-column: span var(--layout-cols-md) / span var(--layout-cols-md);
  }

  .section-grid .block-2xlx, .centerframe-grid .block-2xlx, .grid-base .block-2xlx, main.main-grid .block-2xlx {
    grid-column: span var(--layout-cols-md) / span var(--layout-cols-md);
  }

  .section-grid .block-full, .centerframe-grid .block-full, .grid-base .block-full, main.main-grid .block-full {
    grid-column: 1 / -1;
  }

  .section-flex .block-xs, .centerframe-flex .block-xs, .flex-base .block-xs, main.main-flex .block-xs {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(16.666666% - var(--spacing-gutter-md));
  }

  .section-flex .block-sm, .centerframe-flex .block-sm, .flex-base .block-sm, main.main-flex .block-sm {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(33.333333% - var(--spacing-gutter-md));
  }

  .section-flex .block-smx, .centerframe-flex .block-smx, .flex-base .block-smx, main.main-flex .block-smx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(50% - var(--spacing-gutter-md));
  }

  .section-flex .block-md, .centerframe-flex .block-md, .flex-base .block-md, main.main-flex .block-md {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-mdx, .centerframe-flex .block-mdx, .flex-base .block-mdx, main.main-flex .block-mdx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-lg, .centerframe-flex .block-lg, .flex-base .block-lg, main.main-flex .block-lg {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-lgx, .centerframe-flex .block-lgx, .flex-base .block-lgx, main.main-flex .block-lgx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-xl, .centerframe-flex .block-xl, .flex-base .block-xl, main.main-flex .block-xl {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-xlx, .centerframe-flex .block-xlx, .flex-base .block-xlx, main.main-flex .block-xlx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-2xl, .centerframe-flex .block-2xl, .flex-base .block-2xl, main.main-flex .block-2xl {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-2xlx, .centerframe-flex .block-2xlx, .flex-base .block-2xlx, main.main-flex .block-2xlx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .section-flex .block-full, .centerframe-flex .block-full, .flex-base .block-full, main.main-flex .block-full {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .rounded-card {
    border-radius: var(--rounded-article-md);
  }

  .rounded-t-card {
    border-top-left-radius: var(--rounded-article-md);
    border-top-right-radius: var(--rounded-article-md);
  }

  .rounded-b-card {
    border-bottom-right-radius: var(--rounded-article-md);
    border-bottom-left-radius: var(--rounded-article-md);
  }

  .rounded-l-card {
    border-top-left-radius: var(--rounded-article-md);
    border-bottom-left-radius: var(--rounded-article-md);
  }

  .rounded-r-card {
    border-top-right-radius: var(--rounded-article-md);
    border-bottom-right-radius: var(--rounded-article-md);
  }

  .card {
    border-radius: var(--rounded-article-md);
    padding: var(--pad-article-md);
  }

  .card-base {
    border-radius: var(--rounded-article-md);
  }

  .block-base > :not([hidden]) ~ :not([hidden]), .block-xs > :not([hidden]) ~ :not([hidden]), .block-sm > :not([hidden]) ~ :not([hidden]), .block-smx > :not([hidden]) ~ :not([hidden]), .block-md > :not([hidden]) ~ :not([hidden]), .block-mdx > :not([hidden]) ~ :not([hidden]), .block-lg > :not([hidden]) ~ :not([hidden]), .block-lgx > :not([hidden]) ~ :not([hidden]), .block-xl > :not([hidden]) ~ :not([hidden]), .block-xlx > :not([hidden]) ~ :not([hidden]), .block-2xl > :not([hidden]) ~ :not([hidden]), .block-2xlx > :not([hidden]) ~ :not([hidden]), .block-full > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-block-md) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-block-md) * var(--tw-space-y-reverse));
  }

  .block-base.card > :not([hidden]) ~ :not([hidden]), .block-xs.card > :not([hidden]) ~ :not([hidden]), .block-sm.card > :not([hidden]) ~ :not([hidden]), .block-smx.card > :not([hidden]) ~ :not([hidden]), .block-md.card > :not([hidden]) ~ :not([hidden]), .block-mdx.card > :not([hidden]) ~ :not([hidden]), .block-lg.card > :not([hidden]) ~ :not([hidden]), .block-lgx.card > :not([hidden]) ~ :not([hidden]), .block-xl.card > :not([hidden]) ~ :not([hidden]), .block-xlx.card > :not([hidden]) ~ :not([hidden]), .block-2xl.card > :not([hidden]) ~ :not([hidden]), .block-2xlx.card > :not([hidden]) ~ :not([hidden]), .block-full.card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-md) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-md) * var(--tw-space-y-reverse));
  }

  .stack-y > :not([hidden]) ~ :not([hidden]), .block-base.stack-y > :not([hidden]) ~ :not([hidden]), .block-xs.stack-y > :not([hidden]) ~ :not([hidden]), .block-sm.stack-y > :not([hidden]) ~ :not([hidden]), .block-smx.stack-y > :not([hidden]) ~ :not([hidden]), .block-md.stack-y > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-y > :not([hidden]) ~ :not([hidden]), .block-lg.stack-y > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-y > :not([hidden]) ~ :not([hidden]), .block-xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-md) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-md) * var(--tw-space-y-reverse));
  }

  .stack-x > :not([hidden]) ~ :not([hidden]), .block-base.stack-x > :not([hidden]) ~ :not([hidden]), .block-xs.stack-x > :not([hidden]) ~ :not([hidden]), .block-sm.stack-x > :not([hidden]) ~ :not([hidden]), .block-smx.stack-x > :not([hidden]) ~ :not([hidden]), .block-md.stack-x > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-x > :not([hidden]) ~ :not([hidden]), .block-lg.stack-x > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-x > :not([hidden]) ~ :not([hidden]), .block-xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(var(--spacing-card-md) * var(--tw-space-x-reverse));
    margin-left: calc(var(--spacing-card-md) * calc(1 - var(--tw-space-x-reverse)));
  }

  .datarow, .formrow, .controlrow {
    gap: var(--gap-stack-md);
  }

  .card .datarow, .card-base .datarow,
		.card .formrow, .card-base .formrow {
    gap: var(--spacing-card-md);
  }

  .stack-row {
    display: flex;
    flex-direction: row;
    -moz-column-gap: var(--gap-stack-md);
         column-gap: var(--gap-stack-md);
  }

  .stack-row-wrap {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    -moz-column-gap: var(--gap-stack-md);
         column-gap: var(--gap-stack-md);
    row-gap: var(--gap-stack-md);
  }

  .stack-col, .stack {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-md);
  }

  .stack-form-col {
    display: flex;
    flex-direction: column;
    gap: var(--gap-form-md);
  }

  .card .stack-row, .card-base .stack-row {
    display: flex;
    flex-direction: row;
    -moz-column-gap: var(--spacing-card-md);
         column-gap: var(--spacing-card-md);
  }

  .card .stack-row-wrap, .card-base .stack-row-wrap {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    -moz-column-gap: var(--spacing-card-md);
         column-gap: var(--spacing-card-md);
    row-gap: var(--gap-stack-md);
  }

  .card .stack-col, .card-base .stack-col, .card .stack, .card-base .stack {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-md);
  }

  .pl-half-gutter {
    padding-left: calc(var(--spacing-gutter-md) / 2);
  }

  .pr-half-gutter {
    padding-right: calc(var(--spacing-gutter-md) / 2);
  }

  .ml-half-gutter {
    margin-left: calc(var(--spacing-gutter-md) / 2);
  }

  .mr-half-gutter {
    margin-right: calc(var(--spacing-gutter-md) / 2);
  }

  .max-w-half-breakpoint-less-gutter {
    max-width: calc((var(--screen-md) / 2) - var(--spacing-gutter-md));
  }

  .max-w-half-breakpoint {
    max-width: calc(var(--screen-md) / 2);
  }

  .max-w-breakpoint {
    max-width: 768px;
  }

  .pr-col {
    padding-right: var(--layout-col-width-md);
  }

  .pl-col {
    padding-left: var(--layout-col-width-md);
  }

  .p-header-safeview {
    padding-top: max(var(--pad-header-md), env(safe-area-inset-top));
    padding-left: max(var(--spacing-shoulder-md), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-md), env(safe-area-inset-right));
    padding-bottom: var(--pad-header-md);
  }

  .p-section-safeview {
    padding-top: max(var(--pad-section-md), env(safe-area-inset-top));
    padding-left: max(var(--spacing-shoulder-md), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-md), env(safe-area-inset-right));
    padding-bottom: max(var(--pad-section-md), env(safe-area-inset-bottom));
  }

  .pt-section-safeview {
    padding-top: max(var(--pad-section-md), env(safe-area-inset-top));
  }

  .pb-section-safeview {
    padding-bottom: max(var(--pad-section-md), env(safe-area-inset-bottom));
  }

  .pl-section-safeview {
    padding-left: max(var(--spacing-shoulder-md), env(safe-area-inset-left));
  }

  .pr-section-safeview {
    padding-right: max(var(--spacing-shoulder-md), env(safe-area-inset-right));
  }

  .px-section-safeview {
    padding-left: max(var(--spacing-shoulder-md), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-md), env(safe-area-inset-right));
  }

  .py-section-safeview {
    padding-top: max(var(--pad-section-md), env(safe-area-inset-top));
    padding-bottom: max(var(--pad-section-md), env(safe-area-inset-bottom));
  }

  .p-footer-safeview {
    padding-top: var(--pad-section-md);
    padding-left: max(var(--spacing-shoulder-md), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-md), env(safe-area-inset-right));
    padding-bottom: max(var(--pad-section-md), env(safe-area-inset-bottom));
  }

  .m-header-safeview {
    margin-top: max(var(--pad-header-md), env(safe-area-inset-top));
    margin-left: max(var(--spacing-shoulder-md), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-md), env(safe-area-inset-right));
    margin-bottom: var(--pad-header-md);
  }

  .m-section-safeview {
    margin-top: max(var(--pad-section-md), env(safe-area-inset-top));
    margin-left: max(var(--spacing-shoulder-md), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-md), env(safe-area-inset-right));
    margin-bottom: max(var(--pad-section-md), env(safe-area-inset-bottom));
  }

  .ml-section-safeview {
    margin-left: max(var(--spacing-shoulder-md), env(safe-area-inset-left));
  }

  .mr-section-safeview {
    margin-right: max(var(--spacing-shoulder-md), env(safe-area-inset-right));
  }

  .mt-section-safeview {
    margin-top: max(var(--pad-section-md), env(safe-area-inset-top));
  }

  .mb-section-safeview {
    margin-bottom: max(var(--pad-section-md), env(safe-area-inset-bottom));
  }

  .mx-section-safeview {
    margin-left: max(var(--spacing-shoulder-md), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-md), env(safe-area-inset-right));
  }

  .my-section-safeview {
    margin-top: max(var(--pad-section-md), env(safe-area-inset-top));
    margin-bottom: max(var(--pad-section-md), env(safe-area-inset-bottom));
  }

  .m-footer-safeview {
    margin-top: var(--pad-section-md);
    margin-left: max(var(--spacing-shoulder-md), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-md), env(safe-area-inset-right));
    margin-bottom: max(var(--pad-section-md), env(safe-area-inset-bottom));
  }

  .p-header {
    padding-left: var(--spacing-shoulder-md);
    padding-right: var(--spacing-shoulder-md);
    padding-top: var(--pad-header-md);
    padding-bottom: var(--pad-header-md);
  }

  .p-footer {
    padding-left: var(--spacing-shoulder-md);
    padding-right: var(--spacing-shoulder-md);
    padding-top: var(--pad-section-md);
    padding-bottom: var(--pad-section-md);
  }

  .px-header {
    padding-left: var(--spacing-shoulder-md);
    padding-right: var(--spacing-shoulder-md);
  }

  .py-header {
    padding-top: var(--pad-header-md);
    padding-bottom: var(--pad-header-md);
  }

  .p-shoulder {
    padding: var(--spacing-shoulder-md);
  }

  .px-shoulder {
    padding-left: var(--spacing-shoulder-md);
    padding-right: var(--spacing-shoulder-md);
  }

  .pl-shoulder {
    padding-left: var(--spacing-shoulder-md);
  }

  .pr-shoulder {
    padding-right: var(--spacing-shoulder-md);
  }

  .p-section {
    padding: var(--pad-section-md);
  }

  .px-section {
    padding-left: var(--pad-section-md);
    padding-right: var(--pad-section-md);
  }

  .py-section {
    padding-top: var(--pad-section-md);
    padding-bottom: var(--pad-section-md);
  }

  .pt-section {
    padding-top: var(--pad-section-md);
  }

  .pb-section {
    padding-bottom: var(--pad-section-md);
  }

  .pl-section {
    padding-left: var(--pad-section-md);
  }

  .pr-section {
    padding-right: var(--pad-section-md);
  }

  .p-article {
    padding: var(--pad-article-md);
  }

  .px-article {
    padding-left: var(--pad-article-md);
    padding-right: var(--pad-article-md);
  }

  .py-article {
    padding-top: var(--pad-article-md);
    padding-bottom: var(--pad-article-md);
  }

  .p-block {
    padding: var(--spacing-block-md);
  }

  .px-block {
    padding-left: var(--spacing-block-md);
    padding-right: var(--spacing-block-md);
  }

  .py-block {
    padding-top: var(--spacing-block-md);
    padding-bottom: var(--spacing-block-md);
  }

  .p-card {
    padding: var(--spacing-card-md);
  }

  .px-card {
    padding-left: var(--spacing-card-md);
    padding-right: var(--spacing-card-md);
  }

  .py-card {
    padding-top: var(--spacing-card-md);
    padding-bottom: var(--spacing-card-md);
  }

  .p-element {
    padding: var(--pad-element-md);
  }

  .px-element {
    padding-left: var(--pad-element-md);
    padding-right: var(--pad-element-md);
  }

  .py-element {
    padding-top: var(--pad-element-md);
    padding-bottom: var(--pad-element-md);
  }

  .pl-element {
    padding-left: var(--pad-element-md);
  }

  .pr-element {
    padding-right: var(--pad-element-md);
  }

  .pt-element {
    padding-top: var(--pad-element-md);
  }

  .pb-element {
    padding-bottom: var(--pad-element-md);
  }

  .p-sub {
    padding: var(--spacing-sub-md);
  }

  .pt-sub {
    padding-top: var(--spacing-sub-md);
  }

  .pb-sub {
    padding-bottom: var(--spacing-sub-md);
  }

  .pl-sub {
    padding-left: var(--spacing-sub-md);
  }

  .pr-sub {
    padding-right: var(--spacing-sub-md);
  }

  .px-sub {
    padding-left: var(--spacing-sub-md);
    padding-right: var(--spacing-sub-md);
  }

  .py-sub {
    padding-top: var(--spacing-sub-md);
    padding-bottom: var(--spacing-sub-md);
  }

  .p-base {
    padding: var(--pad-base-md);
  }

  .px-base {
    padding-left: var(--pad-base-md);
    padding-right: var(--pad-base-md);
  }

  .py-base {
    padding-top: var(--pad-base-md);
    padding-bottom: var(--pad-base-md);
  }

  .h-1row {
    height: var(--layout-row-height-md);
  }

  .h-2row {
    height: calc(2 * var(--layout-row-height-md) + var(--spacing-gutter-md));
  }

  .h-3row {
    height: calc(3 * var(--layout-row-height-md) + 2 * var(--spacing-gutter-md));
  }

  .h-4row {
    height: calc(4 * var(--layout-row-height-md) + 3 * var(--spacing-gutter-md));
  }

  .h-5row {
    height: calc(5 * var(--layout-row-height-md) + 4 * var(--spacing-gutter-md));
  }

  .h-6row {
    height: calc(6 * var(--layout-row-height-md) + 5 * var(--spacing-gutter-md));
  }

  .h-7row {
    height: calc(7 * var(--layout-row-height-md) + 6 * var(--spacing-gutter-md));
  }

  .h-8row {
    height: calc(8 * var(--layout-row-height-md) + 7 * var(--spacing-gutter-md));
  }

  .max-h-element {
    max-height: var(--element-max-h-md);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  .text-d1 {
    font-size: var(--text-d1a-size) !important;
    line-height: var(--text-d1a-lh) !important;
  }

  .text-d2 {
    font-size: var(--text-d2a-size) !important;
    line-height: var(--text-d2a-lh) !important;
  }

  .text-d3 {
    font-size: var(--text-d3a-size) !important;
    line-height: var(--text-d3a-lh) !important;
  }

  .text-i1 {
    font-size: var(--text-i1a-size) !important;
    line-height: var(--text-i1a-lh) !important;
  }

  h1 {
    font-size: var(--text-h1a-size);
    line-height: var(--text-h1a-lh);
  }

  header nav a.nav, header nav a:link.nav, header nav a:visited {
    font-size: var(--text-nava-size);
    line-height: var(--text-nava-lh);
  }

  footer nav a.nav, footer nav a:link.nav, footer nav a:visited {
    font-size: var(--text-nava-size);
    line-height: var(--text-p2-lh);
  }
}

/* --------------------------------------------------------------------	*/

/* /DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* !SECTION MD (768px+) Screens 										*/

/* --------------------------------------------------------------------	*/

/* --------------------------------------------------------------------	*/

/* SECTION LG (960px+) Screens											*/

/* DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* --------------------------------------------------------------------	*/

@media (min-width:960px) {
  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  header {
    padding-left: var(--spacing-shoulder-lg);
    padding-right: var(--spacing-shoulder-lg);
    padding-top: var(--pad-header-lg);
    padding-bottom: var(--pad-header-lg);
  }

  .header-base {
    padding-left: 0px;
    padding-right: 0px;
    padding-top: 0px;
    padding-bottom: 0px;
  }

  .header-grid nav {
    grid-template-columns: repeat(var(--layout-cols-lg), minmax(0, 1fr));
    -moz-column-gap: var(--spacing-gutter-lg);
         column-gap: var(--spacing-gutter-lg);
  }

  .header-flex nav {
    -moz-column-gap: var(--spacing-gutter-lg);
         column-gap: var(--spacing-gutter-lg);
  }

  footer {
    padding-left: var(--spacing-shoulder-lg);
    padding-right: var(--spacing-shoulder-lg);
    padding-top: var(--pad-section-lg);
    padding-bottom: var(--pad-section-lg);
  }

  .footer-base {
    padding-left: 0px;
    padding-right: 0px;
    padding-top: 0px;
    padding-bottom: 0px;
  }

  .footer-grid {
    grid-template-columns: repeat(var(--layout-cols-lg), minmax(0, 1fr));
    gap: var(--spacing-gutter-lg);
  }

  .footer-flex nav {
    gap: var(--spacing-gutter-lg);
  }

  section {
    padding-left: var(--spacing-shoulder-lg);
    padding-right: var(--spacing-shoulder-lg);
    padding-top: var(--pad-section-lg);
    padding-bottom: var(--pad-section-lg);
  }

  .section-grid, .centerframe-grid, .grid-base, main.main-grid {
    grid-template-columns: repeat(var(--layout-cols-lg), minmax(0, 1fr));
    gap: var(--spacing-gutter-lg);
  }

  .grid-cols {
    grid-template-columns: repeat(var(--layout-cols-lg), minmax(0, 1fr));
  }

  .section-flex, .centerframe-flex, .flex-base, main.main-flex, .grid-auto {
    gap: var(--spacing-gutter-lg);
  }

  .mt-gutter {
    margin-top: var(--spacing-gutter-lg);
  }

  .mb-gutter {
    margin-bottom: var(--spacing-gutter-lg);
  }

  .ml-gutter {
    margin-left: var(--spacing-gutter-lg);
  }

  .mr-gutter {
    margin-right: var(--spacing-gutter-lg);
  }

  .pt-gutter {
    padding-top: var(--spacing-gutter-lg);
  }

  .pb-gutter {
    padding-bottom: var(--spacing-gutter-lg);
  }

  .pl-gutter {
    padding-left: var(--spacing-gutter-lg);
  }

  .pr-gutter {
    padding-right: var(--spacing-gutter-lg);
  }

  .mt-article {
    margin-top: var(--pad-article-lg);
  }

  .mb-article {
    margin-bottom: var(--pad-article-lg);
  }

  .ml-article {
    margin-left: var(--pad-article-lg);
  }

  .mr-article {
    margin-right: var(--pad-article-lg);
  }

  .gap-form {
    gap: var(--gap-form-lg);
  }

  .gap-gutter {
    gap: var(--spacing-gutter-lg);
  }

  .gap-gutterx {
    gap: calc(var(--spacing-gutter-lg) + var(--layout-unit));
  }

  .gap-x-gutterx {
    -moz-column-gap: calc(var(--spacing-gutter-lg) + var(--layout-unit));
         column-gap: calc(var(--spacing-gutter-lg) + var(--layout-unit));
  }

  .gap-y-gutterx {
    row-gap: calc(var(--spacing-gutter-lg) + var(--layout-unit));
  }

  .gap-gutterxx {
    gap: calc(var(--spacing-gutter-lg) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-x-gutterxx {
    -moz-column-gap: calc(var(--spacing-gutter-lg) + var(--layout-unit) + var(--layout-unit));
         column-gap: calc(var(--spacing-gutter-lg) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-y-gutterxx {
    row-gap: calc(var(--spacing-gutter-lg) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-section {
    gap: var(--gap-section-lg);
  }

  .gap-article {
    gap: var(--gap-article-lg);
  }

  .gap-block {
    gap: var(--spacing-block-lg);
  }

  .gap-card {
    gap: var(--spacing-card-lg);
  }

  .gap-sub {
    gap: var(--spacing-sub-lg);
  }

  .gap-stack {
    gap: var(--gap-stack-lg);
  }

  .gap-y-stack {
    row-gap: var(--gap-stack-lg);
  }

  .gap-x-stack {
    -moz-column-gap: var(--gap-stack-lg);
         column-gap: var(--gap-stack-lg);
  }

  .space-y-card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-lg) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-lg) * var(--tw-space-y-reverse));
  }

  .space-x-card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(var(--spacing-card-lg) * var(--tw-space-x-reverse));
    margin-left: calc(var(--spacing-card-lg) * calc(1 - var(--tw-space-x-reverse)));
  }

  .section-grid.gap-2gutter, .centerframe-grid.gap-2gutter, .grid-base.gap-2gutter, .section-flex.gap-2gutter, .centerframe-flex.gap-2gutter, .flex-base.gap-2gutter, main.main-flex.gap-2gutter {
    gap: calc(2 * var(--spacing-gutter-lg));
  }

  .gap-2gutter {
    gap: calc(2 * var(--spacing-gutter-lg));
  }

  .gap-x-gutter {
    -moz-column-gap: var(--spacing-gutter-lg);
         column-gap: var(--spacing-gutter-lg);
  }

  .gap-y-gutter {
    row-gap: var(--spacing-gutter-lg);
  }

  .gap-x-2gutter {
    -moz-column-gap: calc(2 * var(--spacing-gutter-lg));
         column-gap: calc(2 * var(--spacing-gutter-lg));
  }

  .gap-y-2gutter {
    row-gap: calc(2 * var(--spacing-gutter-lg));
  }

  .section-grid .block-xs, .centerframe-grid .block-xs, .grid-base .block-xs, main.main-grid .block-xs {
    grid-column: span var(--layout-cols-lg-min) / span var(--layout-cols-lg-min);
  }

  .section-grid .block-sm, .centerframe-grid .block-sm, .grid-base .block-sm, main.main-grid .block-sm {
    grid-column: span var(--layout-cols-lg-sixth) / span var(--layout-cols-lg-sixth);
  }

  .section-grid .block-smx, .centerframe-grid .block-smx, .grid-base .block-smx, main.main-grid .block-smx {
    grid-column: span var(--layout-cols-lg-quarter) / span var(--layout-cols-lg-quarter);
  }

  .section-grid .block-md, .centerframe-grid .block-md, .grid-base .block-md, main.main-grid .block-md {
    grid-column: span var(--layout-cols-lg-third) / span var(--layout-cols-lg-third);
  }

  .section-grid .block-mdx, .centerframe-grid .block-mdx, .grid-base .block-mdx, main.main-grid .block-mdx {
    grid-column: span var(--layout-cols-lg-fivetwelfth) / span var(--layout-cols-lg-fivetwelfth);
  }

  .section-grid .block-lg, .centerframe-grid .block-lg, .grid-base .block-lg, main.main-grid .block-lg {
    grid-column: span var(--layout-cols-lg-half) / span var(--layout-cols-lg-half);
  }

  .section-grid .block-lgx, .centerframe-grid .block-lgx, .grid-base .block-lgx, main.main-grid .block-lgx {
    grid-column: span var(--layout-cols-lg-seventwelfth) / span var(--layout-cols-lg-seventwelfth);
  }

  .section-grid .block-xl, .centerframe-grid .block-xl, .grid-base .block-xl, main.main-grid .block-xl {
    grid-column: span var(--layout-cols-lg-twothird) / span var(--layout-cols-lg-twothird);
  }

  .section-grid .block-xlx, .centerframe-grid .block-xlx, .grid-base .block-xlx, main.main-grid .block-xlx {
    grid-column: span var(--layout-cols-lg-threefourth) / span var(--layout-cols-lg-threefourth);
  }

  .section-grid .block-2xl, .centerframe-grid .block-2xl, .grid-base .block-2xl, main.main-grid .block-2xl {
    grid-column: span var(--layout-cols-lg-fivesixth) / span var(--layout-cols-lg-fivesixth);
  }

  .section-grid .block-2xlx, .centerframe-grid .block-2xlx, .grid-base .block-2xlx, main.main-grid .block-2xlx {
    grid-column: span var(--layout-cols-lg-eleventwelfth) / span var(--layout-cols-lg-eleventwelfth);
  }

  .section-grid .block-full, .centerframe-grid .block-full, .grid-base .block-full, main.main-grid .block-full {
    grid-column: 1 / -1;
  }

  .section-flex .block-xs, .centerframe-flex .block-xs, .flex-base .block-xs, main.main-flex .block-xs {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(8.333333% - var(--spacing-gutter-lg));
  }

  .section-flex .block-sm, .centerframe-flex .block-sm, .flex-base .block-sm, main.main-flex .block-sm {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(16.666666% - var(--spacing-gutter-lg));
  }

  .section-flex .block-smx, .centerframe-flex .block-smx, .flex-base .block-smx, main.main-flex .block-smx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(25% - var(--spacing-gutter-lg));
  }

  .section-flex .block-md, .centerframe-flex .block-md, .flex-base .block-md, main.main-flex .block-md {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(33.333333% - var(--spacing-gutter-lg));
  }

  .section-flex .block-mdx, .centerframe-flex .block-mdx, .flex-base .block-mdx, main.main-flex .block-mdx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(41.666666% - var(--spacing-gutter-lg));
  }

  .section-flex .block-lg, .centerframe-flex .block-lg, .flex-base .block-lg, main.main-flex .block-lg {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(50% - var(--spacing-gutter-lg));
  }

  .section-flex .block-lgx, .centerframe-flex .block-lgx, .flex-base .block-lgx, main.main-flex .block-lgx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(58.333333% - var(--spacing-gutter-lg));
  }

  .section-flex .block-xl, .centerframe-flex .block-xl, .flex-base .block-xl, main.main-flex .block-xl {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(66.666666% - var(--spacing-gutter-lg));
  }

  .section-flex .block-xlx, .centerframe-flex .block-xlx, .flex-base .block-xlx, main.main-flex .block-xlx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(75% - var(--spacing-gutter-lg));
  }

  .section-flex .block-2xl, .centerframe-flex .block-2xl, .flex-base .block-2xl, main.main-flex .block-2xl {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(83.333333% - var(--spacing-gutter-lg));
  }

  .section-flex .block-2xlx, .centerframe-flex .block-2xlx, .flex-base .block-2xlx, main.main-flex .block-2xlx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(91.666666% - var(--spacing-gutter-lg));
  }

  .section-flex .block-full, .centerframe-flex .block-full, .flex-base .block-full, main.main-flex .block-full {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .rounded-card {
    border-radius: var(--rounded-article-lg);
  }

  .rounded-t-card {
    border-top-left-radius: var(--rounded-article-lg);
    border-top-right-radius: var(--rounded-article-lg);
  }

  .rounded-b-card {
    border-bottom-right-radius: var(--rounded-article-lg);
    border-bottom-left-radius: var(--rounded-article-lg);
  }

  .rounded-l-card {
    border-top-left-radius: var(--rounded-article-lg);
    border-bottom-left-radius: var(--rounded-article-lg);
  }

  .rounded-r-card {
    border-top-right-radius: var(--rounded-article-lg);
    border-bottom-right-radius: var(--rounded-article-lg);
  }

  .card {
    border-radius: var(--rounded-article-lg);
    padding: var(--pad-article-lg);
  }

  .card-base {
    border-radius: var(--rounded-article-lg);
  }

  .block-base > :not([hidden]) ~ :not([hidden]), .block-xs > :not([hidden]) ~ :not([hidden]), .block-sm > :not([hidden]) ~ :not([hidden]), .block-smx > :not([hidden]) ~ :not([hidden]), .block-md > :not([hidden]) ~ :not([hidden]), .block-mdx > :not([hidden]) ~ :not([hidden]), .block-lg > :not([hidden]) ~ :not([hidden]), .block-lgx > :not([hidden]) ~ :not([hidden]), .block-xl > :not([hidden]) ~ :not([hidden]), .block-xlx > :not([hidden]) ~ :not([hidden]), .block-2xl > :not([hidden]) ~ :not([hidden]), .block-2xlx > :not([hidden]) ~ :not([hidden]), .block-full > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-block-lg) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-block-lg) * var(--tw-space-y-reverse));
  }

  .block-base.card > :not([hidden]) ~ :not([hidden]), .block-xs.card > :not([hidden]) ~ :not([hidden]), .block-sm.card > :not([hidden]) ~ :not([hidden]), .block-smx.card > :not([hidden]) ~ :not([hidden]), .block-md.card > :not([hidden]) ~ :not([hidden]), .block-mdx.card > :not([hidden]) ~ :not([hidden]), .block-lg.card > :not([hidden]) ~ :not([hidden]), .block-lgx.card > :not([hidden]) ~ :not([hidden]), .block-xl.card > :not([hidden]) ~ :not([hidden]), .block-xlx.card > :not([hidden]) ~ :not([hidden]), .block-2xl.card > :not([hidden]) ~ :not([hidden]), .block-2xlx.card > :not([hidden]) ~ :not([hidden]), .block-full.card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-lg) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-lg) * var(--tw-space-y-reverse));
  }

  .stack-y > :not([hidden]) ~ :not([hidden]), .block-base.stack-y > :not([hidden]) ~ :not([hidden]), .block-xs.stack-y > :not([hidden]) ~ :not([hidden]), .block-sm.stack-y > :not([hidden]) ~ :not([hidden]), .block-smx.stack-y > :not([hidden]) ~ :not([hidden]), .block-md.stack-y > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-y > :not([hidden]) ~ :not([hidden]), .block-lg.stack-y > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-y > :not([hidden]) ~ :not([hidden]), .block-xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-lg) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-lg) * var(--tw-space-y-reverse));
  }

  .stack-x > :not([hidden]) ~ :not([hidden]), .block-base.stack-x > :not([hidden]) ~ :not([hidden]), .block-xs.stack-x > :not([hidden]) ~ :not([hidden]), .block-sm.stack-x > :not([hidden]) ~ :not([hidden]), .block-smx.stack-x > :not([hidden]) ~ :not([hidden]), .block-md.stack-x > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-x > :not([hidden]) ~ :not([hidden]), .block-lg.stack-x > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-x > :not([hidden]) ~ :not([hidden]), .block-xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(var(--spacing-card-lg) * var(--tw-space-x-reverse));
    margin-left: calc(var(--spacing-card-lg) * calc(1 - var(--tw-space-x-reverse)));
  }

  .datarow, .formrow, .controlrow {
    gap: var(--gap-stack-lg);
  }

  .card .datarow, .card-base .datarow,
		.card .formrow, .card-base .formrow {
    gap: var(--spacing-card-lg);
  }

  .stack-row {
    display: flex;
    flex-direction: row;
    -moz-column-gap: var(--gap-stack-lg);
         column-gap: var(--gap-stack-lg);
  }

  .stack-row-wrap {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    -moz-column-gap: var(--gap-stack-lg);
         column-gap: var(--gap-stack-lg);
    row-gap: var(--gap-stack-lg);
  }

  .stack-col, .stack {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-lg);
  }

  .stack-form-col {
    display: flex;
    flex-direction: column;
    gap: var(--gap-form-lg);
  }

  .card .stack-row, .card-base .stack-row {
    display: flex;
    flex-direction: row;
    -moz-column-gap: var(--spacing-card-lg);
         column-gap: var(--spacing-card-lg);
  }

  .card .stack-row-wrap, .card-base .stack-row-wrap {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    -moz-column-gap: var(--spacing-card-lg);
         column-gap: var(--spacing-card-lg);
    row-gap: var(--gap-stack-lg);
  }

  .card .stack-col, .card-base .stack-col, .card .stack, .card-base .stack {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-lg);
  }

  .pl-half-gutter {
    padding-left: calc(var(--spacing-gutter-lg) / 2);
  }

  .pr-half-gutter {
    padding-right: calc(var(--spacing-gutter-lg) / 2);
  }

  .ml-half-gutter {
    margin-left: calc(var(--spacing-gutter-lg) / 2);
  }

  .mr-half-gutter {
    margin-right: calc(var(--spacing-gutter-lg) / 2);
  }

  .max-w-half-breakpoint-less-gutter {
    max-width: calc((var(--screen-lg) / 2) - var(--spacing-gutter-lg));
  }

  .max-w-half-breakpoint {
    max-width: calc(var(--screen-lg) / 2);
  }

  .max-w-breakpoint {
    max-width: 960px;
  }

  .pr-col {
    padding-right: var(--layout-col-width-lg);
  }

  .pl-col {
    padding-left: var(--layout-col-width-lg);
  }

  .p-header-safeview {
    padding-top: max(var(--pad-header-lg), env(safe-area-inset-top));
    padding-left: max(var(--spacing-shoulder-lg), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-lg), env(safe-area-inset-right));
    padding-bottom: var(--pad-header-lg);
  }

  .p-section-safeview {
    padding-top: max(var(--pad-section-lg), env(safe-area-inset-top));
    padding-left: max(var(--spacing-shoulder-lg), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-lg), env(safe-area-inset-right));
    padding-bottom: max(var(--pad-section-lg), env(safe-area-inset-bottom));
  }

  .pt-section-safeview {
    padding-top: max(var(--pad-section-lg), env(safe-area-inset-top));
  }

  .pb-section-safeview {
    padding-bottom: max(var(--pad-section-lg), env(safe-area-inset-bottom));
  }

  .pl-section-safeview {
    padding-left: max(var(--spacing-shoulder-lg), env(safe-area-inset-left));
  }

  .pr-section-safeview {
    padding-right: max(var(--spacing-shoulder-lg), env(safe-area-inset-right));
  }

  .px-section-safeview {
    padding-left: max(var(--spacing-shoulder-lg), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-lg), env(safe-area-inset-right));
  }

  .py-section-safeview {
    padding-top: max(var(--pad-section-lg), env(safe-area-inset-top));
    padding-bottom: max(var(--pad-section-lg), env(safe-area-inset-bottom));
  }

  .p-footer-safeview {
    padding-top: var(--pad-section-lg);
    padding-left: max(var(--spacing-shoulder-lg), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-lg), env(safe-area-inset-right));
    padding-bottom: max(var(--pad-section-lg), env(safe-area-inset-bottom));
  }

  .m-header-safeview {
    margin-top: max(var(--pad-header-lg), env(safe-area-inset-top));
    margin-left: max(var(--spacing-shoulder-lg), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-lg), env(safe-area-inset-right));
    margin-bottom: var(--pad-header-lg);
  }

  .m-section-safeview {
    margin-top: max(var(--pad-section-lg), env(safe-area-inset-top));
    margin-left: max(var(--spacing-shoulder-lg), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-lg), env(safe-area-inset-right));
    margin-bottom: max(var(--pad-section-lg), env(safe-area-inset-bottom));
  }

  .ml-section-safeview {
    margin-left: max(var(--spacing-shoulder-lg), env(safe-area-inset-left));
  }

  .mr-section-safeview {
    margin-right: max(var(--spacing-shoulder-lg), env(safe-area-inset-right));
  }

  .mt-section-safeview {
    margin-top: max(var(--pad-section-lg), env(safe-area-inset-top));
  }

  .mb-section-safeview {
    margin-bottom: max(var(--pad-section-lg), env(safe-area-inset-bottom));
  }

  .mx-section-safeview {
    margin-left: max(var(--spacing-shoulder-lg), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-lg), env(safe-area-inset-right));
  }

  .my-section-safeview {
    margin-top: max(var(--pad-section-lg), env(safe-area-inset-top));
    margin-bottom: max(var(--pad-section-lg), env(safe-area-inset-bottom));
  }

  .m-footer-safeview {
    margin-top: var(--pad-section-lg);
    margin-left: max(var(--spacing-shoulder-lg), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-lg), env(safe-area-inset-right));
    margin-bottom: max(var(--pad-section-lg), env(safe-area-inset-bottom));
  }

  .p-header {
    padding-left: var(--spacing-shoulder-lg);
    padding-right: var(--spacing-shoulder-lg);
    padding-top: var(--pad-header-lg);
    padding-bottom: var(--pad-header-lg);
  }

  .p-footer {
    padding-left: var(--spacing-shoulder-lg);
    padding-right: var(--spacing-shoulder-lg);
    padding-top: var(--pad-section-lg);
    padding-bottom: var(--pad-section-lg);
  }

  .px-header {
    padding-left: var(--spacing-shoulder-lg);
    padding-right: var(--spacing-shoulder-lg);
  }

  .py-header {
    padding-top: var(--pad-header-lg);
    padding-bottom: var(--pad-header-lg);
  }

  .p-shoulder {
    padding: var(--spacing-shoulder-lg);
  }

  .px-shoulder {
    padding-left: var(--spacing-shoulder-lg);
    padding-right: var(--spacing-shoulder-lg);
  }

  .pl-shoulder {
    padding-left: var(--spacing-shoulder-lg);
  }

  .pr-shoulder {
    padding-right: var(--spacing-shoulder-lg);
  }

  .p-section {
    padding: var(--pad-section-lg);
  }

  .px-section {
    padding-left: var(--pad-section-lg);
    padding-right: var(--pad-section-lg);
  }

  .py-section {
    padding-top: var(--pad-section-lg);
    padding-bottom: var(--pad-section-lg);
  }

  .pt-section {
    padding-top: var(--pad-section-lg);
  }

  .pb-section {
    padding-bottom: var(--pad-section-lg);
  }

  .pl-section {
    padding-left: var(--pad-section-lg);
  }

  .pr-section {
    padding-right: var(--pad-section-lg);
  }

  .p-article {
    padding: var(--pad-article-lg);
  }

  .px-article {
    padding-left: var(--pad-article-lg);
    padding-right: var(--pad-article-lg);
  }

  .py-article {
    padding-top: var(--pad-article-lg);
    padding-bottom: var(--pad-article-lg);
  }

  .p-block {
    padding: var(--spacing-block-lg);
  }

  .px-block {
    padding-left: var(--spacing-block-lg);
    padding-right: var(--spacing-block-lg);
  }

  .py-block {
    padding-top: var(--spacing-block-lg);
    padding-bottom: var(--spacing-block-lg);
  }

  .p-card {
    padding: var(--spacing-card-lg);
  }

  .px-card {
    padding-left: var(--spacing-card-lg);
    padding-right: var(--spacing-card-lg);
  }

  .py-card {
    padding-top: var(--spacing-card-lg);
    padding-bottom: var(--spacing-card-lg);
  }

  .p-element {
    padding: var(--pad-element-lg);
  }

  .px-element {
    padding-left: var(--pad-element-lg);
    padding-right: var(--pad-element-lg);
  }

  .py-element {
    padding-top: var(--pad-element-lg);
    padding-bottom: var(--pad-element-lg);
  }

  .pl-element {
    padding-left: var(--pad-element-lg);
  }

  .pr-element {
    padding-right: var(--pad-element-lg);
  }

  .pt-element {
    padding-top: var(--pad-element-lg);
  }

  .pb-element {
    padding-bottom: var(--pad-element-lg);
  }

  .p-sub {
    padding: var(--spacing-sub-lg);
  }

  .pt-sub {
    padding-top: var(--spacing-sub-lg);
  }

  .pb-sub {
    padding-bottom: var(--spacing-sub-lg);
  }

  .pl-sub {
    padding-left: var(--spacing-sub-lg);
  }

  .pr-sub {
    padding-right: var(--spacing-sub-lg);
  }

  .px-sub {
    padding-left: var(--spacing-sub-lg);
    padding-right: var(--spacing-sub-lg);
  }

  .py-sub {
    padding-top: var(--spacing-sub-lg);
    padding-bottom: var(--spacing-sub-lg);
  }

  .p-base {
    padding: var(--pad-base-lg);
  }

  .px-base {
    padding-left: var(--pad-base-lg);
    padding-right: var(--pad-base-lg);
  }

  .py-base {
    padding-top: var(--pad-base-lg);
    padding-bottom: var(--pad-base-lg);
  }

  .h-1row {
    height: var(--layout-row-height-lg);
  }

  .h-2row {
    height: calc(2 * var(--layout-row-height-lg) + var(--spacing-gutter-lg));
  }

  .h-3row {
    height: calc(3 * var(--layout-row-height-lg) + 2 * var(--spacing-gutter-lg));
  }

  .h-4row {
    height: calc(4 * var(--layout-row-height-lg) + 3 * var(--spacing-gutter-lg));
  }

  .h-5row {
    height: calc(5 * var(--layout-row-height-lg) + 4 * var(--spacing-gutter-lg));
  }

  .h-6row {
    height: calc(6 * var(--layout-row-height-lg) + 5 * var(--spacing-gutter-lg));
  }

  .h-7row {
    height: calc(7 * var(--layout-row-height-lg) + 6 * var(--spacing-gutter-lg));
  }

  .h-8row {
    height: calc(8 * var(--layout-row-height-lg) + 7 * var(--spacing-gutter-lg));
  }

  .max-h-element {
    max-height: var(--element-max-h-lg);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  .text-d1 {
    font-size: var(--text-d1-size) !important;
    line-height: var(--text-d1-lh) !important;
  }

  .text-d2 {
    font-size: var(--text-d2-size) !important;
    line-height: var(--text-d2-lh) !important;
  }

  .text-d3 {
    font-size: var(--text-d3-size) !important;
    line-height: var(--text-d3-lh) !important;
  }

  .text-i1 {
    font-size: var(--text-i1-size) !important;
    line-height: var(--text-i1-lh) !important;
  }

  h1 {
    font-size: var(--text-h1-size);
    line-height: var(--text-h1-lh);
  }

  header nav a.nav, header nav a:link.nav, header nav a:visited {
    font-size: var(--text-nava-size);
    line-height: var(--text-nava-lh);
  }

  footer nav a.nav, footer nav a:link.nav, footer nav a:visited {
    font-size: var(--text-nav-size);
    line-height: var(--text-p1-lh);
  }
}

/* --------------------------------------------------------------------	*/

/* /DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* !SECTION LG (960px+) Screens											*/

/* --------------------------------------------------------------------	*/

/* --------------------------------------------------------------------	*/

/* SECTION XL (1440px+) Screens											*/

/* DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* --------------------------------------------------------------------	*/

@media (min-width:1440px) {
  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  header {
    padding-left: var(--spacing-shoulder-xl);
    padding-right: var(--spacing-shoulder-xl);
    padding-top: var(--pad-header-xl);
    padding-bottom: var(--pad-header-xl);
  }

  .header-base {
    padding-left: 0px;
    padding-right: 0px;
    padding-top: 0px;
    padding-bottom: 0px;
  }

  .header-grid nav {
    grid-template-columns: repeat(var(--layout-cols-xl), minmax(0, 1fr));
    -moz-column-gap: var(--spacing-gutter-xl);
         column-gap: var(--spacing-gutter-xl);
  }

  .header-flex nav {
    -moz-column-gap: var(--spacing-gutter-xl);
         column-gap: var(--spacing-gutter-xl);
  }

  footer {
    padding-left: var(--spacing-shoulder-xl);
    padding-right: var(--spacing-shoulder-xl);
    padding-top: var(--pad-section-xl);
    padding-bottom: var(--pad-section-xl);
  }

  .footer-base {
    padding-left: 0px;
    padding-right: 0px;
    padding-top: 0px;
    padding-bottom: 0px;
  }

  .footer-grid {
    grid-template-columns: repeat(var(--layout-cols-xl), minmax(0, 1fr));
    gap: var(--spacing-gutter-xl);
  }

  .footer-flex nav {
    gap: var(--spacing-gutter-xl);
  }

  section {
    padding-left: var(--spacing-shoulder-xl);
    padding-right: var(--spacing-shoulder-xl);
    padding-top: var(--pad-section-xl);
    padding-bottom: var(--pad-section-xl);
  }

  .section-grid, .centerframe-grid, .grid-base, main.main-grid {
    grid-template-columns: repeat(var(--layout-cols-xl), minmax(0, 1fr));
    gap: var(--spacing-gutter-xl);
  }

  .grid-cols {
    grid-template-columns: repeat(var(--layout-cols-xl), minmax(0, 1fr));
  }

  .section-flex, .centerframe-flex, .flex-base, main.main-flex, .grid-auto {
    gap: var(--spacing-gutter-xl);
  }

  .mt-gutter {
    margin-top: var(--spacing-gutter-xl);
  }

  .mb-gutter {
    margin-bottom: var(--spacing-gutter-xl);
  }

  .ml-gutter {
    margin-left: var(--spacing-gutter-xl);
  }

  .mr-gutter {
    margin-right: var(--spacing-gutter-xl);
  }

  .pt-gutter {
    padding-top: var(--spacing-gutter-xl);
  }

  .pb-gutter {
    padding-bottom: var(--spacing-gutter-xl);
  }

  .pl-gutter {
    padding-left: var(--spacing-gutter-xl);
  }

  .pr-gutter {
    padding-right: var(--spacing-gutter-xl);
  }

  .mt-article {
    margin-top: var(--pad-article-xl);
  }

  .mb-article {
    margin-bottom: var(--pad-article-xl);
  }

  .ml-article {
    margin-left: var(--pad-article-xl);
  }

  .mr-article {
    margin-right: var(--pad-article-xl);
  }

  .gap-form {
    gap: var(--gap-form-xl);
  }

  .gap-gutter {
    gap: var(--spacing-gutter-xl);
  }

  .gap-gutterx {
    gap: calc(var(--spacing-gutter-xl) + var(--layout-unit));
  }

  .gap-x-gutterx {
    -moz-column-gap: calc(var(--spacing-gutter-xl) + var(--layout-unit));
         column-gap: calc(var(--spacing-gutter-xl) + var(--layout-unit));
  }

  .gap-y-gutterx {
    row-gap: calc(var(--spacing-gutter-xl) + var(--layout-unit));
  }

  .gap-gutterxx {
    gap: calc(var(--spacing-gutter-xl) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-x-gutterxx {
    -moz-column-gap: calc(var(--spacing-gutter-xl) + var(--layout-unit) + var(--layout-unit));
         column-gap: calc(var(--spacing-gutter-xl) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-y-gutterxx {
    row-gap: calc(var(--spacing-gutter-xl) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-section {
    gap: var(--gap-section-xl);
  }

  .gap-article {
    gap: var(--gap-article-xl);
  }

  .gap-block {
    gap: var(--spacing-block-xl);
  }

  .gap-card {
    gap: var(--spacing-card-xl);
  }

  .gap-sub {
    gap: var(--spacing-sub-xl);
  }

  .gap-stack {
    gap: var(--gap-stack-xl);
  }

  .gap-y-stack {
    row-gap: var(--gap-stack-xl);
  }

  .gap-x-stack {
    -moz-column-gap: var(--gap-stack-xl);
         column-gap: var(--gap-stack-xl);
  }

  .space-y-card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-xl) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-xl) * var(--tw-space-y-reverse));
  }

  .space-x-card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(var(--spacing-card-xl) * var(--tw-space-x-reverse));
    margin-left: calc(var(--spacing-card-xl) * calc(1 - var(--tw-space-x-reverse)));
  }

  .section-grid.gap-2gutter, .centerframe-grid.gap-2gutter, .grid-base.gap-2gutter, .section-flex.gap-2gutter, .centerframe-flex.gap-2gutter, .flex-base.gap-2gutter, main.main-flex.gap-2gutter {
    gap: calc(2 * var(--spacing-gutter-xl));
  }

  .gap-2gutter {
    gap: calc(2 * var(--spacing-gutter-xl));
  }

  .gap-x-gutter {
    -moz-column-gap: var(--spacing-gutter-xl);
         column-gap: var(--spacing-gutter-xl);
  }

  .gap-y-gutter {
    row-gap: var(--spacing-gutter-xl);
  }

  .gap-x-2gutter {
    -moz-column-gap: calc(2 * var(--spacing-gutter-xl));
         column-gap: calc(2 * var(--spacing-gutter-xl));
  }

  .gap-y-2gutter {
    row-gap: calc(2 * var(--spacing-gutter-xl));
  }

  .section-grid .block-xs, .centerframe-grid .block-xs, .grid-base .block-xs, main.main-grid .block-xs {
    grid-column: span var(--layout-cols-xl-min) / span var(--layout-cols-xl-min);
  }

  .section-grid .block-sm, .centerframe-grid .block-sm, .grid-base .block-sm, main.main-grid .block-sm {
    grid-column: span var(--layout-cols-xl-sixth) / span var(--layout-cols-xl-sixth);
  }

  .section-grid .block-smx, .centerframe-grid .block-smx, .grid-base .block-smx, main.main-grid .block-smx {
    grid-column: span var(--layout-cols-xl-quarter) / span var(--layout-cols-xl-quarter);
  }

  .section-grid .block-md, .centerframe-grid .block-md, .grid-base .block-md, main.main-grid .block-md {
    grid-column: span var(--layout-cols-xl-third) / span var(--layout-cols-xl-third);
  }

  .section-grid .block-mdx, .centerframe-grid .block-mdx, .grid-base .block-mdx, main.main-grid .block-mdx {
    grid-column: span var(--layout-cols-xl-fivetwelfth) / span var(--layout-cols-xl-fivetwelfth);
  }

  .section-grid .block-lg, .centerframe-grid .block-lg, .grid-base .block-lg, main.main-grid .block-lg {
    grid-column: span var(--layout-cols-xl-half) / span var(--layout-cols-xl-half);
  }

  .section-grid .block-lgx, .centerframe-grid .block-lgx, .grid-base .block-lgx, main.main-grid .block-lgx {
    grid-column: span var(--layout-cols-xl-seventwelfth) / span var(--layout-cols-xl-seventwelfth);
  }

  .section-grid .block-xl, .centerframe-grid .block-xl, .grid-base .block-xl, main.main-grid .block-xl {
    grid-column: span var(--layout-cols-xl-twothird) / span var(--layout-cols-xl-twothird);
  }

  .section-grid .block-xlx, .centerframe-grid .block-xlx, .grid-base .block-xlx, main.main-grid .block-xlx {
    grid-column: span var(--layout-cols-xl-threefourth) / span var(--layout-cols-xl-threefourth);
  }

  .section-grid .block-2xl, .centerframe-grid .block-2xl, .grid-base .block-2xl, main.main-grid .block-2xl {
    grid-column: span var(--layout-cols-xl-fivesixth) / span var(--layout-cols-xl-fivesixth);
  }

  .section-grid .block-2xlx, .centerframe-grid .block-2xlx, .grid-base .block-2xlx, main.main-grid .block-2xlx {
    grid-column: span var(--layout-cols-xl-eleventwelfth) / span var(--layout-cols-xl-eleventwelfth);
  }

  .section-grid .block-full, .centerframe-grid .block-full, .grid-base .block-full, main.main-grid .block-full {
    grid-column: 1 / -1;
  }

  .section-flex .block-xs, .centerframe-flex .block-xs, .flex-base .block-xs, main.main-flex .block-xs {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(8.333333% - var(--spacing-gutter-xl));
  }

  .section-flex .block-sm, .centerframe-flex .block-sm, .flex-base .block-sm, main.main-flex .block-sm {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(16.666666% - var(--spacing-gutter-xl));
  }

  .section-flex .block-smx, .centerframe-flex .block-smx, .flex-base .block-smx, main.main-flex .block-smx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(25% - var(--spacing-gutter-xl));
  }

  .section-flex .block-md, .centerframe-flex .block-md, .flex-base .block-md, main.main-flex .block-md {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(33.333333% - var(--spacing-gutter-xl));
  }

  .section-flex .block-mdx, .centerframe-flex .block-mdx, .flex-base .block-mdx, main.main-flex .block-mdx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(41.666666% - var(--spacing-gutter-xl));
  }

  .section-flex .block-lg, .centerframe-flex .block-lg, .flex-base .block-lg, main.main-flex .block-lg {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(50% - var(--spacing-gutter-xl));
  }

  .section-flex .block-lgx, .centerframe-flex .block-lgx, .flex-base .block-lgx, main.main-flex .block-lgx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(58.333333% - var(--spacing-gutter-xl));
  }

  .section-flex .block-xl, .centerframe-flex .block-xl, .flex-base .block-xl, main.main-flex .block-xl {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(66.666666% - var(--spacing-gutter-xl));
  }

  .section-flex .block-xlx, .centerframe-flex .block-xlx, .flex-base .block-xlx, main.main-flex .block-xlx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(75% - var(--spacing-gutter-xl));
  }

  .section-flex .block-2xl, .centerframe-flex .block-2xl, .flex-base .block-2xl, main.main-flex .block-2xl {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(83.333333% - var(--spacing-gutter-xl));
  }

  .section-flex .block-2xlx, .centerframe-flex .block-2xlx, .flex-base .block-2xlx, main.main-flex .block-2xlx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(91.666666% - var(--spacing-gutter-xl));
  }

  .section-flex .block-full, .centerframe-flex .block-full, .flex-base .block-full, main.main-flex .block-full {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .rounded-card {
    border-radius: var(--rounded-article-xl);
  }

  .rounded-t-card {
    border-top-left-radius: var(--rounded-article-xl);
    border-top-right-radius: var(--rounded-article-xl);
  }

  .rounded-b-card {
    border-bottom-right-radius: var(--rounded-article-xl);
    border-bottom-left-radius: var(--rounded-article-xl);
  }

  .rounded-l-card {
    border-top-left-radius: var(--rounded-article-xl);
    border-bottom-left-radius: var(--rounded-article-xl);
  }

  .rounded-r-card {
    border-top-right-radius: var(--rounded-article-xl);
    border-bottom-right-radius: var(--rounded-article-xl);
  }

  .card {
    border-radius: var(--rounded-article-xl);
    padding: var(--pad-article-xl);
  }

  .card-base {
    border-radius: var(--rounded-article-xl);
  }

  .block-base > :not([hidden]) ~ :not([hidden]), .block-xs > :not([hidden]) ~ :not([hidden]), .block-sm > :not([hidden]) ~ :not([hidden]), .block-smx > :not([hidden]) ~ :not([hidden]), .block-md > :not([hidden]) ~ :not([hidden]), .block-mdx > :not([hidden]) ~ :not([hidden]), .block-lg > :not([hidden]) ~ :not([hidden]), .block-lgx > :not([hidden]) ~ :not([hidden]), .block-xl > :not([hidden]) ~ :not([hidden]), .block-xlx > :not([hidden]) ~ :not([hidden]), .block-2xl > :not([hidden]) ~ :not([hidden]), .block-2xlx > :not([hidden]) ~ :not([hidden]), .block-full > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-block-xl) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-block-xl) * var(--tw-space-y-reverse));
  }

  .block-base.card > :not([hidden]) ~ :not([hidden]), .block-xs.card > :not([hidden]) ~ :not([hidden]), .block-sm.card > :not([hidden]) ~ :not([hidden]), .block-smx.card > :not([hidden]) ~ :not([hidden]), .block-md.card > :not([hidden]) ~ :not([hidden]), .block-mdx.card > :not([hidden]) ~ :not([hidden]), .block-lg.card > :not([hidden]) ~ :not([hidden]), .block-lgx.card > :not([hidden]) ~ :not([hidden]), .block-xl.card > :not([hidden]) ~ :not([hidden]), .block-xlx.card > :not([hidden]) ~ :not([hidden]), .block-2xl.card > :not([hidden]) ~ :not([hidden]), .block-2xlx.card > :not([hidden]) ~ :not([hidden]), .block-full.card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-xl) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-xl) * var(--tw-space-y-reverse));
  }

  .stack-y > :not([hidden]) ~ :not([hidden]), .block-base.stack-y > :not([hidden]) ~ :not([hidden]), .block-xs.stack-y > :not([hidden]) ~ :not([hidden]), .block-sm.stack-y > :not([hidden]) ~ :not([hidden]), .block-smx.stack-y > :not([hidden]) ~ :not([hidden]), .block-md.stack-y > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-y > :not([hidden]) ~ :not([hidden]), .block-lg.stack-y > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-y > :not([hidden]) ~ :not([hidden]), .block-xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-xl) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-xl) * var(--tw-space-y-reverse));
  }

  .stack-x > :not([hidden]) ~ :not([hidden]), .block-base.stack-x > :not([hidden]) ~ :not([hidden]), .block-xs.stack-x > :not([hidden]) ~ :not([hidden]), .block-sm.stack-x > :not([hidden]) ~ :not([hidden]), .block-smx.stack-x > :not([hidden]) ~ :not([hidden]), .block-md.stack-x > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-x > :not([hidden]) ~ :not([hidden]), .block-lg.stack-x > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-x > :not([hidden]) ~ :not([hidden]), .block-xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(var(--spacing-card-xl) * var(--tw-space-x-reverse));
    margin-left: calc(var(--spacing-card-xl) * calc(1 - var(--tw-space-x-reverse)));
  }

  .datarow, .formrow, .controlrow {
    gap: var(--gap-stack-xl);
  }

  .card .datarow, .card-base .datarow,
		.card .formrow, .card-base .formrow {
    gap: var(--spacing-card-xl);
  }

  .stack-row {
    display: flex;
    flex-direction: row;
    -moz-column-gap: var(--gap-stack-xl);
         column-gap: var(--gap-stack-xl);
  }

  .stack-row-wrap {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    -moz-column-gap: var(--gap-stack-xl);
         column-gap: var(--gap-stack-xl);
    row-gap: var(--gap-stack-xl);
  }

  .stack-col, .stack {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-xl);
  }

  .stack-form-col {
    display: flex;
    flex-direction: column;
    gap: var(--gap-form-xl);
  }

  .card .stack-row, .card-base .stack-row {
    display: flex;
    flex-direction: row;
    -moz-column-gap: var(--spacing-card-xl);
         column-gap: var(--spacing-card-xl);
  }

  .card .stack-row-wrap, .card-base .stack-row-wrap {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    -moz-column-gap: var(--spacing-card-xl);
         column-gap: var(--spacing-card-xl);
    row-gap: var(--gap-stack-xl);
  }

  .card .stack-col, .card-base .stack-col, .card .stack, .card-base .stack {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-xl);
  }

  .pl-half-gutter {
    padding-left: calc(var(--spacing-gutter-xl) / 2);
  }

  .pr-half-gutter {
    padding-right: calc(var(--spacing-gutter-xl) / 2);
  }

  .ml-half-gutter {
    margin-left: calc(var(--spacing-gutter-xl) / 2);
  }

  .mr-half-gutter {
    margin-right: calc(var(--spacing-gutter-xl) / 2);
  }

  .max-w-half-breakpoint-less-gutter {
    max-width: calc((var(--screen-xl) / 2) - var(--spacing-gutter-xl));
  }

  .max-w-half-breakpoint {
    max-width: calc(var(--screen-xl) / 2);
  }

  .max-w-breakpoint {
    max-width: 1440px;
  }

  .pr-col {
    padding-right: var(--layout-col-width-xl);
  }

  .pl-col {
    padding-left: var(--layout-col-width-xl);
  }

  .p-header-safeview {
    padding-top: max(var(--pad-header-xl), env(safe-area-inset-top));
    padding-left: max(var(--spacing-shoulder-xl), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-xl), env(safe-area-inset-right));
    padding-bottom: var(--pad-header-xl);
  }

  .p-section-safeview {
    padding-top: max(var(--pad-section-xl), env(safe-area-inset-top));
    padding-left: max(var(--spacing-shoulder-xl), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-xl), env(safe-area-inset-right));
    padding-bottom: max(var(--pad-section-xl), env(safe-area-inset-bottom));
  }

  .pt-section-safeview {
    padding-top: max(var(--pad-section-xl), env(safe-area-inset-top));
  }

  .pb-section-safeview {
    padding-bottom: max(var(--pad-section-xl), env(safe-area-inset-bottom));
  }

  .pl-section-safeview {
    padding-left: max(var(--spacing-shoulder-xl), env(safe-area-inset-left));
  }

  .pr-section-safeview {
    padding-right: max(var(--spacing-shoulder-xl), env(safe-area-inset-right));
  }

  .px-section-safeview {
    padding-left: max(var(--spacing-shoulder-xl), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-xl), env(safe-area-inset-right));
  }

  .py-section-safeview {
    padding-top: max(var(--pad-section-xl), env(safe-area-inset-top));
    padding-bottom: max(var(--pad-section-xl), env(safe-area-inset-bottom));
  }

  .p-footer-safeview {
    padding-top: var(--pad-section-xl);
    padding-left: max(var(--spacing-shoulder-xl), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-xl), env(safe-area-inset-right));
    padding-bottom: max(var(--pad-section-xl), env(safe-area-inset-bottom));
  }

  .m-header-safeview {
    margin-top: max(var(--pad-header-xl), env(safe-area-inset-top));
    margin-left: max(var(--spacing-shoulder-xl), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-xl), env(safe-area-inset-right));
    margin-bottom: var(--pad-header-xl);
  }

  .m-section-safeview {
    margin-top: max(var(--pad-section-xl), env(safe-area-inset-top));
    margin-left: max(var(--spacing-shoulder-xl), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-xl), env(safe-area-inset-right));
    margin-bottom: max(var(--pad-section-xl), env(safe-area-inset-bottom));
  }

  .ml-section-safeview {
    margin-left: max(var(--spacing-shoulder-xl), env(safe-area-inset-left));
  }

  .mr-section-safeview {
    margin-right: max(var(--spacing-shoulder-xl), env(safe-area-inset-right));
  }

  .mt-section-safeview {
    margin-top: max(var(--pad-section-xl), env(safe-area-inset-top));
  }

  .mb-section-safeview {
    margin-bottom: max(var(--pad-section-xl), env(safe-area-inset-bottom));
  }

  .mx-section-safeview {
    margin-left: max(var(--spacing-shoulder-xl), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-xl), env(safe-area-inset-right));
  }

  .my-section-safeview {
    margin-top: max(var(--pad-section-xl), env(safe-area-inset-top));
    margin-bottom: max(var(--pad-section-xl), env(safe-area-inset-bottom));
  }

  .m-footer-safeview {
    margin-top: var(--pad-section-xl);
    margin-left: max(var(--spacing-shoulder-xl), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-xl), env(safe-area-inset-right));
    margin-bottom: max(var(--pad-section-xl), env(safe-area-inset-bottom));
  }

  .p-header {
    padding-left: var(--spacing-shoulder-xl);
    padding-right: var(--spacing-shoulder-xl);
    padding-top: var(--pad-header-xl);
    padding-bottom: var(--pad-header-xl);
  }

  .p-footer {
    padding-left: var(--spacing-shoulder-xl);
    padding-right: var(--spacing-shoulder-xl);
    padding-top: var(--pad-section-xl);
    padding-bottom: var(--pad-section-xl);
  }

  .px-header {
    padding-left: var(--spacing-shoulder-xl);
    padding-right: var(--spacing-shoulder-xl);
  }

  .py-header {
    padding-top: var(--pad-header-xl);
    padding-bottom: var(--pad-header-xl);
  }

  .p-shoulder {
    padding: var(--spacing-shoulder-xl);
  }

  .px-shoulder {
    padding-left: var(--spacing-shoulder-xl);
    padding-right: var(--spacing-shoulder-xl);
  }

  .pl-shoulder {
    padding-left: var(--spacing-shoulder-xl);
  }

  .pr-shoulder {
    padding-right: var(--spacing-shoulder-xl);
  }

  .p-section {
    padding: var(--pad-section-xl);
  }

  .px-section {
    padding-left: var(--pad-section-xl);
    padding-right: var(--pad-section-xl);
  }

  .py-section {
    padding-top: var(--pad-section-xl);
    padding-bottom: var(--pad-section-xl);
  }

  .pt-section {
    padding-top: var(--pad-section-xl);
  }

  .pb-section {
    padding-bottom: var(--pad-section-xl);
  }

  .pl-section {
    padding-left: var(--pad-section-xl);
  }

  .pr-section {
    padding-right: var(--pad-section-xl);
  }

  .p-article {
    padding: var(--pad-article-xl);
  }

  .px-article {
    padding-left: var(--pad-article-xl);
    padding-right: var(--pad-article-xl);
  }

  .py-article {
    padding-top: var(--pad-article-xl);
    padding-bottom: var(--pad-article-xl);
  }

  .p-block {
    padding: var(--spacing-block-xl);
  }

  .px-block {
    padding-left: var(--spacing-block-xl);
    padding-right: var(--spacing-block-xl);
  }

  .py-block {
    padding-top: var(--spacing-block-xl);
    padding-bottom: var(--spacing-block-xl);
  }

  .p-card {
    padding: var(--spacing-card-xl);
  }

  .px-card {
    padding-left: var(--spacing-card-xl);
    padding-right: var(--spacing-card-xl);
  }

  .py-card {
    padding-top: var(--spacing-card-xl);
    padding-bottom: var(--spacing-card-xl);
  }

  .p-element {
    padding: var(--pad-element-xl);
  }

  .px-element {
    padding-left: var(--pad-element-xl);
    padding-right: var(--pad-element-xl);
  }

  .py-element {
    padding-top: var(--pad-element-xl);
    padding-bottom: var(--pad-element-xl);
  }

  .pl-element {
    padding-left: var(--pad-element-xl);
  }

  .pr-element {
    padding-right: var(--pad-element-xl);
  }

  .pt-element {
    padding-top: var(--pad-element-xl);
  }

  .pb-element {
    padding-bottom: var(--pad-element-xl);
  }

  .p-sub {
    padding: var(--spacing-sub-xl);
  }

  .pt-sub {
    padding-top: var(--spacing-sub-xl);
  }

  .pb-sub {
    padding-bottom: var(--spacing-sub-xl);
  }

  .pl-sub {
    padding-left: var(--spacing-sub-xl);
  }

  .pr-sub {
    padding-right: var(--spacing-sub-xl);
  }

  .px-sub {
    padding-left: var(--spacing-sub-xl);
    padding-right: var(--spacing-sub-xl);
  }

  .py-sub {
    padding-top: var(--spacing-sub-xl);
    padding-bottom: var(--spacing-sub-xl);
  }

  .p-base {
    padding: var(--pad-base-xl);
  }

  .px-base {
    padding-left: var(--pad-base-xl);
    padding-right: var(--pad-base-xl);
  }

  .py-base {
    padding-top: var(--pad-base-xl);
    padding-bottom: var(--pad-base-xl);
  }

  .h-1row {
    height: var(--layout-row-height-xl);
  }

  .h-2row {
    height: calc(2 * var(--layout-row-height-xl) + var(--spacing-gutter-xl));
  }

  .h-3row {
    height: calc(3 * var(--layout-row-height-xl) + 2 * var(--spacing-gutter-xl));
  }

  .h-4row {
    height: calc(4 * var(--layout-row-height-xl) + 3 * var(--spacing-gutter-xl));
  }

  .h-5row {
    height: calc(5 * var(--layout-row-height-xl) + 4 * var(--spacing-gutter-xl));
  }

  .h-6row {
    height: calc(6 * var(--layout-row-height-xl) + 5 * var(--spacing-gutter-xl));
  }

  .h-7row {
    height: calc(7 * var(--layout-row-height-xl) + 6 * var(--spacing-gutter-xl));
  }

  .h-8row {
    height: calc(8 * var(--layout-row-height-xl) + 7 * var(--spacing-gutter-xl));
  }

  .max-h-element {
    max-height: var(--element-max-h-xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  .text-d1 {
    font-size: var(--text-d1-size) !important;
    line-height: var(--text-d1-lh) !important;
  }

  .text-d2 {
    font-size: var(--text-d2-size) !important;
    line-height: var(--text-d2-lh) !important;
  }

  .text-d3 {
    font-size: var(--text-d3-size) !important;
    line-height: var(--text-d3-lh) !important;
  }

  .text-i1 {
    font-size: var(--text-i1-size) !important;
    line-height: var(--text-i1-lh) !important;
  }

  h1 {
    font-size: var(--text-h1-size);
    line-height: var(--text-h1-lh);
  }

  header nav a.nav, header nav a:link.nav, header nav a:visited {
    font-size: var(--text-nav-size);
    line-height: var(--text-nav-lh);
  }

  footer nav a.nav, footer nav a:link.nav, footer nav a:visited {
    font-size: var(--text-nav-size);
    line-height: var(--text-p1-lh);
  }
}

/* --------------------------------------------------------------------	*/

/* /DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* !SECTION XL (1440px+) Screens										*/

/* --------------------------------------------------------------------	*/

/* --------------------------------------------------------------------	*/

/* SECTION 2XL (1600px+) Screens										*/

/* DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* --------------------------------------------------------------------	*/

@media (min-width:1600px) {
  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  header {
    padding-left: var(--spacing-shoulder-2xl);
    padding-right: var(--spacing-shoulder-2xl);
    padding-top: var(--pad-header-2xl);
    padding-bottom: var(--pad-header-2xl);
  }

  .header-base {
    padding-left: 0px;
    padding-right: 0px;
    padding-top: 0px;
    padding-bottom: 0px;
  }

  .header-grid nav {
    grid-template-columns: repeat(var(--layout-cols-2xl), minmax(0, 1fr));
    -moz-column-gap: var(--spacing-gutter-2xl);
         column-gap: var(--spacing-gutter-2xl);
  }

  .header-flex nav {
    -moz-column-gap: var(--spacing-gutter-2xl);
         column-gap: var(--spacing-gutter-2xl);
  }

  footer {
    padding-left: var(--spacing-shoulder-2xl);
    padding-right: var(--spacing-shoulder-2xl);
    padding-top: var(--pad-section-2xl);
    padding-bottom: var(--pad-section-2xl);
  }

  .footer-base {
    padding-left: 0px;
    padding-right: 0px;
    padding-top: 0px;
    padding-bottom: 0px;
  }

  .footer-grid {
    grid-template-columns: repeat(var(--layout-cols-2xl), minmax(0, 1fr));
    gap: var(--spacing-gutter-2xl);
  }

  .footer-flex nav {
    gap: var(--spacing-gutter-2xl);
  }

  section {
    padding-left: var(--spacing-shoulder-2xl);
    padding-right: var(--spacing-shoulder-2xl);
    padding-top: var(--pad-section-2xl);
    padding-bottom: var(--pad-section-2xl);
  }

  .section-grid, .centerframe-grid, .grid-base, main.main-grid {
    grid-template-columns: repeat(var(--layout-cols-2xl), minmax(0, 1fr));
    gap: var(--spacing-gutter-2xl);
  }

  .grid-cols {
    grid-template-columns: repeat(var(--layout-cols-2xl), minmax(0, 1fr));
  }

  .section-flex, .centerframe-flex, .flex-base, main.main-flex, .grid-auto {
    gap: var(--spacing-gutter-2xl);
  }

  .mt-gutter {
    margin-top: var(--spacing-gutter-2xl);
  }

  .mb-gutter {
    margin-bottom: var(--spacing-gutter-2xl);
  }

  .ml-gutter {
    margin-left: var(--spacing-gutter-2xl);
  }

  .mr-gutter {
    margin-right: var(--spacing-gutter-2xl);
  }

  .pt-gutter {
    padding-top: var(--spacing-gutter-2xl);
  }

  .pb-gutter {
    padding-bottom: var(--spacing-gutter-2xl);
  }

  .pl-gutter {
    padding-left: var(--spacing-gutter-2xl);
  }

  .pr-gutter {
    padding-right: var(--spacing-gutter-2xl);
  }

  .mt-article {
    margin-top: var(--pad-article-2xl);
  }

  .mb-article {
    margin-bottom: var(--pad-article-2xl);
  }

  .ml-article {
    margin-left: var(--pad-article-2xl);
  }

  .mr-article {
    margin-right: var(--pad-article-2xl);
  }

  .gap-form {
    gap: var(--gap-form-2xl);
  }

  .gap-gutter {
    gap: var(--spacing-gutter-2xl);
  }

  .gap-gutterx {
    gap: calc(var(--spacing-gutter-2xl) + var(--layout-unit));
  }

  .gap-x-gutterx {
    -moz-column-gap: calc(var(--spacing-gutter-2xl) + var(--layout-unit));
         column-gap: calc(var(--spacing-gutter-2xl) + var(--layout-unit));
  }

  .gap-y-gutterx {
    row-gap: calc(var(--spacing-gutter-2xl) + var(--layout-unit));
  }

  .gap-gutterxx {
    gap: calc(var(--spacing-gutter-2xl) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-x-gutterxx {
    -moz-column-gap: calc(var(--spacing-gutter-2xl) + var(--layout-unit) + var(--layout-unit));
         column-gap: calc(var(--spacing-gutter-2xl) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-y-gutterxx {
    row-gap: calc(var(--spacing-gutter-2xl) + var(--layout-unit) + var(--layout-unit));
  }

  .gap-section {
    gap: var(--gap-section-2xl);
  }

  .gap-article {
    gap: var(--gap-article-2xl);
  }

  .gap-block {
    gap: var(--spacing-block-2xl);
  }

  .gap-card {
    gap: var(--spacing-card-2xl);
  }

  .gap-sub {
    gap: var(--spacing-sub-2xl);
  }

  .gap-stack {
    gap: var(--gap-stack-2xl);
  }

  .gap-y-stack {
    row-gap: var(--gap-stack-2xl);
  }

  .gap-x-stack {
    -moz-column-gap: var(--gap-stack-2xl);
         column-gap: var(--gap-stack-2xl);
  }

  .space-y-card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-2xl) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-2xl) * var(--tw-space-y-reverse));
  }

  .space-x-card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(var(--spacing-card-2xl) * var(--tw-space-x-reverse));
    margin-left: calc(var(--spacing-card-2xl) * calc(1 - var(--tw-space-x-reverse)));
  }

  .section-grid.gap-2gutter, .centerframe-grid.gap-2gutter, .grid-base.gap-2gutter, .section-flex.gap-2gutter, .centerframe-flex.gap-2gutter, .flex-base.gap-2gutter, main.main-flex.gap-2gutter {
    gap: calc(2 * var(--spacing-gutter-2xl));
  }

  .gap-2gutter {
    gap: calc(2 * var(--spacing-gutter-2xl));
  }

  .gap-x-gutter {
    -moz-column-gap: var(--spacing-gutter-2xl);
         column-gap: var(--spacing-gutter-2xl);
  }

  .gap-y-gutter {
    row-gap: var(--spacing-gutter-2xl);
  }

  .gap-x-2gutter {
    -moz-column-gap: calc(2 * var(--spacing-gutter-2xl));
         column-gap: calc(2 * var(--spacing-gutter-2xl));
  }

  .gap-y-2gutter {
    row-gap: calc(2 * var(--spacing-gutter-2xl));
  }

  .section-grid .block-xs, .centerframe-grid .block-xs, .grid-base .block-xs, main.main-grid .block-xs {
    grid-column: span var(--layout-cols-2xl-min) / span var(--layout-cols-2xl-min);
  }

  .section-grid .block-sm, .centerframe-grid .block-sm, .grid-base .block-sm, main.main-grid .block-sm {
    grid-column: span var(--layout-cols-2xl-sixth) / span var(--layout-cols-2xl-sixth);
  }

  .section-grid .block-smx, .centerframe-grid .block-smx, .grid-base .block-smx, main.main-grid .block-smx {
    grid-column: span var(--layout-cols-2xl-quarter) / span var(--layout-cols-2xl-quarter);
  }

  .section-grid .block-md, .centerframe-grid .block-md, .grid-base .block-md, main.main-grid .block-md {
    grid-column: span var(--layout-cols-2xl-third) / span var(--layout-cols-2xl-third);
  }

  .section-grid .block-mdx, .centerframe-grid .block-mdx, .grid-base .block-mdx, main.main-grid .block-mdx {
    grid-column: span var(--layout-cols-2xl-fivetwelfth) / span var(--layout-cols-2xl-fivetwelfth);
  }

  .section-grid .block-lg, .centerframe-grid .block-lg, .grid-base .block-lg, main.main-grid .block-lg {
    grid-column: span var(--layout-cols-2xl-half) / span var(--layout-cols-2xl-half);
  }

  .section-grid .block-lgx, .centerframe-grid .block-lgx, .grid-base .block-lgx, main.main-grid .block-lgx {
    grid-column: span var(--layout-cols-2xl-seventwelfth) / span var(--layout-cols-2xl-seventwelfth);
  }

  .section-grid .block-xl, .centerframe-grid .block-xl, .grid-base .block-xl, main.main-grid .block-xl {
    grid-column: span var(--layout-cols-2xl-twothird) / span var(--layout-cols-2xl-twothird);
  }

  .section-grid .block-xlx, .centerframe-grid .block-xlx, .grid-base .block-xlx, main.main-grid .block-xlx {
    grid-column: span var(--layout-cols-2xl-threefourth) / span var(--layout-cols-2xl-threefourth);
  }

  .section-grid .block-2xl, .centerframe-grid .block-2xl, .grid-base .block-2xl, main.main-grid .block-2xl {
    grid-column: span var(--layout-cols-2xl-fivesixth) / span var(--layout-cols-2xl-fivesixth);
  }

  .section-grid .block-2xlx, .centerframe-grid .block-2xlx, .grid-base .block-2xlx, main.main-grid .block-2xlx {
    grid-column: span var(--layout-cols-2xl-eleventwelfth) / span var(--layout-cols-2xl-eleventwelfth);
  }

  .section-grid .block-full, .centerframe-grid .block-full, .grid-base .block-full, main.main-grid .block-full {
    grid-column: 1 / -1;
  }

  .section-flex .block-xs, .centerframe-flex .block-xs, .flex-base .block-xs, main.main-flex .block-xs {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(8.333333% - var(--spacing-gutter-2xl));
  }

  .section-flex .block-sm, .centerframe-flex .block-sm, .flex-base .block-sm, main.main-flex .block-sm {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(16.666666% - var(--spacing-gutter-2xl));
  }

  .section-flex .block-smx, .centerframe-flex .block-smx, .flex-base .block-smx, main.main-flex .block-smx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(25% - var(--spacing-gutter-2xl));
  }

  .section-flex .block-md, .centerframe-flex .block-md, .flex-base .block-md, main.main-flex .block-md {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(33.333333% - var(--spacing-gutter-2xl));
  }

  .section-flex .block-mdx, .centerframe-flex .block-mdx, .flex-base .block-mdx, main.main-flex .block-mdx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(41.666666% - var(--spacing-gutter-2xl));
  }

  .section-flex .block-lg, .centerframe-flex .block-lg, .flex-base .block-lg, main.main-flex .block-lg {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(50% - var(--spacing-gutter-2xl));
  }

  .section-flex .block-lgx, .centerframe-flex .block-lgx, .flex-base .block-lgx, main.main-flex .block-lgx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(58.333333% - var(--spacing-gutter-2xl));
  }

  .section-flex .block-xl, .centerframe-flex .block-xl, .flex-base .block-xl, main.main-flex .block-xl {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(66.666666% - var(--spacing-gutter-2xl));
  }

  .section-flex .block-xlx, .centerframe-flex .block-xlx, .flex-base .block-xlx, main.main-flex .block-xlx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(75% - var(--spacing-gutter-2xl));
  }

  .section-flex .block-2xl, .centerframe-flex .block-2xl, .flex-base .block-2xl, main.main-flex .block-2xl {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(83.333333% - var(--spacing-gutter-2xl));
  }

  .section-flex .block-2xlx, .centerframe-flex .block-2xlx, .flex-base .block-2xlx, main.main-flex .block-2xlx {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(91.666666% - var(--spacing-gutter-2xl));
  }

  .section-flex .block-full, .centerframe-flex .block-full, .flex-base .block-full, main.main-flex .block-full {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: 100%;
  }

  .rounded-card {
    border-radius: var(--rounded-article-2xl);
  }

  .rounded-t-card {
    border-top-left-radius: var(--rounded-article-2xl);
    border-top-right-radius: var(--rounded-article-2xl);
  }

  .rounded-b-card {
    border-bottom-right-radius: var(--rounded-article-2xl);
    border-bottom-left-radius: var(--rounded-article-2xl);
  }

  .rounded-l-card {
    border-top-left-radius: var(--rounded-article-2xl);
    border-bottom-left-radius: var(--rounded-article-2xl);
  }

  .rounded-r-card {
    border-top-right-radius: var(--rounded-article-2xl);
    border-bottom-right-radius: var(--rounded-article-2xl);
  }

  .card {
    border-radius: var(--rounded-article-2xl);
    padding: var(--pad-article-2xl);
  }

  .card-base {
    border-radius: var(--rounded-article-2xl);
  }

  .block-base > :not([hidden]) ~ :not([hidden]), .block-xs > :not([hidden]) ~ :not([hidden]), .block-sm > :not([hidden]) ~ :not([hidden]), .block-smx > :not([hidden]) ~ :not([hidden]), .block-md > :not([hidden]) ~ :not([hidden]), .block-mdx > :not([hidden]) ~ :not([hidden]), .block-lg > :not([hidden]) ~ :not([hidden]), .block-lgx > :not([hidden]) ~ :not([hidden]), .block-xl > :not([hidden]) ~ :not([hidden]), .block-xlx > :not([hidden]) ~ :not([hidden]), .block-2xl > :not([hidden]) ~ :not([hidden]), .block-2xlx > :not([hidden]) ~ :not([hidden]), .block-full > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-block-2xl) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-block-2xl) * var(--tw-space-y-reverse));
  }

  .block-base.card > :not([hidden]) ~ :not([hidden]), .block-xs.card > :not([hidden]) ~ :not([hidden]), .block-sm.card > :not([hidden]) ~ :not([hidden]), .block-smx.card > :not([hidden]) ~ :not([hidden]), .block-md.card > :not([hidden]) ~ :not([hidden]), .block-mdx.card > :not([hidden]) ~ :not([hidden]), .block-lg.card > :not([hidden]) ~ :not([hidden]), .block-lgx.card > :not([hidden]) ~ :not([hidden]), .block-xl.card > :not([hidden]) ~ :not([hidden]), .block-xlx.card > :not([hidden]) ~ :not([hidden]), .block-2xl.card > :not([hidden]) ~ :not([hidden]), .block-2xlx.card > :not([hidden]) ~ :not([hidden]), .block-full.card > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-2xl) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-2xl) * var(--tw-space-y-reverse));
  }

  .stack-y > :not([hidden]) ~ :not([hidden]), .block-base.stack-y > :not([hidden]) ~ :not([hidden]), .block-xs.stack-y > :not([hidden]) ~ :not([hidden]), .block-sm.stack-y > :not([hidden]) ~ :not([hidden]), .block-smx.stack-y > :not([hidden]) ~ :not([hidden]), .block-md.stack-y > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-y > :not([hidden]) ~ :not([hidden]), .block-lg.stack-y > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-y > :not([hidden]) ~ :not([hidden]), .block-xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-y > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-y > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(var(--spacing-card-2xl) * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(var(--spacing-card-2xl) * var(--tw-space-y-reverse));
  }

  .stack-x > :not([hidden]) ~ :not([hidden]), .block-base.stack-x > :not([hidden]) ~ :not([hidden]), .block-xs.stack-x > :not([hidden]) ~ :not([hidden]), .block-sm.stack-x > :not([hidden]) ~ :not([hidden]), .block-smx.stack-x > :not([hidden]) ~ :not([hidden]), .block-md.stack-x > :not([hidden]) ~ :not([hidden]), .block-mdx.stack-x > :not([hidden]) ~ :not([hidden]), .block-lg.stack-x > :not([hidden]) ~ :not([hidden]), .block-lgx.stack-x > :not([hidden]) ~ :not([hidden]), .block-xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xl.stack-x > :not([hidden]) ~ :not([hidden]), .block-2xlx.stack-x > :not([hidden]) ~ :not([hidden]), .block-full.stack > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(var(--spacing-card-2xl) * var(--tw-space-x-reverse));
    margin-left: calc(var(--spacing-card-2xl) * calc(1 - var(--tw-space-x-reverse)));
  }

  .datarow, .formrow, .controlrow {
    gap: var(--gap-stack-2xl);
  }

  .card .datarow, .card-base .datarow,
		.card .formrow, .card-base .formrow {
    gap: var(--spacing-card-2xl);
  }

  .stack-row {
    display: flex;
    flex-direction: row;
    -moz-column-gap: var(--gap-stack-2xl);
         column-gap: var(--gap-stack-2xl);
  }

  .stack-row-wrap {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    -moz-column-gap: var(--gap-stack-2xl);
         column-gap: var(--gap-stack-2xl);
    row-gap: var(--gap-stack-2xl);
  }

  .stack-col, .stack {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-2xl);
  }

  .stack-form-col {
    display: flex;
    flex-direction: column;
    gap: var(--gap-form-2xl);
  }

  .card .stack-row, .card-base .stack-row {
    display: flex;
    flex-direction: row;
    -moz-column-gap: var(--spacing-card-2xl);
         column-gap: var(--spacing-card-2xl);
  }

  .card .stack-row-wrap, .card-base .stack-row-wrap {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    -moz-column-gap: var(--spacing-card-2xl);
         column-gap: var(--spacing-card-2xl);
    row-gap: var(--gap-stack-2xl);
  }

  .card .stack-col, .card-base .stack-col, .card .stack, .card-base .stack {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-2xl);
  }

  .pl-half-gutter {
    padding-left: calc(var(--spacing-gutter-2xl) / 2);
  }

  .pr-half-gutter {
    padding-right: calc(var(--spacing-gutter-2xl) / 2);
  }

  .ml-half-gutter {
    margin-left: calc(var(--spacing-gutter-2xl) / 2);
  }

  .mr-half-gutter {
    margin-right: calc(var(--spacing-gutter-2xl) / 2);
  }

  .max-w-half-breakpoint-less-gutter {
    max-width: calc((var(--screen-2xl) / 2) - var(--spacing-gutter-2xl));
  }

  .max-w-half-breakpoint {
    max-width: calc(var(--screen-2xl) / 2);
  }

  .max-w-breakpoint {
    max-width: 1600px;
  }

  .pr-col {
    padding-right: var(--layout-col-width-2xl);
  }

  .pl-col {
    padding-left: var(--layout-col-width-2xl);
  }

  .p-header-safeview {
    padding-top: max(var(--pad-header-2xl), env(safe-area-inset-top));
    padding-left: max(var(--spacing-shoulder-2xl), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-2xl), env(safe-area-inset-right));
    padding-bottom: var(--pad-header-2xl);
  }

  .p-section-safeview {
    padding-top: max(var(--pad-section-2xl), env(safe-area-inset-top));
    padding-left: max(var(--spacing-shoulder-2xl), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-2xl), env(safe-area-inset-right));
    padding-bottom: max(var(--pad-section-2xl), env(safe-area-inset-bottom));
  }

  .pt-section-safeview {
    padding-top: max(var(--pad-section-2xl), env(safe-area-inset-top));
  }

  .pb-section-safeview {
    padding-bottom: max(var(--pad-section-2xl), env(safe-area-inset-bottom));
  }

  .pl-section-safeview {
    padding-left: max(var(--spacing-shoulder-2xl), env(safe-area-inset-left));
  }

  .pr-section-safeview {
    padding-right: max(var(--spacing-shoulder-2xl), env(safe-area-inset-right));
  }

  .px-section-safeview {
    padding-left: max(var(--spacing-shoulder-2xl), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-2xl), env(safe-area-inset-right));
  }

  .py-section-safeview {
    padding-top: max(var(--pad-section-2xl), env(safe-area-inset-top));
    padding-bottom: max(var(--pad-section-2xl), env(safe-area-inset-bottom));
  }

  .p-footer-safeview {
    padding-top: var(--pad-section-2xl);
    padding-left: max(var(--spacing-shoulder-2xl), env(safe-area-inset-left));
    padding-right: max(var(--spacing-shoulder-2xl), env(safe-area-inset-right));
    padding-bottom: max(var(--pad-section-2xl), env(safe-area-inset-bottom));
  }

  .m-header-safeview {
    margin-top: max(var(--pad-header-2xl), env(safe-area-inset-top));
    margin-left: max(var(--spacing-shoulder-2xl), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-2xl), env(safe-area-inset-right));
    margin-bottom: var(--pad-header-2xl);
  }

  .m-section-safeview {
    margin-top: max(var(--pad-section-2xl), env(safe-area-inset-top));
    margin-left: max(var(--spacing-shoulder-2xl), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-2xl), env(safe-area-inset-right));
    margin-bottom: max(var(--pad-section-2xl), env(safe-area-inset-bottom));
  }

  .ml-section-safeview {
    margin-left: max(var(--spacing-shoulder-2xl), env(safe-area-inset-left));
  }

  .mr-section-safeview {
    margin-right: max(var(--spacing-shoulder-2xl), env(safe-area-inset-right));
  }

  .mt-section-safeview {
    margin-top: max(var(--pad-section-2xl), env(safe-area-inset-top));
  }

  .mb-section-safeview {
    margin-bottom: max(var(--pad-section-2xl), env(safe-area-inset-bottom));
  }

  .mx-section-safeview {
    margin-left: max(var(--spacing-shoulder-2xl), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-2xl), env(safe-area-inset-right));
  }

  .my-section-safeview {
    margin-top: max(var(--pad-section-2xl), env(safe-area-inset-top));
    margin-bottom: max(var(--pad-section-2xl), env(safe-area-inset-bottom));
  }

  .m-footer-safeview {
    margin-top: var(--pad-section-2xl);
    margin-left: max(var(--spacing-shoulder-2xl), env(safe-area-inset-left));
    margin-right: max(var(--spacing-shoulder-2xl), env(safe-area-inset-right));
    margin-bottom: max(var(--pad-section-2xl), env(safe-area-inset-bottom));
  }

  .p-header {
    padding-left: var(--spacing-shoulder-2xl);
    padding-right: var(--spacing-shoulder-2xl);
    padding-top: var(--pad-header-2xl);
    padding-bottom: var(--pad-header-2xl);
  }

  .p-footer {
    padding-left: var(--spacing-shoulder-2xl);
    padding-right: var(--spacing-shoulder-2xl);
    padding-top: var(--pad-section-2xl);
    padding-bottom: var(--pad-section-2xl);
  }

  .px-header {
    padding-left: var(--spacing-shoulder-2xl);
    padding-right: var(--spacing-shoulder-2xl);
  }

  .py-header {
    padding-top: var(--pad-header-2xl);
    padding-bottom: var(--pad-header-2xl);
  }

  .p-shoulder {
    padding: var(--spacing-shoulder-2xl);
  }

  .px-shoulder {
    padding-left: var(--spacing-shoulder-2xl);
    padding-right: var(--spacing-shoulder-2xl);
  }

  .pl-shoulder {
    padding-left: var(--spacing-shoulder-2xl);
  }

  .pr-shoulder {
    padding-right: var(--spacing-shoulder-2xl);
  }

  .p-section {
    padding: var(--pad-section-2xl);
  }

  .px-section {
    padding-left: var(--pad-section-2xl);
    padding-right: var(--pad-section-2xl);
  }

  .py-section {
    padding-top: var(--pad-section-2xl);
    padding-bottom: var(--pad-section-2xl);
  }

  .pt-section {
    padding-top: var(--pad-section-2xl);
  }

  .pb-section {
    padding-bottom: var(--pad-section-2xl);
  }

  .pl-section {
    padding-left: var(--pad-section-2xl);
  }

  .pr-section {
    padding-right: var(--pad-section-2xl);
  }

  .p-article {
    padding: var(--pad-article-2xl);
  }

  .px-article {
    padding-left: var(--pad-article-2xl);
    padding-right: var(--pad-article-2xl);
  }

  .py-article {
    padding-top: var(--pad-article-2xl);
    padding-bottom: var(--pad-article-2xl);
  }

  .p-block {
    padding: var(--spacing-block-2xl);
  }

  .px-block {
    padding-left: var(--spacing-block-2xl);
    padding-right: var(--spacing-block-2xl);
  }

  .py-block {
    padding-top: var(--spacing-block-2xl);
    padding-bottom: var(--spacing-block-2xl);
  }

  .p-card {
    padding: var(--spacing-card-2xl);
  }

  .px-card {
    padding-left: var(--spacing-card-2xl);
    padding-right: var(--spacing-card-2xl);
  }

  .py-card {
    padding-top: var(--spacing-card-2xl);
    padding-bottom: var(--spacing-card-2xl);
  }

  .p-element {
    padding: var(--pad-element-2xl);
  }

  .px-element {
    padding-left: var(--pad-element-2xl);
    padding-right: var(--pad-element-2xl);
  }

  .py-element {
    padding-top: var(--pad-element-2xl);
    padding-bottom: var(--pad-element-2xl);
  }

  .pl-element {
    padding-left: var(--pad-element-2xl);
  }

  .pr-element {
    padding-right: var(--pad-element-2xl);
  }

  .pt-element {
    padding-top: var(--pad-element-2xl);
  }

  .pb-element {
    padding-bottom: var(--pad-element-2xl);
  }

  .p-sub {
    padding: var(--spacing-sub-2xl);
  }

  .pt-sub {
    padding-top: var(--spacing-sub-2xl);
  }

  .pb-sub {
    padding-bottom: var(--spacing-sub-2xl);
  }

  .pl-sub {
    padding-left: var(--spacing-sub-2xl);
  }

  .pr-sub {
    padding-right: var(--spacing-sub-2xl);
  }

  .px-sub {
    padding-left: var(--spacing-sub-2xl);
    padding-right: var(--spacing-sub-2xl);
  }

  .py-sub {
    padding-top: var(--spacing-sub-2xl);
    padding-bottom: var(--spacing-sub-2xl);
  }

  .p-base {
    padding: var(--pad-base-2xl);
  }

  .px-base {
    padding-left: var(--pad-base-2xl);
    padding-right: var(--pad-base-2xl);
  }

  .py-base {
    padding-top: var(--pad-base-2xl);
    padding-bottom: var(--pad-base-2xl);
  }

  .h-1row {
    height: var(--layout-row-height-2xl);
  }

  .h-2row {
    height: calc(2 * var(--layout-row-height-2xl) + var(--spacing-gutter-2xl));
  }

  .h-3row {
    height: calc(3 * var(--layout-row-height-2xl) + 2 * var(--spacing-gutter-2xl));
  }

  .h-4row {
    height: calc(4 * var(--layout-row-height-2xl) + 3 * var(--spacing-gutter-2xl));
  }

  .h-5row {
    height: calc(5 * var(--layout-row-height-2xl) + 4 * var(--spacing-gutter-2xl));
  }

  .h-6row {
    height: calc(6 * var(--layout-row-height-2xl) + 5 * var(--spacing-gutter-2xl));
  }

  .h-7row {
    height: calc(7 * var(--layout-row-height-2xl) + 6 * var(--spacing-gutter-2xl));
  }

  .h-8row {
    height: calc(8 * var(--layout-row-height-2xl) + 7 * var(--spacing-gutter-2xl));
  }

  .max-h-element {
    max-height: var(--element-max-h-2xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  .text-d1 {
    font-size: var(--text-d1-size) !important;
    line-height: var(--text-d1-lh) !important;
  }

  .text-d2 {
    font-size: var(--text-d2-size) !important;
    line-height: var(--text-d2-lh) !important;
  }

  .text-d3 {
    font-size: var(--text-d3-size) !important;
    line-height: var(--text-d3-lh) !important;
  }

  .text-i1 {
    font-size: var(--text-i1-size) !important;
    line-height: var(--text-i1-lh) !important;
  }

  h1 {
    font-size: var(--text-h1-size);
    line-height: var(--text-h1-lh);
  }

  header nav a.nav, header nav a:link.nav, header nav a:visited {
    font-size: var(--text-nav-size);
    line-height: var(--text-nav-lh);
  }

  footer nav a.nav, footer nav a:link.nav, footer nav a:visited {
    font-size: var(--text-nav-size);
    line-height: var(--text-p1-lh);
  }
}

/* --------------------------------------------------------------------	*/

/* /DESIGNFRAME ADAPTIVE - Do not edit section 							*/

/* !SECTION 2XL (1600px+) Screens										*/

/* --------------------------------------------------------------------	*/

/* -------------------------------- */

/* === Chunk 4 SHRINK proof: Premium overlay-pane (Cluster B) === */

/*     Moved from Components Structure ANCHOR Overlay Pane (Premium).             */

/*     Per /prospect SHRINK on Step #4a; full Chunk 4 expands to remaining dfp.   */

/* ---------------------------- */

/* ANCHOR Overlay Pane (Premium) */

/* ---------------------------- */

/* Full overlay component with state machine. Adds docked state (lg+ only, via body.layout-split integration), 4-position cycle (L→R→T→B clockwise on lg+; T↔B on mobile), dock toggle, and resize-when-docked drag handle. Base appearance + position rules inherited via :where mixin in the Free .overlay-pane section above.
	   Spec: docs/superpowers/specs/2026-05-20-dfp-overlay-pane.md
	   Sibling B: df-pro.js infrastructure required for state-machine wiring. */

/* Docked state — overrides floating-overlay properties; joins body.layout-split aside slot. */

.dfp-overlay-pane.docked.left {
  order: 0;
  left: auto;
  top: auto;
  bottom: auto;
  right: auto;
  border-right: 1px solid rgba(0, 0, 0, 0.08);
}

.dfp-overlay-pane.docked.right {
  order: 1;
  left: auto;
  top: auto;
  bottom: auto;
  right: auto;
  border-left: 1px solid rgba(0, 0, 0, 0.08);
}

/* When docked, the body sibling (typically <section>) takes the remaining flex space. The body.layout-split contract already handles this — these rules are documentary. */

/* Controls strip — sits in .overlay-pane-header alongside .overlay-pane-title. */

.dfp-overlay-pane .controls {
  display: flex;
  gap: var(--spacing-sub-base);
  align-items: center;
}

.dfp-overlay-pane .cycle,
	.dfp-overlay-pane .dock {
  background: transparent;
  border: 1px solid rgba(0, 0, 0, 0.08);
  border-radius: var(--rounded-pill, 999px);
  padding: 6px 8px;
  cursor: pointer;
  color: var(--color-secondary);
  transition: background var(--qs-duration-fast) var(--qs-ease-standard), color var(--qs-duration-fast) var(--qs-ease-standard);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.dfp-overlay-pane .cycle:hover,
	.dfp-overlay-pane .dock:hover {
  background: rgba(0, 0, 0, 0.04);
  color: var(--color-primary);
}

.dfp-overlay-pane .cycle:focus-visible,
	.dfp-overlay-pane .dock:focus-visible {
  outline: 2px solid var(--color-key);
  outline-offset: 2px;
}

/* State-aware dock-button visual — solid icon when docked (action: undock), outlined when overlay (action: dock to side). */

/* Mobile (v0.99.52+) — default model flipped to edge-to-edge full-width with token-driven
	   margins, optimized for chat-pane / reading-width / form-input consumers where horizontal
	   real estate matters. .left and .right overlay positions force-fallback to bottom-edge full-
	   width (L/R overlay doesn't fit on mobile). Mobile .top + .bottom get explicit rules (no
	   longer inherit desktop centered popover behavior). The .dock button is hidden entirely.

	   Bottom values use the same `var(--df-overlay-pane-bottom-offset) + env(safe-area-inset-bottom)
	   + var(--keyboard-offset)` shape as the non-docked position rules above (tokenized v0.99.51),
	   so consumer iOS-keyboard awareness applies symmetrically to docked-fallback + L/R-fallback
	   states on mobile, AND consumers can override the offset tokens via :root cascade for both
	   desktop + mobile states uniformly.

	   Opt-in: add `.compact` to any .dfp-overlay-pane variant to restore the pre-v0.99.52 centered
	   popover model (min(60vw, 480px) with translateX(-50%)). Use for marketing prompts, action
	   confirmations, or any compact overlay that doesn't benefit from full-width. */

@media (max-width: 1023px) {
  .dfp-overlay-pane.docked {
    /* Effectively deactivate docked mode on mobile by reverting to overlay */
    position: fixed;
    background-color: var(--color-bg-overlay);
    backdrop-filter: blur(var(--color-blur-amount));
    -webkit-backdrop-filter: blur(var(--color-blur-amount));
    box-shadow: var(--shadow-base);
    border-radius: var(--rounded-corner);
    left: var(--df-overlay-pane-left-offset);
    right: var(--df-overlay-pane-right-offset);
    width: auto;
    min-width: 0;
    max-width: none;
    height: var(--df-overlay-pane-tb-height);
    bottom: calc(var(--df-overlay-pane-bottom-offset) + env(safe-area-inset-bottom, 0px) + var(--keyboard-offset, 0px));
    transform: none;
    top: auto;
    border: none;
  }

  .dfp-overlay-pane.left,
		.dfp-overlay-pane.right {
    /* Force fallback to bottom-edge full-width on mobile — L/R overlay doesn't fit. */
    left: var(--df-overlay-pane-left-offset) !important;
    right: var(--df-overlay-pane-right-offset) !important;
    top: auto !important;
    bottom: calc(var(--df-overlay-pane-bottom-offset) + env(safe-area-inset-bottom, 0px) + var(--keyboard-offset, 0px)) !important;
    transform: none !important;
    width: auto !important;
    height: var(--df-overlay-pane-tb-height) !important;
  }

  .dfp-overlay-pane.top {
    /* Mobile .top — full-width edge-to-edge anchored to top edge. (Desktop .top stays centered
			   popover-style via the :where(.dfp-overlay-pane:not(.docked)).top rule above.) */
    top: var(--df-overlay-pane-top-offset) !important;
    bottom: auto !important;
    left: var(--df-overlay-pane-left-offset) !important;
    right: var(--df-overlay-pane-right-offset) !important;
    width: auto !important;
    transform: none !important;
  }

  .dfp-overlay-pane.bottom {
    /* Mobile .bottom — full-width edge-to-edge anchored to bottom edge. */
    bottom: calc(var(--df-overlay-pane-bottom-offset) + env(safe-area-inset-bottom, 0px) + var(--keyboard-offset, 0px)) !important;
    top: auto !important;
    left: var(--df-overlay-pane-left-offset) !important;
    right: var(--df-overlay-pane-right-offset) !important;
    width: auto !important;
    transform: none !important;
  }

  /* === .compact opt-in — restores pre-v0.99.52 centered popover model on mobile. =========== */

  /* Consumers wanting compact-popover behavior (e.g. marketing prompts, action confirmations) */

  /* add `.compact` to any .dfp-overlay-pane variant to win against the edge-to-edge defaults  */

  /* above via same-specificity-plus-cascade-order (these rules come later in the @media       */

  /* block). The opt-in restores the pre-v0.99.52 `min(60vw, 480px)` centered popover shape.   */

  .dfp-overlay-pane.docked.compact {
    left: 50%;
    right: auto;
    width: min(60vw, 480px);
    transform: translateX(-50%);
  }

  .dfp-overlay-pane.left.compact,
		.dfp-overlay-pane.right.compact,
		.dfp-overlay-pane.top.compact,
		.dfp-overlay-pane.bottom.compact {
    left: 50% !important;
    right: auto !important;
    width: min(60vw, 480px) !important;
    transform: translateX(-50%) !important;
  }

  .dfp-overlay-pane .dock {
    display: none;
  }
}

/* === Chunk 4 FULL: remaining Premium content from Components Structure === */

/*     Includes 17 Premium ANCHOR'd sections + 5 DFP-MOVE Pro halves from Chunk 1 splits. */

/* DFP-MOVE: relocate to pro section in Chunk 4. */

/* DFP-MOVE: relocate to pro section in Chunk 4. */

:where(.dfp-overlay-pane:not(.docked)).left {
  left: var(--df-overlay-pane-left-offset);
  top: var(--df-overlay-pane-top-offset);
  bottom: calc(var(--df-overlay-pane-bottom-offset) + env(safe-area-inset-bottom, 0px) + var(--keyboard-offset, 0px));
  width: var(--df-overlay-pane-side-width);
  height: auto;
}

/* DFP-MOVE: relocate to pro section in Chunk 4. */

:where(.dfp-overlay-pane:not(.docked)).right {
  right: var(--df-overlay-pane-right-offset);
  top: var(--df-overlay-pane-top-offset);
  bottom: calc(var(--df-overlay-pane-bottom-offset) + env(safe-area-inset-bottom, 0px) + var(--keyboard-offset, 0px));
  left: auto;
  width: var(--df-overlay-pane-side-width);
  height: auto;
}

/* DFP-MOVE: relocate to pro section in Chunk 4. */

:where(.dfp-overlay-pane:not(.docked)).top {
  top: var(--df-overlay-pane-top-offset);
  left: 50%;
  transform: translateX(-50%);
  width: min(60vw, 480px);
  height: var(--df-overlay-pane-tb-height);
  bottom: auto;
  right: auto;
}

/* DFP-MOVE: relocate to pro section in Chunk 4. */

:where(.dfp-overlay-pane:not(.docked)).bottom {
  bottom: calc(var(--df-overlay-pane-bottom-offset) + env(safe-area-inset-bottom, 0px) + var(--keyboard-offset, 0px));
  left: 50%;
  transform: translateX(-50%);
  width: min(60vw, 480px);
  height: var(--df-overlay-pane-tb-height);
  top: auto;
  right: auto;
}

/* ---------------------------- */

/* ANCHOR Hero (Premium)		*/

/* ---------------------------- */

/* Marketing hero section. Composes with .theme-* + .section-grid + .p-section
	   from the page-paradigm system. Provides positioning context for optional
	   .dfp-hero-decoration child chrome (Session 3).
	   Variants (Sessions 2-4): .split-screenshot, .split-image, .background,
	   .split-code, .split-image.phone-mockup.
	   Source: TW+ heroes/ + df-product.html template hero block.
	   Premium per G1 EC6 (composed marketing visual). S44 W2 Family 1 Session 1. */

/* .dfp-hero.split-screenshot — 2-column variant. Text + CTAs left,
	   .dfp-screenshot-frame right. Composer uses .section-grid + .block-lg
	   blocks for layout; this rule aligns blocks to top instead of stretching.
	   Covers TW+ heroes 02 + 03 (bordered via .dfp-screenshot-frame.bordered).
	   For TW+ 06 / 07 (centered text + screenshot below), use base .dfp-hero
	   with .dfp-screenshot-frame inside a .block-full. S45 W2 Family 1 Session 2. */

/* .dfp-hero.split-image — 2-column variant with photo (not screenshot frame)
	   right. Same layout shape as .split-screenshot (text/CTAs left, image
	   right; `items-start` top-aligns blocks). The differentiator is what goes
	   inside the right block: raw <img> directly vs .dfp-screenshot-frame wrapper.
	   Covers TW+ heroes 09 + 12. (Future v1.1: .angled / .tiled / .offset
	   sub-modifiers for TW+ 10 / 11 / 12 exotic positioning.)
	   S46 W2 Family 1 Session 3. */

/* .dfp-hero.split-image.phone-mockup — modifier composing onto .split-image.
	   Overrides items-start with items-center, since phone-frame imagery is
	   tall/narrow and benefits from vertical centering with the text column
	   instead of top-aligning. Composer wraps imagery in .dfp-phone-frame for
	   the phone-bezel chrome. Covers TW+ hero 08.
	   S47 W2 Family 1 Session 4. */

/* .dfp-hero.split-code — 2-column variant with .dfp-code-panel right.
	   Same items-start layout shape as .split-screenshot / .split-image.
	   Differentiator: consumer composes .dfp-code-panel (dark syntax-panel
	   primitive) in the right block instead of a screenshot frame or raw
	   img. Covers TW+ hero 04.
	   S47 W2 Family 1 Session 4. */

/* .dfp-hero.background — centered text on full-bleed background. Author
	   sets the background via inline `style="background-image: url(...)"` on
	   the section, OR composes via a <img> first-child positioned absolute.
	   `.dfp-hero` base already provides `relative isolate overflow-hidden`
	   positioning context. This variant adds `.text-invert` (white text for
	   contrast against image) + a soft darkening overlay via ::before.
	   Compose with `<div class="dfp-hero-decoration"></div>` child for the
	   blur-blob chrome. Covers TW+ hero 05. S46 W2 Family 1 Session 3. */

.dfp-hero.background {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
}

.dfp-hero.background::before {
  content: '';
  pointer-events: none;
  position: absolute;
  inset: 0px;
  z-index: 0;
  background: linear-gradient(to bottom, rgb(0 0 0 / 0.50), rgb(0 0 0 / 0.70));
}

.dfp-hero.background > * {
  position: relative;
  z-index: 1;
}

/* ---------------------------- */

/* ANCHOR Hero Decoration (Premium) */

/* ---------------------------- */

/* Pseudo-element decoration child for .dfp-hero. Single class injects two
	   chrome layers: ::before = CSS grid pattern (dual linear-gradient,
	   80px×80px, secondary-shader-light strokes, masked with radial-gradient
	   for top-right fade); ::after = blur clip-path blob using the brand
	   gradient (--qs-color-key → --qs-color-key-end at 18% opacity). H3=A
	   locked S44: single class, no inline SVG markup; chrome stays invisible
	   in markup. H4=A locked S44: reuse brand gradient tokens, auto-themes
	   per brand-config preset. Place as a direct child of .dfp-hero.
	   Source: TW+ heroes 02 lines 2-15 (SVG grid + blur blob composition).
	   S46 W2 Family 1 Session 3. */

/* ---------------------------- */

/* ANCHOR Screenshot Frame (Premium) */

/* ---------------------------- */

/* Image wrapper composing DF-tokened ring + shadow + radius. Use inside
	   .dfp-hero and other Premium families for a "designed screenshot" treatment.
	   Wraps <img> or <video>. .bordered modifier adds a heavier double-frame
	   for emphasis (TW+ 03 / 06 pattern).
	   Source: TW+ heroes 02 / 03 / 06 / 07. Premium per G1 EC6 (composed
	   visual treatment). S45 W2 Family 1 Session 2. */

.dfp-screenshot-frame.bordered {
  padding: var(--spacing-sub-base);
  background: rgb(var(--color-secondary) / var(--shader-light));
  box-shadow: none;
}

.dfp-screenshot-frame.bordered > img,
	.dfp-screenshot-frame.bordered > video {
  border-radius: var(--rounded-corner);
  --tw-shadow: var(--shadow-base);
  --tw-shadow-colored: var(--shadow-base);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  border: 1px solid rgb(var(--color-secondary) / var(--shader-light));
}

/* ---------------------------- */

/* ANCHOR Code Panel (Premium) */

/* ---------------------------- */

/* Dark syntax-panel wrapper for code examples in marketing/hero contexts.
	   Wraps a <pre><code> child (or any nested code content). Theme-aware:
	   `bg-primary` flips per .theme variant, so consumers on inverted themes
	   get inverted panels automatically. Sibling primitive to
	   .dfp-screenshot-frame — both wrap content as Premium "designed
	   containers" for marketing composition. Source: TW+ heroes 04 (code
	   panel core composition, minus the flanking skewed decorative shapes
	   which are .dfp-hero-decoration territory). Premium per G1 EC6
	   (composed visual treatment). S47 W2 Family 1 Session 4. */

/* ---------------------------- */

/* ANCHOR Phone Frame (Premium) */

/* ---------------------------- */

/* Phone-shaped image wrapper for product mockups. Wraps <img> or <video>
	   with CSS-box-as-bezel approximation of TW+ 08's inline-SVG phone frame
	   (viewBox 366×729 → aspect-ratio 366/729). Pure CSS approach uses
	   rounded-corner border-as-bezel + drop shadow + the same aspect ratio;
	   skips the SVG vector-path detail for DF's "pure CSS, no JS" philosophy.
	   Sibling primitive to .dfp-screenshot-frame — wraps imagery as Premium
	   "designed container". Often composed inside
	   .dfp-hero.split-image.phone-mockup but usable anywhere.
	   Source: TW+ heroes 08. Premium per G1 EC6 (composed visual treatment).
	   S47 W2 Family 1 Session 4. */

/* ---------------------------- */

/* ANCHOR Pricing Card (Premium) */

/* ---------------------------- */

/* Standalone pricing-tier card composing header (.tier-header containing
	   .tier-name + optional .badge.pill "Most popular") + .tier-description
	   + .tier-price (.price-amount + .price-period) + .tier-features (<ul>
	   with <i class="fa-light fa-check"> rows) + .tier-cta (a.button at
	   bottom via mt-auto). Designed for 2-4 cards in a grid; consumer uses
	   .block-md / .block-lg for grid width. .featured modifier emphasizes
	   the recommended tier (key-color border + drop shadow).
	   Source: TW+ pricing 01/02/04/06/07/08 (tier-card grid composition).
	   Reuses .badge.pill (S43 Free) for the "Most popular" label per H2=B
	   precedent. Future v1.1: .dfp-pricing-toggle (monthly/yearly switch
	   for TW+ 09/11) + .dfp-pricing-comparison (table for TW+ 03/12/14).
	   Premium per G1 EC6 (composed multi-element block).
	   S48 W2 Family 2 Session 1. */

.dfp-pricing-card.featured {
  --tw-shadow: var(--shadow-base);
  --tw-shadow-colored: var(--shadow-base);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  border: 2px solid rgb(var(--color-key));
}

/* ---------------------------- */

/* ANCHOR Feature Card (Premium) */

/* ---------------------------- */

/* Standalone feature-grid card composing .feature-icon (icon tile in
	   brand color) + h3/h4 heading + description paragraph + optional
	   .feature-link "Learn more" link. Designed for 3-col grids in marketing
	   feature sections; consumer uses .block-md / .block-lg for grid width.
	   Sub-elements unprefixed per Row 1 precedent (parent-bound).
	   Source: TW+ feature-sections 07 + 10 (simple-three-column-with-icons).
	   Premium per G1 EC6 (composed multi-element block).
	   S50 W2 Family 5 Session 1. */

/* ---------------------------- */

/* ANCHOR Product Card (Premium) */

/* ---------------------------- */

/* Standalone ecommerce product card composing .product-image (square
	   aspect img/div with cover fit) + .product-body (containing .product-
	   title + .product-price + optional .product-description + .product-cta).
	   Designed for 2-4 cards in a grid; consumer uses .block-md / .block-lg
	   for grid width. Sub-elements unprefixed per Row 1 precedent (parent-
	   bound). Future v1.1: variant selector (size/color pickers) + multi-
	   image gallery for TW+ product-overviews 02/03/04/05 — deferred per
	   "lock-on-need-not-prophet" lesson; Session 1 ships the simpler
	   product-display-card pattern from TW+ 01.
	   Source: TW+ ecommerce product-overviews 01 (simplest variant).
	   Premium per G1 EC6 (composed multi-element block).
	   S50 W2 Family 8 Session 1. */

/* ---------------------------- */

/* ANCHOR Stat Card (Premium)	*/

/* ---------------------------- */

/* Standalone metric card using semantic dl/dt/dd. Designed for row of 3-4 in a grid.
	   Sub-elements: dt (label), .stat-value, .stat-sub, .stat-trend (.up / .down).
	   Source: SS playground 03-cards, TW+ stats/03-simple-in-cards. */

.dfp-stat-card .stat-trend.up {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-success) / var(--tw-text-opacity, 1));
}

.dfp-stat-card .stat-trend.down {
  --tw-text-opacity: 1;
  color: rgb(var(--color-alert-error) / var(--tw-text-opacity, 1));
}

/* ---------------------------- */

/* ANCHOR Review Block (Premium)*/

/* ---------------------------- */

/* Form review/confirmation summary block using dl/dt/dd. Standalone — does not extend .card.
	   Sub-elements: .review-header (h6 + edit link), .review-body (dl).
	   Source: SS playground 03-cards. */

/* ---------------------------- */

/* ANCHOR Step Trail (Premium)	*/

/* ---------------------------- */

/* Horizontal + vertical progress indicator with circles + labels + connectors.
	   Adapted from TW+ navigation/progress-bars/05-circles (horizontal) + 07-circles-with-text (vertical).
	   Apply on <nav class="dfp-step-trail">; children: <ol role="list"><li>(.active/.done) > .step-num + .step-label + .step-connector.
	   Source: SS playground 02-indicators (S42 Bug 1 + Bug 1.5 fixes — geometry preserved verbatim). */

/* Reset ol list-style for any role="list" — covers TW+ refs + DF prototypes. */

ol[role="list"] {
  list-style: none;
  padding: 0;
  margin: 0;
}

/* Reset DF base ol space-y-base-unit (4px). The Tailwind space-y selector uses
	   :not([hidden]) which raises specificity. !important is the clean override —
	   this is a structural reset, not a style hack. */

/* Connector line — positioned at circle vertical center (15px = (32px - 2px)/2 with the 2px stroke). */

/* S42 Bug 1.5 — suppress phantom-line-before-step-1: position the connector's left edge
	   at the circle's right edge so only the outgoing-to-step-2 segment renders.
	   IMPORTANT: 50% in position:absolute references padding-box, not content-box. With
	   padding-right: 80px, content-box-center sits 40px LEFT of padding-box-center, so
	   circle-right-X = 50% - 40 + 16 = 50% - 24px. If the 80px padding-right ever changes,
	   the hardcoded 40px (= padding-right/2) must update. */

/* S42 Bug 1 — last step's connector reshaped to span from li-left to circle-left.
	   Fills the gap that opens when labels are wider than the circle (DF visible-label
	   adaptation; TW+ sr-only labels don't show the gap).
	   right = (50% from li-right) + circle-radius lands the right edge at circle-left
	   for any label width. Vertical override below re-asserts display: none. */

nav.dfp-step-trail ol > li.done .step-connector {
  background: rgb(var(--color-alert-success));
}

/* Step circle — uses --element-compact-size (32px). §13.8 typed-scale token. */

nav.dfp-step-trail ol > li.active .step-num {
  border-color: rgb(var(--color-key));
  background: rgb(var(--color-background));
}

nav.dfp-step-trail ol > li.done .step-num {
  border-color: rgb(var(--color-alert-success));
  background: rgb(var(--color-alert-success));
  color: rgb(var(--color-invert));
}

/* Step label below circle. */

nav.dfp-step-trail ol > li.active .step-label {
  color: rgb(var(--color-key));
  font-weight: 600;
}

nav.dfp-step-trail ol > li.done .step-label {
  color: rgb(var(--color-alert-success));
}

/* Vertical variant — circles stacked, labels alongside. */

nav.dfp-step-trail.vertical ol {
  flex-direction: column;
  align-items: flex-start;
}

nav.dfp-step-trail.vertical ol > li {
  flex-direction: row;
  align-items: flex-start;
  text-align: left;
  padding-right: 0;
  padding-bottom: 40px;
  gap: var(--pad-element-base);
}

nav.dfp-step-trail.vertical ol > li:last-child {
  padding-bottom: 0;
}

/* Vertical connector — from bottom of circle to next circle.
	   left: 15px + width: 2px are single-component connector geometry (D4 carve-out). */

nav.dfp-step-trail.vertical ol > li .step-connector {
  top: var(--element-compact-size);
  left: 15px;
  right: auto;
  width: 2px;
  height: calc(100% - var(--element-compact-size));
}

nav.dfp-step-trail.vertical ol > li:last-child .step-connector {
  display: none;
}

nav.dfp-step-trail.vertical .step-label {
  margin-top: 6px;
}

/* ---------------------------- */

/* ANCHOR Tool Panel (Premium)	*/

/* ---------------------------- */

/* Collapsible card for AI tools and settings panels.
	   Pattern: .panel-header + .panel-body + .panel-action footer.
	   Sub-elements: .panel-toggle, .panel-description, .option-row, .option-label,
	                 .panel-results, .result-item.
	   Collapse via .dfp-tool-panel.collapsed (state class) or :has(:checked) when wired with
	   a hidden checkbox.
	   Source: SS playground 07-panels. */

/* Collapsed state */

.dfp-tool-panel.collapsed .panel-body,
	.dfp-tool-panel.collapsed .panel-action {
  display: none;
}

.dfp-tool-panel.collapsed .panel-header {
  border-bottom: none;
}

.dfp-tool-panel.collapsed .panel-toggle {
  transform: rotate(-90deg);
}

/* ---------------------------- */

/* ANCHOR Preset Selector (Premium) */

/* ---------------------------- */

/* Card-style radio group: native input[type=radio] + label wrapping + :has(input:checked).
	   Structurally distinct from .form-radio-set (flat list) — card-based with title + description.
	   Sub-elements: .preset-option (label wrapper), .preset-body. */

/* ---------------------------- */

/* ANCHOR Context Panel (Premium) */

/* ---------------------------- */

/* Collapsible sidebar panel for expert/page context.
	   Pairs with the .dfp-tool-panel pattern — same collapse model, lighter visual treatment.
	   Sub-elements: .panel-header (h6 + .panel-toggle), .panel-body. Collapsed via .collapsed. */

.dfp-context-panel.collapsed .panel-body {
  display: none;
}

.dfp-context-panel.collapsed .panel-toggle {
  transform: rotate(-90deg);
}

/* ---------------------------- */

/* ANCHOR Audio Player (Premium) */

/* ---------------------------- */

/* Domain-specific media player for call recordings / audio content.
	   Structure: .dfp-audio-player > .ap-top (play + info + controls) + .ap-progress (bar or waveform).
	   §13.8 / D4 carve-out: progress bar (6px), scrubber thumb (12px), scrubber offsets (-3px/-6px),
	   timecode column (56px), time min-width (80px), waveform gap (2px), bar radius (1px) — all
	   single-component intrinsic geometry, no DF scale tokens.
	   Source: SS playground 06-media. */

.dfp-audio-player .ap-speed:hover,
	.dfp-audio-player .ap-speed.active {
  background: rgb(var(--color-key));
  color: rgb(var(--color-invert));
}

/* Progress bar */

/* Waveform variant */

.dfp-audio-player .ap-waveform .bar {
  background-color: rgb(var(--color-secondary) / var(--shader-light));
  flex: 1;
  border-radius: 1px;
  transition: background var(--qs-duration-fast) var(--qs-ease-standard);
}

.dfp-audio-player .ap-waveform .bar.played {
  background: rgb(var(--color-key));
}

/* ---------------------------- */

/* ANCHOR Transcript Entry (Premium) */

/* ---------------------------- */

/* Time-indexed transcript row for call/interview recordings. Distinct from
	   .chat-message / .chat-bubble (those are conversational; this is read-only document).
	   Uses DF .avatar.min for speaker avatars. Speaker variants: .moderator / .expert.
	   Source: SS playground 06-media. */

/* Speaker variants — recolor avatar + speaker label. */

.dfp-transcript-entry.moderator .avatar    {
  background: rgb(var(--color-tertiary));
}

.dfp-transcript-entry.expert .avatar       {
  background: rgb(var(--color-key));
}

.dfp-transcript-entry.expert .ts-speaker    {
  color: rgb(var(--color-key));
}

/* ---------------------------- */

/* ANCHOR Summary Section (Premium) */

/* ---------------------------- */

/* Collapsible Q&A summary for call recordings. Uses <blockquote> + <cite> for quote attribution.
	   Sub-elements: .summary-item, .summary-question (h5 + .summary-toggle), .summary-answer,
	                 blockquote.summary-quotes (with <cite>).
	   Collapsed state: .summary-item.collapsed hides answer + quotes; rotates toggle -90deg.
	   Source: SS playground 06-media. */

.summary-item.collapsed .summary-answer,
	.summary-item.collapsed blockquote.summary-quotes {
  display: none;
}

.summary-item.collapsed .summary-toggle {
  transform: rotate(-90deg);
}

/* CHIPS */

/* Base — combo .chip.gradient inherits inline-flex + text-chip + px-chip + font-bold via subset matching.
	   inline-flex required to properly contain span/p inner structure used by gradient variants
	   (mirrors .button base at L5624). Without it, block-level <p> children break inline anchor layout. */

.chip {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding-left: var(--pad-x-chip);
  padding-right: var(--pad-x-chip);
  font-size: var(--text-chip-size);
  line-height: var(--text-chip-lh);
  font-weight: 700;
}

/* === Chunk 4 cleanup: missed SS-prefixed ANCHORs with dfp content === */

/* ---------------------------- */

/* ANCHOR SS Invite Pattern		*/

/* ---------------------------- */

/* Modal-content composition for invite flows. Methods row + status table.
	   Source: SS playground 07-panels. */

.dfp-invite-method.active {
  border-color: rgb(var(--color-key));
}

/* Invite-action cell buttons inside .data-table cells. */

/* ---------------------------- */

/* ANCHOR SS Question Item		*/

/* ---------------------------- */

/* Editable question row: number badge + textarea + meta row (chips/badges) + controls.
	   §11.4 EXCEPTION: textarea is intentionally chromeless (ghost-textarea inside card).
	   Wrapping in .form-textarea would add DF chrome that has to be overridden back to
	   transparent — net-zero benefit. padding:0 + resize:none + fixed min-height eliminates
	   the §11.4 mystery-bottom-spacing case.
	   Variants: .ai-suggested (dashed key border + key-filled number badge). */

/* Category chip — extends DF .chip with per-category bg + text via CSS custom properties.
	   API: consumers set --chip-bg and --chip-color on their own .category-chip.{variant} rules. */

/* ---------------------------- */

/* ANCHOR Footer Frame (Premium) */

/* ---------------------------- */

/* Pro-tier mobile-fixed-footer behavior. Below sm breakpoint (<640px), the
	   wrapper element becomes fixed at the bottom of the viewport with
	   shadow-outer-light-t separator; on >=sm it goes back to relative position
	   in the normal flow. .dfp-footer-frame.hide animates the element off-screen
	   by translateY(100%) — used for scroll-driven footer auto-hide patterns.
	   Reduced-motion preferences disable the transitions.
	   Source: promoted from custom.css #footer-frame 2026-05-26 (ID-based form
	   renamed to class-based dfp- form for multi-instance + reusability,
	   parallel to .dfp-loading-overlay pattern). CS migration: 357 files
	   currently using id='footer-frame' → class='dfp-footer-frame' at
	   convenience. (cs-builder OPEN-ITEMS.md tracks a parallel
	   id='builder-footer-frame' precedent.) */

@media (max-width: 639px) {
  .dfp-footer-frame {
    box-shadow: 0 -4px 4px -4px rgba(0, 0, 0, var(--shadow-alpha-light));
    position: fixed;
    bottom: var(--offset-footer-base);
    width: 100%;
    --tw-bg-opacity: 1;
    background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
  }

  @media (prefers-reduced-motion: reduce) {
    .dfp-footer-frame {
      transition-property: none;
    }
  }

  .dfp-footer-frame.hide {
    transition-property: var(--transition-property-base);
    transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
    transition-duration: 150ms;
    transition-duration: var(--transition-duration-base);
    transition-timing-function: var(--transition-timing-base);
    --tw-translate-y: 100%;
    transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
    --tw-shadow: 0 0 #0000;
    --tw-shadow-colored: 0 0 #0000;
    box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  }

  @media (prefers-reduced-motion: reduce) {
    .dfp-footer-frame.hide {
      transition-property: none;
    }
  }
}

/* ---------------------------- */

/* ANCHOR Draggable Lists (Premium) */

/* ---------------------------- */

/* Pro-tier drag-and-drop list component family. Compose <div> wrappers
	   with combo classes:
	   - .dfp-drag-list (wrapper) + .cards or .links (subtype)
	   - .dfp-drag-item (single item) + .card or .link (subtype) + .active (state)
	   - .dfp-drag-controls (cluster) with optional .buttons child for mobile controls
	   - .dfp-drag-attributes (icon attributes row)
	   - .dfp-drag-item.link > .inner — the inner-content wrapper for link variant
	     (carries the key-gradient-invert backdrop)
	   The .link subtype's ::before paints a brand key-gradient halo behind the
	   item — visible only on .active / :hover via the p-border-button padding
	   trick (creates a gradient border that's reveal-on-state).
	   Source: promoted from custom.css §Utilities → Draggables 2026-05-26
	   (hyphenated wrapper-class form refactored to combo class per df-rules §3.2;
	   dfp- prefix per post-S58 Pro namespace convention). CS migration: 17-rule
	   coordinated rename across cs-ui-v3 + cs-builder. */

.dfp-drag-list.links {
  row-gap: var(--spacing-card-base);
}

.dfp-drag-item.link {
  position: relative;
  border-radius: var(--rounded-corner);
  padding: 0px;
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.dfp-drag-item.link::before {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  position: absolute;
  top: 0px;
  left: 0px;
  height: 100%;
  width: 100%;
  border-radius: var(--rounded-corner);
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  content: '';
  z-index: 0;
}

.dfp-drag-item.link.active,
	.dfp-drag-item.link:hover {
  padding: var(--border-button);
}

.dfp-drag-item.card .dfp-drag-controls p {
  display: flex;
  height: var(--element-base-size);
  cursor: grab;
  align-items: center;
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.dfp-drag-item.card .dfp-drag-controls p:hover {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.dfp-drag-item.card.active .dfp-drag-controls p {
  cursor: grabbing;
}

.dfp-drag-item.card > .controlrows {
  display: flex;
  height: 100%;
  width: 100%;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
}

@media (min-width: 640px) {
  .dfp-drag-item.card > .controlrows {
    flex-wrap: nowrap;
  }
}

.dfp-drag-item.card .dfp-drag-title {
  display: flex;
  width: 100%;
  flex-direction: column;
  align-items: center;
  -moz-column-gap: var(--spacing-gutter-base);
       column-gap: var(--spacing-gutter-base);
}

@media (min-width: 640px) {
  .dfp-drag-item.card .dfp-drag-title {
    flex-direction: row;
  }
}

.dfp-drag-item.card .dfp-drag-attributes p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

/* Inner-content wrapper for .link variant — carries the key-gradient-invert
	   backdrop that sits inside the ::before gradient halo. */

.dfp-drag-item.link > .inner {
  position: relative;
  display: flex;
  height: 100%;
  width: 100%;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--gap-form-sm);
  border-radius: calc(var(--rounded-corner) - var(--border-button));
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key-gradient-invert) / var(--tw-bg-opacity, 1));
  --tw-bg-opacity: var(--color-key-gradient-invert-opacity);
  padding: 17px;
}

@media (min-width: 640px) {
  .dfp-drag-item.link > .inner {
    flex-wrap: nowrap;
  }
}

.dfp-drag-item.link.active > .inner,
	.dfp-drag-item.link:hover > .inner {
  padding: var(--spacing-card-base);
}

.dfp-drag-item.link:hover > .inner {
  cursor: grab;
}

.dfp-drag-item.link.active > .inner {
  cursor: grabbing;
}

.dfp-drag-item.link .form-input input,
	.dfp-drag-item.link button.form-input-dropdown span p {
  font-size: var(--text-p3-size);
}

.dfp-drag-item.link i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.dfp-drag-item.link > .inner > div,
	.dfp-drag-item.link > .inner > div > .form-input-dropdown {
  width: 100%;
}

.dfp-drag-item.card .dfp-drag-controls,
	.dfp-drag-item.link .dfp-drag-controls {
  display: flex;
  width: 100%;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
}

@media (min-width: 640px) {
  .dfp-drag-item.card .dfp-drag-controls,
	.dfp-drag-item.link .dfp-drag-controls {
    width: -moz-fit-content;
    width: fit-content;
  }
}

.dfp-drag-controls .buttons {
  display: flex;
  flex-direction: row;
}

@media (min-width: 640px) {
  .dfp-drag-controls .buttons {
    display: none;
  }
}

.dfp-drag-controls .buttons > button {
  width: calc(var(--element-min-size) + var(--layout-unit) + var(--layout-unit));
  text-align: center;
}

/* ---------------------------- */

/* ANCHOR Loading Overlay (Premium) */

/* ---------------------------- */

/* Page-content loading overlay. Compose as <section class="dfp-loading-overlay screen-modal p-section-safeview theme-transparent">
	   wrapping a .modal-block child containing the spinning icon. The .modal-block
	   center-aligns the loading content + applies article-base padding + fade-half
	   animation; the inline <i> renders at text-h1 size with a gradient-text-key
	   color and animate-spin-slow rotation.
	   Source: promoted from custom.css #page-content-loading-overlay 2026-05-26
	   (ID-based form renamed to class-based form for multi-instance + reusability;
	   dfp- prefix per Pro namespace convention). CS migration: 28 files using
	   id="page-content-loading-overlay" → class="dfp-loading-overlay" at convenience. */

/* ---------------------------- */

/* ANCHOR Post Form (Premium)	*/

/* ---------------------------- */

/* Social-feed posting form composed component. Strips the default form-textarea
	   ring + padding inside .dfp-post-form context (the post-form container owns
	   the boundary); the gradient-avatar treatment comes from the `avatar gradient`
	   classes in markup, and .dfp-post-form-avatar supplies the sm: size bump to elementc-md.
	   Source: promoted from custom.css .post-form + .post-form-avatar 2026-05-26
	   (renamed with dfp- prefix per post-S58 Pro namespace convention). */

/* Do not edit	*/

/* ---------------------------------*/

/* -------------------------------------------------------------------- */

/* SECTION Base Styles													*/

/* -------------------------------------------------------------------- */

/* These are your stylings without a theme active and sets inheritance.	*/

/* -------------------------------------------------------------------- */

/* These are your Base Styles which override the HTML Fallback Styles, define DF (Non-Theme) Base Styles, and are the base inherited styles for all themes. Any differences in .theme and .theme-* styles will override when the that theme is active. All inline style in HTML or more specific Custom Classes at the end of this file will also override any differences. Generally, you should use this for sizing, weights, effects, and animation styles which you want apply consitently across all themes, plus default any properties. */

/* ---------------------------- */

/* ANCHOR  Icons Usage			*/

/* ---------------------------- */

/* Preferred set up uses Font Awesome. Use text utility to manage text-based icon sizing by using classes such as text-i1. Options are: i1, i2, 13, i4, i5, i6, in. */

/* ---------------------------- */

/* ANCHOR  Effects Config		*/

/* ---------------------------- */

/* These are defined sets of effects that are applied to most interacte elements by default, and can be optionally added to any element inline and using @apply. */

/* ---------------------------- */

/* ANCHOR  Key Text Config		*/

/* ---------------------------- */

/* Note that these apply to H1 to H6 elements. The logical variant (invert, etc) will be applied by the corresponding theme-* parent. */

/* Key SURFACE (background) type — solid vs gradient — as a setting, the background-side
			   parallel to config-text-key. The .theme-key family applies these. */

/* ---------------------------- */

/* ANCHOR  Base Links Config	*/

/* ---------------------------- */

/* Note that these apply to H1 to H6 link elements and P A link elements("A" elements in a "P" element). The logical variants (invert, etc) will be applied by the corresponding theme-* parent. */

/* ---------------------------- */

/* ANCHOR  Specific Links		*/

/* ---------------------------- */

/* Note that these apply to specific link elements and inherit the Base Links Config above but override any conflicting properties. The logical variants (invert, etc) will be applied by the corresponding theme-* parent. */

& header {
  nav p a, nav p a:link, nav p a:visited, nav p a:focus {
    font-weight: 700;
  }
  nav p a, nav p a:link, nav p a:visited, nav p a:focus {
    font-style: normal;
  }
  nav p a, nav p a:link, nav p a:visited, nav p a:focus {
    --tw-text-opacity: 1;
    color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
  }
  nav p a:hover {
    /* Do not edit */
  }
  nav p a:hover {
    background-image: linear-gradient(to right, var(--tw-gradient-stops));
  }
  nav p a:hover {
    --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
    --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
    --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  }
  nav p a:hover {
    --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  }
  nav p a:hover {
    -webkit-background-clip: text;
            background-clip: text;
  }
  nav p a:hover {
    color: transparent;
  }
  nav p a:hover {
    opacity: 1;
  }
  nav p a:active {
    --tw-text-opacity: 1;
    color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
  }
  nav p a:active {
    opacity: var(--color-key-gradient-active-opacity);
  }
}

& footer {
  nav p a, nav p a:link, nav p a:visited, nav p a:focus {
    font-style: normal;
  }
  nav p a, nav p a:link, nav p a:visited, nav p a:focus {
    --tw-text-opacity: 1;
    color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
  }
  nav p a:hover {
    /* Do not edit */
  }
  nav p a:hover {
    background-image: linear-gradient(to right, var(--tw-gradient-stops));
  }
  nav p a:hover {
    --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
    --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
    --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  }
  nav p a:hover {
    --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  }
  nav p a:hover {
    -webkit-background-clip: text;
            background-clip: text;
  }
  nav p a:hover {
    color: transparent;
  }
  nav p a:hover {
    opacity: 1;
  }
  nav p a:active {
    --tw-text-opacity: 1;
    color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
  }
  nav p a:active {
    opacity: var(--color-key-gradient-active-opacity);
  }
}

/* ---------------------------- */

/* ANCHOR Text & Backgrounds	*/

/* ---------------------------- */

/* These are the Base default backgrounds and text color for BODY and MAIN. Use of a specific .theme and .theme-* will override bg-* colors and text-* colors. MAIN layers over BODY, and HEADER, SECTION, and FOOTER also layer above both BODY and MAIN. These override the @base layer plain HTML Fallbacks and become a new fallback/default. */

body {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

header {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

main {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

footer {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

& footer {
  h1, h2, h3, h4, h5, h6 {
    --tw-text-opacity: 1;
    color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
  }
}

::-moz-placeholder {
  font-style: italic;
}

::placeholder {
  font-style: italic;
}

.df-block-code .token::-moz-placeholder {
  font-style: italic;
}

.df-block-code .token::placeholder {
  font-style: italic;
}

/* ---------------------------- */

/* ANCHOR Mobile Menu			*/

/* ---------------------------- */

@media (min-width: 960px) {
  #header-nav-menu {
    display: none;
  }
}

#header-nav-menu {
  /* NOTE: Must include *:hidden for screen breakpoint (sm,md,lg,xl,2xl) to specify when mobile menu should display. */
}

#header-nav-menu	nav a {
  /* Optionally include px-*, w-*, and text-center/text-* to override @base default structure. */
  box-shadow: inset 0 4px 4px -4px rgba(0, 0, 0, var(--shadow-alpha-light)),
					inset 0 -4px 4px -4px rgba(0, 0, 0, var(--shadow-alpha-light));
}

#header-nav-menu	nav a p {
  /* Optionally include px-*, w-*, and text-center/text-* to override @base default structure. */
  font-weight: 700;
  text-decoration-line: none;
}

/* ---------------------------- */

/* ANCHOR  Interactions			*/

/* ---------------------------- */

/* These effects are applied to all targeted elements by default. */

:focus-visible {
  /* Optional override of @base default :focus-visible */
  outline-color: rgb(var(--color-key) / 1);
}

/* Base — combo .chip.gradient inherits opacity-100 via subset matching */

.chip {
  opacity: 1;
}

/* Base hover — combo .chip.gradient:hover inherits via subset matching */

.chip:hover {
  opacity: var(--color-key-gradient-active-opacity);
}

/* ---------------------------- */

/* ANCHOR  Other Elements		*/

/* ---------------------------- */

/* These effects are applied to all targeted elements by default. */

.card, .card-base {
  --tw-shadow: var(--shadow-light);
  --tw-shadow-colored: var(--shadow-light);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  /* Applies defined --shadow-light to all cards */
}

/* ---------------------------- */

/* ANCHOR Custom Applications	*/

/* ---------------------------- */

/* You can optionally add any base custom applications here which will be inherited across all themes. */

/* -------------------------------------------------------------------- */

/* !SECTION Base Styles													*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme & Theme Transparent									*/

/* -------------------------------------------------------------------- */

/* Most of the colors styles here are inherited from the DF Visuals, Base, and Global colors. Only edit/add overrides or new styles if needed. */

/* ---------------------------- */

/* ANCHOR Containers			*/

/* ---------------------------- */

/* Use these optional classes to add matching theme styles to BODY and MAIN elements directly, but not implement theming to child elements (which should be implemented by adding the theme class to HEADER, SECTION, and FOOTER elements. Note that HEADER, SECTION, and FOOTER theming will visually layer on top of BODY and MAIN elements. */

/* NOTE gradient-bg or theme-specified color/gradient replaces default bg-background for full page background setting. */

/* To directly style your header and footer element, you can apply a specific background and/or other styles here which will apply only to the header and footer elements (and child elements, if applicable) when the theme class is present. Alternatively, you can always use inline styles/classes. */

header.theme {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-header-background) / var(--tw-bg-opacity, 1));
  background-image: none;
  --tw-text-opacity: 1;
  color: rgb(var(--color-header-primary) / var(--tw-text-opacity, 1));
  /* If applying a solid color background here while also using a gradient background for the theme, both will be active and layered. If so, bg-none must be added here to clear the gradient so that the solid color background visible. */
}

& header.theme {
  nav p a, nav p a:link, nav p a:visited, nav p a:focus,
			nav ul li a, nav ul li a:link, nav ul li a:visited, nav ul li a:focus,
			nav > a, nav > a:link, nav > a:visited, nav > a:focus {
    font-weight: var(--font-header-nav-weight);
  }
  nav p a, nav p a:link, nav p a:visited, nav p a:focus,
			nav ul li a, nav ul li a:link, nav ul li a:visited, nav ul li a:focus,
			nav > a, nav > a:link, nav > a:visited, nav > a:focus {
    --tw-text-opacity: 1;
    color: rgb(var(--color-header-nav-link) / var(--tw-text-opacity, 1));
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    /* Do not edit */
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    background-image: linear-gradient(to right, var(--tw-gradient-stops));
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
    --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
    --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    -webkit-background-clip: text;
            background-clip: text;
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    color: transparent;
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    opacity: 1;
  }
  nav p a:active, nav ul li a:active, nav > a:active {
    --tw-text-opacity: 1;
    color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
  }
  nav p a:active, nav ul li a:active, nav > a:active {
    opacity: var(--color-key-gradient-active-opacity);
  }
}

footer.theme {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-footer-background) / var(--tw-bg-opacity, 1));
  background-image: none;
  --tw-text-opacity: 1;
  color: rgb(var(--color-footer-primary) / var(--tw-text-opacity, 1));
  /* If applying a solid color background here while also using a gradient background for the theme, both will be active and layered. If so, bg-none must be added here to clear the gradient so that the solid color background visible. */
}

& footer.theme {
  nav p a, nav p a:link, nav p a:visited, nav p a:focus,
			nav ul li a, nav ul li a:link, nav ul li a:visited, nav ul li a:focus,
			nav > a, nav > a:link, nav > a:visited, nav > a:focus {
    font-weight: var(--font-footer-nav-weight);
  }
  nav p a, nav p a:link, nav p a:visited, nav p a:focus,
			nav ul li a, nav ul li a:link, nav ul li a:visited, nav ul li a:focus,
			nav > a, nav > a:link, nav > a:visited, nav > a:focus {
    --tw-text-opacity: 1;
    color: rgb(var(--color-footer-nav-link) / var(--tw-text-opacity, 1));
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    /* Do not edit */
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    background-image: linear-gradient(to right, var(--tw-gradient-stops));
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
    --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
    --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    -webkit-background-clip: text;
            background-clip: text;
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    color: transparent;
  }
  nav p a:hover, nav ul li a:hover, nav > a:hover {
    opacity: 1;
  }
  nav p a:active, nav ul li a:active, nav > a:active {
    --tw-text-opacity: 1;
    color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
  }
  nav p a:active, nav ul li a:active, nav > a:active {
    opacity: var(--color-key-gradient-active-opacity);
  }
}

/* ---------------------------------------- */

/* ANCHOR Theme Applications (Base Theme)	*/

/* ---------------------------------------- */

/* These styles apply to theme parent elements and nested child elements. Nested theme classes are supported: the innermost theme governs cascade rules for its own subtree via compound-selector override rules (e.g., .theme-X.card:not(.transparent)) placed source-after the descendant cascade at equal (0,3,0) specificity. See df-rules.md §5.2 + §10.6 for the tier-orthogonal theming model. */

/* Note: The following colors are inherited from the Base "All Themes" Styles - Global:	.theme h1 to h6, .theme-transparent h1 to h6, header.theme h1 to h6, footer.theme h1 to h6. If you apply a solid color to these elements while using a gradient test base style, you may need to also apply bg-none to clear the gradient background and/or add bg-clip-* to fix clipping. */

/* NOTE gradient-bg or theme-specified color/gradient replaces default bg-background for page-specific background setting. */

.theme {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-background-start) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-background-start) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-background-end) / 1) var(--tw-gradient-to-position);
  background: linear-gradient(to var(--color-background-direction), rgba(var(--color-background-start-rgb), 1), rgba(var(--color-background-end-rgb), 1)) ;
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

& .theme, & .theme-transparent {
  .card:not(.transparent), .card-base:not(.transparent) {
    --tw-bg-opacity: 1;
    background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
  }
}

/* ---------------------------- */

/* ANCHOR Custom Applications	*/

/* ---------------------------- */

/* You can optionally add any theme-specific custom applications here. */

& .theme, & .theme-transparent {
  .stack-title h2 span, 
				.stack-title-filters h2 span,
				.stack-title-icons h2 span {
    --tw-text-opacity: 1;
    color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
  }
  /* PRO-TIER-ONLY START */
  .dfp-product-item hgroup p, .dfp-featured-link a hgroup h4, .dfp-featured-link hgroup p, .dfp-featured-support a hgroup h4, .dfp-featured-support hgroup p, .dfp-featured-support hgroup p i {
    --tw-text-opacity: 1;
    color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  }
  /* PRO-TIER-ONLY END */
}

/* -------------------------------------------------------------------- */

/* !SECTION Theme & Theme Transparent									*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Invert & Theme Invert Transparent						*/

/* -------------------------------------------------------------------- */

/* Only edit/add overrides or new styles if needed. DF Component color variants are predefined in DF Variants. */

/* ---------------------------- */

/* ANCHOR Containers			*/

/* ---------------------------- */

/* Use these optional classes to add matching theme styles to BODY and MAIN elements directly, but not implement theming to child elements (which should be implemented by adding the theme class to HEADER, SECTION, and FOOTER elements. Note that HEADER, SECTION, and FOOTER theming will visually layer on top of BODY and MAIN elements. */

/* To directly style your header and footer element, you can apply a specific background and/or other styles here which will apply only to the header and footer elements (and child elements, if applicable) when the theme class is present. Alternatively, you can always use inline styles/classes. */

/* -------------------------------- */

/* ANCHOR Theme Invert Applications	*/

/* -------------------------------- */

/* These styles apply to theme parent elements and nested child elements. Nested theme classes are supported: the innermost theme governs cascade rules for its own subtree via compound-selector override rules (e.g., .theme-X.card:not(.transparent)) placed source-after the descendant cascade at equal (0,3,0) specificity. See df-rules.md §5.2 + §10.6 for the tier-orthogonal theming model. */

/* Note: If you apply a solid color override to gradient elements, you may need to also apply bg-none to clear the gradient background and/or add bg-clip-* to fix clipping. */

/* ---------------------------- */

/* ANCHOR Custom Applications	*/

/* ---------------------------- */

/* You can optionally add any theme-specific custom applications here. */

/* ---------------------------------------------------------------- */

/* ANCHOR Phase 1.1 — Theme Invert + Theme Invert Transparent       */

/*        Tier Orthogonality Compound Overrides                     */

/* ---------------------------------------------------------------- */

/* Compound-override rules for explicit .theme-invert + .theme-invert-transparent
		   applied to .card / .card-base. Specificity (0,3,0) matches the descendant
		   cascade above; compound wins by source order. */

.theme-invert.card:not(.transparent), .theme-invert.card-base:not(.transparent) {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-primary) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  /* NOTE Solid primary-color paint, mirrors .theme-invert parent rule. */
}

.theme-invert-transparent.card:not(.transparent), .theme-invert-transparent.card-base:not(.transparent) {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  /* NOTE Transparent paint with invert text, mirrors .theme-invert-transparent parent rule. */
}

.theme-invert.card:not(.transparent) h1, .theme-invert.card:not(.transparent) h2, .theme-invert.card:not(.transparent) h3, .theme-invert.card:not(.transparent) h4, .theme-invert.card:not(.transparent) h5, .theme-invert.card:not(.transparent) h6,
		.theme-invert.card-base:not(.transparent) h1, .theme-invert.card-base:not(.transparent) h2, .theme-invert.card-base:not(.transparent) h3, .theme-invert.card-base:not(.transparent) h4, .theme-invert.card-base:not(.transparent) h5, .theme-invert.card-base:not(.transparent) h6,
		.theme-invert-transparent.card:not(.transparent) h1, .theme-invert-transparent.card:not(.transparent) h2, .theme-invert-transparent.card:not(.transparent) h3, .theme-invert-transparent.card:not(.transparent) h4, .theme-invert-transparent.card:not(.transparent) h5, .theme-invert-transparent.card:not(.transparent) h6,
		.theme-invert-transparent.card-base:not(.transparent) h1, .theme-invert-transparent.card-base:not(.transparent) h2, .theme-invert-transparent.card-base:not(.transparent) h3, .theme-invert-transparent.card-base:not(.transparent) h4, .theme-invert-transparent.card-base:not(.transparent) h5, .theme-invert-transparent.card-base:not(.transparent) h6 {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key-invert) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key-invert) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-invert-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* Set this to text-key-invert or gradient-text-key-invert to apply your chosen key invert color type (solid vs gradient). */
  /* NOTE Overrides .theme-invert h1..h6 (config-text-key gradient) for themed-card heading at (0,3,1) via source order. */
}

.theme-invert.card:not(.transparent) p, .theme-invert.card-base:not(.transparent) p,
		.theme-invert-transparent.card:not(.transparent) p, .theme-invert-transparent.card-base:not(.transparent) p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  /* NOTE Overrides .theme-invert .card p (text-primary) for themed-card paragraph at (0,3,1) via source order. */
}

.theme-invert.card:not(.transparent) p a, .theme-invert.card:not(.transparent) p a:link, .theme-invert.card:not(.transparent) p a:visited,
		.theme-invert.card-base:not(.transparent) p a, .theme-invert.card-base:not(.transparent) p a:link, .theme-invert.card-base:not(.transparent) p a:visited,
		.theme-invert-transparent.card:not(.transparent) p a, .theme-invert-transparent.card:not(.transparent) p a:link, .theme-invert-transparent.card:not(.transparent) p a:visited,
		.theme-invert-transparent.card-base:not(.transparent) p a, .theme-invert-transparent.card-base:not(.transparent) p a:link, .theme-invert-transparent.card-base:not(.transparent) p a:visited {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key-invert) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key-invert) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-invert-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* Set this to text-key-invert or gradient-text-key-invert to apply your chosen key invert color type (solid vs gradient). */
  /* NOTE Overrides .theme-invert p a (config-text-key gradient) for themed-card link at (0,3,2) via source order. */
}

/* -------------------------------------------------------------------- */

/* !SECTION Theme Invert & Theme Invert Transparent						*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Key & Theme Key Gradient								*/

/* -------------------------------------------------------------------- */

/* Only edit/add overrides or new styles if needed. DF Component color variants are predefined in DF Variants. */

/* ---------------------------- */

/* ANCHOR Containers			*/

/* ---------------------------- */

/* Use these optional classes to add matching theme styles to BODY and MAIN elements directly, but not implement theming to child elements (which should be implemented by adding the theme class to HEADER, SECTION, and FOOTER elements. Note that HEADER, SECTION, and FOOTER theming will visually layer on top of BODY and MAIN elements. */

/* To directly style your header and footer element, you can apply a specific background and/or other styles here which will apply only to the header and footer elements (and child elements, if applicable) when the theme class is present. Alternatively, you can always use inline styles/classes. */

/* -------------------------------- */

/* ANCHOR Theme Key Applications	*/

/* -------------------------------- */

/* These styles apply to theme parent elements and nested child elements. Nested theme classes are supported: the innermost theme governs cascade rules for its own subtree via compound-selector override rules (e.g., .theme-X.card:not(.transparent)) placed source-after the descendant cascade at equal (0,3,0) specificity. See df-rules.md §5.2 + §10.6 for the tier-orthogonal theming model. */

/* Note: If you apply a solid color override to gradient elements, you may need to also apply bg-none to clear the gradient background and/or add bg-clip-* to fix clipping. */

/* ---------------------------------------------------------------- */

/* ANCHOR Phase 1.0 MVP — Theme Key + Theme Key Gradient            */

/*        Tier Orthogonality Compound Overrides                     */

/* ---------------------------------------------------------------- */

/* Compound-override rules for explicit .theme-key + .theme-key-gradient
		   applied to .card / .card-base. Specificity (0,3,0) matches the
		   descendant cascade above; compound wins by source order. Mechanism
		   per plan 2026-05-28-theme-tier-orthogonality.md (Phase 0.4 gate
		   PASSED 2026-05-28). Phase 1.1 will propagate this pattern to the
		   remaining 8 variants needing compound overrides per Phase 0.2 inventory. */

/* ANCHOR Paint — solid vs gradient mirror their parent rules */

.theme-key.card:not(.transparent), .theme-key.card-base:not(.transparent) {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  /* Set this to bg-key or gradient-key to apply your chosen key surface type (solid vs gradient). */
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  /* NOTE Solid key-color paint, mirrors .theme-key parent rule (L502). */
}

.theme-key-gradient.card:not(.transparent), .theme-key-gradient.card-base:not(.transparent) {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  /* NOTE Gradient key→key-end paint, mirrors .theme-key-gradient parent rule (L506). */
}

/* ANCHOR Heading override — both families paint invert color */

.theme-key.card:not(.transparent) h1, .theme-key.card:not(.transparent) h2, .theme-key.card:not(.transparent) h3, .theme-key.card:not(.transparent) h4, .theme-key.card:not(.transparent) h5, .theme-key.card:not(.transparent) h6,
		.theme-key.card-base:not(.transparent) h1, .theme-key.card-base:not(.transparent) h2, .theme-key.card-base:not(.transparent) h3, .theme-key.card-base:not(.transparent) h4, .theme-key.card-base:not(.transparent) h5, .theme-key.card-base:not(.transparent) h6,
		.theme-key-gradient.card:not(.transparent) h1, .theme-key-gradient.card:not(.transparent) h2, .theme-key-gradient.card:not(.transparent) h3, .theme-key-gradient.card:not(.transparent) h4, .theme-key-gradient.card:not(.transparent) h5, .theme-key-gradient.card:not(.transparent) h6,
		.theme-key-gradient.card-base:not(.transparent) h1, .theme-key-gradient.card-base:not(.transparent) h2, .theme-key-gradient.card-base:not(.transparent) h3, .theme-key-gradient.card-base:not(.transparent) h4, .theme-key-gradient.card-base:not(.transparent) h5, .theme-key-gradient.card-base:not(.transparent) h6 {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key-invert) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key-invert) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-invert-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* Set this to text-key-invert or gradient-text-key-invert to apply your chosen key invert color type (solid vs gradient). */
  /* NOTE Overrides descendant .theme-key .card h1..h6 (config-text-key gradient) at equal (0,3,1) specificity via source order. */
}

/* ANCHOR Paragraph override — both families paint invert color */

.theme-key.card:not(.transparent) p, .theme-key.card-base:not(.transparent) p,
		.theme-key-gradient.card:not(.transparent) p, .theme-key-gradient.card-base:not(.transparent) p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  /* NOTE Overrides descendant .theme-key .card p (text-primary) at equal (0,3,1) specificity via source order. */
}

/* ANCHOR Link override — both families paint invert color */

.theme-key.card:not(.transparent) p a, .theme-key.card:not(.transparent) p a:link, .theme-key.card:not(.transparent) p a:visited,
		.theme-key.card-base:not(.transparent) p a, .theme-key.card-base:not(.transparent) p a:link, .theme-key.card-base:not(.transparent) p a:visited,
		.theme-key-gradient.card:not(.transparent) p a, .theme-key-gradient.card:not(.transparent) p a:link, .theme-key-gradient.card:not(.transparent) p a:visited,
		.theme-key-gradient.card-base:not(.transparent) p a, .theme-key-gradient.card-base:not(.transparent) p a:link, .theme-key-gradient.card-base:not(.transparent) p a:visited {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key-invert) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key-invert) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-invert-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* Set this to text-key-invert or gradient-text-key-invert to apply your chosen key invert color type (solid vs gradient). */
  /* NOTE Overrides descendant .theme-key .card p a (config-text-key gradient) at equal (0,3,2) specificity via source order. */
}

/* ---------------------------- */

/* ANCHOR Custom Applications	*/

/* ---------------------------- */

/* You can optionally add any theme-specific custom applications here. */

/* -------------------------------------------------------------------- */

/* !SECTION Theme Key & Theme Key Gradient								*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Alt & Theme Alt Transparent							*/

/* -------------------------------------------------------------------- */

/* Only edit/add overrides or new styles if needed. DF Component color variants are predefined in DF Variants. */

/* ---------------------------- */

/* ANCHOR Containers			*/

/* ---------------------------- */

/* Use these optional classes to add matching theme styles to BODY and MAIN elements directly, but not implement theming to child elements (which should be implemented by adding the theme class to HEADER, SECTION, and FOOTER elements. Note that HEADER, SECTION, and FOOTER theming will visually layer on top of BODY and MAIN elements. */

/* NOTE gradient-bg-alt or theme-specified color/gradient replaces default bg-background-alt for full page background setting. */

/* To directly style your header and footer element, you can apply a specific background and/or other styles here which will apply only to the header and footer elements (and child elements, if applicable) when the theme class is present. Alternatively, you can always use inline styles/classes. */

/* -------------------------------- */

/* ANCHOR Theme Alt Applications	*/

/* -------------------------------- */

/* These styles apply to theme parent elements and nested child elements. Nested theme classes are supported: the innermost theme governs cascade rules for its own subtree via compound-selector override rules (e.g., .theme-X.card:not(.transparent)) placed source-after the descendant cascade at equal (0,3,0) specificity. See df-rules.md §5.2 + §10.6 for the tier-orthogonal theming model. */

/* Note: If you apply a solid color override to gradient elements, you may need to also apply bg-none to clear the gradient background and/or add bg-clip-* to fix clipping. */

/* NOTE gradient-bg-alt or theme-specified color/gradient replaces default bg-background-alt for page-specific background setting. */

/* ---------------------------- */

/* ANCHOR Custom Applications	*/

/* ---------------------------- */

/* You can optionally add any theme-specific custom applications here. */

/* ---------------------------------------------------------------- */

/* ANCHOR Phase 1.1 — Theme Alt + Theme Alt Transparent             */

/*        Tier Orthogonality Compound Overrides (paint-only)        */

/* ---------------------------------------------------------------- */

/* Paint-only compound overrides per cascade-color-match analysis:
		   themed-surface paragraph (text-primary-alt) and auto-revert paragraph
		   (text-primary → alt-primary via cascade) resolve to the same color, so
		   no compound heading/p/link overrides are needed for this family.
		   Heading on themed surface (config-text-key → alt-key gradient) is also
		   readable on light alt bg without override. Specificity (0,3,0) matches
		   descendant auto-revert cascade; source order resolves compound-wins. */

.theme-alt.card:not(.transparent), .theme-alt.card-base:not(.transparent) {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-background-start-alt) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-background-start-alt) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-background-end-alt) / 1) var(--tw-gradient-to-position);
  background: linear-gradient(to var(--color-background-alt-direction), rgba(var(--color-background-start-alt-rgb), 1), rgba(var(--color-background-end-alt-rgb), 1)) ;
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary-alt) / var(--tw-text-opacity, 1));
  /* NOTE Gradient alt-bg paint, mirrors .theme-alt parent rule. */
}

.theme-alt-transparent.card:not(.transparent), .theme-alt-transparent.card-base:not(.transparent) {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary-alt) / var(--tw-text-opacity, 1));
  /* NOTE Transparent paint with alt-primary text, mirrors .theme-alt-transparent parent rule. */
}

/* -------------------------------------------------------------------- */

/* !SECTION Theme Alt & Theme Alt Transparent							*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Alt Invert & Theme Alt Invert Transparent				*/

/* -------------------------------------------------------------------- */

/* Only edit/add overrides or new styles if needed. DF Component color variants are predefined in DF Variants. */

/* ---------------------------- */

/* ANCHOR Containers			*/

/* ---------------------------- */

/* Use these optional classes to add matching theme styles to BODY and MAIN elements directly, but not implement theming to child elements (which should be implemented by adding the theme class to HEADER, SECTION, and FOOTER elements. Note that HEADER, SECTION, and FOOTER theming will visually layer on top of BODY and MAIN elements. */

/* To directly style your header and footer element, you can apply a specific background and/or other styles here which will apply only to the header and footer elements (and child elements, if applicable) when the theme class is present. Alternatively, you can always use inline styles/classes. */

/* ------------------------------------ */

/* ANCHOR Theme Alt Invert Applications	*/

/* ------------------------------------ */

/* These styles apply to theme parent elements and nested child elements. Nested theme classes are supported: the innermost theme governs cascade rules for its own subtree via compound-selector override rules (e.g., .theme-X.card:not(.transparent)) placed source-after the descendant cascade at equal (0,3,0) specificity. See df-rules.md §5.2 + §10.6 for the tier-orthogonal theming model. */

/* Note: If you apply a solid color override to gradient elements, you may need to also apply bg-none to clear the gradient background and/or add bg-clip-* to fix clipping. */

/* ---------------------------- */

/* ANCHOR Custom Applications	*/

/* ---------------------------- */

/* You can optionally add any theme-specific custom applications here. */

/* ---------------------------------------------------------------- */

/* ANCHOR Phase 1.1 — Theme Alt Invert + Theme Alt Invert Transparent */

/*        Tier Orthogonality Compound Overrides                     */

/* ---------------------------------------------------------------- */

/* Compound-override rules for explicit .theme-alt-invert + .theme-alt-invert-transparent
		   applied to .card / .card-base. Generic utility names (text-invert,
		   config-text-key-invert) used per framework convention — variable cascade
		   resolves them to alt-invert / alt-key-invert at consumption time. */

.theme-alt-invert.card:not(.transparent), .theme-alt-invert.card-base:not(.transparent) {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-primary-alt) / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert-alt) / var(--tw-text-opacity, 1));
  /* NOTE Solid alt-primary paint, mirrors .theme-alt-invert parent rule. */
}

.theme-alt-invert-transparent.card:not(.transparent), .theme-alt-invert-transparent.card-base:not(.transparent) {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert-alt) / var(--tw-text-opacity, 1));
  /* NOTE Transparent paint with alt-invert text, mirrors .theme-alt-invert-transparent parent rule. */
}

.theme-alt-invert.card:not(.transparent) h1, .theme-alt-invert.card:not(.transparent) h2, .theme-alt-invert.card:not(.transparent) h3, .theme-alt-invert.card:not(.transparent) h4, .theme-alt-invert.card:not(.transparent) h5, .theme-alt-invert.card:not(.transparent) h6,
		.theme-alt-invert.card-base:not(.transparent) h1, .theme-alt-invert.card-base:not(.transparent) h2, .theme-alt-invert.card-base:not(.transparent) h3, .theme-alt-invert.card-base:not(.transparent) h4, .theme-alt-invert.card-base:not(.transparent) h5, .theme-alt-invert.card-base:not(.transparent) h6,
		.theme-alt-invert-transparent.card:not(.transparent) h1, .theme-alt-invert-transparent.card:not(.transparent) h2, .theme-alt-invert-transparent.card:not(.transparent) h3, .theme-alt-invert-transparent.card:not(.transparent) h4, .theme-alt-invert-transparent.card:not(.transparent) h5, .theme-alt-invert-transparent.card:not(.transparent) h6,
		.theme-alt-invert-transparent.card-base:not(.transparent) h1, .theme-alt-invert-transparent.card-base:not(.transparent) h2, .theme-alt-invert-transparent.card-base:not(.transparent) h3, .theme-alt-invert-transparent.card-base:not(.transparent) h4, .theme-alt-invert-transparent.card-base:not(.transparent) h5, .theme-alt-invert-transparent.card-base:not(.transparent) h6 {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key-invert) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key-invert) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-invert-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* Set this to text-key-invert or gradient-text-key-invert to apply your chosen key invert color type (solid vs gradient). */
  /* NOTE Resolves to alt-key-invert via variable cascade. Overrides .theme-alt-invert h1..h6 (config-text-key gradient) for themed-card heading at (0,3,1) via source order. */
}

.theme-alt-invert.card:not(.transparent) p, .theme-alt-invert.card-base:not(.transparent) p,
		.theme-alt-invert-transparent.card:not(.transparent) p, .theme-alt-invert-transparent.card-base:not(.transparent) p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  /* NOTE Resolves to alt-invert via variable cascade. Overrides .theme-alt-invert .card p (text-primary → alt-primary) for themed-card paragraph at (0,3,1) via source order. */
}

.theme-alt-invert.card:not(.transparent) p a, .theme-alt-invert.card:not(.transparent) p a:link, .theme-alt-invert.card:not(.transparent) p a:visited,
		.theme-alt-invert.card-base:not(.transparent) p a, .theme-alt-invert.card-base:not(.transparent) p a:link, .theme-alt-invert.card-base:not(.transparent) p a:visited,
		.theme-alt-invert-transparent.card:not(.transparent) p a, .theme-alt-invert-transparent.card:not(.transparent) p a:link, .theme-alt-invert-transparent.card:not(.transparent) p a:visited,
		.theme-alt-invert-transparent.card-base:not(.transparent) p a, .theme-alt-invert-transparent.card-base:not(.transparent) p a:link, .theme-alt-invert-transparent.card-base:not(.transparent) p a:visited {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key-invert) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key-invert) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-invert-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* Set this to text-key-invert or gradient-text-key-invert to apply your chosen key invert color type (solid vs gradient). */
  /* NOTE Resolves to alt-key-invert via variable cascade. Overrides .theme-alt-invert p a (config-text-key gradient) for themed-card link at (0,3,2) via source order. */
}

/* -------------------------------------------------------------------- */

/* !SECTION Theme Alt Invert & Theme Alt Invert Transparent				*/

/* -------------------------------------------------------------------- */

/* -------------------------------------------------------------------- */

/* SECTION Theme Key Alt & Theme Key Alt Gradient						*/

/* -------------------------------------------------------------------- */

/* Only edit/add overrides or new styles if needed. DF Component color variants are predefined in DF Variants. */

/* ---------------------------- */

/* ANCHOR Containers			*/

/* ---------------------------- */

/* Use these optional classes to add matching theme styles to BODY and MAIN elements directly, but not implement theming to child elements (which should be implemented by adding the theme class to HEADER, SECTION, and FOOTER elements. Note that HEADER, SECTION, and FOOTER theming will visually layer on top of BODY and MAIN elements. */

/* To directly style your header and footer element, you can apply a specific background and/or other styles here which will apply only to the header and footer elements (and child elements, if applicable) when the theme class is present. Alternatively, you can always use inline styles/classes. */

/* ------------------------------------ */

/* ANCHOR Theme Key Alt Applications	*/

/* ------------------------------------ */

/* These styles apply to theme parent elements and nested child elements. Nested theme classes are supported: the innermost theme governs cascade rules for its own subtree via compound-selector override rules (e.g., .theme-X.card:not(.transparent)) placed source-after the descendant cascade at equal (0,3,0) specificity. See df-rules.md §5.2 + §10.6 for the tier-orthogonal theming model. */

/* Note: If you apply a solid color override to gradient elements, you may need to also apply bg-none to clear the gradient background and/or add bg-clip-* to fix clipping. */

/* ---------------------------- */

/* ANCHOR Custom Applications	*/

/* ---------------------------- */

/* You can optionally add any theme-specific custom applications here. */

/* ---------------------------------------------------------------- */

/* ANCHOR Phase 1.1 — Theme Key Alt + Theme Key Alt Gradient        */

/*        Tier Orthogonality Compound Overrides                     */

/* ---------------------------------------------------------------- */

/* Compound-override rules for explicit .theme-key-alt + .theme-key-alt-gradient
		   applied to .card / .card-base. Mirrors .theme-key family pattern but for
		   alt palette via variable cascade. Specificity (0,3,0) ties the descendant
		   cascade (including heading-on-reverted-card + link-on-reverted-card from
		   the "fullest" cascade); compound wins by source order. */

.theme-key-alt.card:not(.transparent), .theme-key-alt.card-base:not(.transparent) {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key-alt) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key-alt) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end-alt) / 1) var(--tw-gradient-to-position);
  /* Set this to bg-key-alt or gradient-key-alt to apply your chosen key alt surface type (solid vs gradient). */
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert-alt) / var(--tw-text-opacity, 1));
  /* NOTE Solid alt-key paint, mirrors .theme-key-alt parent rule. */
}

.theme-key-alt-gradient.card:not(.transparent), .theme-key-alt-gradient.card-base:not(.transparent) {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key-alt) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key-alt) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end-alt) / 1) var(--tw-gradient-to-position);
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert-alt) / var(--tw-text-opacity, 1));
  /* NOTE Gradient alt-key→alt-key-end paint, mirrors .theme-key-alt-gradient parent rule. */
}

.theme-key-alt.card:not(.transparent) h1, .theme-key-alt.card:not(.transparent) h2, .theme-key-alt.card:not(.transparent) h3, .theme-key-alt.card:not(.transparent) h4, .theme-key-alt.card:not(.transparent) h5, .theme-key-alt.card:not(.transparent) h6,
		.theme-key-alt.card-base:not(.transparent) h1, .theme-key-alt.card-base:not(.transparent) h2, .theme-key-alt.card-base:not(.transparent) h3, .theme-key-alt.card-base:not(.transparent) h4, .theme-key-alt.card-base:not(.transparent) h5, .theme-key-alt.card-base:not(.transparent) h6,
		.theme-key-alt-gradient.card:not(.transparent) h1, .theme-key-alt-gradient.card:not(.transparent) h2, .theme-key-alt-gradient.card:not(.transparent) h3, .theme-key-alt-gradient.card:not(.transparent) h4, .theme-key-alt-gradient.card:not(.transparent) h5, .theme-key-alt-gradient.card:not(.transparent) h6,
		.theme-key-alt-gradient.card-base:not(.transparent) h1, .theme-key-alt-gradient.card-base:not(.transparent) h2, .theme-key-alt-gradient.card-base:not(.transparent) h3, .theme-key-alt-gradient.card-base:not(.transparent) h4, .theme-key-alt-gradient.card-base:not(.transparent) h5, .theme-key-alt-gradient.card-base:not(.transparent) h6 {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key-invert) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key-invert) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-invert-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* Set this to text-key-invert or gradient-text-key-invert to apply your chosen key invert color type (solid vs gradient). */
  /* NOTE Resolves to alt-key-invert via variable cascade. Overrides .theme-key-alt .card h1..h6 (config-text-key gradient on reverted card) for themed-card heading at (0,3,1) via source order. */
}

.theme-key-alt.card:not(.transparent) p, .theme-key-alt.card-base:not(.transparent) p,
		.theme-key-alt-gradient.card:not(.transparent) p, .theme-key-alt-gradient.card-base:not(.transparent) p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  /* NOTE Resolves to alt-invert via variable cascade. Overrides .theme-key-alt .card p (text-primary → alt-primary) for themed-card paragraph at (0,3,1) via source order. */
}

.theme-key-alt.card:not(.transparent) p a, .theme-key-alt.card:not(.transparent) p a:link, .theme-key-alt.card:not(.transparent) p a:visited,
		.theme-key-alt.card-base:not(.transparent) p a, .theme-key-alt.card-base:not(.transparent) p a:link, .theme-key-alt.card-base:not(.transparent) p a:visited,
		.theme-key-alt-gradient.card:not(.transparent) p a, .theme-key-alt-gradient.card:not(.transparent) p a:link, .theme-key-alt-gradient.card:not(.transparent) p a:visited,
		.theme-key-alt-gradient.card-base:not(.transparent) p a, .theme-key-alt-gradient.card-base:not(.transparent) p a:link, .theme-key-alt-gradient.card-base:not(.transparent) p a:visited {
  /* Do not edit */
  background-image: linear-gradient(to top right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key-invert) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key-invert) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-invert-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  /* Set this to text-key-invert or gradient-text-key-invert to apply your chosen key invert color type (solid vs gradient). */
  /* NOTE Resolves to alt-key-invert via variable cascade. Overrides .theme-key-alt .card p a (config-text-key gradient) for themed-card link at (0,3,2) via source order. */
}

/* -------------------------------------------------------------------- */

/* !SECTION Theme Key Alt & Theme Key Alt Gradient						*/

/* -------------------------------------------------------------------- */

/* -------------------------------- */

/* Injects Tailwind component classes and any plugin component classes 							*/

.pointer-events-auto {
  pointer-events: auto;
}

.visible {
  visibility: visible;
}

.invisible {
  visibility: hidden;
}

.collapse {
  visibility: collapse;
}

.static {
  position: static;
}

.fixed {
  position: fixed;
}

.absolute {
  position: absolute;
}

.relative {
  position: relative;
}

.sticky {
  position: sticky;
}

.inset-0 {
  inset: 0px;
}

.top-0 {
  top: 0px;
}

.top-3 {
  top: 0.75rem;
}

.isolate {
  isolation: isolate;
}

.z-50 {
  z-index: 50;
}

.block {
  display: block;
}

.inline {
  display: inline;
}

.flex {
  display: flex;
}

.inline-flex {
  display: inline-flex;
}

.table {
  display: table;
}

.grid {
  display: grid;
}

.contents {
  display: contents;
}

.list-item {
  display: list-item;
}

.hidden {
  display: none;
}

.h-full {
  height: 100%;
}

.min-h-11 {
  min-height: 2.75rem;
}

.w-full {
  width: 100%;
}

.flex-shrink {
  flex-shrink: 1;
}

.shrink {
  flex-shrink: 1;
}

.grow {
  flex-grow: 1;
}

.border-collapse {
  border-collapse: collapse;
}

.transform {
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.resize {
  resize: both;
}

.flex-col {
  flex-direction: column;
}

.flex-wrap {
  flex-wrap: wrap;
}

.items-end {
  align-items: flex-end;
}

.items-center {
  align-items: center;
}

.justify-center {
  justify-content: center;
}

.justify-between {
  justify-content: space-between;
}

.gap-1\.5 {
  gap: 0.375rem;
}

.gap-element-sm {
  gap: var(--gap-element-sm);
}

.truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.border {
  border-width: 1px;
}

.border-b {
  border-bottom-width: 1px;
}

.border-tertiary {
  --tw-border-opacity: 1;
  border-color: rgb(var(--color-tertiary) / var(--tw-border-opacity, 1));
}

.bg-background {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-background) / var(--tw-bg-opacity, 1));
}

.bg-primary {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-primary) / var(--tw-bg-opacity, 1));
}

.object-cover {
  -o-object-fit: cover;
     object-fit: cover;
}

.p-card-base {
  padding: var(--spacing-card-base);
}

.px-3 {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}

.py-2\.5 {
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
}

.font-body {
  font-family: var(--font-body), var(--font-body-alt1), var(--font-body-alt2);
}

.font-display {
  font-family: var(--font-display), var(--font-display-alt1), var(--font-display-alt2);
}

.font-mono {
  font-family: var(--font-mono), var(--font-mono-alt1), var(--font-mono-alt2);
}

.text-d3 {
  font-size: var(--text-d3-size);
  line-height: var(--text-d3-lh);
}

.text-h5 {
  font-size: var(--text-h5-size);
  line-height: var(--text-h5-lh);
}

.text-p4 {
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

.text-p5 {
  font-size: var(--text-p5-size);
  line-height: var(--text-p5-lh);
}

.uppercase {
  text-transform: uppercase;
}

.capitalize {
  text-transform: capitalize;
}

.italic {
  font-style: italic;
}

.tracking-wide {
  letter-spacing: 0.025em;
}

.tracking-widest {
  letter-spacing: 0.1em;
}

.text-invert {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.text-primary {
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

.text-secondary {
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.text-tertiary {
  --tw-text-opacity: 1;
  color: rgb(var(--color-tertiary) / var(--tw-text-opacity, 1));
}

.underline {
  text-decoration-line: underline;
}

.outline {
  outline-style: solid;
}

.drop-shadow {
  --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.invert {
  --tw-invert: invert(100%);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.filter {
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.backdrop-filter {
  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}

.transition {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.ease-in {
  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
}

.ease-out {
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
}

/* Do not edit	*/

/* -------------------------------- */

/* lg:min-w-[200px]: v1.1 carry-forward from S41 — block-sm (2/12 at lg = ~160px - padding) was too
	   narrow for docs sidebar labels at 1000-1280px viewports. Min-width floor sets a per-consumer
	   override without changing framework block-sm semantics (block-sm stays narrow for other consumers). */

.df-docs-sidebar-nav a.button.air > span {
  justify-content: flex-start;
  padding-left: var(--spacing-sub-base);
  padding-right: var(--spacing-sub-base);
}

/* Default: secondary text */

.df-docs-sidebar-nav a.button.gradient.air p,
	.df-docs-sidebar-nav a.button.gradient.air i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

/* Hover: gradient text */

.df-docs-sidebar-nav a.button.gradient.air:hover p,
	.df-docs-sidebar-nav a.button.gradient.air:hover i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

/* Active: gradient text only, no fill, no shadow */

.df-docs-sidebar-nav a.button.gradient.air.active {
  background-color: transparent;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.df-docs-sidebar-nav a.button.gradient.air.active::before {
  opacity: 0;
}

.df-docs-sidebar-nav a.button.gradient.air.active > span {
  background-color: transparent;
}

.df-docs-sidebar-nav a.button.gradient.air.active p,
	.df-docs-sidebar-nav a.button.gradient.air.active i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

/* Subnav: section links under the active page */

/* Active sub-nav link — the in-view section's link, set by the scroll-spy
	   IntersectionObserver (also gets aria-current="location"). */

.df-docs-sidebar-nav-sub a.active {
  font-weight: 500;
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

/* ---------------------------- */

/* ANCHOR Code Formatting 		*/

/* ---------------------------- */

/* ---------------------------- */

/* ANCHOR Code Syntax Tokens	*/

/* ---------------------------- */

/* Pure-DF syntax theming. Prism TOKENIZES (the docs site loads prism.min.js +
	   language components), but token COLORS come from DF theme tokens here — NOT
	   from a Prism theme stylesheet. No okaidia / no fixed dark palette is loaded,
	   so the block has no foreign colors to leak and flips light/dark with the page
	   (the --color-* tokens re-derive under html.df-dark). Promoted to canonical in
	   0.99.68 from the page-local .df-docs-code synthesis (S107 template work).
	   Panel stays transparent over the page chrome; base text = --color-primary. */

/* Complete token map — mirrors okaidia's coverage (used only as the reference
	   checklist), collapsed onto DF's restrained palette. Three tiers, all theme tokens:
	     key       — named identifiers (font-weight 600 for light-mode scannability;
	                  weight is paint-only, so copy/paste text is unaffected)
	     secondary — punctuation/operators + comments (italic)
	     primary   — literals/values, via the base color above (no override needed)
	   okaidia's non-color treatments (namespace opacity, bold weight, ins/del) preserved. */

.df-block-code .token.selector,
	.df-block-code .token.property,
	.df-block-code .token.tag,
	.df-block-code .token.atrule,
	.df-block-code .token.attr-name,
	.df-block-code .token.class-name,
	.df-block-code .token.function,
	.df-block-code .token.keyword,
	.df-block-code .token.builtin,
	.df-block-code .token.constant,
	.df-block-code .token.symbol,
	.df-block-code .token.important,
	.df-block-code .token.regex {
  color: rgb(var(--color-key));
  font-weight: 600;
}


	.df-block-code .token.\!important {
  color: rgb(var(--color-key)) !important;
  font-weight: 600 !important;
}

.df-block-code .token.comment,
	.df-block-code .token.cdata,
	.df-block-code .token.doctype,
	.df-block-code .token.prolog {
  color: rgb(var(--color-secondary));
  font-style: italic;
}


	.df-block-code .token.\!doctype {
  color: rgb(var(--color-secondary)) !important;
  font-style: italic !important;
}

.df-block-code .token.\!important {
  font-weight: 700 !important;
}

.df-block-code .token.important,
	.df-block-code .token.bold {
  font-weight: 700;
}

.df-block-code .token.italic {
  font-style: italic;
}

/* Optional header-strip chrome — language label + copy button across the top.
	   Used by the docs-site template variant; the loader-driven copy-stack chrome
	   above (Copy button below the block) is the other shape. Both share the token
	   theming. The strip-variant wraps content in a bordered, rounded, clipped panel. */

/* ---------------------------- */

/* ANCHOR Component Examples	*/

/* ---------------------------- */

/*
		Docs-site patterns for showing component examples with toggleable source code.
		All examples wrap in .df-example (vertical stack with code toggle + copy buttons).

		Two visual container types:

		1. df-example-diagram — Structural wireframe diagrams
		   Shows how page landmarks relate (header/main/footer, sidebar splits).
		   NOT running real DF components — labeled boxes representing structure.
		   Uses child classes: -header, -footer, -main, -section.
		   Container has p-0 + overflow-hidden for an edge-to-edge mini page feel.

		2. df-example-section — Live component demos (dogfooding)
		   The real DF container (section-grid, section-flex, etc.) IS the demo.
		   Just adds a key border to visually frame the live container.
		   Children use .df-demo to make blocks visible with labels.
		   Shows actual grid columns, real gaps, real wrapping behavior.

		Also available:
		- df-example-preview — Generic padded container for non-grid demos
		  (stacks, buttons, forms, data rows, etc.)
		- df-demo / df-demo-alt / df-demo-outline — Block label styles
		  for making children visible inside any container type.
	*/

.df-example-code.hide {
  display: none;
}

/* Demo blocks for component examples */

/* §13.7 carve-out: demo-alt border (0.3) and demo-outline border (0.4) are mid-range alphas with no matching shader token (light 0.15, base 0.60); visually calibrated to demo-box contrast. Only 2 instances, below 3+ escalation threshold. */

/* -------------------------------- */

.\[xml\:lang\] {
  xml: lang;
}

/* Injects Tailwind utility classes and any plugin utility classes								*/

/* -------------------------------------------------------------------------------------------- */

/* !SECTION Required Tailwind Directives - DO NOT EDIT											*/

/* -------------------------------------------------------------------------------------------- */

/* ------------------------------------------------------------------------------------------------------------ */

/* ------------------------------------------------------------------------------------------------------------ */

/* ------------------------------------------------------------------------------------------------------------ */

/* ------------------------------------------------------------------------------------------------------------ */

/* -------------------------------------------------------------------------------------------- */

/* SECTION CONFIG Fonts																			*/

/* -------------------------------------------------------------------------------------------- */

/* LAYER base begin				*/

/* Do not edit 					*/

/* !LAYER base end 					*/

/* -------------------------------------------- */

/* !SECTION CONFIG Fonts						*/

/* -------------------------------------------- */

/* ---------------------------- */

/* LAYER :root begin			*/

:root {
  /* Do not edit			*/
  /* ---------------------------- */
  /* -------------------------------------------- */
  /* SECTION CONFIG Quick Setup Variables			*/
  /* -------------------------------------------- */
  /* SECTION - QS IMPORT START    */
  /* ---------------------------- */
  /* ANCHOR Font Assignments		*/
  /* ---------------------------- */
  /* ASSIGNMENTS */
  /* Assign your Heading, Body, and Display Fonts from Font Setup to their appropriate uses. */
  /* ANCHOR Theme Base Variables - Fonts */
  --font-display: displayFontFamily;
  /* Display role token. Do not change — must match @font-face name above (Satoshi as shipped). */
  --font-display-alt1: sans-serif;
  /* First fallback for Display. Use "serif" or "sans-serif" matching your font's classification. */
  --font-display-alt2: system-ui;
  /* Second fallback for Display. Always keep "system-ui". */
  --font-heading: headingFontFamily;
  /* Heading role token. Do not change — must match @font-face name above (Satoshi as shipped). */
  --font-heading-alt1: sans-serif;
  /* First fallback for Heading. Use "serif" or "sans-serif" matching your font's classification. */
  --font-heading-alt2: system-ui;
  /* Second fallback for Heading. Always keep "system-ui". */
  --font-body: bodyFontFamily;
  /* Body role token. Do not change — must match @font-face name above (General Sans as shipped). */
  --font-body-alt1: sans-serif;
  /* First fallback for Body. Use "serif" or "sans-serif" matching your font's classification. */
  --font-body-alt2: system-ui;
  /* Second fallback for Body. Always keep "system-ui". */
  --font-mono: monoFontFamily;
  /* Mono role token. Do not change — must match @font-face name above (Commit Mono as shipped). */
  --font-mono-alt1: ui-monospace;
  /* First fallback for Mono. "ui-monospace" picks OS-native mono (SF Mono macOS, Cascadia Windows). */
  --font-mono-alt2: monospace;
  /* Second fallback for Mono. Generic CSS keyword guaranteeing some mono renders. */
  --font-icon: iconFontFamily;
  /* Icon role token. Used by bare <i> elements (no library class) — e.g. ligature-API like Material Symbols, or project brand glyphs. Class-API libraries (.fa-*, .ph-*, .ti-*) override via specificity. See df-rules.md §1.5. */
  /* -------------------------------------------------------------------------------------------- */
  /* ANCHOR Quick Setup Variables																	*/
  /* -------------------------------------------------------------------------------------------- */
  /* --qs variables are used in the Quick Setup to define theme colors and font usage.			*/
  /* These variables can also be overriden on page level via inline styles on the HTML element.	*/
  /* -------------------------------------------------------------------------------------------- */
  /* ANCHOR Theme Base Variables - Colors */
  --qs-color-key: 82 82 82;
  --qs-color-key-rgb: 82, 82, 82;
  --qs-color-key-end: 12 12 12;
  --qs-color-key-end-rgb: 12, 12, 12;
  --qs-color-primary: 12 12 12;
  --qs-color-secondary: 117 117 117;
  --qs-color-tertiary: 204 204 204;
  --qs-color-invert: 255 255 255;
  --qs-color-disabled: 204 204 204;
  --qs-color-background: 255 255 255;
  --qs-color-background-start: 255 255 255;
  --qs-color-background-start-rgb: 255, 255, 255;
  --qs-color-background-end: 255 255 255;
  --qs-color-background-end-rgb: 255, 255, 255;
  --qs-color-background-direction: right top;
  /* ANCHOR Theme Base Invert Variables - Dark Mode Swap Anchors */
  /* Dark mode (html.df-dark, applied in theming.css) is the primary↔background SWAP, by reference. */
  /* These -invert values are the swap TARGETS for the DEFAULT palette: background-invert takes a   */
  /* dark value (≈ primary), primary-invert takes a softened-light value (≈ background). Greys ride  */
  /* along (no -invert). --qs-color-key-invert is the dark-surface heading key, rendered via         */
  /* gradient-text-key-invert (see theming.css §config-text-key-invert + the .theme-key family).     */
  /* DEFAULT = WHITE (guaranteed-light). The .theme-key/.theme-key-alt SURFACES paint their bg with  */
  /* the brand key, so their headings consume key-invert and MUST contrast it — only a light value   */
  /* clears 3:1 on a saturated key surface (validated 2026-06-11: grey 173 = 1.61:1 on CS magenta    */
  /* FAILS; white = 3.61:1 PASS). Do NOT derive key-invert from the base key (HSL L-flip / photo-     */
  /* negative): on a mid-lightness saturated brand it stays brand-hued and collides on .theme-key.    */
  /* A brand may TINT key-invert only if the tint still clears contrast on its OWN key surface.       */
  --qs-color-background-invert: 12 12 12;
  --qs-color-background-start-invert: 12 12 12;
  --qs-color-background-start-invert-rgb: 12, 12, 12;
  --qs-color-background-end-invert: 12 12 12;
  --qs-color-background-end-invert-rgb: 12, 12, 12;
  --qs-color-primary-invert: 240 240 240;
  --qs-color-key-invert: 255 255 255;
  --qs-color-key-invert-end: 255 255 255;
  /* ANCHOR Theme Alt Variables - Colors */
  --qs-color-key-alt: 12 12 12;
  --qs-color-key-alt-rgb: 12, 12, 12;
  --qs-color-key-end-alt: 46 46 46;
  --qs-color-key-end-alt-rgb: 46, 46, 46;
  --qs-color-primary-alt: 12 12 12;
  --qs-color-secondary-alt: 117 117 117;
  --qs-color-tertiary-alt: 204 204 204;
  --qs-color-invert-alt: 255 255 255;
  --qs-color-disabled-alt: 204 204 204;
  --qs-color-background-alt: 255 255 255;
  --qs-color-background-start-alt: 255 255 255;
  --qs-color-background-start-alt-rgb: 255, 255, 255;
  --qs-color-background-end-alt: 237 237 237;
  --qs-color-background-end-alt-rgb: 237, 237, 237;
  --qs-color-background-alt-direction: right top;
  /* ANCHOR Theme Alt Invert Variables - Dark Mode Swap Anchors */
  /* Alt-palette swap TARGETS + alt dark-surface heading key. Same model as the default-palette    */
  /* invert anchors above (the existing alt cascade at core.css re-points --color-key-invert →      */
  /* alt automatically inside .theme-alt contexts). --qs-color-key-alt-invert defaults WHITE — was  */
  /* the red-orange placeholder (250 0 2 / 250 160 2); white guarantees contrast on any dark alt    */
  /* surface for both palettes. A brand re-tints if it wants an accent. (Changes existing           */
  /* alt-invert heading default red→white in BOTH modes — locked 2026-06-09, validated 16/16.)      */
  --qs-color-background-alt-invert: 12 12 12;
  --qs-color-background-start-alt-invert: 12 12 12;
  --qs-color-background-start-alt-invert-rgb: 12, 12, 12;
  --qs-color-background-end-alt-invert: 30 30 30;
  --qs-color-background-end-alt-invert-rgb: 30, 30, 30;
  --qs-color-primary-alt-invert: 240 240 240;
  --qs-color-key-alt-invert: 255 255 255;
  --qs-color-key-end-alt-invert: 255 255 255;
  /* ANCHOR Theme Header Variables - Colors */
  --qs-color-header-background: 255 255 255;
  --qs-color-header-primary: 12 12 12;
  --qs-color-header-nav-link: 117 117 117;
  --qs-font-header-nav-weight: 700;
  /* ANCHOR Theme Footer Variables - Colors */
  --qs-color-footer-background: 12 12 12;
  --qs-color-footer-primary: 243 243 243;
  --qs-color-footer-nav-link: 221 221 221;
  --qs-font-footer-nav-weight: 700;
  /* ANCHOR Theme Base Variables - Rounding */
  --qs-rounded-base: 0px;
  /* Base element rounding — buttons, inputs, avatars. Fully square: matches brand mark geometry. */
  --qs-rounded-min: 4px;
  /* Small softening — chips, badges, .rounded checkboxes, skeleton text rows. */
  --qs-rounded-corner: 4px;
  /* Standard container rounding — LANDMARK / SECTION / BLOCK frames, cards. */
  --qs-rounded-field: 4px;
  /* Form input rounding — matches container .corner; no longer pill-leaning. */
  /* ---------------------------- */
  /* ANCHOR Theme Base Variables - Motion */
  /* ---------------------------- */
  /* Three speeds + four curves (M3-aligned trio). Every DF transition/animation resolves
	   through these — the Extended GLOBAL TRANSITIONS vars derive from them, so the
	   existing transition-set/duration-base utilities pick them up automatically. */
  --qs-duration-fast: 150ms;
  /* Micro-interactions: hovers, toggles, ratings, row highlights. */
  --qs-duration-base: 300ms;
  /* Workhorse speed (matches the long-standing 300ms default). */
  --qs-duration-slow: 500ms;
  /* Large-surface moves: header condense, reveals, overlays. */
  --qs-ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
  /* Workhorse curve — identical to the prior --transition-timing-base value. */
  --qs-ease-enter: cubic-bezier(0, 0, 0.2, 1);
  /* Decelerate — elements arriving. */
  --qs-ease-exit: cubic-bezier(0.4, 0, 1, 1);
  /* Accelerate — elements leaving. */
  /* Spring-feel via CSS linear(). STARTING CANDIDATE — verify rendering on the T7 test page
	   across Chrome + Safari; regenerating coefficients is in-scope (plan correction #5). */
  --qs-ease-spring: linear(0, 0.008 1.1%, 0.031 2.2%, 0.122 4.6%, 0.27 7.4%, 0.471 10.7%, 0.73 14.9%, 0.964 19.1%, 1.085 22.7%, 1.15 26.3%, 1.157 30.3%, 1.121 34.6%, 1.069 40%, 1.016 46.1%, 0.99 52.1%, 0.986 57.4%, 1.001 69.3%, 1.002 81.6%, 1);
  /* ---------------------------- */
  /* ANCHOR Theme Base Variables - Glass */
  /* ---------------------------- */
  /* Glass family knobs. Tint is NOT declared here — .glass consumes
	   rgb(var(--qs-glass-tint, var(--color-background)) / A) so glass follows the active theme
	   by default (inline-fallback token routing, S85 pattern); brands that want a fixed tint
	   declare --qs-glass-tint as an RGB triplet in their preset. */
  --qs-glass-blur: 24px;
  --qs-glass-saturation: 180%;
  /* !SECTION - QS IMPORT END     */
  /* -------------------------------------------- */
  /* !SECTION CONFIG Quick Setup Variables		*/
  /* -------------------------------------------- */
  /* -------------------------------------------- */
  /* SECTION CONFIG Custom Variables				*/
  /* -------------------------------------------- */
  /* -------------------------------------------------------------------------------------------- */
  /* ANCHOR Project Custom Variables																*/
  /* -------------------------------------------------------------------------------------------- */
  /* ANCHOR Main Theme Image/Video Variables */
  --theme-bg-image: url('../src/pages/samples/images/nghtmre-bg-image.png');
  /* Default: none */
  --theme-bg-image-position: bottom;
  /* Default: center */
  --theme-bg-video-position: center;
  /* Default: center */
  /* ANCHOR Theme Alt Image/Video Variables */
  --theme-alt-bg-image: none;
  /* Default: none */
  --theme-alt-bg-image-position: center;
  /* Default: center */
  --theme-alt-bg-video-position: center;
  /* Default: center */
  /* -------------------------------------------- */
  /* !SECTION CONFIG Custom Variables				*/
  /* -------------------------------------------- */
  /* ---------------------------- */
}

/* Do not edit				*/

/* !LAYER :root end	 			*/

/* ---------------------------- */

/* NOTE CSS STATIC BELOW THIS LINE */

/* ------------------------------------------------------------------------------------------------------------ */

/* ------------------------------------------------------------------------------------------------------------ */

/* End of configurable theme variables — code below is static framework									*/

/* ------------------------------------------------------------------------------------------------------------ */

/* ------------------------------------------------------------------------------------------------------------ */

/* -------------------------------------------- */

/* SECTION CONFIG Extended Variables			*/

/* -------------------------------------------- */

/* LAYER :root begin			*/

:root {
  /* Do not edit			*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* SECTION Screens				*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* ANCHOR Screen Breakpoints	*/
  /* ---------------------------- */
  /* NOTE If you edit these values from the Preferred Value, you must also edit the @media breakpoints (search for "@media") in this file AND the values in lines 9 to 15 in df-preset.js due to CSS not supporting variables in media queries. See tailwind-setup.txt for more information. */
  --screen-sm: 640px;
  /* Preferred Value and Tailwind Default is 640px */
  --screen-md: 768px;
  /* Preferred Value and Tailwind Default is 768px */
  --screen-lg: 960px;
  /* Preferred Value is 960px. Use 1024px to set to Tailwind Default. */
  --screen-xl: 1440px;
  /* Preferred Value is 1440px. Use 1280px to set to Tailwind Default */
  --screen-2xl: 1600px;
  /* Preferred Value is 1600px. Use 1536px to set to Tailwind Default */
  /* ---------------------------- */
  /* !SECTION Screens				*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* SECTION Layout				*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* ANCHOR Units & Grid			*/
  /* ---------------------------- */
  /* Settings here configure the base unit and the overall grid for each screen. */
  /* LAYOUT - BASE UNIT */
  /* Specify the grid point base unit size (px/rem) for your layout. */
  --layout-unit: 4px;
  /* Must be an even number between 2px and 16px. Preferred value is 4px or 0.25rem.  */
  /* LAYOUT - GRID SYSTEM	*/
  /* Specify the column count for each screen. */
  --layout-cols-base: 6;
  /* Mobile-first default count which applies below the screen-sm breakpoint. Preferred value is 6 */
  --layout-cols-sm: 6;
  /* Preferred value is 6 */
  --layout-cols-md: 6;
  /* Preferred value is 6 */
  --layout-cols-lg: 12;
  /* Preferred value is 12 */
  --layout-cols-xl: 12;
  /* Preferred value is 12 */
  --layout-cols-2xl: 12;
  /* Preferred value is 12 */
  /* ---------------------------- */
  /* ANCHOR Adaptive Behavior		*/
  /* ---------------------------- */
  /* This defines the default adaptive behavior. Keeping the default Preferred Values is strongly recommended. */
  /* MINIMUM GRID COLUMNS */
  /* This is the minimum column count for which a controlling parent element can be for each screen. */
  --layout-cols-base-min: 2;
  /* Preferred value is 2 OR one-third of layout-cols rounded to an integer > 1.  */
  --layout-cols-sm-min: 1;
  /* Preferred value is 1 OR one-fourth of layout-cols-sm rounded to an integer ≥ 1.  */
  --layout-cols-md-min: 1;
  /* Preferred value is 1 OR one-fourth of layout-cols-md rounded to an integer ≥ 1.  */
  --layout-cols-lg-min: 1;
  /* Preferred value is 1 OR one-eighth of layout-cols-lg rounded to an integer ≥ 1.  */
  --layout-cols-xl-min: 1;
  /* Preferred value is 1 OR one-eighth of layout-cols-xl rounded to an integer ≥ 1.  */
  --layout-cols-2xl-min: 1;
  /* Preferred value is 1 OR one-eighth of layout-cols-2xl rounded to an integer ≥ 1.  */
  /* ADAPTIVE GRID COLUMNS */
  /* The following are column counts relative to your layout-cols above. Generally there are only 2 sets based on your chosen column counts per breakpoint, however if an unusual variation is used, it can be adapted here. Round up to next integer when dividing. */
  --layout-cols-base-third: 2;
  --layout-cols-base-half: 3;
  --layout-cols-base-twothird: 4;
  --layout-cols-sm-third: 2;
  --layout-cols-sm-half: 3;
  --layout-cols-sm-twothird: 4;
  --layout-cols-md-third: 2;
  --layout-cols-md-half: 3;
  --layout-cols-md-twothird: 4;
  --layout-cols-lg-sixth: 2;
  --layout-cols-lg-quarter: 3;
  --layout-cols-lg-third: 4;
  --layout-cols-lg-fivetwelfth: 5;
  --layout-cols-lg-half: 6;
  --layout-cols-lg-seventwelfth: 7;
  --layout-cols-lg-twothird: 8;
  --layout-cols-lg-threefourth: 9;
  --layout-cols-lg-fivesixth: 10;
  --layout-cols-lg-eleventwelfth: 11;
  --layout-cols-xl-sixth: 2;
  --layout-cols-xl-quarter: 3;
  --layout-cols-xl-third: 4;
  --layout-cols-xl-fivetwelfth: 5;
  --layout-cols-xl-half: 6;
  --layout-cols-xl-seventwelfth: 7;
  --layout-cols-xl-twothird: 8;
  --layout-cols-xl-threefourth: 9;
  --layout-cols-xl-fivesixth: 10;
  --layout-cols-xl-eleventwelfth: 11;
  --layout-cols-2xl-sixth: 2;
  --layout-cols-2xl-quarter: 3;
  --layout-cols-2xl-third: 4;
  --layout-cols-2xl-fivetwelfth: 5;
  --layout-cols-2xl-half: 6;
  --layout-cols-2xl-seventwelfth: 7;
  --layout-cols-2xl-twothird: 8;
  --layout-cols-2xl-threefourth: 9;
  --layout-cols-2xl-fivesixth: 10;
  --layout-cols-2xl-eleventwelfth: 11;
  /* FLEX BLOCK MINIMUM */
  /* For container blocks with a Flex Parent only. */
  --layout-basis-min: 33.333333%;
  /* This is the minimum width on mobile which a controlling parent element can be. Preferred value is 33.333333%. */
  /* ---------------------------- */
  /* ANCHOR Gutters				*/
  /* ---------------------------- */
  /* Specify your standard gutter spacing for each screen. */
  --spacing-gutter-base: 24px;
  --spacing-gutter-sm: 24px;
  --spacing-gutter-md: 24px;
  --spacing-gutter-lg: 24px;
  --spacing-gutter-xl: 32px;
  --spacing-gutter-2xl: 32px;
  /* ---------------------------- */
  /* ANCHOR Rows & Columns		*/
  /* ---------------------------- */
  /* Settings here define specific measurements in px or rem. Keeping the default Preferred Values or Designframe-calculated values is strongly recommended. */
  /* COLUMNS */
  /* Specify the calculated col width for each screen. This sets some min-widths and is available using any width utility like w-col, min-w-col-sm, etc. */
  --layout-col-width-base: 32px;
  /* This is the base mobile-first default size which applies below the screen-sm breakpoint  */
  --layout-col-width-sm: 76px;
  --layout-col-width-md: 96px;
  --layout-col-width-lg: 52px;
  --layout-col-width-xl: 84px;
  --layout-col-width-2xl: 96px;
  /* ROWS */
  /* Specify the calculated row height for each screen. This sets some min-heights and is available using any height utility like auto-rows-sm, h-row, min-h-row-sm, etc. */
  --layout-row-height-base: 48px;
  /* This is the base mobile-first default size which applies below the screen-sm breakpoint  */
  --layout-row-height-sm: 72px;
  --layout-row-height-md: 48px;
  --layout-row-height-lg: 72px;
  --layout-row-height-xl: 72px;
  --layout-row-height-2xl: 72px;
  /* ---------------------------- */
  /* ANCHOR Shoulders & Offsets	*/
  /* ---------------------------- */
  /* STACKING */
  /* Specify your offsets when stacking with overlap. */
  --offset-layout-unit: 4px;
  --offset-element-min: 6px;
  --offset-element-base: 12px;
  --offset-element-sm: 16px;
  --offset-element-md: 24px;
  --offset-element-lg: 60px;
  --offset-element-xl: 96px;
  --offset-element-2xl: 128px;
  --offset-element-3xl: 168px;
  --offset-element-4xl: 200px;
  --offset-li-base: 24px;
  /* SHOULDERS */
  /* Specify your standard shoulder space for each screen */
  --spacing-shoulder-base: 24px;
  --spacing-shoulder-sm: 32px;
  --spacing-shoulder-md: 36px;
  --spacing-shoulder-lg: 36px;
  --spacing-shoulder-xl: 40px;
  --spacing-shoulder-2xl: 48px;
  /* HEADER */
  /* Add your header height offset spacing here */
  --offset-header-base: 48px;
  --offset-header-sm: 64px;
  --offset-header-md: 64px;
  --offset-header-lg: 64px;
  --offset-header-xl: 64px;
  --offset-header-2xl: 72px;
  /* FOOTER */
  /* Add your footer height offset spacing here */
  --offset-footer-base: 56px;
  --offset-footer-sm: 56px;
  --offset-footer-md: 72px;
  --offset-footer-lg: 72px;
  --offset-footer-xl: 72px;
  --offset-footer-2xl: 72px;
  /* SPECIAL OFFSETS */
  /* Add special or custom offset spacing here. */
  --offset-section-nav: 104px;
  /* ---------------------------- */
  /* !SECTION Layout				*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* SECTION Spacing & Sizing		*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* ANCHOR Padding				*/
  /* ---------------------------- */
  /* Default and adaptive settings here define specific measurements in px or rem. Keeping the default Preferred Values or Designframe-calculated values is strongly recommended. */
  /* HEADER */
  /* Specify your standard section padding for each screen. Preferred value matches half gutter spacing. */
  --pad-header-base: 12px;
  --pad-header-sm: 12px;
  --pad-header-md: 12px;
  --pad-header-lg: 12px;
  --pad-header-xl: 16px;
  --pad-header-2xl: 16px;
  /* SECTIONS	*/
  /* Specify your standard section padding for each screen. Preferred value matches 2 times gutter spacing. */
  --pad-section-base: 48px;
  --pad-section-sm: 48px;
  --pad-section-md: 48px;
  --pad-section-lg: 48px;
  --pad-section-xl: 64px;
  --pad-section-2xl: 64px;
  /* ARTICLES	*/
  /* Specify your standard article (card) padding for each screen. Preferred value matches text-p3-size to 1.5x text-p3-size OR 0.5 to 0.667 times gutter spacing rounded. */
  --pad-article-base: 16px;
  --pad-article-sm: 16px;
  --pad-article-md: 16px;
  --pad-article-lg: 16px;
  --pad-article-xl: 24px;
  --pad-article-2xl: 24px;
  /* ELEMENTS	*/
  /* Specify your standard element padding for each screen. Preferred value matches text-p3-size to 1.5x text-p3-size OR 0.5 to 0.667 times gutter spacing rounded. */
  --pad-element-base: 16px;
  --pad-element-sm: 16px;
  --pad-element-md: 16px;
  --pad-element-lg: 16px;
  --pad-element-xl: 16px;
  --pad-element-2xl: 16px;
  /* BASE	*/
  /* Specify your base padding for each screen. Preferred value matches your layout-unit. */
  --pad-base-base: var(--layout-unit);
  --pad-base-sm: var(--layout-unit);
  --pad-base-md: var(--layout-unit);
  --pad-base-lg: var(--layout-unit);
  --pad-base-xl: var(--layout-unit);
  --pad-base-2xl: var(--layout-unit);
  /* CHIPS */
  /* Specify your padding for Chips (visual tags/pills). */
  --pad-x-chip: calc(2 * var(--layout-unit));
  /* Height is derived from text-chip-lh */
  /* ---------------------------- */
  /* ANCHOR Gaps					*/
  /* ---------------------------- */
  /* Default & adaptive settings here define specific measurements in px or rem. Keeping the default Preferred Values or Designframe-calculated values is strongly recommended. */
  /* SECTIONS	*/
  /* Specify your standard section child (items within a section) gap spacing for each screen. Preferred value matches gutter spacing. */
  --gap-section-base: var(--spacing-gutter-base);
  --gap-section-sm: var(--spacing-gutter-sm);
  --gap-section-md: var(--spacing-gutter-md);
  --gap-section-lg: var(--spacing-gutter-lg);
  --gap-section-xl: var(--spacing-gutter-xl);
  --gap-section-2xl: var(--spacing-gutter-2xl);
  /* BLOCK */
  /* Specify your standard block child item spacing for each screen. Preferred value matches your spacing-gutter. */
  --spacing-block-base: var(--spacing-gutter-base);
  --spacing-block-sm: var(--spacing-gutter-sm);
  --spacing-block-md: var(--spacing-gutter-md);
  --spacing-block-lg: var(--spacing-gutter-lg);
  --spacing-block-xl: var(--spacing-gutter-xl);
  --spacing-block-2xl: var(--spacing-gutter-2xl);
  /* CARD */
  /* Specify your standard card child item spacing for each screen */
  /* Preferred value matches your pad-article */
  --spacing-card-base: var(--pad-article-base);
  --spacing-card-sm: var(--pad-article-sm);
  --spacing-card-md: var(--pad-article-md);
  --spacing-card-lg: var(--pad-article-lg);
  --spacing-card-xl: var(--pad-article-xl);
  --spacing-card-2xl: var(--pad-article-2xl);
  /* ARTICLES	*/
  /* Specify your standard article child gap spacing for each screen. Preferred value matches pad-article. */
  --gap-article-base: var(--pad-article-base);
  --gap-article-sm: var(--pad-article-sm);
  --gap-article-md: var(--pad-article-md);
  --gap-article-lg: var(--pad-article-lg);
  --gap-article-xl: var(--pad-article-xl);
  --gap-article-2xl: var(--pad-article-2xl);
  /* STACKS */
  /* Specify your standard stack (grouped elements) gap spacing for each screen. Preferred value matches pad-element. */
  --gap-stack-base: var(--pad-element-base);
  --gap-stack-sm: var(--pad-element-sm);
  --gap-stack-md: var(--pad-element-md);
  --gap-stack-lg: var(--pad-element-lg);
  --gap-stack-xl: var(--pad-element-xl);
  --gap-stack-2xl: var(--pad-element-2xl);
  /* FORMS */
  /* Specify your standard stack (grouped elements) gap spacing for each screen. Preferred value matches gap-element. */
  --gap-form-base: 12px;
  --gap-form-sm: 12px;
  --gap-form-md: 12px;
  --gap-form-lg: 12px;
  --gap-form-xl: 16px;
  --gap-form-2xl: 16px;
  /* HGROUP */
  /* Specify your standard HGROUP gap spacing (spacing between H and P elements in an HGROUP element) here. */
  --gap-hgroup-display: 16px;
  /* Preferred value matches text-p3-size */
  --gap-hgroup-heading: 8px;
  /* Preferred value matches 0.5 of text-p3-size rounded */
  --gap-hgroup-title: 4px;
  /* Preferred value matches 0.25 of text-p3-size rounded */
  /* ELEMENTS	*/
  /* Specify your standard element child (items within an element) gap spacing for each screen. Preferred value matches half pad-element. */
  --gap-element-base: 12px;
  --gap-element-sm: 12px;
  --gap-element-md: 12px;
  --gap-element-lg: 12px;
  --gap-element-xl: 16px;
  --gap-element-2xl: 16px;
  /* SUB-ELEMENT */
  /* Specify your standard sub spacing for each screen. This is also applied to adaptive stacks. Preferred value matches half of pad-element. */
  --spacing-sub-base: 8px;
  --spacing-sub-sm: 8px;
  --spacing-sub-md: 8px;
  --spacing-sub-lg: 8px;
  --spacing-sub-xl: 12px;
  --spacing-sub-2xl: 12px;
  /* ---------------------------- */
  /* ANCHOR Sizing				*/
  /* ---------------------------- */
  /* ELEMENT */
  /* Specify your standard element sizing. */
  /* NOTE --element-base-unit (40px) is a spacing token — used as `pl-element-base-unit` / `mb-element-base-unit` for padding/margin contexts. --element-base-size (below, 40px) is the dimension token used for width/height/min/max. Same numeric value, different §13.8 scale categories — naming preserved here for legacy preset-key compatibility (zero HTML consumers; only 2 internal @apply uses). */
  --element-base-unit: 40px;
  /* Preferred value matches 2.5 times text-base-size */
  --element-hairline-size: 1px;
  /* Hairline border/divider thickness (§13.8) */
  --element-min-size: 24px;
  /* Preferred value matches text-base-lh */
  --element-sub-size: 16px;
  /* Preferred value matches text-base-size */
  --element-compact-size: 32px;
  /* Compact interactive height — smaller than base, taller than min (§13.8) */
  --element-base-size: 40px;
  /* Preferred value matches --element-base-unit */
  /* C Scale — content-WIDTH ladder: column spans on the XL grid, gutter-inclusive
	   (N×col-width-xl 84 + (N−1)×gutter-xl 32); sm steps down to 1 col @ lg. */
  --element-c-sm:  52px;
  /* 1 col @ lg grid (step-down)   */
  --element-c-md:  84px;
  /* 1 col @ xl grid               */
  --element-c-lg:  200px;
  /* 2 cols @ xl  (2×84 + 1×32)    */
  --element-c-xl:  316px;
  /* 3 cols @ xl  (3×84 + 2×32)    */
  --element-c-2xl: 432px;
  /* 4 cols @ xl                   */
  --element-c-3xl: 548px;
  /* 5 cols @ xl                   */
  --element-c-4xl: 664px;
  /* 6 cols @ xl                   */
  /* R Scale — content-HEIGHT ladder: row spans on the XL grid, gutter-inclusive
	   (N×row-height 72 + (N−1)×gutter-xl 32); sm steps down to 1 row @ base. */
  --element-r-sm:  48px;
  /* 1 row @ base grid (step-down) */
  --element-r-md:  72px;
  /* 1 row @ xl grid               */
  --element-r-lg:  176px;
  /* 2 rows @ xl  (2×72 + 1×32)    */
  --element-r-xl:  280px;
  /* 3 rows @ xl  (3×72 + 2×32)    */
  --element-r-2xl: 384px;
  /* 4 rows @ xl                   */
  --element-r-3xl: 488px;
  /* 5 rows @ xl                   */
  --element-r-4xl: 592px;
  /* 6 rows @ xl                   */
  --element-max-h-base: 408px;
  /* Preferred value matches screen 6row. */
  --element-max-h-sm: 360px;
  /* Preferred value matches screen 4row. */
  --element-max-h-md: 552px;
  /* Preferred value matches screen 8row. */
  --element-max-h-lg: 552px;
  /* Preferred value matches screen 6row. */
  --element-max-h-xl: 592px;
  /* Preferred value matches screen 6row. */
  --element-max-h-2xl: 592px;
  /* Preferred value matches screen 6row. */
  /* SPECIAL ELEMENTS */
  /* Specify special instance element sizing here. */
  --element-nav-min-height: 24px;
  /* Preferred value matches 1.5 of text-base-size */
  --element-nav-max-height: var(--text-nav-lh);
  /* Preferred value matches --text-nav-lh */
  /* ---------------------------- */
  /* !SECTION Spacing & Sizing	*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* SECTION Rounding & Borders	*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* ANCHOR Radius				*/
  /* ---------------------------- */
  /* Default & adaptive settings here define specific measurements in px or rem. Keeping the default Preferred Values or Designframe-calculated values is strongly recommended. */
  /* GENERAL */
  /* Set via --qs-rounded-* in CONFIG Quick Setup Variables. Override here only for advanced usage. */
  --rounded-min: var(--qs-rounded-min);
  --rounded-corner: var(--qs-rounded-corner);
  /* ARTICLES	*/
  /* Specify your standard article (card) rounding for each screen. Preferred value matches pad-article-*. Set all to 0px for no block rounding. */
  --rounded-article-base: var(--pad-article-base);
  --rounded-article-sm: var(--pad-article-sm);
  --rounded-article-md: var(--pad-article-md);
  --rounded-article-lg: var(--pad-article-lg);
  --rounded-article-xl: var(--pad-article-xl);
  --rounded-article-2xl: var(--pad-article-2xl);
  /* SPECIAL ELEMENTS */
  /* Specify your various element rounding, if any. If none, set to 0px. */
  --rounded-field: var(--qs-rounded-field);
  --rounded-full: 9999px;
  --rounded-chip: var(--qs-rounded-min);
  /* BASE UNIT */
  /* Set via --qs-rounded-base in CONFIG Quick Setup Variables. Override here only for advanced usage. */
  --rounded-base: var(--qs-rounded-base);
  /* ---------------------------- */
  /* ANCHOR Borders				*/
  /* ---------------------------- */
  /* For base border & elements, 1px is recommended. */
  /* BASE	*/
  /* Base Border isn't currently auto-applied. */
  --border-base: 1px;
  /* Utility Only. Not currently active in any classes */
  /* ELEMENTS	*/
  /* Set specific element default borders. */
  --border-button: 1px;
  --border-form: 1px;
  /* ---------------------------- */
  /* !SECTION Rounding & Borders	*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* SECTION Type Sizing			*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* ANCHOR Sizing				*/
  /* ---------------------------- */
  /* BASE SIZING */
  /* Specify base type size and line height for text. Base should be used as P3, and is equivalent to 1rem. Rem or px can be used for sizing, depending on your implementation and preferences. */
  --text-base-size: 16px;
  /* Must be an even number that is a multiple of Base Unit. Preferred value is 16px / default 1rem. */
  --text-base-lh: 24px;
  /* Must be 1 or more full Base Units larger than text-base-size. Preferred value is 1.5 of text-base-size. */
  /* DISPLAY SIZING */
  /* Default type size and line height for Display text. */
  --text-d1-size: 96px;
  /* Preferred value matches 6 of text-base-size */
  --text-d1-lh: 128px;
  /* Preferred value matches 8 of text-base-size */
  --text-d2-size: 72px;
  /* Preferred value matches 4.5 of text-base-size */
  --text-d2-lh: 96px;
  /* Preferred value matches 6 of text-base-size */
  --text-d3-size: 60px;
  /* Preferred value matches 3.75 of text-base-size */
  --text-d3-lh: 80px;
  /* Preferred value matches 5 of text-base-size */
  /* HEADING SIZING */
  /* Default type size and line height for Heading text. */
  --text-h1-size: 48px;
  /* Preferred value matches 3 of text-base-size */
  --text-h1-lh: 64px;
  /* Preferred value matches 4 of text-base-size */
  --text-h2-size: 32px;
  /* Preferred value matches 2 of text-base-size */
  --text-h2-lh: 40px;
  /* Preferred value matches 2.5 of text-base-size */
  --text-h3-size: 24px;
  /* Preferred value matches 1.5 of text-base-size */
  --text-h3-lh: 32px;
  /* Preferred value matches 2 of text-base-size */
  --text-h4-size: 20px;
  /* Preferred value matches 1.25 of text-base-size */
  --text-h4-lh: 28px;
  /* Preferred value matches 1.75 of text-base-size */
  --text-h5-size: 18px;
  /* Preferred value matches 1.125 of text-base-size */
  --text-h5-lh: 28px;
  /* Preferred value matches 1.75 of text-base-size */
  --text-h6-size: 16px;
  /* Preferred value matches text-base-size */
  --text-h6-lh: 24px;
  /* Preferred value matches 1.5 of text-base-size */
  --text-heb-size: 14px;
  /* Preferred value matches 0.875 of text-base-size */
  --text-heb-lh: 20px;
  /* Preferred value matches 1.25 of text-base-size */
  /* BODY SIZING */
  /* Default type size and line height for Body text. */
  --text-p1-size: 20px;
  /* Preferred value matches 1.25 of text-base-size */
  --text-p1-lh: 28px;
  /* Preferred value matches 1.75 of text-base-size */
  --text-p2-size: 18px;
  /* Preferred value matches 1.125 of text-base-size */
  --text-p2-lh: 28px;
  /* Preferred value matches 1.75 of text-base-size */
  --text-p3-size: 16px;
  /* Preferred value matches text-base-size */
  --text-p3-lh: 24px;
  /* Preferred value matches 1.5 of text-base-size */
  --text-p4-size: 14px;
  /* Preferred value matches 0.875 of text-base-size */
  --text-p4-lh: 20px;
  /* Preferred value matches 1.25 of text-base-size */
  --text-p5-size: 12px;
  /* Preferred value matches 0.75 of text-base-size */
  --text-p5-lh: 16px;
  /* Preferred value matches text-base-size */
  /* ANCHOR Icon Sizing			*/
  /* Default type size and line height for text-based Icons. Referenced by df-rules.md §1.5. */
  --text-i1-size: 72px;
  /* Preferred value matches text-d2-size */
  --text-i1-lh: 1;
  /* Preferred value is 1 */
  --text-i2-size: 48px;
  /* Preferred value matches text-d2-size */
  --text-i2-lh: 1;
  /* Preferred value is 1 */
  --text-i3-size: 32px;
  /* Preferred value matches 2 of text-base-size */
  --text-i3-lh: 1;
  /* Preferred value is 1 */
  --text-i4-size: 24px;
  /* Preferred value matches 1.5 of text-base-size */
  --text-i4-lh: 1;
  /* Preferred value is 1 */
  --text-i5-size: 16px;
  /* Preferred value matches text-base-size */
  --text-i5-lh: 1;
  /* Preferred value is 1 */
  --text-i6-size: 12px;
  /* Preferred value matches 0.75 of text-base-size */
  --text-i6-lh: 1;
  /* Preferred value is 1 */
  /* ANCHOR Element Sizing		*/
  /* Specify default type size and line height for general elements text applications. */
  --text-nav-size: 20px;
  /* Preferred value matches text-p1-size */
  --text-nav-lh: 40px;
  /* Preferred value matches 2.5 times text-base-size */
  --text-button-size: 18px;
  /* Preferred value matches text-p2-size */
  --text-button-lh: var(--text-nav-lh);
  /* Preferred value matches text-nav-lh */
  --text-chip-size: 12px;
  /* Preferred value matches text-p5-size */
  --text-chip-lh: 24px;
  /* Preferred value matches 2 times text-chip-size */
  --text-prose-cpl: 72;
  /* Reading-column width in chars per line. Consumed by max-w-prose (overrides Tailwind's 65ch default). 72 chosen for 12-col-grid coherence (576px = 12 * 48px); wider faces may prefer 64, narrower 80. */
  /* ANCHOR Adaptive Sizing		*/
  /* Specify default type size adaptive behavior for smaller (base, sm, md) screens. */
  --text-d1a-size: var(--text-d2-size);
  /* Preferred value matches text-d2-size */
  --text-d1a-lh: var(--text-d2-lh);
  /* Preferred value matches text-d2-lh */
  --text-d2a-size: var(--text-d3-size);
  /* Preferred value matches text-d3-size */
  --text-d2a-lh: var(--text-d3-lh);
  /* Preferred value matches text-d3-lh */
  --text-d3a-size: var(--text-h1-size);
  /* Preferred value matches text-h1-size */
  --text-d3a-lh: var(--text-h1-lh);
  /* Preferred value matches text-h1-lh */
  --text-h1a-size: var(--text-h2-lh);
  /* Preferred value matches text-h2-lh */
  --text-h1a-lh: 1;
  /* Preferred value is 1 */
  --text-i1a-size: var(--text-d3-size);
  /* Preferred value matches text-d3-size */
  --text-i1a-lh: var(--text-d3-lh);
  /* Preferred value matches text-d3-lh */
  --text-nava-size: var(--text-p2-size);
  /* Preferred value matches text-p2-size */
  --text-nava-lh: var(--text-nav-lh);
  /* Preferred value matches text-nav-lh */
  /* ---------------------------- */
  /* !SECTION Typography			*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* SECTION Effects				*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* ANCHOR Shadows				*/
  /* ---------------------------- */
  /* Utility extensions. Shadows should be entered as RGB values with alpha. */
  --shadow-light: 0px 0px 4px 0px rgba(0, 0, 0, var(--shadow-alpha-light));
  --shadow-base: 0px 2px 4px 0px rgba(0, 0, 0, var(--shadow-alpha-base));
  --shadow-heavy: 0px 4px 8px 2px rgba(0, 0, 0, var(--shadow-alpha-heavy));
  --drop-shadow-light: 0px 0px 4px rgba(0, 0, 0, var(--shadow-alpha-light));
  --drop-shadow-base: 0px 2px 4px rgba(0, 0, 0, var(--shadow-alpha-base));
  --drop-shadow-heavy: 0px 4px 8px rgba(0, 0, 0, var(--shadow-alpha-heavy));
  /* Shadow alpha sub-tokens — for compositional shadows (inset/side/directional) that can't reuse --shadow-* full tokens. Mirror --shadow-* alphas. See df-rules.md §13.7. */
  --shadow-alpha-light: 0.125;
  --shadow-alpha-base: 0.25;
  --shadow-alpha-heavy: 0.25;
  /* ---------------------------- */
  /* ANCHOR Blur					*/
  /* ---------------------------- */
  /* Utility extensions. */
  --blur-light: 24px;
  --blur-base: 48px;
  --blur-heavy: 64px;
  --blur-max: 128px;
  /* ---------------------------- */
  /* ANCHOR Overlays				*/
  /* ---------------------------- */
  /* Tokens shared by .overlay-pane (Free), .dfp-overlay-pane (Pro), and future overlay primitives (popover, toast, hover-card). Added S99 2026-05-20. */
  --color-bg-overlay: rgba(255, 255, 255, 0.82);
  --color-blur-amount: 8px;
  /* .dfp-overlay-pane sizing — bounds for resize-when-docked clamping + fixed-size overlay states. */
  --df-overlay-pane-docked-min-width: 280px;
  --df-overlay-pane-docked-max-width: 60vw;
  --df-overlay-pane-side-width: 320px;
  --df-overlay-pane-tb-height: 280px;
  /* .dfp-overlay-pane positioning offsets — viewport-edge insets for undocked variants. Added v0.99.51 (2026-05-26) for consumer override via :root cascade — restores the variable-driven positioning API that the S78 literal-12px refactor inadvertently removed. Defaults preserve pre-tokenization 12px values; consumers may override per chrome requirements (e.g., a page with a 64px header would set --df-overlay-pane-top-offset: 88px on :root or a page-shell selector to push the pane below their header). */
  --df-overlay-pane-top-offset: 12px;
  --df-overlay-pane-bottom-offset: 12px;
  --df-overlay-pane-left-offset: 12px;
  --df-overlay-pane-right-offset: 12px;
  /* ---------------------------- */
  /* ANCHOR Shader Alpha Values	*/
  /* ---------------------------- */
  /* Shaders can be applied as an extension for any Designframe Color such as key, primary, etc. Use by appending -shader, -shader-light, and -shader-heavy to those colors, for example bg-key-shader. */
  --shader-light: 0.15;
  --shader-base: 0.60;
  --shader-heavy: 0.85;
  /* ---------------------------- */
  /* !SECTION Effects				*/
  /* ---------------------------- */
  /* ------------------------------------	*/
  /* SECTION Interactions & Animation		*/
  /* ------------------------------------ */
  /* ---------------------------- */
  /* ANCHOR Transitions			*/
  /* ---------------------------- */
  /* GLOBAL TRANSITIONS */
  /* This sets the configurable transition-set utility which is applied to all default transitions. */
  --transition-property-base: all;
  --transition-timing-base: var(--qs-ease-standard);
  --transition-duration-base: var(--qs-duration-base);
  /* Derives from the QS motion trio — tune --qs-duration-base, not this. */
  /* ---------------------------- */
  /* ANCHOR Animations			*/
  /* ---------------------------- */
  /* GLOWS */
  /* Under development. */
  /* ------------------------------------	*/
  /* !SECTION Interactions & Animation	*/
  /* ------------------------------------ */
  /* -------------------------------------------- */
  /* SECTION COLORS & THEMING VALUES				*/
  /* -------------------------------------------------------------------------------------------- */
  /* Theming Colors																				*/
  /* -------------------------------------------------------------------------------------------- */
  /* Theme Colors are used as defaults and for all Designframe Themes. Colors should be entered	*/
  /* as RGB values with no alpha for Tailwind Opacity Modifiers to work. Designframe Color Themes	*/
  /* are independent of Tailwind's Dark Mode support. The use of the word "theme" here applies to */
  /* color palettes, not the Tailwind theme configuration. 										*/
  /* -------------------------------------------------------------------------------------------- */
  /* Theme Sets																					*/
  /* -------------------------------------------------------------------------------------------- */
  /* THEME is your main color set and is used to determine the logical INVERT variations.			*/
  /* THEME TRANSPARENT is same as THEME but with transparent background defaults for layering.	*/
  /* THEME INVERT is should be defined as the invert/dark mode equivalent of THEME.				*/
  /* THEME INVERT TRANSPARENT is same as THEME INVERT but with transparent background defaults.	*/
  /* -------------------------------------------------------------------------------------------- */
  /* THEME KEY is THEME-based but with Key Color(s) as backgrounds with colors adjusted.			*/
  /* THEME KEY GRADIENT is THEME KEY-based but with Key Gradient as backgrounds.				*/
  /* -------------------------------------------------------------------------------------------- */
  /* THEME ALT is an optional alternative color palette. 											*/
  /* THEME ALT TRANSPARENT is same as THEME ALT but with transparent background defaults.			*/
  /* THEME ALT INVERT is should be defined as the invert/dark mode equivalent of THEME ALT.		*/
  /* THEME ALT INVERT TRANSPARENT is same as THEME ALT INVERT but with transparent backgrounds.	*/
  /* -------------------------------------------------------------------------------------------- */
  /* THEME KEY ALT is THEME ALT-based but with Key Alt as backgrounds with colors adjusted.		*/
  /* THEME KEY ALT GRADIENT is THEME KEY ALT-based but with Key Alt Gradient as backgrounds.		*/
  /* -------------------------------------------------------------------------------------------- */
  /* ---------------------------- */
  /* SECTION THEME				*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* ANCHOR Key Colors			*/
  /* ---------------------------- */
  /* This sets the THEME standout color(s). Key is intended to be your brand's key/main color which is not black or white, and can be set as a color pair if you'd like to use a gradient as your key color. */
  --color-key: var(--qs-color-key);
  /* If key color is intended to be a gradient, then enter starting color here. */
  --color-key-rgb: var(--qs-color-key-rgb);
  /* Same as color-key but in comma-separated rgba format, excluding a. */
  --color-key-end: var(--qs-color-key-end);
  /* If key color is intended to be a gradient, then enter end color here. If not, then enter same as color-key. */
  --color-key-end-rgb: var(--qs-color-key-end-rgb);
  /* Same as color-key-end but in comma-separated rgba format, excluding a. */
  /* ---------------------------- */
  /* ANCHOR Standard Colors		*/
  /* ---------------------------- */
  /* This sets the THEME standard colors.	*/
  --color-primary: var(--qs-color-primary);
  /* Primary is intended to be black or the darkest monotone color used for standard text and similar applications. */
  --color-secondary: var(--qs-color-secondary);
  /* Secondary is meant to be a mid-to-dark gray or similar monotone color for help text and other secondary importance applications. */
  --color-tertiary: var(--qs-color-tertiary);
  /* Tertiary is intended as a mid-to-light (but still legible) gray or similar monotone color for least important text and color applications. */
  --color-background: var(--qs-color-background);
  /* Background is meant to be a while or the lightest monotone color used for backgrounds to contrast with the Primary and Key Colors. */
  --color-background-start: var(--qs-color-background-start);
  /* OPTIONAL - Enter Gradient Background Start Color. Enter same value as color-key if there is no gradient option for background. */
  --color-background-start-rgb: var(--qs-color-background-start-rgb);
  /* OPTIONAL - Same as color-background-start but in comma-separated rgba format, excluding a. */
  --color-background-end: var(--qs-color-background-end);
  /* OPTIONAL - Enter Gradient Background End Color. Enter same value as color-background-start if there is no gradient option for background. */
  --color-background-end-rgb: var(--qs-color-background-end-rgb);
  /* OPTIONAL - Same as color-background-end but in comma-separated rgba format, excluding a. */
  --color-background-direction: var(--qs-color-background-direction);
  /* NEEDED IF using color-background-start and -end to define direction of gradient. Use CSS format such as top, right top, right bottom, etc. */
  --color-disabled: var(--qs-color-disabled);
  /* Disabled is intended as a mid-to-light (but still legible) gray or similar monotone color for disabled element, text, and color applications. */
  /* ---------------------------- */
  /* ANCHOR Invert Colors			*/
  /* ---------------------------- */
  /* This sets the THEME INVERT and THEME KEY color palette variations, in combination with the colors above. Additionally, color-invert is used by DEFAULT and THEME elements. */
  --color-invert: var(--qs-color-invert);
  /* Usually matches color-background and is the opposite/invert of color-primary. */
  --color-key-invert: var(--qs-color-key-invert);
  /* Dark-surface heading key — references brand-tunable --qs-color-key-invert (default white). See ANCHOR Theme Base Invert Variables. */
  --color-key-invert-end: var(--qs-color-key-invert-end);
  /* See --color-key-invert. */
  --color-key-gradient-invert: 255 255 255;
  /* This color is used to create a pseudo-transparancy for hover states on gradient elements such as buttons. Preferred value is the same as --color-background */
  --color-key-gradient-invert-opacity: 0.9;
  /* This is the opacity for the color used to create a pseudo-transparancy for hover states on general gradient elements such as buttons. Preferred value is 1 if your body/sections have a solid color background, or 0.9 for gradient backgrounds.  */
  --color-key-gradient-active-opacity: 0.75;
  /* This is the opacity for the color used to create a pseudo-transparancy for active/hover states on gradient elements such as buttons. Preferred value is 1 if your body/sections have a solid color background, or 0.75 for gradient backgrounds.  */
  /* TODO Area for default hover theme behavior */
  /* ---------------------------- */
  /* !SECTION THEME (Default)		*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* SECTION THEME ALT			*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* ANCHOR Key Alt Colors		*/
  /* ---------------------------- */
  /* This sets the THEME ALT standout color(s). THEME ALT is intended to be an optional alternative theme for special/specific usage. */
  --color-key-alt: var(--qs-color-key-alt);
  /* OPTIONAL - Enter Alternate Color or Alternate Start Color. Enter same value as color-key if there is no alternate. */
  --color-key-alt-rgb: var(--qs-color-key-alt-rgb);
  /* Same as color-key-alt but in comma-separated rgba format, excluding a. */
  --color-key-end-alt: var(--qs-color-key-end-alt);
  /* OPTIONAL - Enter Alternate End Color if using Alternate Start Color. Enter same value as color-key-end if there is no alternate. */
  --color-key-end-alt-rgb: var(--qs-color-key-end-alt-rgb);
  /* Same as color-key-end-alt but in comma-separated rgba format, excluding a. */
  /* ---------------------------- */
  /* ANCHOR Standard Alt Colors	*/
  /* ---------------------------- */
  /* This sets the THEME ALT standard color(s). Enter the same values as THEME if you do not want to use THEME ALT. */
  --color-primary-alt: var(--qs-color-primary-alt);
  /* OPTIONAL - Enter same value as primary if there is no alternate. */
  --color-secondary-alt: var(--qs-color-secondary-alt);
  /* OPTIONAL - Enter same value as secondary if there is no alternate. */
  --color-tertiary-alt: var(--qs-color-tertiary-alt);
  /* OPTIONAL - Enter same value as tertiary if there is no alternate. */
  --color-background-alt: var(--qs-color-background-alt);
  /* OPTIONAL - Enter same value as background-default if there is no alternate. */
  --color-background-start-alt: var(--qs-color-background-start-alt);
  /* OPTIONAL - Enter Gradient Background Start Color. Enter same value as color-key if there is no gradient option for background. */
  --color-background-start-alt-rgb: var(--qs-color-background-start-alt-rgb);
  /* OPTIONAL - Same as color-background-start but in comma-separated rgba format, excluding a. */
  --color-background-end-alt: var(--qs-color-background-end-alt);
  /* OPTIONAL - Enter Gradient Background End Color. Enter same value as color-background-start if there is no gradient option for background. */
  --color-background-end-alt-rgb: var(--qs-color-background-end-alt-rgb);
  /* OPTIONAL - Same as color-background-end but in comma-separated rgba format, excluding a. */
  --color-background-alt-direction: var(--qs-color-background-alt-direction);
  /* NEEDED IF using color-background-alt-start and -alt-end to define direction of gradient. */
  --color-disabled-alt: var(--qs-color-disabled-alt);
  /* Disabled is intended as a mid-to-light (but still legible) gray or similar monotone color for disabled element, text, and color applications. */
  /* TODO Add in BG Gradient start/end */
  /* ---------------------------- */
  /* ANCHOR Invert Alt Colors		*/
  /* ---------------------------- */
  /* This sets the THEME ALT INVERT color palette variation, in combination with the ALT colors above. Additionally, color-invert-alt is used by THEME ALT elements. Enter the same values as THEME if you do not want to use THEME ALT. */
  --color-invert-alt: var(--qs-color-invert-alt);
  /* OPTIONAL - Enter same value as primary if there is no alternate. */
  --color-key-alt-invert: var(--qs-color-key-alt-invert);
  /* Alt dark-surface heading key — references --qs-color-key-alt-invert (default white; was red-orange placeholder 250 0 2). See ANCHOR Theme Alt Invert Variables. */
  --color-key-end-alt-invert: var(--qs-color-key-end-alt-invert);
  /* See --color-key-alt-invert. */
  --color-key-alt-gradient-invert: 255 255 255;
  /* OPTIONAL - This color is used to create a pseudo-transparancy for hover states on gradient elements such as buttons. Preferred value is the same as --color-background-alt */
  --color-key-alt-gradient-invert-opacity: 0.9;
  /* OPTIONAL - This is the opacity for the color used to create a pseudo-transparancy for hover states on gradient elements such as buttons. Preferred value is 1 if your body/sections have a solid color background, or 0.9 for gradient backgrounds.  */
  --color-key-alt-gradient-active-opacity: 0.75;
  /* This is the opacity for the color used to create a pseudo-transparancy for active/hover states on gradient elements such as buttons. Preferred value is 1 if your body/sections have a solid color background, or 0.8 for gradient backgrounds.  */
  /* ---------------------------- */
  /* !SECTION THEME ALT			*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* SECTION ALL THEMES COLORS	*/
  /* ---------------------------- */
  /* ---------------------------- */
  /* ANCHOR Alert Colors			*/
  /* ---------------------------- */
  /* These are default alert colors used across all themes. */
  --color-alert-notify: 96 165 250;
  /* Blue color preferred 0 181 255 */
  --color-alert-notify-heading: 29 79 216;
  --color-alert-notify-text: 37 99 235;
  --color-alert-notify-background: 219 234 254;
  --color-alert-warning: 250 204 21;
  /* Yellow color preferred 255 242 0 */
  --color-alert-warning-heading: 161 98 7;
  --color-alert-warning-text: 202 138 4;
  --color-alert-warning-background: 254 249 195;
  --color-alert-error: 248 113 113;
  /* Red color preferred 255 1 48 */
  --color-alert-error-heading: 185 28 28;
  --color-alert-error-text: 220 38 38;
  --color-alert-error-background: 254 226 226;
  --color-alert-success: 74 222 128;
  /* Green color preferred 1 255 48 */
  --color-alert-success-heading: 21 128 61;
  --color-alert-success-text: 22 163 74;
  --color-alert-success-background: 220 252 231;
  /* ---------------------------- */
  /* ANCHOR HEADER COLORS			*/
  /* ---------------------------- */
  /* These set optional Header Colors and Weight which can be applied as an override to any/all themes. */
  --color-header-background: var(--qs-color-header-background);
  --color-header-primary:  var(--qs-color-header-primary);
  --color-header-nav-link:  var(--qs-color-header-nav-link);
  --font-header-nav-weight: var(--qs-font-header-nav-weight);
  --color-header-background-alt: var(--qs-color-header-background);
  --color-header-primary-alt:  var(--qs-color-header-primary);
  --color-header-nav-link-alt:  var(--qs-color-header-nav-link);
  --font-header-nav-weight-alt: var(--qs-font-header-nav-weight);
  /* ---------------------------- */
  /* ANCHOR FOOTER COLORS			*/
  /* ---------------------------- */
  /* These set optional Footer Colors and Weight which can be applied as an override to any/all themes. */
  --color-footer-background: var(--qs-color-footer-background);
  --color-footer-primary:  var(--qs-color-footer-primary);
  --color-footer-nav-link:  var(--qs-color-footer-nav-link);
  --font-footer-nav-weight: var(--qs-font-footer-nav-weight);
  --color-footer-background-alt: var(--qs-color-footer-background);
  --color-footer-primary-alt:  var(--qs-color-footer-primary);
  --color-footer-nav-link-alt:  var(--qs-color-footer-nav-link);
  --font-footer-nav-weight-alt: var(--qs-font-footer-nav-weight);
  /* ---------------------------- */
  /* !SECTION ALL THEMES COLORS	*/
  /* ---------------------------- */
  /* -------------------------------------------- */
  /* !SECTION COLORS & THEMING VALUES				*/
  /* -------------------------------------------- */
  /* ---------------------------- */
}

/* Do not edit				*/

/* !LAYER :root end	 			*/

/* -------------------------------------------- */

/* !SECTION CONFIG Extended Variables			*/

/* -------------------------------------------- */

/* NOTE Designframe 0.99.51-52 Release															*/

/* -------------------------------------------------------------------------------------------- */

/* SECTION HTML Element Applications															*/

/* -------------------------------------------------------------------------------------------- */

/* NOTE These default applications provide secondary fallbacks for plain HTML elements and are	*/

/* overridden in the "CONFIG Theming" section of this file. This section should not be edited.	*/

/* -------------------------------------------------------------------------------------------- */

/* LAYER base begin				*/

/* Do not edit 					*/

/* !LAYER base end 					*/

/* -------------------------------------------------------------------------------------------- */

/* !SECTION HTML Element Applications				 											*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* SECTION DF Core Layout Utilities																*/

/* -------------------------------------------------------------------------------------------- */

/* LAYER components begin 			*/

/* Do not edit					*/

/* !LAYER components end			*/

/* -------------------------------------------------------------------------------------------- */

/* !SECTION DF Core Layout Utilities					 										*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* SECTION DF Core Visual Utilities																*/

/* -------------------------------------------------------------------------------------------- */

/* LAYER components begin 			*/

/* Do not edit					*/

/* !LAYER components end			*/

/* -------------------------------------------------------------------------------------------- */

/* !SECTION DF Core Visual Utilities															*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* SECTION DF Components Structure 			 													*/

/* -------------------------------------------------------------------------------------------- */

/* LAYER components begin 			*/

/* Do not edit					*/

/* !LAYER components end			*/

/* -------------------------------------------------------------------------------------------- */

/* !SECTION DF Components Structure 			 												*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* SECTION DF Components Radius & Transitions													*/

/* -------------------------------------------------------------------------------------------- */

/* LAYER components begin 			*/

/* Do not edit					*/

/* !LAYER components end			*/

/* -------------------------------------------------------------------------------------------- */

/* !SECTION  DF Components Radius & Transitions													*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* SECTION DF Components Visuals (Base Color Applications)										*/

/* -------------------------------------------------------------------------------------------- */

/* LAYER components begin 			*/

/* Do not edit					*/

/* !LAYER components end			*/

/* -------------------------------------------------------------------------------------------- */

/* !SECTION DF Components Visuals (Base Color Applications)										*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* SECTION DF Theming Variants																	*/

/* -------------------------------------------------------------------------------------------- */

/* LAYER components begin 			*/

/* Do not edit					*/

/* !LAYER components end			*/

/* -------------------------------------------------------------------------------------------- */

/* !SECTION DF Theming Variants																	*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* SECTION DF Adaptives (Screen Media Queries)													*/

/* -------------------------------------------------------------------------------------------- */

/* LAYER components begin 			*/

/* Do not edit 					*/

/* !LAYER components end 			*/

/* -------------------------------------------------------------------------------------------- */

/* !SECTION DF Adaptives (Screen Media Queries)													*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* SECTION DF Documentation Classes 															*/

/* -------------------------------------------------------------------------------------------- */

/* LAYER utilities begin 			*/

/* Do not edit 					*/

/* !LAYER utilities end 			*/

/* -------------------------------------------------------------------------------------------- */

/* !SECTION DF Documentation Classes															*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------- */

/* SECTION Effects 												*/

/* -------------------------------------------------------------- */

/* DF effects layer (v1.0 Phase 3.5). Four laws (df-rules §21):
   1. reduced-motion path at birth  2. @supports + designed fallback
   3. animate transform/opacity only  4. heavier-than-CSS lazy-loads via DfFx.onVisible.
   Motion gate: df-fx.js resolves prefers-reduced-motion + <html data-df-motion="auto|full|reduced">
   and stamps html[data-dffx-motion="full|reduced"]; CSS dual-gates on the native media query
   (no-JS baseline) + the stamped attribute (site override). */

/* ---------------------------- */

/* ANCHOR Effects - Glass Family */

/* ---------------------------- */

/* Tokened frosted surface for cards/panels/asides. Alpha-GRADIENT tint (not flat grey —
	   avoids the washed-out look), token knobs --qs-glass-blur/-saturation/-tint.
	   Theme-aware: tint falls back to the active --color-background triplet. */

.glass {
  background-color: transparent;
  background-image: linear-gradient(180deg,
			rgb(var(--qs-glass-tint, var(--color-background)) / 0.65),
			rgb(var(--qs-glass-tint, var(--color-background)) / 0.45));
  -webkit-backdrop-filter: blur(var(--qs-glass-blur)) saturate(var(--qs-glass-saturation));
  backdrop-filter: blur(var(--qs-glass-blur)) saturate(var(--qs-glass-saturation));
}

/* Intensity modifiers (combo Style axis). */

.glass.light  {
  --qs-glass-blur: 12px;
  background-image: linear-gradient(180deg,
		rgb(var(--qs-glass-tint, var(--color-background)) / 0.45),
		rgb(var(--qs-glass-tint, var(--color-background)) / 0.30));
}

.glass.heavy  {
  background-image: linear-gradient(180deg,
		rgb(var(--qs-glass-tint, var(--color-background)) / 0.85),
		rgb(var(--qs-glass-tint, var(--color-background)) / 0.70));
}

/* Optional one-edge "shine" highlight on the top edge (no surrounding ring). */

.glass.shine {
  box-shadow: inset 0 1px 0 0 rgb(var(--color-invert) / 0.35);
}

/* Law 2 — designed fallbacks: solid surface when backdrop-filter unsupported or
	   transparency reduced. */

@supports not (((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) or (-webkit-backdrop-filter: blur(1px))) {
  .glass, .glass.light, .glass.heavy {
    background-image: none;
    background-color: rgb(var(--qs-glass-tint, var(--color-background)));
  }
}

@media (prefers-reduced-transparency: reduce) {
  .glass, .glass.light, .glass.heavy {
    background-image: none;
    background-color: rgb(var(--qs-glass-tint, var(--color-background)));
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }
}

/* ---------------------------- */

/* ANCHOR Effects - Animated Gradients */

/* ---------------------------- */

/* @property-registered angle; .animated combo on the gradient vocabulary.
	   Law 2: where @property is unsupported, var() in the gradient is invalid →
	   background-image falls back to the underlying static gradient rule (designed fallback).
	   Ambient loop duration derives from the motion trio (no literal durations — audit rule). */

@property --df-fx-gradient-angle {
  syntax: '<angle>';

  inherits: false;

  initial-value: 254deg;
}

@keyframes df-gradient-sweep {
  to {
    --df-fx-gradient-angle: 614deg;
  }
}

.gradient.animated, .theme-key-gradient.animated {
  background-image: linear-gradient(var(--df-fx-gradient-angle),
			rgb(var(--color-key)), rgb(var(--color-key-end)));
  animation: df-gradient-sweep calc(var(--qs-duration-slow) * 16) linear infinite;
}

/* Law 1 — motion gate (native baseline + stamped override). */

@media (prefers-reduced-motion: reduce) {
  html:not([data-dffx-motion="full"]) .gradient.animated,
		html:not([data-dffx-motion="full"]) .theme-key-gradient.animated {
    animation: none;
  }
}

html[data-dffx-motion="reduced"] .gradient.animated,
	html[data-dffx-motion="reduced"] .theme-key-gradient.animated {
  animation: none;
}

/* ---------------------------- */

/* ANCHOR Effects - Reveal Family (two engines, one class) */

/* ---------------------------- */

@keyframes df-reveal-fade  {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@keyframes df-reveal-up    {
  from {
    opacity: 0;
    transform: translateY(var(--pad-element-base));
  }

  to {
    opacity: 1;
    transform: none;
  }
}

@keyframes df-reveal-scale {
  from {
    opacity: 0;
    transform: scale(0.95);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

/* ENGINE A — native scroll-driven (Firefox still flag-gated June 2026 → Engine B is
	   load-bearing for ~1 in 6 users; force-fallback attr = debug/verify affordance). */

@supports (animation-timeline: view()) {
  html:not([data-dffx-force-fallback]):not([data-dffx-motion="reduced"]) .reveal,
		html:not([data-dffx-force-fallback]):not([data-dffx-motion="reduced"]) .reveal-group > * {
    animation: df-reveal-fade both;
    animation-timeline: view();
    animation-range: entry 0% entry 60%;
  }

  html:not([data-dffx-force-fallback]):not([data-dffx-motion="reduced"]) .reveal.up,
		html:not([data-dffx-force-fallback]):not([data-dffx-motion="reduced"]) .reveal-group.up > * {
    animation-name: df-reveal-up;
  }

  html:not([data-dffx-force-fallback]):not([data-dffx-motion="reduced"]) .reveal.scale,
		html:not([data-dffx-force-fallback]):not([data-dffx-motion="reduced"]) .reveal-group.scale > * {
    animation-name: df-reveal-scale;
  }
}

/* ENGINE B — IO fallback. Hidden state ONLY under html.dffx-io (stamped by df-fx.js
	   when it takes over). Stagger index --df-fx-i set by JS per .reveal-group child;
	   step derives from the motion trio. */

html.dffx-io .reveal, html.dffx-io .reveal-group > * {
  opacity: 0;
  transition: opacity var(--qs-duration-slow) var(--qs-ease-enter),
					transform var(--qs-duration-slow) var(--qs-ease-enter);
  transition-delay: calc(var(--df-fx-i, 0) * var(--qs-duration-fast) / 2);
}

html.dffx-io .reveal.up, html.dffx-io .reveal-group.up > * {
  transform: translateY(var(--pad-element-base));
}

html.dffx-io .reveal.scale, html.dffx-io .reveal-group.scale > * {
  transform: scale(0.95);
}

html.dffx-io .reveal.is-revealed, html.dffx-io .reveal-group > .is-revealed {
  opacity: 1;
  transform: none;
}

/* Law 1 — reduced motion: both engines inert, content visible. (Engine A already
	   excludes itself via :not([data-dffx-motion="reduced"]); this covers the native-MQ
	   no-JS baseline + the IO engine.) */

@media (prefers-reduced-motion: reduce) {
  html:not([data-dffx-motion="full"]) .reveal,
		html:not([data-dffx-motion="full"]) .reveal-group > * {
    animation: none;
    transition: none;
    opacity: 1;
    transform: none;
  }
}

html[data-dffx-motion="reduced"] .reveal,
	html[data-dffx-motion="reduced"] .reveal-group > * {
  animation: none;
  transition: none;
  opacity: 1;
  transform: none;
}

/* ---------------------------- */

/* ANCHOR Effects - View Transitions (same-document opt-in) */

/* ---------------------------- */

/* JS half: DfFx.transition(cb) wraps document.startViewTransition (df-fx.js).
	   Defaults route the root cross-fade through the motion trio. Named transitions are
	   consumer-authored (view-transition-name on the element) — pattern in df-rules §21.
	   Baseline same-document Oct 2025; no-support fallback = DfFx.transition runs the
	   callback directly (Law 2). */

::view-transition-old(root), ::view-transition-new(root) {
  animation-duration: var(--qs-duration-base);
  animation-timing-function: var(--qs-ease-standard);
}

@media (prefers-reduced-motion: reduce) {
  html:not([data-dffx-motion="full"])::view-transition-group(*),
		html:not([data-dffx-motion="full"])::view-transition-old(*),
		html:not([data-dffx-motion="full"])::view-transition-new(*) {
    animation: none;
  }
}

/* ---------------------------- */

/* ANCHOR Effects - Micro-interactions */

/* ---------------------------- */

/* Deliberately small: DF components own their interactive states; .lift/.glow are
	   opt-in hover treatments for cards/tiles. Transform/box-shadow only (Law 3). */

.lift {
  transition: transform var(--qs-duration-fast) var(--qs-ease-standard),
					box-shadow var(--qs-duration-fast) var(--qs-ease-standard);
}

.lift:hover {
  transform: translateY(-4px);
  box-shadow: 0 8px 16px -8px rgba(0, 0, 0, var(--shadow-alpha-light));
}

.glow {
  transition: box-shadow var(--qs-duration-fast) var(--qs-ease-standard);
}

.glow:hover {
  box-shadow: 0 0 0 1px rgb(var(--color-key) / 0.40), 0 0 16px 0 rgb(var(--color-key) / 0.25);
}

@media (prefers-reduced-motion: reduce) {
  html:not([data-dffx-motion="full"]) .lift, html:not([data-dffx-motion="full"]) .glow {
    transition: none;
  }

  html:not([data-dffx-motion="full"]) .lift:hover {
    transform: none;
  }
}

/* !SECTION Effects */

/* NOTE Designframe 0.99.52 Release																*/

/* -------------------------------------------------------------------------------------------- */

/* SECTION DFP Framework Additions (Phase A.3 Chunk 3 — empty scaffolding for Chunks 4-5)       */

/* -------------------------------------------------------------------------------------------- */

/* Populated by Phase A Chunks 4-5 bulk move (dfp content from Components Structure + Custom    */

/* Classes). Becomes pro.css in Phase B fragment extraction (Path B additive composition;       */

/* assembled via: cat config.css core.css pro.css custom.css > df-input.css). Free users skip   */

/* pro.css; Pro users include it. Audit: docs/superpowers/audit-2026-05-25-df-dfp-cross-coupling.md */

/* end DFP @layer scaffolding */

/* -------------------------------------------------------------------------------------------- */

/* SECTION DFP Custom Classes (Chunk 5 — bare top-level rules preserving unlayered cascade)     */

/* -------------------------------------------------------------------------------------------- */

/* Pro-tier content extracted from CONFIG Custom CSS Classes. Stays UNLAYERED (no @layer wrapper) */

/* to preserve implicit-layer cascade priority — same scope as the source rules had pre-extraction. */

/* In Phase B fragment extraction, this block becomes part of pro.css alongside the @layer block.  */

/* -------------------------------------------- */

/* SECTION Instances							*/

/* -------------------------------------------- */

/* ---------------------------- */

/* ANCHOR Product Card			*/

/* ---------------------------- */

.dfp-product-item {
  height: calc(5 * var(--layout-row-height-base) + 4 * var(--spacing-gutter-base));
}

@media (min-width:640px) {
  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  .dfp-product-item {
    height: calc(5 * var(--layout-row-height-sm) + 4 * var(--spacing-gutter-sm));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:768px) {
  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  .dfp-product-item {
    height: calc(5 * var(--layout-row-height-md) + 4 * var(--spacing-gutter-md));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:960px) {
  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dfp-product-item {
    height: calc(5 * var(--layout-row-height-lg) + 4 * var(--spacing-gutter-lg));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1440px) {
  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dfp-product-item {
    height: calc(5 * var(--layout-row-height-xl) + 4 * var(--spacing-gutter-xl));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1600px) {
  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dfp-product-item {
    height: calc(5 * var(--layout-row-height-2xl) + 4 * var(--spacing-gutter-2xl));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

.dfp-product-item {
  background-size: cover;
  background-position: center;
  padding: 0px;
}

.df-dash-card-product.dfp-product-item {
  height: calc(3 * var(--layout-row-height-base) + 2 * var(--spacing-gutter-base));
}

@media (min-width:640px) {
  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  .df-dash-card-product.dfp-product-item {
    height: calc(3 * var(--layout-row-height-sm) + 2 * var(--spacing-gutter-sm));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:768px) {
  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  .df-dash-card-product.dfp-product-item {
    height: calc(3 * var(--layout-row-height-md) + 2 * var(--spacing-gutter-md));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:960px) {
  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .df-dash-card-product.dfp-product-item {
    height: calc(3 * var(--layout-row-height-lg) + 2 * var(--spacing-gutter-lg));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1440px) {
  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .df-dash-card-product.dfp-product-item {
    height: calc(3 * var(--layout-row-height-xl) + 2 * var(--spacing-gutter-xl));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1600px) {
  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .df-dash-card-product.dfp-product-item {
    height: calc(3 * var(--layout-row-height-2xl) + 2 * var(--spacing-gutter-2xl));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

.df-dash-card-product.dfp-product-item {
  flex-shrink: 0;
}

.df-dash-card-product.dfp-product-item:hover {
  --tw-brightness: brightness(1.1);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.df-dash-card-product.dfp-product-item i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.dfp-product-item .shader {
  height: 100%;
  width: 100%;
  align-content: flex-end;
  background-image: linear-gradient(to top, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-primary) / var(--shader-base)) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-primary) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-primary) / var(--shader-light)) var(--tw-gradient-to-position);
  padding: var(--spacing-card-base);
  text-align: center;
}

@media (min-width: 640px) {
  .dfp-product-item .shader {
    --tw-gradient-to: transparent var(--tw-gradient-to-position);
    --tw-gradient-to-position: 65%;
  }
}

@media (min-width: 768px) {
  .dfp-product-item .shader {
    --tw-gradient-to-position: 90%;
  }
}

@media (min-width: 960px) {
  .dfp-product-item .shader {
    --tw-gradient-to-position: 80%;
  }
}

@media (min-width: 1440px) {
  .dfp-product-item .shader {
    --tw-gradient-to-position: 65%;
  }
}

.dfp-product-item hgroup > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(var(--gap-hgroup-heading) * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(var(--gap-hgroup-heading) * var(--tw-space-y-reverse));
}

.dfp-product-item hgroup h4 {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.dfp-product-item hgroup p {
  font-style: italic;
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.df-block-code .token.dfp-product-item hgroup p {
  font-style: italic;
}

.dfp-product-item a {
  width: 100%;
}

.stack-cards-controls-select .df-dash-card-product {
  border-width: 1px;
  border-color: transparent;
}

.stack-cards-controls-select .df-dash-card-product:hover,  
.stack-cards-controls-select .df-dash-card-product.active {
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(var(--color-key) / var(--tw-border-opacity, 1));
}

/* ---------------------------- */

/* ANCHOR Post Card				*/

/* ---------------------------- */

.post a img {
  aspect-ratio: 1.1618 / 1;
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
     object-fit: cover;
  -o-object-position: center;
     object-position: center;
}

.post a img:hover {
  opacity: 0.9;
}

.post.block-full.card-base > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0px * var(--tw-space-y-reverse));
}

.stack-post-activity > p {
  width: 100%;
  align-content: center;
  text-align: center;
}

@media (min-width: 640px) {
  .stack-post-activity > p {
    width: -moz-fit-content;
    width: fit-content;
  }
}

.stack-post-activity > div {
  width: 100%;
  align-items: center;
}

@media (min-width: 640px) {
  .stack-post-activity > div {
    width: -moz-fit-content;
    width: fit-content;
  }
}

.stack-post-activity > div > p {
  text-align: center;
}

.stack-post-comment-form .avatar.gradient {
  display: none;
}

@media (min-width: 640px) {
  .stack-post-comment-form .avatar.gradient {
    display: block;
  }
}

.post .form-input-combo input:focus, .post .form-input-combo input:focus-visible {
  outline: 2px solid transparent;
  outline-offset: 2px;
}

.stack-comment-body {
  width: 100%;
}

.post-avatar {
  width: var(--element-c-sm);
  height: var(--element-c-sm);
  -o-object-fit: cover;
     object-fit: cover;
}

@media (min-width: 640px) {
  .post-avatar {
    width: var(--element-c-md);
    height: var(--element-c-md);
  }

  .post hgroup h4 {
    font-size: var(--text-h3-size);
    line-height: var(--text-h3-lh);
  }
}

.post-intro {
  font-style: italic;
}

.df-block-code .token.post-intro {
  font-style: italic;
}

.stack-post-header > hgroup {
  display: flex;
  place-content: center;
}

.stack-post-header > .stack-row > hgroup {
  align-content: center;
}

.stack-tags {
  gap: var(--gap-stack-base);
}

@media (min-width: 960px) {
  .post.pinned .post-avatar {
    width: var(--element-c-sm);
    height: var(--element-c-sm);
  }
}

@media (min-width: 1440px) {
  .post.pinned .post-avatar {
    width: var(--element-c-md);
    height: var(--element-c-md);
  }
}

@media (min-width: 960px) {
  @media not all and (min-width: 1440px) {
    .post.pinned hgroup h4 {
      font-size: var(--text-h4-size);
      line-height: var(--text-h4-lh);
    }

    .post.pinned hgroup p {
      font-size: var(--text-p4-size);
      line-height: var(--text-p4-lh);
    }
  }
}

.stack-post-actions a, .stack-comment-actions a {
  align-content: center;
}

.comment-avatar {
  width: var(--element-min-size);
  height: var(--element-min-size);
}

@media (min-width: 640px) {
  .comment-avatar {
    width: var(--element-base-size);
    height: var(--element-base-size);
  }
}

.stack-comment-header > div {
  align-items: center;
}

.stack-comment-header > .button.icon.base.gradient {
  align-content: center;
}

.dfp-product-preview-row {
  display: flex;
  flex-direction: row;
  align-items: center;
  -moz-column-gap: var(--gap-element-base);
       column-gap: var(--gap-element-base);
}

@media (min-width: 640px) {
  .dfp-product-preview-row h5 {
    font-size: var(--text-h4-size);
    line-height: var(--text-h4-lh);
  }
}

.dfp-product-preview-row p {
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

@media (min-width: 640px) {
  .dfp-product-preview-row p {
    font-size: var(--text-p3-size);
    line-height: var(--text-p3-lh);
  }
}

.comment-body {
  margin-top: var(--layout-unit);
  margin-bottom: var(--layout-unit);
}

.comment-thread {
  width: 100%;
}

.stack-comment-header .stack-comment-published p {
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

@media (min-width: 640px) {
  .stack-comment-header .stack-comment-published p {
    font-size: var(--text-p3-size);
    line-height: var(--text-p3-lh);
  }
}

.stack-comment-header {
  width: 100%;
}

/* ---------------------------- */

/* ANCHOR Link Card				*/

/* ---------------------------- */

.dfp-featured-link {
  height: calc(3 * var(--layout-row-height-base) + 2 * var(--spacing-gutter-base));
}

@media (min-width:640px) {
  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  .dfp-featured-link {
    height: calc(3 * var(--layout-row-height-sm) + 2 * var(--spacing-gutter-sm));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:768px) {
  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  .dfp-featured-link {
    height: calc(3 * var(--layout-row-height-md) + 2 * var(--spacing-gutter-md));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:960px) {
  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dfp-featured-link {
    height: calc(3 * var(--layout-row-height-lg) + 2 * var(--spacing-gutter-lg));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1440px) {
  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dfp-featured-link {
    height: calc(3 * var(--layout-row-height-xl) + 2 * var(--spacing-gutter-xl));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1600px) {
  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dfp-featured-link {
    height: calc(3 * var(--layout-row-height-2xl) + 2 * var(--spacing-gutter-2xl));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

.dfp-featured-link {
  align-content: center;
  background-size: cover;
  background-position: center;
  padding: 0px;
  text-align: center;
}

.dfp-featured-link:hover {
  opacity: 0.9;
}

.dfp-featured-link a {
  display: inline-block;
  height: 100%;
  width: 100%;
  place-content: center;
  background-image: linear-gradient(to top, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-primary) / var(--shader-base)) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-primary) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-primary) / var(--shader-light)) var(--tw-gradient-to-position);
  text-align: center;
}

@media (min-width: 640px) {
  .dfp-featured-link a {
    --tw-gradient-to: transparent var(--tw-gradient-to-position);
  }
}

.dfp-featured-link a hgroup > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(var(--gap-hgroup-title) * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(var(--gap-hgroup-title) * var(--tw-space-y-reverse));
}

.dfp-featured-link a hgroup p {
  font-style: italic;
}

.df-block-code .token.dfp-featured-link a hgroup p {
  font-style: italic;
}

/* ---------------------------- */

/* ANCHOR Support Link Card			*/

/* ---------------------------- */

.dfp-featured-support {
  height: calc(2 * var(--layout-row-height-base) + var(--spacing-gutter-base));
}

@media (min-width:640px) {
  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  .dfp-featured-support {
    height: calc(2 * var(--layout-row-height-sm) + var(--spacing-gutter-sm));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:768px) {
  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  .dfp-featured-support {
    height: calc(2 * var(--layout-row-height-md) + var(--spacing-gutter-md));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:960px) {
  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dfp-featured-support {
    height: calc(2 * var(--layout-row-height-lg) + var(--spacing-gutter-lg));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1440px) {
  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dfp-featured-support {
    height: calc(2 * var(--layout-row-height-xl) + var(--spacing-gutter-xl));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1600px) {
  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dfp-featured-support {
    height: calc(2 * var(--layout-row-height-2xl) + var(--spacing-gutter-2xl));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

.dfp-featured-support {
  align-content: center;
  background-size: cover;
  background-position: center;
  padding: 0px;
  text-align: center;
}

.dfp-featured-support:hover {
  opacity: 0.9;
}

.dfp-featured-support a {
  /* Do not edit */
  background: linear-gradient(
			to top right, 
			rgba(var(--color-key-rgb), var(--shader-heavy)), 
			rgba(var(--color-key-end-rgb), var(--shader-heavy))
			);
  display: flex;
  height: 100%;
  width: 100%;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.dfp-featured-support a hgroup > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(var(--gap-hgroup-title) * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(var(--gap-hgroup-title) * var(--tw-space-y-reverse));
}

.dfp-featured-support a hgroup p i {
  font-size: var(--text-i3-size);
  line-height: var(--text-i3-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

/* -------------------------------------------- */

/* !SECTION Instances							*/

/* -------------------------------------------- */

/* -------------------------------------------- */

/* SECTION Utilities 							*/

/* -------------------------------------------- */

/* ---------------------------- */

/* ANCHOR STACKS				*/

/* ---------------------------- */

.stack-title {
  align-items: baseline;
  justify-content: center;
}

@media (min-width: 640px) {
  .stack-title {
    justify-content: space-between;
  }
}

.stack-title h2 {
  text-align: center;
}

@media (min-width: 640px) {
  .stack-title h2 {
    text-align: left;
  }
}

.stack-title > p {
  display: none;
  font-size: var(--text-p1-size);
  line-height: var(--text-p1-lh);
}

@media (min-width: 640px) {
  .stack-title > p.loader {
    padding: var(--pad-article-base);
  }

  .stack-title > p.loader i {
    font-size: var(--text-i4-size);
  }

  .stack-title > p {
    display: inline;
  }
}

.stack-activity {
  display: flex;
  flex-direction: column;
  row-gap: var(--gap-stack-sm);
}

.stack-title-filters {
  align-items: baseline;
  justify-content: center;
}

@media (min-width: 640px) {
  .stack-title-filters {
    justify-content: space-between;
  }
}

.stack-title-filters > h2 {
  text-align: center;
}

@media (min-width: 640px) {
  .stack-title-filters > h2 {
    text-align: left;
  }
}

.stack-title-filters > div {
  width: 100%;
}

@media (min-width: 640px) {
  .stack-title-filters > div {
    width: -moz-fit-content;
    width: fit-content;
  }
}

.stack-title-icons {
  align-items: baseline;
  justify-content: center;
}

@media (min-width: 640px) {
  .stack-title-icons {
    justify-content: space-between;
  }
}

.stack-title-icons > h2 {
  text-align: center;
}

@media (min-width: 640px) {
  .stack-title-icons > h2 {
    text-align: left;
  }
}

.stack-title-icons > div {
  width: 100%;
}

@media (min-width: 640px) {
  .stack-title-icons > div {
    width: -moz-fit-content;
    width: fit-content;
  }
}

.stack-filters {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
}

.stack-filters.split {
  justify-content: space-between;
}

.stack-filters {
  justify-content: center;
  gap: var(--spacing-gutter-base);
}

.stack-heading {
  display: flex;
  flex-direction: column;
  gap: var(--gap-hgroup-heading);
}

.stack-heading .stack-row {
  flex-wrap: wrap;
  align-items: baseline;
}

@media (min-width: 640px) {
  .stack-heading .stack-row {
    flex-wrap: nowrap;
  }
}

.stack-heading h3 {
  display: none;
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

@media (min-width: 640px) {
  .stack-heading h3 {
    display: block;
  }
}

.panel {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-gutter-base);
}

/* DFP-MOVE: relocate to pro section in Chunk 4. Split S70 audit Pattern 2 (cross-namespace selector list). */

.dfp-stack-form-guided {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-gutter-base);
}

.dfp-stack-form-guided .panel .button.icon.dropdown.gradient p, .footer-localization .button.icon.dropdown.gradient p {
  font-size: var(--text-p3-size);
}

.dfp-stack-form-guided .formrow.title > a {
  order: 1;
  margin-bottom: var(--spacing-gutter-base);
}

@media (min-width: 960px) {
  .dfp-stack-form-guided .formrow.title > a {
    order: 2;
    margin-bottom: 0px;
  }
}

.dfp-stack-form-guided .formrow.title > div {
  order: 2;
}

@media (min-width: 960px) {
  .dfp-stack-form-guided .formrow.title > div {
    order: 2;
  }
}

.dfp-stack-form-guided .formrow {
  flex-wrap: wrap;
  -moz-column-gap: var(--spacing-gutter-base);
       column-gap: var(--spacing-gutter-base);
  row-gap: var(--layout-unit);
}

@media (min-width: 960px) {
  .dfp-stack-form-guided .formrow {
    flex-wrap: nowrap;
  }
}

.dfp-stack-form-guided .formrow.title {
  align-items: center;
}

.dfp-stack-form-guided .formrow.title > div:first-child {
  display: flex;
  width: 100%;
  flex-direction: column;
  align-items: flex-start;
  justify-content: space-between;
  -moz-column-gap: var(--spacing-gutter-base);
       column-gap: var(--spacing-gutter-base);
}

@media (min-width: 640px) {
  .dfp-stack-form-guided .formrow.title > div:first-child {
    flex-direction: row;
    align-items: baseline;
  }
}

@media (min-width: 960px) {
  .dfp-stack-form-guided .formrow.title > div:first-child {
    align-items: center;
  }
}

.dfp-stack-form-guided .formrow > :last-child {
  width: 100%;
}

@media (min-width: 960px) {
  .dfp-stack-form-guided .formrow > :last-child {
    width: 40%;
  }
}

.dfp-stack-form-guided .formrow.subtitle {
  margin-top: var(--pad-element-base);
}

.dfp-stack-form-guided .formrow.subtitle > :last-child p {
  text-align: right;
}

@media (min-width: 960px) {
  .dfp-stack-form-guided .formrow.subtitle > :last-child p {
    text-align: left;
  }
}

.dfp-stack-form-guided .formrow > div:last-child {
  display: flex;
  min-height: calc(var(--element-min-size) + var(--layout-unit) + var(--layout-unit));
  align-items: flex-start;
}

@media (min-width: 960px) {
  .dfp-stack-form-guided .formrow > div:last-child {
    align-items: center;
  }
}

.dfp-stack-form-guided .formrow > div.formrow-textarea-helper {
  height: 100%;
}

@media (min-width: 960px) {
  .dfp-stack-form-guided .formrow > div.formrow-textarea-helper {
    min-height: var(--element-c-md);
  }
}

.dfp-stack-form-guided .formrow > .formrow-helper-split {
  margin-bottom: var(--layout-unit);
  display: flex;
  flex-direction: row;
  -moz-column-gap: var(--gap-stack-base);
       column-gap: var(--gap-stack-base);
  row-gap: var(--spacing-sub-base);
}

@media (min-width: 960px) {
  .dfp-stack-form-guided .formrow > .formrow-helper-split {
    margin-bottom: 0px;
    flex-direction: column;
  }
}

.dfp-stack-form-guided .formrow > .formrow-helper-start {
  align-self: flex-start;
}

.dfp-stack-form-guided .formrow > .formrow-helper-end {
  align-self: flex-end;
}

.dfp-stack-form-guided .formrow.media {
  margin-top: var(--pad-element-base);
}

.form-card-stack {
  width: 100%;
}

@media (min-width: 768px) {
  .dfp-stack-form-guided .dfp-stack-plans {
    flex-direction: row;
  }
}

.panel-title {
  display: flex;
  flex-direction: row;
  -moz-column-gap: var(--spacing-sub-base);
       column-gap: var(--spacing-sub-base);
}

.panel-title h3 {
  line-height: var(--element-base-size);
}

.panel-heading {
  display: flex;
  flex-direction: column;
  row-gap: var(--gap-hgroup-heading);
}

.panel-content {
  display: flex;
  flex-direction: column;
  row-gap: var(--spacing-card-base);
}

.panel-content label span {
  font-style: italic;
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.df-block-code .token.panel-content label span {
  font-style: italic;
}

.panel-toggle {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  --tw-rotate: 180deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.panel-toggle.active {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
  --tw-rotate: 0deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

/* .panel-content.hide {
	@apply hidden;
} */

.panel-content {
  transition-duration: 1000ms;
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
  transform-origin: top left;
}

.panel-content.hide {
  transition-duration: 1000ms;
  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
  transform: scale(0) translateY(-10%) ;
  opacity: 0;
  transform-origin: top left ;
  visibility: collapse;
  position: absolute;
}

.panel {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
}

/* DFP-MOVE: relocate to pro section in Chunk 4. Split S70 audit Pattern 2 (cross-namespace selector list). */

.dfp-stack-form-guided {
  transition-property: var(--transition-property-base);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
  transition-duration: var(--transition-duration-base);
  transition-timing-function: var(--transition-timing-base);
  /* Set this to transition-set to apply the transition settings defined by your Variables or change/add your chosen properties by applying Tailwind classes for all theme and non-theme states. */
}

.panel-content > * {
  transition-duration: 1000ms;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  opacity: 1;
}

.panel-content.hide > * {
  transition-duration: 1000ms;
  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
  transform: scale(0) rotate(180deg);
  opacity: 0;
  filter: blur(16px);
}

.dfp-plan-card, .dfp-feature-card {
  width: 100%;
  background-color: transparent;
  padding: var(--border-button);
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-inset: inset;
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.dfp-stack-plan-card, .dfp-stack-feature-card {
  display: flex;
  height: 100%;
  width: 100%;
  flex-direction: column;
  align-items: center;
  row-gap: var(--gap-article-base);
  padding: var(--pad-article-2xl);
  text-align: center;
}

.dfp-stack-feature-card > a {
  width: 100%;
}

.dfp-plan-card.gradient, .dfp-feature-card.gradient {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
  --tw-ring-color: transparent;
}

.dfp-plan-card.gradient .dfp-stack-plan-card,
.dfp-feature-card.gradient .dfp-stack-feature-card {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-invert) / var(--tw-bg-opacity, 1));
  --tw-bg-opacity: var(--color-key-gradient-invert-opacity);
}

.dfp-plan-card .dfp-stack-plan-card > hgroup > p,
.dfp-plan-card .dfp-plan-pricing-details p {
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

.dfp-plan-card .dfp-stack-plan-card > hgroup > p > span,
.dfp-plan-card .dfp-plan-pricing-details p span {
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
  font-weight: 400;
  font-style: italic;
}

.df-block-code .token.dfp-plan-card .dfp-stack-plan-card > hgroup > p > span,.df-block-code .token
.dfp-plan-card .dfp-plan-pricing-details p span {
  font-style: italic;
}

.dfp-plan-card .dfp-stack-plan-card h5, .dfp-plan-card .dfp-stack-plan-card h6 {
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

.dfp-plan-card .dfp-plan-intro {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.dfp-plan-card .dfp-plan-intro > i,
.dfp-feature-card .dfp-feature-title > i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  font-size: var(--text-h2-size);
  line-height: var(--text-h2-lh);
}

.dfp-plan-card .dfp-plan-pricing h3 span {
  font-size: var(--text-h6-size);
}

.dfp-plan-card .dfp-plan-rates, 
.dfp-plan-card .dfp-plan-features {
  display: flex;
  flex-direction: column;
  row-gap: var(--gap-element-base);
}

.dfp-plan-card .dfp-plan-rates p,
.dfp-plan-card .dfp-plan-pricing-details {
  font-weight: 700;
}

.dfp-plan-card .dfp-plan-features {
  width: -moz-fit-content;
  width: fit-content;
}

.dfp-plan-card .dfp-plan-features ul {
  text-align: left;
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

.form-card-stack .form-stack-radio-options {
  flex-direction: column;
}

@media (min-width: 768px) {
  .form-card-stack .form-stack-radio-options {
    flex-direction: row;
  }
}

.form-card-stack label {
  width: 100%;
}

.form-card-stack .form-card-stack-title {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  font-size: var(--text-p2-size);
  line-height: var(--text-p2-lh);
  font-weight: 700;
}

.form-card-stack label span {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.form-card-stack label p {
  text-align: center;
}

.form-card-stack label > div i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  font-size: var(--text-h3-size);
  line-height: var(--text-h3-lh);
}

.stack-form-inputs.stack-datarows {
  flex-direction: column;
  row-gap: var(--gap-form-base);
}

.stack-form-inputs .datarow > p:first-child {
  width: 33.333333%;
  font-weight: 700;
}

.stack-form-inputs .datarow > p {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
}

.stack-form-inputs .datarow.data-item-text-long > p {
  overflow: visible;
  display: block;
  -webkit-box-orient: horizontal;
  -webkit-line-clamp: none;
  align-items: flex-start;
}

.stack-form-inputs.stack-form-input-quarters {
  width: 100%;
  flex-wrap: wrap;
  row-gap: var(--gap-article-base);
}

@media (min-width: 960px) {
  .stack-form-inputs.stack-form-input-quarters {
    flex-wrap: nowrap;
  }
}

.stack-form-inputs.stack-form-input-quarters div {
  width: 100%;
}

.stack-form-inputs.stack-col {
  justify-content: space-between;
  text-align: left;
}

.form-color-picker, .form-fieldset-card-row {
  display: flex;
  flex-direction: row;
  align-items: flex-end;
  -moz-column-gap: 0px;
       column-gap: 0px;
}

.form-color-picker div.form-input.air, .form-fieldset-card-row fieldset {
  width: 100%;
}

.form-radio-set-block.air {
  display: flex;
  width: 100%;
  flex-direction: column;
}

.form-radio-set-block.air .form-label {
  padding-bottom: var(--layout-unit);
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

@media (min-width: 640px) {
  .form-radio-set-block.air .form-label {
    font-size: var(--text-p3-size);
    line-height: var(--text-p3-lh);
  }
}

.form-fieldset-card-row .form-radio-set.card-block .form-radio-option {
  justify-content: center;
  padding-top: 5px;
  padding-bottom: 5px;
}

@media (min-width: 640px) {
  .form-radio-set-block .form-stack-radio-options label span p {
    font-size: var(--text-p3-size);
  }
}

.form-radio-set-stack, .form-radio-set-stack label {
  width: 100%;
}

.color-picker-block {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  box-shadow: 0 -4px 4px -4px rgba(0, 0, 0, var(--shadow-alpha-light));
  z-index: 10;
  height: var(--layout-col-width-base);
  width: var(--element-base-size);
  border-top-right-radius: var(--rounded-corner);
  border-bottom-right-radius: var(--rounded-corner);
}

.color-picker-block:hover {
  padding: var(--border-button);
}

.color-picker-swatch {
  display: flex;
  height: 100%;
  width: 100%;
  border-top-right-radius: calc(var(--rounded-corner) - var(--border-button));
  border-bottom-right-radius: calc(var(--rounded-corner) - var(--border-button));
}

.form-card-stack.form-radio-set.card-stack.gradient.secondary .form-stack-radio-options label > div {
  justify-content: flex-start;
  row-gap: var(--gap-element-base);
  padding: var(--spacing-gutter-base);
}

.dash-card .formrow.title {
  flex-wrap: wrap;
  row-gap: var(--gap-hgroup-heading);
}

@media (min-width: 640px) {
  .dash-card .formrow.title {
    flex-wrap: nowrap;
  }
}

.dash-card .formrow.title :first-child {
  width: -moz-fit-content;
  width: fit-content;
}

@media (min-width: 640px) {
  .dash-card .formrow.title :first-child {
    white-space: nowrap;
  }
}

.modal-block .formrow.title p,
.dash-card .formrow.title p {
  text-align: left;
}

@media (min-width: 640px) {
  .modal-block .formrow.title p,
.dash-card .formrow.title p {
    text-align: right;
  }
}

.dash-card .button.gradient.secondary > span,
.dash-card .profile-edit .button.icon.dropdown.gradient.secondary > span {
  --tw-bg-opacity: 1;
}

.dash-card .button.gradient.secondary:hover > span,
.dash-card .button.gradient.secondary.active > span,
.dash-card .profile-edit .button.icon.dropdown.gradient.secondary:hover > span {
  --tw-bg-opacity: var(--color-key-gradient-invert-opacity);
}

.dash-card .button.gradient.secondary:hover > span p, 
.dash-card .button.gradient.secondary:hover > span i,
.dash-card .button.gradient.secondary.active > span p, 
.dash-card .button.gradient.secondary.active > span i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.screen-modal .card .form-input.air input,
.screen-modal .card .form-textarea.air textarea,
.dash-card .form-input.air input,
.dash-card .form-textarea.air textarea {
  border-bottom-width: 1px;
  --tw-border-opacity: 1;
  border-bottom-color: rgb(var(--color-key) / var(--tw-border-opacity, 1));
}

.screen-modal .card .form-input.gradient > span,
.screen-modal .card .form-input-file.gradient > span,
.dash-card .form-input.gradient > span,
.dash-card .form-input-file.gradient > span {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-invert) / var(--tw-bg-opacity, 1));
}

.screen-modal .card .form-input.gradient label,
.screen-modal .card .form-input-file.gradient label,
.dash-card .form-input.gradient label,
.dash-card .form-input-file.gradient label {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.screen-modal .card .form-input.gradient input:hover,
.screen-modal .card .form-input-file.gradient input:hover,
.dash-card .form-input.gradient input:hover,
.dash-card .form-input-file.gradient input:hover {
  /* Do not edit */
  background: linear-gradient(to right, rgba(var(--color-key-rgb), calc(1 - var(--color-key-gradient-invert-opacity))), rgba(var(--color-key-end-rgb), calc(1 - var(--color-key-gradient-invert-opacity))));
  /* Gradient background Opacity Variant */
}

.dash-card.card-base {
  display: flex;
  flex-direction: row;
  padding: 0px;
}

.dash-card.card-base > div {
  display: flex;
  width: 100%;
}

.dash-card.card-base .dfp-stack-profile-preview {
  width: 100%;
  align-items: center;
  justify-content: center;
}

.dash-card.card-base .stack-form-buttons-set {
  flex-direction: column;
}

.dash-card.card-base .dfp-profile-preview {
  position: relative;
  display: none;
}

@media (min-width: 768px) {
  .dash-card.card-base .dfp-profile-preview {
    display: flex;
  }
}

.dash-card.card-base .dfp-profile-preview > video {
  height: 100%;
  width: 100%;
  top: 0;
  left: 0;
  position: absolute;
  -o-object-fit: cover;
     object-fit: cover;
  -o-object-position: center;
     object-position: center;
  border-radius: inherit;
}

.dash-card.card-base .dfp-stack-profile-preview .form-input-media > video {
  height: 100%;
  width: 100%;
  top: 0;
  left: 0;
  position: absolute;
  -o-object-fit: cover;
     object-fit: cover;
  -o-object-position: center;
     object-position: center;
}

.stack-avatar-data .avatar {
  margin-right: var(--pad-element-base);
}

.stack-avatar-data hgroup > :first-child {
  margin-bottom: var(--layout-unit);
}

.dash-card .stack-avatar-data hgroup > p:last-child {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  font-style: italic;
}

.df-block-code .token.dash-card .stack-avatar-data hgroup > p:last-child {
  font-style: italic;
}

.stack-avatar-data.inactive hgroup > h4 {
  background-image: none;
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.stack-avatar-data.inactive img {
  --tw-saturate: saturate(0);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.stack-avatar-data.inactive > hgroup > p:last-child {
  background-image: none;
  --tw-text-opacity: 1 !important;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1)) !important;
}

.stack-avatar-data.inactive .avatar {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-secondary) / var(--tw-bg-opacity, 1));
  background-image: none;
}

.formrow.split > div.form-input,
.formrow.split > div.form-input-file {
  width: 100%;
}

.dash-card .stack-avatar + .data-count {
  margin-left: var(--pad-element-base);
  font-style: italic;
}

.df-block-code .token.dash-card .stack-avatar + .data-count {
  font-style: italic;
}

.stack-controlrows > .formrow,
.dash-card .formrow {
  flex-wrap: wrap;
}

@media (min-width: 640px) {
  .stack-controlrows > .formrow,
.dash-card .formrow {
    flex-wrap: nowrap;
  }
}

.stack-controlrows > .alert.callout {
  margin-top: 0px;
}

.stack-controlrows > .formrow > p:first-child {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  display: flex;
  width: 100%;
  font-size: var(--text-p2-size);
  line-height: var(--text-p2-lh);
}

@media (min-width: 640px) {
  .stack-controlrows > .formrow > p:first-child {
    width: 20%;
  }
}

.dash-card .dfp-banner-card-avatar {
  display: flex;
  aspect-ratio: 1 / 1;
  width: 100%;
}

@media (min-width: 640px) {
  .dash-card .dfp-banner-card-avatar {
    width: 20%;
  }
}

.dash-card:has(.dash-card-header-banner) > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0px * var(--tw-space-y-reverse));
}

.dash-card:has(.dash-card-header-banner) {
  padding: 0px;
}

.dfp-banner-card-avatar > img {
  display: flex;
  aspect-ratio: 1 / 1;
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
     object-fit: cover;
}

@media (min-width: 640px) {
  .dfp-banner-card-avatar > img {
    --tw-shadow: var(--shadow-base);
    --tw-shadow-colored: var(--shadow-base);
    box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  }
}

.dfp-banner-card-avatar > img {
  border-radius: inherit;
}

.dash-card .formrow > .dfp-banner-card-info {
  display: flex;
  flex: 1 1 0%;
}

.dash-card .formrow > .dfp-banner-card-info h3 {
  background-image: none;
  line-height: var(--text-h2-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

@media (min-width: 1440px) {
  .dash-card .formrow > .dfp-banner-card-info h3 {
    font-size: var(--text-h2-size);
    line-height: var(--text-h2-lh);
  }
}

.dash-card .formrow > .dfp-banner-card-info h4 {
  background-image: none;
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

@media (min-width: 640px) {
  .dash-card .formrow > .dfp-banner-card-info h4 {
    font-size: var(--text-h5-size);
    line-height: var(--text-h5-lh);
  }
}

@media (min-width: 1440px) {
  .dash-card .formrow > .dfp-banner-card-info h4 {
    font-size: var(--text-h4-size);
    line-height: var(--text-h4-lh);
  }
}

.dash-card .formrow > .dfp-banner-card-info p {
  background-image: none;
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

@media (min-width: 640px) {
  .dash-card .formrow > .dfp-banner-card-info p {
    font-size: var(--text-p4-size);
    line-height: var(--text-p4-lh);
  }
}

@media (min-width: 1440px) {
  .dash-card .formrow > .dfp-banner-card-info p {
    font-size: var(--text-p3-size);
    line-height: var(--text-p3-lh);
  }
}

.dash-card .formrow > .dfp-banner-card-controls {
  display: flex;
  width: 100%;
}

@media (min-width: 640px) {
  .dash-card .formrow > .dfp-banner-card-controls {
    width: 40%;
  }
}

@media (min-width: 1440px) {
  .dash-card .formrow > .dfp-banner-card-controls {
    width: 30%;
  }
}

.dash-card.card-mini .formrow > .dfp-banner-card-controls {
  display: flex;
  flex-direction: column;
  gap: var(--gap-stack-base);
}

.card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
  display: flex;
  flex-direction: column;
  row-gap: var(--spacing-card-base);
}

@media (min-width:640px) {
  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-sm);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-sm);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-sm);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-sm);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-sm);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-sm);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:768px) {
  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-md);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-md);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-md);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-md);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-md);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-md);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:960px) {
  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-lg);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-lg);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-lg);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-lg);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-lg);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-lg);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1440px) {
  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-xl);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-xl);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-xl);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1600px) {
  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-2xl);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-2xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-2xl);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-2xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    gap: var(--gap-stack-2xl);
  }

  .card .dash-card.card-mini .formrow > .dfp-banner-card-controls, .card-base .dash-card.card-mini .formrow > .dfp-banner-card-controls {
    display: flex;
    flex-direction: column;
    row-gap: var(--spacing-card-2xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

.dash-card.card-mini .formrow > .dfp-banner-card-controls {
  display: flex;
  width: 100%;
}

.stack-form-inputs.dash-card.card-mini .formrow > .dfp-banner-card-controls {
  justify-content: space-between;
  text-align: left;
}

.dash-card.dfp-banner-card .dfp-banner-card-info-stats {
  display: flex;
  flex-direction: column;
}

.dash-card.dfp-banner-card .dfp-banner-card-info-stats-status, 
.dash-card.dfp-banner-card .dfp-banner-card-info-stats-ranked {
  display: flex;
  width: 100%;
  flex-direction: column;
}

.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info .dfp-banner-card-info-stats-status p:first-child {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

@media (min-width: 640px) {
  .dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info .dfp-banner-card-info-stats-status p:first-child {
    background-image: none;
    --tw-text-opacity: 1;
    color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  }
}

.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info .dfp-banner-card-info-stats-status p:last-child {
  font-style: italic;
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.df-block-code .token.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info .dfp-banner-card-info-stats-status p:last-child {
  font-style: italic;
}

@media (min-width: 640px) {
  .dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info .dfp-banner-card-info-stats-status p:last-child {
    --tw-text-opacity: 1;
    color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  }
}

.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info h3 {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  line-height: var(--text-h3-lh);
}

@media (min-width: 640px) {
  .dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info h3 {
    background-image: none;
    --tw-text-opacity: 1;
    color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  }
}

@media (min-width: 1440px) {
  .dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info h3 {
    line-height: var(--text-h2-lh);
  }
}

.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info h4 {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

@media (min-width: 640px) {
  .dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info h4 {
    background-image: none;
    --tw-text-opacity: 1;
    color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  }
}

.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

@media (min-width: 640px) {
  .dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-info p {
    background-image: none;
    --tw-text-opacity: 1;
    color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  }
}

.dash-card.card-mini .formrow > .dfp-banner-card-controls .button.secondary {
  width: 100%;
}

.dash-card .formrow > .dfp-banner-card-controls .button.secondary {
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-invert) / var(--tw-ring-opacity, 1));
  transition-property: none;
}

.dash-card .formrow > .dfp-banner-card-controls .button.secondary:hover {
  /* Do not edit */
  background: linear-gradient(to right, rgba(var(--color-key-rgb), calc(1 - var(--color-key-gradient-invert-opacity))), rgba(var(--color-key-end-rgb), calc(1 - var(--color-key-gradient-invert-opacity))));
  /* Gradient background Opacity Variant */
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

.dash-card .formrow > .dfp-banner-card-controls .button.secondary:hover p, 
.dash-card .formrow > .dfp-banner-card-controls .button.secondary:hover i {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-controls .button.secondary.gradient {
  transition-property: none;
}

.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-controls .button.secondary.gradient:hover {
  /* Do not edit */
  background: linear-gradient(to right, rgba(var(--color-key-rgb), calc(1 - var(--color-key-gradient-invert-opacity))), rgba(var(--color-key-end-rgb), calc(1 - var(--color-key-gradient-invert-opacity))));
  /* Gradient background Opacity Variant */
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(var(--color-key) / var(--tw-ring-opacity, 1));
}

@media (min-width: 640px) {
  .dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-controls .button.secondary.gradient {
    --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
    --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
    box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
    --tw-ring-opacity: 1;
    --tw-ring-color: rgb(var(--color-invert) / var(--tw-ring-opacity, 1));
  }

  .dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-controls .button.secondary.gradient::before {
    background-image: none;
  }
}

.modal-block.card .button.secondary.gradient span {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key-gradient-invert) / var(--tw-bg-opacity, 1));
}

.modal-block.card .button.secondary.gradient:hover span {
  --tw-bg-opacity: var(--color-key-gradient-invert-opacity);
}

.modal-block.card .button.secondary.gradient:hover span p, 
.modal-block.card .button.secondary.gradient:hover span i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

@media (min-width: 640px) {
  .dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-controls .button.secondary.gradient span {
    background-color: transparent;
  }

  .dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-controls .button.secondary.gradient span p,
.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-controls .button.secondary.gradient span i {
    background-image: none;
    --tw-text-opacity: 1;
    color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  }
}

.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-controls .button.secondary.gradient:hover span p,
.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-controls .button.secondary.gradient:hover span i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

@media (min-width: 640px) {
  .dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-controls .button.secondary.gradient:hover span p,
.dash-card.dfp-banner-card.dfp-bg-swap .formrow > .dfp-banner-card-controls .button.secondary.gradient:hover span i {
    background-image: none;
    --tw-text-opacity: 1;
    color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
  }
}

.dash-card.dfp-product-card {
  flex-direction: column;
}

@media (min-width: 640px) {
  .dash-card.dfp-product-card {
    flex-direction: row;
  }
}

.dash-card.dfp-product-card .dfp-product-card-info {
  order: 2;
  width: 100%;
  justify-content: center;
}

@media (min-width: 640px) {
  .dash-card.dfp-product-card .dfp-product-card-info {
    order: 1;
  }
}

.dash-card.dfp-product-card .dfp-product-card-info > hgroup > h4 {
  background-image: none;
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.dash-card.dfp-product-card .dfp-product-card-display {
  order: 1;
  width: 100%;
}

@media (min-width: 640px) {
  .dash-card.dfp-product-card .dfp-product-card-display {
    order: 2;
  }
}

.dash-card.dfp-product-card .dfp-product-card-display .dfp-product-card-shader {
  align-items: center;
  justify-content: center;
  background-color: rgb(var(--color-primary) / var(--shader-light));
  --tw-backdrop-blur: blur(16px);
  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}

.dash-card .dfp-product-card-media {
  aspect-ratio: 1 / 1;
  width: 100%;
}

.dash-card .dfp-product-card-media > img {
  display: flex;
  aspect-ratio: 1 / 1;
  height: 100%;
  width: 100%;
  -o-object-fit: cover;
     object-fit: cover;
}

@media (min-width: 640px) {
  .dash-card .dfp-product-card-media > img {
    --tw-shadow: var(--shadow-base);
    --tw-shadow-colored: var(--shadow-base);
    box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  }
}

.dash-card .dfp-product-card-media > img {
  border-radius: inherit;
}

.dash-card.dfp-product-card .dfp-product-card-info .dfp-product-card-description > p:first-child {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 5;
}

@media (min-width: 1440px) {
  .dash-card.dfp-product-card .dfp-product-card-info .dfp-product-card-description > p:first-child {
    overflow: hidden;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 7;
  }
}

.dash-card.dfp-product-card .dfp-product-card-info .dfp-product-card-authored {
  display: flex;
  flex-direction: column;
  row-gap: var(--layout-unit);
}

.dash-card.dfp-product-card .dfp-product-card-info .dfp-product-card-authored > p a {
  font-style: normal;
}

.dash-card.dfp-product-card .dfp-product-card-info .dfp-product-card-authored > p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.dfp-product-card-controls {
  flex-wrap: wrap;
  row-gap: var(--gap-stack-base);
}

@media (min-width: 640px) {
  .dfp-product-card-controls {
    flex-wrap: nowrap;
  }
}

div.stack-control-cards {
  display: flex;
  width: 100%;
  flex-direction: column;
}

.stack-controlrows > .formrow > .data-item:first-child {
  flex: 1 1 0%;
}

.stack-controlrows > .formrow.split > div:last-child p,
.stack-controlrows > .formrow > p:nth-child(2) {
  flex: 1 1 0%;
  text-align: left;
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
  font-style: italic;
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.df-block-code .token.stack-controlrows > .formrow.split > div:last-child p,.df-block-code .token
.stack-controlrows > .formrow > p:nth-child(2) {
  font-style: italic;
}

.stack-controlrows > .formrow.split > :first-child {
  display: flex;
  width: 100%;
}

@media (min-width: 640px) {
  .stack-controlrows > .formrow.split > :first-child {
    width: 50%;
  }
}

.stack-controlrows > .formrow.split > :last-child {
  display: flex;
  width: 100%;
}

@media (min-width: 640px) {
  .stack-controlrows > .formrow.split > :last-child {
    width: 50%;
  }
}

.stack-controlrows > .formrow > :last-child {
  display: flex;
  width: 100%;
}

@media (min-width: 640px) {
  .stack-controlrows > .formrow > :last-child {
    width: 40%;
  }
}

@media (min-width: 1440px) {
  .stack-controlrows > .formrow > :last-child {
    width: 30%;
  }
}

.dash-card > .stack-controlrows > .formrow > .data-item > .stack-avatar.md > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(calc(var(--offset-element-md) * -1) * var(--tw-space-x-reverse));
  margin-left: calc(calc(var(--offset-element-md) * -1) * calc(1 - var(--tw-space-x-reverse)));
}

@media (min-width: 640px) {
  .dash-card > .stack-controlrows > .formrow > .data-item > .stack-avatar.md > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(calc(var(--offset-element-md) * -1) * var(--tw-space-x-reverse));
    margin-left: calc(calc(var(--offset-element-md) * -1) * calc(1 - var(--tw-space-x-reverse)));
  }
}

.dash-card > .stack-controlrows > .formrow > .data-item > .stack-avatar.md > .avatar.md {
  height: var(--element-c-sm);
  width: var(--element-c-sm);
}

@media (min-width: 640px) {
  .dash-card > .stack-controlrows > .formrow > .data-item > .stack-avatar.md > .avatar.md {
    height: var(--element-c-md);
    width: var(--element-c-md);
  }
}

.data-item > .stack-avatar + .block-element {
  font-style: italic;
}

.df-block-code .token.data-item > .stack-avatar + .block-element {
  font-style: italic;
}

.dfp-stack-form-guided .formrow > div:last-child p {
  width: 100%;
  text-align: center;
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
  font-style: italic;
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.df-block-code .token.dfp-stack-form-guided .formrow > div:last-child p {
  font-style: italic;
}

@media (min-width: 960px) {
  .dfp-stack-form-guided .formrow > div:last-child p {
    text-align: left;
  }
}

.dfp-stack-form-guided .formrow.media > div:last-child {
  align-self: center;
}

.dfp-stack-form-guided .formrow div.formrow-helper-none {
  display: none;
}

@media (min-width: 960px) {
  .dfp-stack-form-guided .formrow div.formrow-helper-none {
    display: flex;
  }
}

.stack-form-buttons p {
  padding-bottom: var(--layout-unit);
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.stack-form-buttons-set {
  display: flex;
  width: 100%;
  flex-direction: row;
  row-gap: var(--gap-form-2xl);
  -moz-column-gap: var(--spacing-gutter-base);
       column-gap: var(--spacing-gutter-base);
}

.dfp-checkout-review-product hgroup.title > p > span {
  font-weight: 700;
}

.dfp-checkout-review-product .form-radio-option > span:first-child {
  width: 45%;
}

@media (min-width: 640px) {
  .dfp-checkout-review-product .form-radio-option > span:first-child {
    width: 33.333333%;
  }
}

.dfp-checkout-review-product .form-radio-option > span:last-child {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}

.dfp-checkout-review-product .form-radio-option > span p i {
  margin-left: var(--layout-unit);
}

.dfp-checkout-review-product .form-stack-radio-options label span:first-child p {
  font-size: var(--text-p3-size);
}

.dfp-profile-preview {
  /* Do not edit */
  background: linear-gradient(to right, rgba(var(--color-key-rgb), calc(1 - var(--color-key-gradient-invert-opacity))), rgba(var(--color-key-end-rgb), calc(1 - var(--color-key-gradient-invert-opacity))));
  /* Gradient background Opacity Variant */
}

.dfp-profile-preview.card {
  padding: 0px;
}

.dfp-stack-profile-preview {
  place-items: center;
  padding: var(--pad-article-2xl);
}

.dfp-stack-profile-preview.shader {
  background-color: rgb(var(--color-primary) / var(--shader-light));
  --tw-backdrop-blur: blur(16px);
  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}

.dfp-profile-preview, .dfp-profile-preview h1 {
  text-align: center;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.dfp-profile-preview .active {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.stack-title-preview {
  display: flex;
  flex-direction: column;
  row-gap: var(--gap-element-base);
}

.stack-form-media {
  width: 100%;
  text-align: center;
}

.stack-form-inputs {
  display: flex;
  width: 100%;
}

.stack-form-inputs.stack-row > div {
  width: 100%;
}

.stack-form-media-item .form-label {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  margin-top: var(--pad-element-base);
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

@media (min-width: 640px) {
  .stack-form-media-item .form-label {
    font-size: var(--text-p3-size);
    line-height: var(--text-p3-lh);
  }
}

.stack-form-media-item .helper {
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
  font-style: italic;
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.df-block-code .token.stack-form-media-item .helper {
  font-style: italic;
}

@media (min-width: 640px) {
  .stack-form-media-item .helper {
    font-size: var(--text-p3-size);
    line-height: var(--text-p3-lh);
  }
}

.helper {
  font-style: italic;
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.df-block-code .token.helper {
  font-style: italic;
}

.stack-form-media-item {
  display: flex;
  width: 100%;
  flex-direction: column;
  place-items: center;
}

.stack-subtitle-published {
  justify-content: space-between;
}

.stack-form-link-icons {
  display: flex;
  flex-direction: column;
}

.stack-form-link-icons > p {
  padding-bottom: var(--layout-unit);
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

.stack-form-link-icons .button.icon.round.gradient p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.stack-form-link-icons .button.icon.round.gradient:hover p, .stack-form-link-icons .button.icon.round.gradient:active p, .stack-form-link-icons .button.icon.round.gradient.active p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-key) / var(--tw-text-opacity, 1));
}

div.stack-categories {
  gap: var(--gap-stack-base);
}

div.stack-categories > h3 {
  margin-top: var(--spacing-sub-base);
}

@media (min-width: 960px) {
  div.stack-categories > h3 {
    margin-top: 0px;
  }
}

div.stack-pinned > h3 {
  margin-top: var(--spacing-sub-base);
}

@media (min-width: 960px) {
  div.stack-pinned > h3 {
    margin-top: 0px;
  }
}

div.stack-category-links {
  width: 100%;
  justify-content: center;
  gap: var(--spacing-sub-base);
}

@media (min-width: 960px) {
  div.stack-category-links {
    justify-content: normal;
  }
}

div.stack-category-links a > span {
  gap: var(--gap-element-base);
}

div.stack-category-links p.count {
  font-style: italic;
}

.df-block-code div.token.stack-category-links p.count {
  font-style: italic;
}

div.stack-tags {
  justify-content: center;
}

@media (min-width: 960px) {
  div.stack-tags {
    justify-content: normal;
  }
}

div.stack-trending > h3 {
  display: none;
}

@media (min-width: 960px) {
  div.stack-trending > h3 {
    display: block;
  }
}

.stack-categories .button.secondary.gradient.squared {
  width: -moz-fit-content;
  width: fit-content;
}

@media (min-width: 960px) {
  .stack-categories .button.secondary.gradient.squared {
    width: 100%;
  }
}

.stack-categories .button.secondary.gradient.squared p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
  transition-property: none;
}

.stack-categories .button.secondary.gradient.squared:hover p, .stack-categories .button.secondary.gradient.squared:active p {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  transition-property: none;
}

.stack-categories .button.secondary.gradient.squared {
  /* Do not edit */
  background: linear-gradient(to right, rgba(var(--color-key-rgb), 0), rgba(var(--color-key-end-rgb), 0)) ;
  /* Gradient background Opacity Variant */
  transition-property: none;
}

.stack-categories .button.secondary.gradient.squared:hover {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
}

.stack-categories .button.secondary.gradient.squared:active {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
}

.stack-categories .button.secondary.gradient.squared span {
  background-color: transparent;
  transition-property: none;
}

.stack-categories .button.secondary.gradient.squared:hover span, .stack-categories .button.secondary.gradient.squared:active span {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key-gradient-invert) / var(--tw-bg-opacity, 1));
  --tw-bg-opacity: var(--color-key-gradient-invert-opacity);
  transition-property: none;
}

/* STACK GAPS/FILLERS/SPACERS */

.stack-excerpts {
  row-gap: calc(var(--spacing-gutter-base) + var(--layout-unit) + var(--layout-unit));
  -moz-column-gap: var(--spacing-gutter-base);
       column-gap: var(--spacing-gutter-base);
}

@media (min-width:640px) {
  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  .stack-excerpts {
    row-gap: calc(var(--spacing-gutter-sm) + var(--layout-unit) + var(--layout-unit));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

  .stack-excerpts {
    -moz-column-gap: var(--spacing-gutter-sm);
         column-gap: var(--spacing-gutter-sm);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:768px) {
  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  .stack-excerpts {
    row-gap: calc(var(--spacing-gutter-md) + var(--layout-unit) + var(--layout-unit));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

  .stack-excerpts {
    -moz-column-gap: var(--spacing-gutter-md);
         column-gap: var(--spacing-gutter-md);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:960px) {
  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .stack-excerpts {
    row-gap: calc(var(--spacing-gutter-lg) + var(--layout-unit) + var(--layout-unit));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .stack-excerpts {
    -moz-column-gap: var(--spacing-gutter-lg);
         column-gap: var(--spacing-gutter-lg);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1440px) {
  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .stack-excerpts {
    row-gap: calc(var(--spacing-gutter-xl) + var(--layout-unit) + var(--layout-unit));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .stack-excerpts {
    -moz-column-gap: var(--spacing-gutter-xl);
         column-gap: var(--spacing-gutter-xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

@media (min-width:1600px) {
  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .stack-excerpts {
    row-gap: calc(var(--spacing-gutter-2xl) + var(--layout-unit) + var(--layout-unit));
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */

  /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

  /* ... */

  .stack-excerpts {
    -moz-column-gap: var(--spacing-gutter-2xl);
         column-gap: var(--spacing-gutter-2xl);
  }

  /* ---------------------------- */

  /* ANCHOR Adaptive Text			*/

  /* ---------------------------- */
}

.stack-excerpts {
  grid-column: 1 / -1;
}

.stack-fill {
  flex-grow: 1;
  align-content: flex-end;
}

.stack-fill .button.secondary.gradient {
  width: 100%;
}

.stack-avatar :nth-child(1), .stack-avatar.min :nth-child(1) {
  z-index: 240;
}

.stack-avatar :nth-child(2), .stack-avatar.min :nth-child(2) {
  z-index: 230;
}

.stack-avatar :nth-child(3), .stack-avatar.min :nth-child(3) {
  z-index: 220;
}

.stack-avatar :nth-child(4), .stack-avatar.min :nth-child(4) {
  z-index: 210;
}

.stack-avatar :nth-child(5), .stack-avatar.min :nth-child(5) {
  z-index: 200;
}

.stack-avatar :nth-child(6), .stack-avatar.min :nth-child(6) {
  z-index: 190;
}

.stack-avatar :nth-child(7), .stack-avatar.min :nth-child(7) {
  z-index: 180;
}

.stack-avatar :nth-child(8), .stack-avatar.min :nth-child(8) {
  z-index: 170;
}

.stack-avatar :nth-child(9), .stack-avatar.min :nth-child(9) {
  z-index: 160;
}

.stack-avatar :nth-child(10), .stack-avatar.min :nth-child(10) {
  z-index: 150;
}

.stack-avatar :nth-child(11), .stack-avatar.min :nth-child(11) {
  z-index: 140;
}

.stack-avatar :nth-child(12), .stack-avatar.min :nth-child(12) {
  z-index: 130;
}

.stack-avatar :nth-child(13), .stack-avatar.min :nth-child(13) {
  z-index: 120;
}

.stack-avatar :nth-child(14), .stack-avatar.min :nth-child(14) {
  z-index: 110;
}

.stack-avatar :nth-child(15), .stack-avatar.min :nth-child(15) {
  z-index: 100;
}

.stack-avatar :nth-child(16), .stack-avatar.min :nth-child(16) {
  z-index: 90;
}

.stack-avatar :nth-child(17), .stack-avatar.min :nth-child(17) {
  z-index: 80;
}

.stack-avatar :nth-child(18), .stack-avatar.min :nth-child(18) {
  z-index: 70;
}

.stack-avatar :nth-child(19), .stack-avatar.min :nth-child(19) {
  z-index: 60;
}

.stack-avatar :nth-child(20), .stack-avatar.min :nth-child(20) {
  z-index: 50;
}

.stack-avatar :nth-child(21), .stack-avatar.min :nth-child(21) {
  z-index: 40;
}

.stack-avatar :nth-child(22), .stack-avatar.min :nth-child(22) {
  z-index: 30;
}

.stack-avatar :nth-child(23), .stack-avatar.min :nth-child(23) {
  z-index: 20;
}

.stack-avatar :nth-child(24), .stack-avatar.min :nth-child(24) {
  z-index: 10;
}

.nav-tabs a {
  /* Do not edit */
  background: linear-gradient(to right, rgba(var(--color-key-rgb), 0), rgba(var(--color-key-end-rgb), 0)) ;
  /* Gradient background Opacity Variant */
  flex-shrink: 1;
  flex-grow: 1;
  flex-basis: calc(50% - var(--spacing-gutter-base));
  transition-property: none;
}

@media (min-width: 960px) {
  .nav-tabs a {
    width: 100%;
  }
}

.nav-tabs a:hover, .nav-tabs a:active, .nav-tabs a.active {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  --tw-bg-opacity: 1;
}

.nav-tabs a p {
  transition-property: none;
}

.nav-tabs a:hover p {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  transition-property: none;
}

.nav-tabs a:active p, .nav-tabs a.active p {
  --tw-text-opacity: 1;
  color: rgb(var(--color-invert) / var(--tw-text-opacity, 1));
}

.nav-tabs a span {
  background-color: transparent;
  transition-property: none;
}

.nav-tabs a:hover span {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--color-key-gradient-invert) / var(--tw-bg-opacity, 1));
  --tw-bg-opacity: var(--color-key-gradient-invert-opacity);
}

.nav-tabs a:active span, .nav-tabs a.active span {
  background-color: rgb(var(--color-key-gradient-invert) / var(--tw-bg-opacity, 1));
  --tw-bg-opacity: 0;
}

.title-icon-attribute {
  align-items: baseline;
}

.title-icon-attribute p i {
  padding-right: var(--spacing-sub-base);
}

.profile-avatar {
  width: var(--element-c-lg);
  height: var(--element-c-lg);
  --tw-shadow: var(--shadow-base);
  --tw-shadow-colored: var(--shadow-base);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

@media (min-width: 640px) {
  .profile-avatar {
    width: var(--element-c-xl);
    height: var(--element-c-xl);
  }
}

.centerframe-split {
  display: flex;
  width: 100%;
  flex-direction: column;
  align-items: center;
}

@media (min-width: 640px) {
  .centerframe-split {
    flex-direction: row;
    padding-right: 0px;
  }
}

.centerframe-split-left {
  display: flex;
  width: 100%;
  flex-direction: column;
  align-items: flex-start;
}

@media (min-width: 640px) {
  .centerframe-split-left {
    padding-top: 0px;
    padding-bottom: 0px;
    padding-left: 0px;
  }
}

.centerframe-split-left > div {
  display: flex;
  width: 100%;
  flex-direction: column;
  align-items: flex-end;
}

.centerframe-split-right {
  width: 100%;
}

.centerframe-split-right div img {
  height: calc(3 * var(--layout-row-height-base) + 2 * var(--spacing-gutter-base));
  width: 100%;
  -o-object-fit: cover;
     object-fit: cover;
  -o-object-position: center;
     object-position: center;
}

@media (min-width: 640px) {
  .centerframe-split-right div img {
    aspect-ratio: 1.1618 / 1;
    height: 100%;
    border-top-left-radius: var(--rounded-article-2xl);
    border-bottom-left-radius: var(--rounded-article-2xl);
  }
}

.centerframe-split-lg {
  display: flex;
  width: 100%;
  flex-direction: column;
  align-items: center;
}

@media (min-width: 960px) {
  .centerframe-split-lg {
    flex-direction: row;
    padding-right: 0px;
  }
}

.centerframe-split-left-lg {
  display: flex;
  width: 100%;
  flex-direction: column;
  align-items: flex-start;
}

@media (min-width: 960px) {
  .centerframe-split-left-lg {
    padding-top: 0px;
    padding-bottom: 0px;
    padding-left: 0px;
  }
}

.centerframe-split-left-lg > div {
  display: flex;
  width: 100%;
  flex-direction: column;
  align-items: flex-end;
}

.centerframe-split-right-lg {
  width: 100%;
}

.centerframe-split-right-lg div img {
  height: calc(3 * var(--layout-row-height-base) + 2 * var(--spacing-gutter-base));
  width: 100%;
  -o-object-fit: cover;
     object-fit: cover;
  -o-object-position: center;
     object-position: center;
}

@media (min-width: 960px) {
  .centerframe-split-right-lg div img {
    aspect-ratio: 1.1618 / 1;
    height: 100%;
    border-top-left-radius: var(--rounded-article-2xl);
    border-bottom-left-radius: var(--rounded-article-2xl);
  }
}

.stack-input-helper {
  display: flex;
  flex-direction: column;
  row-gap: var(--spacing-sub-base);
}

.stack-input-helper p.helper {
  text-align: center;
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

.stack-auth-form {
  width: 100%;
}

.stack-auth-form > hgroup > p {
  font-size: var(--text-p1-size);
  line-height: var(--text-p1-lh);
}

.stack-auth-form > form {
  width: 100%;
}

.stack-auth-form > p {
  font-size: var(--text-p2-size);
  line-height: var(--text-p2-lh);
  font-style: italic;
}

.df-block-code .token.stack-auth-form > p {
  font-style: italic;
}

.stack-contact-form {
  width: 100%;
}

.stack-contact-form .stack-row {
  width: 100%;
  flex-wrap: wrap;
  row-gap: var(--gap-stack-base);
}

@media (min-width: 640px) {
  .stack-contact-form .stack-row {
    flex-wrap: nowrap;
  }
}

.stack-contact-form .stack-row .form-input {
  width: 100%;
}

.stack-contact-form > hgroup > p {
  font-size: var(--text-p1-size);
  line-height: var(--text-p1-lh);
}

.stack-contact-form > form {
  width: 100%;
}

.stack-contact-form > p {
  font-size: var(--text-p2-size);
  line-height: var(--text-p2-lh);
  font-style: italic;
}

.df-block-code .token.stack-contact-form > p {
  font-style: italic;
}

.dfp-stack-checkout-form {
  width: 100%;
}

.dfp-stack-checkout-form p a i {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
}

.dfp-checkout-terms {
  width: 100%;
}

.dfp-checkout-terms fieldset {
  display: flex;
  flex-direction: column;
  row-gap: var(--spacing-sub-base);
}

.dfp-checkout-form-promo {
  width: 100%;
}

.dfp-checkout-terms .stack-button-info {
  margin-top: var(--layout-unit);
}

.dfp-checkout-terms .stack-button-info > p {
  text-align: center;
}

.dfp-checkout-terms .form-input-checkbox > div > p {
  font-size: var(--text-p4-size);
  line-height: var(--text-p4-lh);
}

.dfp-checkout-terms .stack-button-info > p > span {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  padding-right: var(--spacing-sub-base);
}

@media (min-width: 960px) {
  .dfp-checkout-product-hero {
    padding-left: calc(var(--spacing-gutter-base) / 2);
  }

  @media (min-width:640px) {
    /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

    .dfp-checkout-product-hero {
      padding-left: calc(var(--spacing-gutter-sm) / 2);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }

  @media (min-width:768px) {
    /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

    .dfp-checkout-product-hero {
      padding-left: calc(var(--spacing-gutter-md) / 2);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }

  @media (min-width:960px) {
    /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

    /* ... */

    .dfp-checkout-product-hero {
      padding-left: calc(var(--spacing-gutter-lg) / 2);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }

  @media (min-width:1440px) {
    /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

    /* ... */

    .dfp-checkout-product-hero {
      padding-left: calc(var(--spacing-gutter-xl) / 2);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }

  @media (min-width:1600px) {
    /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

    /* ... */

    .dfp-checkout-product-hero {
      padding-left: calc(var(--spacing-gutter-2xl) / 2);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }
}

@media (min-width: 640px) {
  .dfp-checkout-product-hero img {
    max-height: var(--element-max-h-base);
  }

  @media (min-width:640px) {
    /* NOTE SCREEN SM CONFIG: You must manually set the min-width: here to match your --screen-sm value if you changed it from the preset Designframe Preferred Value. */

    .dfp-checkout-product-hero img {
      max-height: var(--element-max-h-sm);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }

  @media (min-width:768px) {
    /* NOTE SCREEN MD CONFIG: You must manually set the min-width: here to match your --screen-md value if you changed it from the preset Designframe Preferred Value. */

    .dfp-checkout-product-hero img {
      max-height: var(--element-max-h-md);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }

  @media (min-width:960px) {
    /* NOTE SCREEN LG CONFIG: You must manually set the min-width: here to match your --screen-lg value if you changed it from the preset Designframe Preferred Value. */

    /* ... */

    .dfp-checkout-product-hero img {
      max-height: var(--element-max-h-lg);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }

  @media (min-width:1440px) {
    /* NOTE SCREEN XL CONFIG: You must manually set the min-width: here to match your --screen-xl value if you changed it from the preset Designframe Preferred Value. */

    /* ... */

    .dfp-checkout-product-hero img {
      max-height: var(--element-max-h-xl);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }

  @media (min-width:1600px) {
    /* NOTE SCREEN 2XL CONFIG: You must manually set the min-width: here to match your --screen-2xl value if you changed it from the preset Designframe Preferred Value. */

    /* ... */

    .dfp-checkout-product-hero img {
      max-height: var(--element-max-h-2xl);
    }

    /* ---------------------------- */

    /* ANCHOR Adaptive Text			*/

    /* ---------------------------- */
  }
}

.dfp-checkout-total {
  display: flex;
  flex-direction: column;
  align-items: baseline;
  row-gap: var(--layout-unit);
}

.dfp-checkout-total-upfront {
  display: flex;
  flex-direction: row;
  align-items: baseline;
  -moz-column-gap: var(--spacing-sub-base);
       column-gap: var(--spacing-sub-base);
}

.dfp-checkout-total-upfront h2 {
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

.dfp-checkout-total-upfront p {
  font-size: var(--text-p2-size);
  line-height: var(--text-p2-lh);
}

.dfp-checkout-total-renewal p {
  font-style: italic;
}

.df-block-code .token.dfp-checkout-total-renewal p {
  font-style: italic;
}

.profile-username {
  font-size: var(--text-p1-size);
  line-height: var(--text-p1-lh);
}

.dfp-stack-checkout-product-info {
  display: flex;
  width: 100%;
  flex-direction: column;
  row-gap: var(--spacing-sub-base);
}

.dfp-stack-checkout-product-info > div.stack-row p:first-child {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  width: 45%;
  font-size: var(--text-p2-size);
  line-height: var(--text-p2-lh);
}

@media (min-width: 640px) {
  .dfp-stack-checkout-product-info > div.stack-row p:first-child {
    width: 33.333333%;
  }
}

.dfp-stack-checkout-product-info > div.stack-row p:last-child {
  text-align: left;
  font-size: var(--text-p2-size);
  line-height: var(--text-p2-lh);
}

.stack-element-preview-form-input div {
  width: 100%;
}

.stack-element-preview {
  display: flex;
  width: 100%;
  flex-direction: column;
}

.element-preview-label {
  display: flex;
  flex-direction: row;
}

.profile-bio {
  font-style: italic;
}

.df-block-code .token.profile-bio {
  font-style: italic;
}

.dfp-banner-card {
  background-size: cover;
  background-position: center;
  padding: 0px;
}

.dfp-banner-card-shader {
  background-color: rgb(var(--color-primary) / var(--shader-light));
  --tw-backdrop-blur: blur(16px);
  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}

.dfp-banner-card .dfp-banner-card-shader > .formrow {
  row-gap: var(--spacing-card-base);
}

.stack-profile-stats {
  justify-content: center;
}

@media (min-width: 960px) {
  .stack-profile-stats {
    justify-content: flex-start;
  }
}

.stack-profile-stats-item > :first-child {
  font-size: var(--text-p1-size);
  line-height: var(--text-p1-lh);
}

.post-form .form-textarea {
  border-radius: var(--rounded-field);
  border-width: 0px;
  padding: var(--spacing-sub-base);
}

.post-form .form-textarea textarea {
  width: 100%;
  border-width: 0px;
  padding: 0px;
}

.post-form .form-textarea label {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

div.stack-comment-hearts.stack-row {
  /* Do not edit */
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(var(--color-key) / 1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(var(--color-key) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(var(--color-key-end) / 1) var(--tw-gradient-to-position);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  align-items: center;
  -moz-column-gap: var(--spacing-sub-base);
       column-gap: var(--spacing-sub-base);
}

@media (min-width: 1600px) {
  div.stack-comment-hearts.stack-row {
    gap: var(--gap-element-2xl);
  }
}

.post-data {
  width: 100%;
}

.post-data .datarow.title {
  width: 100%;
  flex-basis: 100%;
  align-items: center;
}

@media (min-width: 640px) {
  .post-data .datarow.title {
    flex-grow: 1;
  }
}

@media (min-width: 768px) {
  .post-data .datarow.title {
    flex-basis: calc(33.333333% - var(--spacing-gutter-base));
  }
}

.post-data .datarow {
  flex-basis: 100%;
}

@media (min-width: 640px) {
  .post-data .datarow {
    flex-shrink: 1;
    flex-grow: 1;
    flex-basis: calc(33.333333% - var(--spacing-gutter-base));
  }
}

.post-data .controlrow {
  width: 100%;
}

@media (min-width: 640px) {
  .post-data .controlrow {
    width: -moz-fit-content;
    width: fit-content;
  }
}

.post-data .controlrow {
  width: 100%;
}

@media (min-width: 640px) {
  .post-data .controlrow {
    width: -moz-fit-content;
    width: fit-content;
  }
}

.post-data .controlrow .button {
  width: 100%;
}

@media (min-width: 640px) {
  .post-data .controlrow .button {
    width: -moz-fit-content;
    width: fit-content;
  }
}

.dfp-product-pricing-details p.dfp-product-renewal-summary-cost {
  font-style: italic;
  --tw-text-opacity: 1;
  color: rgb(var(--color-primary) / var(--tw-text-opacity, 1));
}

.df-block-code .token.dfp-product-pricing-details p.dfp-product-renewal-summary-cost {
  font-style: italic;
}

.dfp-product-pricing-details > div > h4 > i {
  min-width: var(--element-base-size);
  text-align: center;
}

/* ---------------------------- */

/* ANCHOR Product Page			*/

/* ---------------------------- */

.product-info-listing {
  font-style: italic;
}

.df-block-code .token.product-info-listing {
  font-style: italic;
}

.dfp-product-pricing-details > div {
  width: 100%;
}

.dfp-product-pricing-details h2 span {
  font-size: var(--text-h6-size);
}

.dfp-product-pricing-details h4 {
  line-height: var(--text-h2-lh);
}

.dfp-product-pricing-details h4 i {
  padding-right: var(--spacing-sub-base);
}

.dfp-product-pricing-details p {
  font-style: italic;
  line-height: var(--text-h2-lh);
  --tw-text-opacity: 1;
  color: rgb(var(--color-secondary) / var(--tw-text-opacity, 1));
}

.df-block-code .token.dfp-product-pricing-details p {
  font-style: italic;
}

/* === Chunk 5 cleanup: orphan compound rules from Custom Classes @media (max-width: 639px) === */

/* Split per S70 audit Pattern 2 extension (cross-namespace selector inside Free-content @media). */

/* @media wrapper duplicated; Free side stays in Custom Classes, Pro side moves here. */

@media (max-width: 639px) {
  .dash-card.dfp-banner-card.dfp-bg-swap {
    background-image: none !important;
  }

  .dash-card.dfp-banner-card.dfp-bg-swap .dfp-banner-card-shader {
    background-color: transparent;
    --tw-backdrop-blur:  ;
    -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
    backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
  }
}

/* -------------------------------------------- */

/* !SECTION Utilities							*/

/* -------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* !SECTION DFP Custom Classes                                                                    */

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* !SECTION DFP Framework Additions																*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------- */

/* SECTION Effects — Pro Choreographies 							*/

/* -------------------------------------------------------------- */

/* ---------------------------- */

/* ANCHOR Effects - dfp-hero.fx (layered parallax + animated gradient bg) */

/* ---------------------------- */

/* Rides the Free primitives: decoration layer gets the @property gradient sweep;
	   parallax is native scroll-driven where supported, static otherwise (Law 2 — parallax
	   degrades to a static layered hero, no JS fallback needed). */

.dfp-hero.fx .dfp-hero-decoration::after {
  background-image: linear-gradient(var(--df-fx-gradient-angle),
			rgb(var(--qs-color-key) / 0.18), rgb(var(--qs-color-key-end) / 0.18));
  animation: df-gradient-sweep calc(var(--qs-duration-slow) * 16) linear infinite;
}

@supports (animation-timeline: scroll()) {
  html:not([data-dffx-motion="reduced"]) .dfp-hero.fx .dfp-hero-decoration {
    animation: df-hero-drift both linear;
    animation-timeline: scroll();
    animation-range: 0% 100vh;
  }
}

@keyframes df-hero-drift {
  to {
    transform: translateY(calc(-1 * var(--spacing-shoulder-2xl, 48px)));
  }
}

@media (prefers-reduced-motion: reduce) {
  html:not([data-dffx-motion="full"]) .dfp-hero.fx .dfp-hero-decoration,
		html:not([data-dffx-motion="full"]) .dfp-hero.fx .dfp-hero-decoration::after {
    animation: none;
  }
}

html[data-dffx-motion="reduced"] .dfp-hero.fx .dfp-hero-decoration,
	html[data-dffx-motion="reduced"] .dfp-hero.fx .dfp-hero-decoration::after {
  animation: none;
}

/* ---------------------------- */

/* ANCHOR Effects - dfp-reveal-stage (choreographed section reveal) */

/* ---------------------------- */

/* Apply to a section alongside .reveal-group. Heading block leads, content follows in
	   full-beat steps; both engines inherit (the choreography only adjusts delay/range). */

html.dffx-io .dfp-reveal-stage > * {
  transition-delay: calc(var(--df-fx-i, 0) * var(--qs-duration-fast));
}

html.dffx-io .dfp-reveal-stage > hgroup,
	html.dffx-io .dfp-reveal-stage > .block-full:first-child {
  transition-delay: 0s;
}

@supports (animation-timeline: view()) {
  html:not([data-dffx-force-fallback]):not([data-dffx-motion="reduced"]) .dfp-reveal-stage > * {
    animation-range: entry 0% entry 80%;
  }

  html:not([data-dffx-force-fallback]):not([data-dffx-motion="reduced"]) .dfp-reveal-stage > hgroup {
    animation-range: entry 0% entry 40%;
  }
}

/* ---------------------------- */

/* ANCHOR Effects - dfp-header-condense (glass header scroll-condense) */

/* ---------------------------- */

/* df-pro.js (DfPro.HeaderCondense) toggles .scrolled (existing glass shadow ramp) +
	   .condensed past the threshold. Condense animates transform only (Law 3) — the header
	   content scales down; the header's box never animates height.
	   STRUCTURE NOTE (executor correction #9, 2026-06-12): the canonical header is
	   <HEADER class="header-base theme glass"> > <div class="header-flex"> > <NAV> — ONE nav
	   carries brand (left) + links (right); the second <NAV> lives in the hidden
	   .df-mobile-menu. The plan's two-direct-NAV dual-origin premise (brand-left/links-right)
	   was falsified against the live template, so condense scales the single .header-flex nav
	   from center. Visual scale/origin is Mike-tunable polish. */

.dfp-header-condense .header-flex > nav {
  transition: transform var(--qs-duration-base) var(--qs-ease-standard);
  transform-origin: center;
}

.dfp-header-condense.condensed .header-flex > nav {
  transform: scale(0.92);
}

@media (prefers-reduced-motion: reduce) {
  html:not([data-dffx-motion="full"]) .dfp-header-condense .header-flex > nav {
    transition: none;
  }
}

/* !SECTION Effects — Pro Choreographies */

/* NOTE Designframe 0.99.51-52 Release															*/

/* -------------------------------------------------------------------------------------------- */

/* SECTION CONFIG Theming																		*/

/* -------------------------------------------------------------------------------------------- */

/* NOTE Only edit this file to change default theme behavior or creating new themes.			*/

/* For general theming, edit config.css for consistency and to maintain variable cascade. 		*/

/* -------------------------------------------------------------------------------------------- */

/* NOTE All targets here will inherit auto/adaptive structure from Designframe Core and			*/

/* Adaptives. All styles here are primarily for visual theming and any style can be overridden  */

/* by using inline CSS and Designframe/Tailwind classes in the HTML directly.					*/

/* -------------------------------------------------------------------------------------------- */

/* Designframe layers cascade in the following order (lowest to highest specificity):			*/

/* 	1. CONFIG Fonts, Linked Assets, and Variables is where your specific values are defined.	*/

/* 	2. HTML Element Applications apply Variables to create fallback styles.						*/

/* 	3. DF Core Layout Utilities set up Designframe base Layout utilities/classes.				*/

/* 	4. DF Core Visual Utilities set up Designframe color and visual utilities/classes.			*/

/* 	5. DF Components Structure set up colorless components, integrating Variables.				*/

/* 	6. DF Components Radius & Transitions apply component behaviors, integrating Variables.		*/

/* 	7. DF Components Visuals apply base colors to components, integrating Variables.			*/

/* 	8. DF Theming Variants set up .theme & .theme-* variants, integrating Variables.			*/

/* 	9. DF Adaptives apply layout and other adaptive behaviors across all screen sizes			*/

/* 10. CONFIG Theming is where your specific Global and Theme style modifiers are configured.	*/

/* 11. CONFIG Overrides (Optional) is for multi-instance overrides that would not be inline.	*/

/* 12. CONFIG Custom CSS Classes is for any additional custom styles that would not be inline.	*/

/* -------------------------------------------------------------------------------------------- */

/* Theme Sets																					*/

/* -------------------------------------------------------------------------------------------- */

/* BASE (All Themes) is a default which overrides the HTML Fallbacks and sets inherited styles. */

/* -------------------------------------------------------------------------------------------- */

/* THEME is your main color set and is used to determine the logical INVERT variations.			*/

/* THEME TRANSPARENT is same as THEME but with transparent background defaults for layering.	*/

/* THEME INVERT is should be defined as the invert/dark mode equivalent of THEME.				*/

/* THEME INVERT TRANSPARENT is same as THEME INVERT but with transparent background defaults.	*/

/* -------------------------------------------------------------------------------------------- */

/* THEME KEY is THEME-based but with Key Color(s) as backgrounds with colors adjusted.			*/

/* THEME KEY GRADIENT is THEME KEY-based but with Key Gradient as backgrounds.				*/

/* -------------------------------------------------------------------------------------------- */

/* THEME ALT is an optional alternative color palette. 											*/

/* THEME ALT TRANSPARENT is same as THEME ALT but with transparent background defaults.			*/

/* THEME ALT INVERT is should be defined as the invert/dark mode equivalent of THEME ALT.		*/

/* THEME ALT INVERT TRANSPARENT is same as THEME ALT INVERT but with transparent backgrounds.	*/

/* -------------------------------------------------------------------------------------------- */

/* THEME KEY ALT is THEME ALT-based but with Key Alt as backgrounds with colors adjusted.		*/

/* THEME KEY ALT GRADIENT is THEME KEY ALT-based but with Key Alt Gradient as backgrounds.		*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* How To Use Themes																			*/

/* -------------------------------------------------------------------------------------------- */

/* NOTE Apply theme and theme-* classes only to HEADER, FOOTER, and SECTION Elements, and only	*/

/* to DIV Elements with section-*, centerframe-*, grid-*, and flex-* classes. Avoid nesting a 	*/

/* theme class in another theme class to prevent conflicts and ensure proper cascading.			*/

/* -------------------------------------------------------------------------------------------- */

/* NOTE For specificity and semantic reasons, normal text links should be wrapped in a			*/

/* paragraph element, e.g. "<p><a href="#">text link</a></p>". This is specifically needed to 	*/

/* support reliable gradient applications. However, if a workaround is needed, use inline 		*/

/* Tailwind classes. If there are any issues, try adding bg-none and/or bg-clip-* to clear any 	*/

/* potential gradient conflicts. 																*/

/* -------------------------------------------------------------------------------------------- */

/* LAYER components begin 			*/

/* Do not edit					*/

/* !LAYER components end			*/

/* -------------------------------------------------------------------------------------------- */

/* SECTION CONFIG Dark Mode (.df-dark) — UNLAYERED										*/

/* -------------------------------------------------------------------------------------------- */

/* Canonical page-level dark mode. Promoted verbatim from the validated page-local testbed
   (docs/_darkmode-testbed.html @ 3ba302ab — probed 16/16 dark+light, mono AND colored brand).

   MODEL: dark = primary↔background SWAP (invert IS background). Greys ride along (no -invert).
   Brand bands (key/key-alt) stay fixed. --qs-color-key-invert (config.css, default white) is the
   dark-surface heading key. Token VALUES live in config.css; the switch + routing live HERE (D1).

   WHY UNLAYERED (deliberately NOT @layer components): the switch remaps --qs-color-* custom
   properties declared in config.css's UNLAYERED :root. Per CSS Cascade Layers, an unlayered
   declaration beats ANY @layer declaration regardless of specificity — so a layered switch would
   LOSE to the unlayered :root defaults and dark mode would silently no-op. The routing rules
   likewise out-rank the layered theme cascade, and the transparent-invert bugfix's (0,2,x)
   selector cannot beat the existing (0,3,x) :not(.transparent) rules in-layer. Keeping the whole
   block unlayered reproduces exactly the cascade the testbed validated. */

/* The swap — by reference (no cycle, no literals-in-rule). Greys NOT pulled. Bands NOT touched. */

html.df-dark {
  --qs-color-background: var(--qs-color-background-invert);
  --qs-color-background-start: var(--qs-color-background-start-invert);
  --qs-color-background-start-rgb: var(--qs-color-background-start-invert-rgb);
  --qs-color-background-end: var(--qs-color-background-end-invert);
  --qs-color-background-end-rgb: var(--qs-color-background-end-invert-rgb);
  --qs-color-primary: var(--qs-color-primary-invert);
  --qs-color-invert: var(--qs-color-background-invert);
  /* inverted-card text → dark */
  --qs-color-background-alt: var(--qs-color-background-alt-invert);
  --qs-color-background-start-alt: var(--qs-color-background-start-alt-invert);
  --qs-color-background-start-alt-rgb: var(--qs-color-background-start-alt-invert-rgb);
  --qs-color-background-end-alt: var(--qs-color-background-end-alt-invert);
  --qs-color-background-end-alt-rgb: var(--qs-color-background-end-alt-invert-rgb);
  --qs-color-primary-alt: var(--qs-color-primary-alt-invert);
  --qs-color-invert-alt: var(--qs-color-background-alt-invert);
}

/* KEY-FOREGROUND per-family flip (0.99.62). --color-key feeds text-key,
   gradient-text-key, air-button text/icons, and solid-button fills. On dark
   surfaces it must become the light invert key; on the now-light solid inverted
   cards it must stay the dark brand key. Each family re-declares --color-key on
   its own element, which also CONTAINS the nesting leak (a nested inverted card
   or key band re-establishes its own key instead of inheriting the flipped one).
   Alt families are handled by the existing core.css:4958 (--color-key→alt) and
   core.css:4975 (--color-key-invert→alt-invert) cascade — do NOT duplicate.
   (The heading rules below stay: theme-invert/key card headings read
   --color-key-INVERT, which this flip does not reach — so this is additive.) */

/* Flip — dark-surface-showing families adopt the invert key (light negative). */

html.df-dark :is(.theme, .theme-transparent, .theme-alt, .theme-alt-transparent,
                 .theme-invert-transparent, .theme-alt-invert-transparent) {
  --color-key: var(--color-key-invert);
  --color-key-end: var(--color-key-invert-end);
}

/* Keep/contain — default solid inverted card + default key bands stay brand key
   (light surface needs the dark key; bands stay fixed). Alt equivalents handled
   by core.css:4958. */

html.df-dark :is(.theme-invert, .theme-key, .theme-key-gradient) {
  --color-key: var(--qs-color-key);
  --color-key-end: var(--qs-color-key-end);
}

/* SURFACE-LUMINANCE ROUTING — headings track their surface: dark → key-invert (white default),
   light → key. Dark mode flips which families are dark, so it swaps which token each uses. Only
   background-image is overridden; the gradient-clip (bg-clip:text + transparent fill) is retained
   from the base config-text-key* heading rules. */

/* Flip TO dark: neutral cards (theme/theme-alt) + page/section headings → key-invert. */

html.df-dark :is(.theme, .theme-transparent, .theme-alt, .theme-alt-transparent):is(.card, .card-base) :is(h1, h2, h3, h4, h5, h6),
html.df-dark section.theme :is(h1, h2, h3, h4, h5, h6):not(.card *):not(.card-base *) {
  background-image: linear-gradient(to right, rgb(var(--color-key-invert)), rgb(var(--color-key-invert-end)));
}

/* Flip TO light: inverted cards → key (dark, contrasts their now-light surface). */

html.df-dark :is(.theme-invert, .theme-alt-invert):is(.card, .card-base) :is(h1, h2, h3, h4, h5, h6) {
  background-image: linear-gradient(to right, rgb(var(--color-key)), rgb(var(--color-key-end)));
}

/* Brand BANDS — heading stays native key-invert (white); BODY opts out of the flipped text-invert
   → primary-invert (light), so it contrasts the colored band. */

html.df-dark :is(.theme-key, .theme-key-gradient, .theme-key-alt, .theme-key-alt-gradient):is(.card, .card-base) p {
  color: rgb(var(--qs-color-primary-invert));
  -webkit-text-fill-color: rgb(var(--qs-color-primary-invert));
}

/* Transparent-INVERT bugfix (MODE-AGNOSTIC — not .df-dark-scoped). Pre-existing bug, broken in BOTH
   modes: white-on-white in light, dark-on-dark in dark. A transparent card shows the PAGE, so its
   text must be the page text (primary), NOT invert. Clears the heading gradient for these (gradient
   retention is for solid themed cards). Unlayered so it out-ranks the (0,3,x) :not(.transparent) rules. */

:is(.theme-invert-transparent, .theme-alt-invert-transparent):is(.card, .card-base),
:is(.theme-invert-transparent, .theme-alt-invert-transparent):is(.card, .card-base) :is(h1, h2, h3, h4, h5, h6, p) {
  background: none;
  color: rgb(var(--color-primary));
  -webkit-text-fill-color: rgb(var(--color-primary));
}

/* -------------------------------------------------------------------------------------------- */

/* !SECTION CONFIG Dark Mode (.df-dark)													*/

/* -------------------------------------------------------------------------------------------- */

/* -------------------------------------------------------------------------------------------- */

/* !SECTION CONFIG Theming																		*/

/* -------------------------------------------------------------------------------------------- */

/* ================================================================== */

/* THE COLLAB COLLECTIVE — custom layer for the Collab-customized DF   */

/* Brand source of truth: collab/brand/thecollab.PRISM.md (locked      */

/* 2026-06-12). This is the ONLY collab-authored fragment — config/    */

/* core/pro/theming stay pristine vendored DF (0.99.64) so version     */

/* bumps are a clean re-copy, not a targeted patch (knowledge ADR 040).*/

/* Concatenated LAST, so :root here overrides config's QS vars by       */

/* source order, and unlayered rules outrank DF's @layer components.    */

/* ================================================================== */

/* ------------------------------------------------------------------ */

/* 1 · Brand token overrides (collab values; DF RGB-triplet format)    */

/* ------------------------------------------------------------------ */

:root {
  /* Monotone palette */
  --qs-color-primary: 10 10 10;
  /* ink    #0a0a0a */
  --qs-color-secondary: 107 107 107;
  /* muted  #6b6b6b */
  --qs-color-tertiary: 212 212 212;
  /* line-2 #d4d4d4 */
  --qs-color-invert: 255 255 255;
  /* paper  #ffffff */
  --qs-color-background: 255 255 255;
  --qs-color-key: 107 107 107;
  /* solid key accent #6b6b6b */
  --qs-color-key-rgb: 107, 107, 107;
  --qs-color-key-end: 10 10 10;
  /* gradient end #0a0a0a */
  --qs-color-key-end-rgb: 10, 10, 10;
  /* Type — JetBrains Mono for display + all labels (matches the monospace
	   wordmark); Albert Sans for body. Fonts load via CDN <link> in pages. */
  --font-display: "JetBrains Mono";
  --font-display-alt1: ui-monospace;
  --font-display-alt2: monospace;
  --font-heading: "JetBrains Mono";
  --font-heading-alt1: ui-monospace;
  --font-heading-alt2: monospace;
  --font-body: "Albert Sans";
  --font-mono: "JetBrains Mono";
  /* Fully square — the brand is 0-radius + clip-path notch */
  --qs-rounded-base: 0px;
  --qs-rounded-min: 0px;
  --qs-rounded-corner: 0px;
  --qs-rounded-field: 0px;
  /* DF derives card/article RADIUS from --pad-article-* (not from any
	   --qs-rounded-* knob), so the qs overrides above don't reach .card —
	   it would round by its padding (16px). Zero the computed article-radius
	   layer so cards are square too. (ADR-040: override here, leave config.css
	   pristine.) */
  --rounded-article-base: 0px;
  --rounded-article-sm: 0px;
  --rounded-article-md: 0px;
  --rounded-article-lg: 0px;
  --rounded-article-xl: 0px;
  --rounded-article-2xl: 0px;
  /* Collab-only tokens (not part of DF) */
  --collab-notch: 10px;
  /* octagonal corner cut (containers/marks) */
  --collab-notch-btn: 8px;
  /* tighter cut for button-scale clips */
  --collab-grad: linear-gradient(45deg, #cfcfcf 0%, #6b6b6b 30%, #2a2a2a 65%, #0a0a0a 100%);
}

/* Ensure body copy defaults to the body face (Albert Sans). */

body {
  font-family: var(--font-body), var(--font-body-alt1), var(--font-body-alt2);
}

/* ------------------------------------------------------------------ */

/* 2 · Bespoke collab classes (unlayered = high cascade priority)      */

/* ------------------------------------------------------------------ */

/* Octagonal notch — 4-corner (the logo geometry). Both treatments are
   sanctioned per the brand lock; pick one per surface, don't mix. */

.notch {
  clip-path: polygon(
		var(--collab-notch) 0, calc(100% - var(--collab-notch)) 0,
		100% var(--collab-notch), 100% calc(100% - var(--collab-notch)),
		calc(100% - var(--collab-notch)) 100%, var(--collab-notch) 100%,
		0 calc(100% - var(--collab-notch)), 0 var(--collab-notch));
}

/* 2-corner cut — top-right + bottom-left (lighter, directional; docs/chrome) */

.notch-2 {
  clip-path: polygon(
		0 0, calc(100% - var(--collab-notch)) 0, 100% var(--collab-notch),
		100% 100%, var(--collab-notch) 100%, 0 calc(100% - var(--collab-notch)));
}

/* Button-scale notch (8px) */

.notch-btn {
  clip-path: polygon(
		var(--collab-notch-btn) 0, calc(100% - var(--collab-notch-btn)) 0,
		100% var(--collab-notch-btn), 100% calc(100% - var(--collab-notch-btn)),
		calc(100% - var(--collab-notch-btn)) 100%, var(--collab-notch-btn) 100%,
		0 calc(100% - var(--collab-notch-btn)), 0 var(--collab-notch-btn));
}

/* Line-only octagonal outline (transparent fill) */

.notch-line {
  position: relative;
  background: transparent;
}

.notch-line::before {
  content: "";
  position: absolute;
  inset: 0;
  border: 1px solid rgb(var(--color-tertiary));
  clip-path: polygon(
		var(--collab-notch) 0, calc(100% - var(--collab-notch)) 0,
		100% var(--collab-notch), 100% calc(100% - var(--collab-notch)),
		calc(100% - var(--collab-notch)) 100%, var(--collab-notch) 100%,
		0 calc(100% - var(--collab-notch)), 0 var(--collab-notch));
  pointer-events: none;
}

/* Eyebrow — mono uppercase label with a leading tick. */

.eyebrow {
  font-family: var(--font-mono), var(--font-mono-alt1), var(--font-mono-alt2);
  font-size: 0.6875rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgb(var(--color-primary));
  display: inline-flex;
  align-items: center;
  gap: 10px;
}

.eyebrow::before {
  content: "";
  width: 22px;
  height: 1px;
  background: currentColor;
  display: inline-block;
}

.eyebrow.on-invert {
  color: rgb(var(--color-invert));
}

/* Coordinate-bracket corner ticks — the blueprint/technical motif. */

.tick-corners {
  position: relative;
}

.tick-corners::before, .tick-corners::after {
  content: "";
  position: absolute;
  width: 12px;
  height: 12px;
  border: 1px solid rgb(var(--color-primary));
}

.tick-corners::before {
  top: -1px;
  left: -1px;
  border-right: 0;
  border-bottom: 0;
}

.tick-corners::after  {
  bottom: -1px;
  right: -1px;
  border-left: 0;
  border-top: 0;
}

/* Marquee — scrolling mono row, ✦-separated. */

.marquee {
  display: flex;
  overflow: hidden;
  border-top: 1px solid rgb(var(--color-tertiary));
  border-bottom: 1px solid rgb(var(--color-tertiary));
  padding: 18px 0;
}

.marquee-track {
  display: flex;
  gap: 56px;
  animation: collab-marquee 40s linear infinite;
  flex-shrink: 0;
  padding-right: 56px;
}

.marquee-track > span {
  font-family: var(--font-mono);
  font-size: 14px;
  letter-spacing: 0.06em;
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  gap: 56px;
}

.marquee-track > span::after {
  content: "\2726";
  margin-left: 56px;
}

@keyframes collab-marquee {
  from {
    transform: translateX(0);
  }

  to {
    transform: translateX(-50%);
  }
}

/* Footer big-mark watermark (place inside a position:relative; overflow:hidden parent). */

.big-mark {
  font-family: var(--font-mono);
  font-size: clamp(48px, 12vw, 180px);
  line-height: 0.85;
  letter-spacing: -0.02em;
  font-weight: 500;
  color: rgba(255, 255, 255, 0.08);
  position: absolute;
  bottom: -20px;
  right: 5%;
  pointer-events: none;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}

/* Accent gradient — the locked 4-stop mono signature, for standalone
   decorative panels/watermarks. Unlayered, so it wins over DF @layer rules.
   NOTE: the gradient BUTTON is handled separately below — DF paints the button
   gradient on a ::before, so an element-level background-image here would be
   masked by it and never show. */

.accent-grad {
  background-image: var(--collab-grad);
}

/* ------------------------------------------------------------------ */

/* 3 · Button brand shape (square sides + octagonal notch, not a pill)  */

/* ------------------------------------------------------------------ */

/* DF's .button is a 9999px pill (element, inner span, and the gradient/air
   ::before layers all carry rounded-full). The brand is 0-radius + a clip-path
   notch, so a .notch-btn clip on a pill only nicks the corners while the long
   rounded sides survive. Zero the radii so the notch reads as a clean octagon.
   The text/scrim/gradient layering is unchanged — only the corner geometry. */

.button, .button > span,
.button.gradient::before, .button.air::before {
  border-radius: 0;
}

/* Gradient button keeps DF's native key→key-end fill (#6b6b6b → #0a0a0a via the
   collab tokens) — a dark-weighted slice of the mono signature that holds white
   (paper) label contrast across the whole fill, unlike the full 4-stop whose
   #cfcfcf start would wash out the label. */

/* Brand button type: mono, uppercase, tracked (PRISM §Components — .btn is
   "mono uppercase, 12px / 0.14em tracking"). DF colors/positions the label on
   the inner <p>/<i>, so set the type there to cover every combo variant. */

.button p, .button i {
  font-family: var(--font-mono), var(--font-mono-alt1), var(--font-mono-alt2);
  text-transform: uppercase;
  letter-spacing: 0.14em;
}

/* ================================================================== */

/* 4 · Collab DOCUMENT shell (.doc) — shared chrome for co-studio docs  */

/* ================================================================== */

/* Single source for the proposal / solutions-overview / packages / etc.
   document templates: cover, section-head, cards, tables, note, CTA, footer,
   print. EVERYTHING is scoped under `.doc` (body class) so these rules — incl.
   the element resets — stay inert on non-doc pages (the landing) even though
   output.css loads everywhere. Per-template files add only their UNIQUE bits
   inline (proposal: summary/clause/sign-grid; packages: .pkg-grid). Colors/faces
   resolve through DF tokens; only the brand greys DF collapses into one
   --color-tertiary are restated, from thecollab.PRISM.md. */

.doc {
  --font-mono-doc: var(--font-mono), ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  --font-sans-doc: var(--font-body), -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;
  --doc-line: #e5e5e5;
  /* color.brand.line   — light hairline */
  --doc-line-2: #d4d4d4;
  /* color.brand.line-2 — stronger hairline (= --color-tertiary) */
  --doc-ink-2: #1a1a1a;
  /* color.brand.ink-2  — body copy */
  --doc-paper-2: #f5f5f5;
  /* color.brand.paper-2 — inset/note surface */
  --measure: 900px;
  /* layout.measure — readable doc line length */
  --pad-x: clamp(20px, 5vw, 48px);
}

/* Element resets — SCOPED to .doc so they never touch the landing/other pages. */

body.doc {
  background: rgb(var(--color-background));
  color: rgb(var(--color-primary));
  font-family: var(--font-sans-doc);
  line-height: 1.6;
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

.doc * {
  box-sizing: border-box;
}

.doc a {
  color: inherit;
  text-decoration: none;
}

.doc h1, .doc h2, .doc h3, .doc h4 {
  margin: 0;
  font-weight: 500;
  letter-spacing: -0.01em;
}

.doc p {
  margin: 0;
}

.doc .h1 {
  font-family: var(--font-mono-doc);
  font-weight: 500;
  font-size: clamp(34px, 5.4vw, 64px);
  line-height: 0.98;
  letter-spacing: -0.025em;
}

.doc .h2 {
  font-family: var(--font-mono-doc);
  font-weight: 500;
  font-size: clamp(24px, 3.2vw, 38px);
  line-height: 1.04;
  letter-spacing: -0.02em;
}

.doc .h3 {
  font-family: var(--font-mono-doc);
  font-weight: 500;
  font-size: clamp(17px, 2vw, 21px);
  line-height: 1.2;
  letter-spacing: -0.01em;
}

/* DF's base layer colors headings with --color-key (grey accent); brand wants
   heading TEXT in ink. Re-assert; inverted cover gets paper. */

.doc .h1, .doc .h2, .doc .h3 {
  color: rgb(var(--color-primary));
}

.doc .cover .h1 {
  color: rgb(var(--color-invert));
}

.doc .body {
  font-size: 15px;
  line-height: 1.7;
  color: var(--doc-ink-2);
}

.doc .muted {
  color: rgb(var(--color-secondary));
}

.doc strong {
  font-weight: 600;
  color: rgb(var(--color-primary));
}

.doc .group-label {
  padding: 0 var(--pad-x);
  margin: clamp(16px, 2.5vw, 24px) 0 4px;
}

.doc .group-label .sheet {
  max-width: var(--measure);
  margin: 0 auto;
  border-top: 2px solid rgb(var(--color-primary));
  padding-top: 10px;
  font-family: var(--font-mono-doc);
  font-size: 11px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: rgb(var(--color-secondary));
}

.doc .sheet {
  max-width: var(--measure);
  margin: 0 auto;
}

/* Cover */

.doc .cover {
  background: rgb(var(--color-primary));
  color: rgb(var(--color-invert));
  padding: clamp(40px, 8vw, 88px) var(--pad-x);
}

.doc .cover .sheet {
  display: flex;
  flex-direction: column;
  gap: clamp(28px, 5vw, 56px);
}

.doc .cover-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}

.doc .mark {
  width: 46px;
  height: auto;
  color: rgb(var(--color-invert));
}

.doc .cover-doc {
  font-family: var(--font-mono-doc);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgb(var(--color-invert));
  opacity: .85;
}

.doc .cover-title h1 {
  margin-top: 14px;
}

.doc .cover-client {
  font-family: var(--font-mono-doc);
  font-size: 13px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: rgb(var(--color-invert));
  opacity: .7;
}

.doc .cover-meta {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1px;
  background: var(--doc-ink-2);
  border: 1px solid var(--doc-ink-2);
}

@media (min-width: 640px) {
  .doc .cover-meta {
    grid-template-columns: repeat(4, 1fr);
  }
}

.doc .cover-meta .cell {
  background: rgb(var(--color-primary));
  padding: 16px 18px;
}

.doc .cover-meta .k {
  font-family: var(--font-mono-doc);
  font-size: 10px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: rgb(var(--color-secondary));
}

.doc .cover-meta .v {
  font-family: var(--font-mono-doc);
  font-size: 13px;
  color: rgb(var(--color-invert));
  margin-top: 6px;
}

/* Sections */

.doc .doc-main {
  display: contents;
}

/* Neutralize DF's base section{padding:--pad-section-base} (48px) on semantic
   <section> tags — it dominated the inter-section gap. Group .sheet wrappers
   keep their gutter via the higher-specificity .doc-main>.sheet rule. */

.doc section {
  padding: 0;
}

.doc .doc-main > .sheet {
  padding: clamp(20px, 3vw, 32px) var(--pad-x) 0;
}

.doc .section {
  margin-bottom: 64px;
}

.doc .sec-head {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 18px;
}

.doc .sec-no {
  font-family: var(--font-mono-doc);
  font-size: 11px;
  letter-spacing: .16em;
  color: rgb(var(--color-secondary));
}

.doc .rule {
  border: 0;
  border-top: 1px solid var(--doc-line);
  margin: 0 0 24px;
}

/* Audit: leading Phosphor icon inside a section-head eyebrow. (.eyebrow is inline-flex
   with gap:10px, so spacing is handled by the flex gap — no margin needed here.) */

.doc .sec-head .eyebrow .ph {
  font-size: 1.25em;
  opacity: .9;
}

/* Audit: inline social brand mark beside a platform heading. */

.doc .sec-head .eyebrow .social-mark {
  width: 1.1em;
  height: 1.1em;
}

/* Audit: a row of audited-channel marks (consolidated multi-platform social audit). */

.doc .channel-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 18px;
  margin: 0 0 20px;
}

.doc .channel-legend .chan {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-family: var(--font-mono-doc);
  font-size: 12px;
  letter-spacing: .04em;
  color: rgb(var(--color-secondary));
}

.doc .channel-legend .chan .social-mark {
  width: 18px;
  height: 18px;
}

.doc .stack > * + * {
  margin-top: 14px;
}

/* Cards (scope tiers, solution areas, etc.) */

.doc .cards {
  display: grid;
  gap: 1px;
  background: var(--doc-line);
  border: 1px solid var(--doc-line);
}

.doc .card {
  background: rgb(var(--color-background));
  padding: 20px 22px;
}

.doc .card .card-top {
  display: flex;
  justify-content: space-between;
  gap: 18px;
  align-items: baseline;
}

.doc .card .h3 {
  margin-bottom: 4px;
}

.doc .card .price {
  font-family: var(--font-mono-doc);
  font-size: 14px;
  white-space: nowrap;
  color: rgb(var(--color-primary));
}

.doc .card ul {
  margin: 10px 0 0;
  padding-left: 18px;
}

.doc .card li {
  font-size: 14px;
  color: var(--doc-ink-2);
  margin: 3px 0;
}

.doc .tier-tag {
  font-family: var(--font-mono-doc);
  font-size: 10px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgb(var(--color-secondary));
}

/* Tables */

.doc table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
}

.doc th, .doc td {
  text-align: left;
  padding: 12px 14px;
  border-bottom: 1px solid var(--doc-line);
  vertical-align: top;
}

.doc th {
  font-family: var(--font-mono-doc);
  font-size: 10px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: rgb(var(--color-secondary));
  font-weight: 500;
}

.doc td.num, .doc th.num {
  text-align: right;
  font-family: var(--font-mono-doc);
  white-space: nowrap;
}

.doc .total-row td {
  border-top: 2px solid rgb(var(--color-primary));
  border-bottom: none;
  font-family: var(--font-mono-doc);
  font-weight: 600;
  color: rgb(var(--color-primary));
  padding-top: 14px;
}

/* Note / callout */

.doc .note {
  background: var(--doc-paper-2);
  border-left: 2px solid rgb(var(--color-primary));
  padding: 13px 18px;
  font-size: 13.5px;
  color: var(--doc-ink-2);
}

/* CTA button (shared — proposal, packages, solutions next-steps) */

.doc .cta {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  background: rgb(var(--color-primary));
  color: rgb(var(--color-invert));
  font-family: var(--font-mono-doc);
  font-size: 12px;
  letter-spacing: .12em;
  text-transform: uppercase;
  padding: 14px 22px;
  margin-top: 18px;
}

/* Footer */

.doc footer {
  border-top: 1px solid var(--doc-line);
  margin-top: clamp(30px, 6vw, 60px);
  padding: 28px var(--pad-x);
}

.doc footer .sheet {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 12px;
  font-family: var(--font-mono-doc);
  font-size: 11px;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: rgb(var(--color-secondary));
}

@media print {
  /* Edge-to-edge PDF: @page margin 0 removes the white border so the ink cover
	   (and any full-bleed band) reaches all four edges. Safe text padding is moved
	   onto the content/cover/footer instead. NOTE: to fully remove the page URL/date,
	   the user must uncheck "Headers and footers" in the browser print dialog — that
	   is a dialog setting CSS cannot control. */

  @page {
    margin: 0;
  }

  /* print-color-adjust on the root makes the ink cover, stat/frame fills, and SVG
	   infographics actually print (Chrome inherits -webkit-print-color-adjust). */

  html, body.doc {
    font-size: 10.5pt;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }

  .doc .cover {
    padding: 18mm var(--pad-x);
  }

  .doc .doc-main > .sheet {
    padding: 14mm var(--pad-x) 0;
  }

  .doc footer {
    padding: 12mm var(--pad-x);
  }

  .doc .section, .doc .card, .doc .sign, .doc table tr, .doc .clause, .doc .pkg-card,
		.doc .stat, .doc .frame, .doc .summary, .doc figure, .doc svg {
    -moz-column-break-inside: avoid;
         break-inside: avoid;
  }

  .doc .sec-head, .doc .group-label {
    -moz-column-break-after: avoid;
         break-after: avoid;
  }

  .doc a[href]::after {
    content: "";
  }
}

/* ------------------------------------------------------------------ */

/* 4b · Shared doc COMPONENTS (promoted once a 2nd template needed them)*/

/* ------------------------------------------------------------------ */

/* Used across audit / strategy / capabilities / proposal-variants. Promoted
   from audit-inline per the ROADMAP "promote on 2nd consumer" rule. */

/* 2-up grid (SWOT, personas, differentiators) — children are shell .card. */

.doc .grid-2 {
  display: grid;
  gap: 1px;
  background: var(--doc-line);
  border: 1px solid var(--doc-line);
}

@media (min-width: 640px) {
  .doc .grid-2 {
    grid-template-columns: 1fr 1fr;
  }
}

/* Media + findings split (audit rows, demographics, creative + commentary). */

.doc .audit-split {
  display: grid;
  gap: 24px;
  align-items: start;
}

@media (min-width: 760px) {
  .doc .audit-split {
    grid-template-columns: 0.9fr 1.1fr;
  }
}

/* Media frame — placeholder for screenshot / device mockup / chart. Swap the
   inner .frame-label for an <img>. */

.doc .frame {
  position: relative;
  background: var(--doc-paper-2);
  border: 1px solid var(--doc-line-2);
  min-height: 220px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}

.doc .frame.tall {
  min-height: 380px;
}

.doc .frame img {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
     object-fit: cover;
  display: block;
}

.doc .frame .frame-label {
  font-family: var(--font-mono-doc);
  font-size: 11px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgb(var(--color-secondary));
  text-align: center;
  padding: 16px;
}

/* Big-stat callouts (followers / engagement / core-age / CPI, etc.). */

.doc .stats {
  display: grid;
  gap: 1px;
  background: var(--doc-line);
  border: 1px solid var(--doc-line);
}

@media (min-width: 560px) {
  .doc .stats {
    grid-template-columns: repeat(3, 1fr);
  }
}

.doc .stat {
  background: rgb(var(--color-background));
  padding: 22px;
  text-align: center;
}

.doc .stat .n {
  font-family: var(--font-mono-doc);
  font-size: clamp(28px, 5vw, 44px);
  font-weight: 600;
  color: rgb(var(--color-primary));
  line-height: 1;
}

.doc .stat .l {
  font-family: var(--font-mono-doc);
  font-size: 10px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgb(var(--color-secondary));
  margin-top: 10px;
}

/* Numbered recommendations — mono index, ink markers. */

.doc .recs {
  margin: 12px 0 0;
  padding-left: 22px;
}

.doc .recs li {
  font-size: 14px;
  color: var(--doc-ink-2);
  margin: 9px 0;
  line-height: 1.6;
}

.doc .recs li::marker {
  font-family: var(--font-mono-doc);
  color: rgb(var(--color-primary));
  font-weight: 600;
}

/* Bold lead-in sentence inside a body block. */

.doc .lead {
  font-weight: 600;
  color: rgb(var(--color-primary));
}

/* Audit: a section deliberately excluded from this engagement (e.g. web sections in a social-only audit). */

.doc .section-pending {
  opacity: 0.55;
}

.doc .section-pending .sec-head::after {
  content: " — not included in this engagement";
  font-style: italic;
  font-weight: 400;
}

/* Cost summary key/value box — Total / Retainer / Duration / service areas.
   Promoted from proposal-inline per "2nd consumer" rule (estimate reuses it). */

.doc .summary {
  border: 1px solid var(--doc-line-2);
}

.doc .summary .row {
  display: flex;
  justify-content: space-between;
  gap: 18px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--doc-line);
}

.doc .summary .row:last-child {
  border-bottom: 0;
}

.doc .summary .k {
  font-family: var(--font-mono-doc);
  font-size: 11px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: rgb(var(--color-secondary));
}

.doc .summary .v {
  font-family: var(--font-mono-doc);
  font-size: 15px;
  color: rgb(var(--color-primary));
  text-align: right;
}

.doc .summary .v.big {
  font-size: 18px;
  font-weight: 600;
}

/* Rate-basis list — senior / specialist / production hourly bands. */

.doc .rates li {
  font-size: 14px;
  color: var(--doc-ink-2);
  margin: 5px 0;
}

/* Legal clauses — mono uppercase heading + tight legal-body paragraphs.
   Promoted from proposal-inline per "2nd consumer" rule (agreement/ reuses them). */

.doc .clause {
  margin-top: 20px;
}

.doc .clause h4 {
  font-family: var(--font-mono-doc);
  font-size: 12px;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: rgb(var(--color-primary));
  margin-bottom: 7px;
}

.doc .clause p {
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--doc-ink-2);
}

.doc .clause p + p {
  margin-top: 8px;
}

/* Signature blocks — bordered cards with role / signature lines / preset values. */

.doc .sign-grid {
  display: grid;
  gap: 24px;
  margin-top: 8px;
}

@media (min-width: 640px) {
  .doc .sign-grid {
    grid-template-columns: 1fr 1fr;
  }
}

.doc .sign {
  border: 1px solid var(--doc-line-2);
  padding: 22px;
}

.doc .sign .role {
  font-family: var(--font-mono-doc);
  font-size: 10px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: rgb(var(--color-secondary));
}

.doc .sign .line {
  margin-top: 28px;
  border-bottom: 1px solid rgb(var(--color-primary));
  height: 1px;
}

.doc .sign .lab {
  font-family: var(--font-mono-doc);
  font-size: 10px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgb(var(--color-secondary));
  margin-top: 8px;
}

.doc .sign .preset {
  font-family: var(--font-mono-doc);
  font-size: 13px;
  color: rgb(var(--color-primary));
  margin-top: 28px;
}

/* Audit cover: client logo / key-art block. Default suits a square-ish logo (height-capped). */

.doc .cover .cover-hero {
  margin-top: 18px;
  max-height: 200px;
}

.doc .cover .cover-hero img {
  max-height: 200px;
  width: auto;
  border-radius: 4px;
}

/* Modifier: a wide banner / key-art lockup (e.g. 6:1) — fill the column, drop the height cap. */

.doc .cover .cover-hero-banner {
  max-height: none;
}

.doc .cover .cover-hero-banner img {
  width: 100%;
  max-height: none;
  height: auto;
}

/* Monotone bar chart / data viz — funnels, ladders, baseline→target. Prints
   crisply (no external assets); fills inherit print-color-adjust from body.doc.
   Markup: .bars > .bar-row ( .bar-label + .bar-track > .bar-fill + .bar-val ). */

.doc .bars {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin: 4px 0;
}

.doc .bar-row {
  display: flex;
  align-items: center;
  gap: 14px;
}

.doc .bar-label {
  font-family: var(--font-mono-doc);
  font-size: 11px;
  letter-spacing: .02em;
  color: rgb(var(--color-primary));
  flex: 0 0 40%;
}

.doc .bar-track {
  flex: 1;
  height: 14px;
  background: var(--doc-line);
  position: relative;
  min-width: 40px;
}

.doc .bar-fill {
  display: block;
  height: 100%;
  background: rgb(var(--color-primary));
}

.doc .bar-fill.alt {
  background: var(--doc-line-2);
}

.doc .bar-val {
  font-family: var(--font-mono-doc);
  font-size: 12px;
  color: rgb(var(--color-primary));
  flex: 0 0 auto;
  min-width: 54px;
  text-align: right;
}

.doc .bars-legend {
  font-family: var(--font-mono-doc);
  font-size: 10px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: rgb(var(--color-secondary));
  display: flex;
  gap: 18px;
  margin-top: 12px;
}

.doc .bars-legend i {
  display: inline-block;
  width: 12px;
  height: 12px;
  margin-right: 6px;
  vertical-align: -1px;
}

.doc .bars-legend i.ink {
  background: rgb(var(--color-primary));
}

.doc .bars-legend i.line {
  background: var(--doc-line-2);
}

@media (min-width: 640px) {
  .sm\:hidden {
    display: none;
  }
}

@media (min-width: 768px) {
  .md\:py-1\.5 {
    padding-top: 0.375rem;
    padding-bottom: 0.375rem;
  }
}

@media (min-width: 960px) {
  .lg\:px-3\.5 {
    padding-left: 0.875rem;
    padding-right: 0.875rem;
  }
}
