﻿/*!
 * mm-comf main.css — COMPILED FILE, DO NOT EDIT THE .css DIRECTLY.
 * Source of truth: assets/scss/ — edit the .scss, then `npm run build:css`.
 * Any change made only to the compiled CSS is undone by the next build.
 *
 * @package mm-comf
 * @version 0.2.0
 * @since   0.1.0
 *//*!
 * _tokens.scss — the design-token contract.
 *
 * One :root block of --mm-* custom properties. Brand values come FROM the
 * Elementor Kit globals — the Kit stays the single source of brand truth
 * and theme CSS never hardcodes a brand color or font. Theme partials
 * consume ONLY --mm-* tokens, never --e-global-* directly.
 *
 * FALLBACKS (0.2.0): every Kit-sourced token carries a hard literal
 * fallback — var(--e-global-…, <brand-neutral default>). With Elementor
 * active and the Kit populated, the Kit value always wins; without it
 * (plugin inactive, Kit half-configured) the theme degrades to a
 * deliberately neutral grayscale + default blue instead of to browser
 * defaults. This fallback seam is also where a future no-Elementor
 * profile would plug in (tokens become literals) — logged under
 * strategic directions in ../../../docs/plan-comment-reconciliation.md.
 *
 * Custom (non-core) Kit globals get per-site hash IDs like
 * --e-global-color-a1b2c3d — when a client fork needs one, alias it HERE
 * once (e.g. --mm-color-highlight: var(--e-global-color-a1b2c3d, #888))
 * instead of letting the hash leak into partials. Fallback required.
 *
 * Type scale, links, and buttons are THEME-OWNED tokens: the Kit's four
 * core globals carry brand family/color, not a per-element scale.
 * _content.scss (the parity layer) consumes them; client forks retune
 * them from site/ — never by editing this file.
 *
 * @package mm-comf
 * @version 0.2.0
 * @since   0.1.0
 */:root{--mm-color-primary: var(--e-global-color-primary, #1a1a1a);--mm-color-secondary: var(--e-global-color-secondary, #4a4a4a);--mm-color-text: var(--e-global-color-text, #2d2d2d);--mm-color-accent: var(--e-global-color-accent, #2563eb);--mm-font-primary: var(--e-global-typography-primary-font-family, system-ui), sans-serif;--mm-font-text: var(--e-global-typography-text-font-family, system-ui), sans-serif;--mm-color-bg: #fff;--mm-color-error: #b3261e;--mm-focus-ring: 2px solid var(--mm-color-accent);--mm-radius: 0.25rem;--mm-space: 1rem;--mm-fs-body: 1rem;--mm-lh-body: 1.6;--mm-prose-margin: 1em;--mm-fw-heading: 700;--mm-lh-heading: 1.25;--mm-fs-h1: 2.25rem;--mm-fs-h2: 1.75rem;--mm-fs-h3: 1.375rem;--mm-fs-h4: 1.125rem;--mm-fs-h5: 1rem;--mm-fs-h6: 0.875rem;--mm-link-color: var(--mm-color-accent);--mm-link-hover-color: var(--mm-color-primary);--mm-btn-bg: var(--mm-color-primary);--mm-btn-color: var(--mm-color-bg);--mm-btn-padding: 0.75em 2em;--mm-btn-radius: var(--mm-radius);--mm-btn-weight: 600}/*!
 * _base.scss — micro-reset, WP core classes, a11y utilities.
 *
 * Deliberately tiny: Elementor carries its own normalization; duplicating
 * a full reset here just creates specificity fights.
 *
 * @package mm-comf
 * @version 0.1.0
 * @since   0.1.0
 *//*!
 * _mixins.scss — breakpoints + a11y utilities. Emits no CSS on its own.
 * Nothing else belongs here: if a mixin is used once, inline it instead.
 *
 * @package mm-comf
 * @version 0.1.0
 * @since   0.1.0
 */html{-webkit-text-size-adjust:100%}img{max-width:100%;height:auto}:focus-visible{outline:var(--mm-focus-ring);outline-offset:2px}.screen-reader-text{position:absolute !important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}.skip-link.screen-reader-text:focus{position:fixed !important;top:var(--mm-space);left:var(--mm-space);z-index:100000;width:auto;height:auto;margin:0;padding:.75em 1.25em;overflow:visible;clip:auto;clip-path:none;white-space:normal;background:var(--mm-color-primary);color:var(--mm-color-bg);border-radius:var(--mm-radius);text-decoration:none}.alignleft{float:left;margin:.5em var(--mm-space) var(--mm-space) 0}.alignright{float:right;margin:.5em 0 var(--mm-space) var(--mm-space)}.aligncenter{display:block;margin-left:auto;margin-right:auto}.wp-caption{max-width:100%}.wp-caption-text,.gallery-caption{font-size:.875em;opacity:.8}.sticky,.bypostauthor{display:revert}/*!
 * _content.scss — the typography parity layer.
 *
 * WHY: past builds left classic-WYSIWYG pages and PHP templates off-brand
 * because only Elementor-rendered content ever got styled — and Kit
 * globals were sometimes never set at all. Parity here is STRUCTURAL:
 * everything the Kit defines site-wide — body, h1–h6, links, lists,
 * blockquotes, buttons — is styled at bare-element level from --mm-*
 * tokens, so every render path shares one floor.
 *
 * ACCEPTANCE TEST (run at the Elementor gate): the same markup rendered
 * (1) in an Elementor Text Editor widget, (2) on a classic-WYSIWYG page
 * via the_content(), (3) from a PHP template printing ACF fields must be
 * pixel-identical. Everything in this file must therefore stay
 * context-free: bare elements only — never a selector scoped to
 * .elementor, a page-type class, or a plugin wrapper.
 *
 * HOW IT MEETS THE KIT: if a site populates Elementor's Theme Style
 * (per-element typography), those rules load after theme CSS at
 * .elementor-kit-N specificity (0,1,1 vs our 0,0,1) and win — but they
 * apply site-wide too, so cross-context parity still holds and both
 * layers read the same globals. This floor is what saves the site when
 * the Kit is unset or half-set (the historical failure mode). Elementor
 * widget chrome (e.g. the Heading widget zeroing .elementor-heading-title
 * margins) is out of scope: the parity target is content markup, not
 * widget internals.
 *
 * @package mm-comf
 * @version 0.2.0
 * @since   0.2.0
 */body{background-color:var(--mm-color-bg);color:var(--mm-color-text);font-family:var(--mm-font-text);font-size:var(--mm-fs-body);line-height:var(--mm-lh-body)}h1,h2,h3,h4,h5,h6{margin:1.5em 0 .5em;color:var(--mm-color-primary);font-family:var(--mm-font-primary);font-weight:var(--mm-fw-heading);line-height:var(--mm-lh-heading)}h1{font-size:var(--mm-fs-h1)}h2{font-size:var(--mm-fs-h2)}h3{font-size:var(--mm-fs-h3)}h4{font-size:var(--mm-fs-h4)}h5{font-size:var(--mm-fs-h5)}h6{font-size:var(--mm-fs-h6)}:is(h1,h2,h3,h4,h5,h6):first-child{margin-top:0}p{margin:0 0 var(--mm-prose-margin)}p:last-child{margin-bottom:0}a{color:var(--mm-link-color);text-decoration:underline;text-underline-offset:.15em}a:hover,a:focus-visible{color:var(--mm-link-hover-color)}nav a{text-decoration:none}ul,ol{margin:0 0 var(--mm-prose-margin);padding-left:1.5em}:is(ul,ol) :is(ul,ol){margin-bottom:0}blockquote{margin:1.5em 0;padding:.5em 0 .5em 1.25em;border-left:4px solid var(--mm-color-accent)}blockquote cite{display:block;margin-top:.5em;font-size:.875em;font-style:normal;opacity:.8}button,input[type=button],input[type=submit],input[type=reset],.mm-button{display:inline-block;padding:var(--mm-btn-padding);background:var(--mm-btn-bg);color:var(--mm-btn-color);border:0;border-radius:var(--mm-btn-radius);font:inherit;font-weight:var(--mm-btn-weight);line-height:1.4;text-decoration:none;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}button:hover,input[type=button]:hover,input[type=submit]:hover,input[type=reset]:hover,.mm-button:hover{filter:brightness(0.92)}/*!
 * _elementor.scss — SMALL Elementor corrections only.
 *
 * This partial exists as the ONE sanctioned place for rules that fix
 * Elementor's own behavior (never for styling site content — that's
 * site/ in a client fork, or better, the Kit itself).
 *
 * Ground rules, learned the hard way in the fxy_elementor forks:
 *   - Elementor Kit CSS loads AFTER theme CSS and hits inputs at
 *     specificity (0,3,1) via `.elementor-kit-N input:not(...)`.
 *     Out-specify it; never reach for !important first.
 *   - Before adding a rule here, ask whether it belongs in Elementor
 *     Site Settings instead. This file should stay under ~50 lines in
 *     the starter; growth happens in client forks' site/ layer.
 *
 * @package mm-comf
 * @version 0.1.0
 * @since   0.1.0
 */.mm-fallback-header,.mm-fallback-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--mm-space);padding:var(--mm-space) calc(var(--mm-space)*2);font-family:var(--mm-font-text)}.mm-fallback-header__title{color:var(--mm-color-primary);font-family:var(--mm-font-primary);font-size:1.25rem;font-weight:700;text-decoration:none}.mm-fallback-header ul,.mm-fallback-footer ul{display:flex;flex-wrap:wrap;gap:var(--mm-space);margin:0;padding:0;list-style:none}/*!
 * _base.scss — micro-reset, WP core classes, a11y utilities.
 *
 * Deliberately tiny: Elementor carries its own normalization; duplicating
 * a full reset here just creates specificity fights.
 *
 * @package mm-comf
 * @version 0.1.0
 * @since   0.1.0
 *//*!
 * components/_gform.scss — the Gravity Forms baseline.
 *
 * DOCTRINE (fxy_elementor 1.13.0, 2026-05-21 — baked into the starter):
 * GF's own CSS is fully disabled (inc/gravityforms.php) and every form is
 * pinned to gravity-theme markup. This file styles GF's PLAIN markup from
 * zero. Never re-enable GF/Orbital CSS; never theme via GF's own --gf-*
 * variable system (it doesn't exist on the front end here — the --gf-*
 * props below are OURS).
 *
 * SPECIFICITY: Elementor Kit CSS loads after theme CSS and hits form
 * controls at (0,3,1) via `.elementor-kit-N input:not([type=button])...`.
 * Every control rule below is scoped `.elementor .gform_wrapper .gfield …`
 * = (0,4,1)+ so the baseline wins without !important. KEEP that qualifier.
 *
 * CLIENT FORKS: restyle forms by overriding the --gf-* custom props from
 * the site/ layer — do not edit this partial. Example:
 *   .elementor .gform_wrapper { --gf-border: 1px solid #123456; }
 *
 * LESSON (fxy 1.22.0): list resets stay SCOPED to the choice containers
 * (.gfield_checkbox / .gfield_radio render as <ul>) — a blanket
 * `.gform_wrapper ul` reset destroys real prose lists inside
 * HTML-content fields (.gfield--type-html) and then has to be undone
 * downstream, which is exactly the bug the fork shipped and fixed.
 *
 * Diff-checked against the MMD fork (assets/scss/inc/_gform.scss,
 * 2026-08-26): section skeleton, specificity doctrine, and class map
 * verified. The fork handles only .gfield--width-half on a 2-col grid;
 * this baseline's 12-col grid + extra width classes are a superset —
 * verify against a real multi-column form at the 0.3.0 gate.
 *
 * @package mm-comf
 * @version 0.1.0
 * @since   0.1.0
 */.elementor .gform_wrapper{--gf-label-color: var(--mm-color-secondary);--gf-label-weight: 600;--gf-text-color: var(--mm-color-text);--gf-field-bg: var(--mm-color-bg);--gf-border: 2px solid var(--mm-color-secondary);--gf-radius: var(--mm-radius);--gf-error: var(--mm-color-error);--gf-row-gap: 1.5rem;--gf-col-gap: 1.5rem;--gf-control-padding: 0.6em 0.8em;--gf-submit-bg: var(--mm-color-primary);--gf-submit-color: var(--mm-color-bg);font-family:var(--mm-font-text);color:var(--gf-text-color)}.elementor .gform_wrapper form{margin:0}.elementor .gform_wrapper .gfield_checkbox,.elementor .gform_wrapper .gfield_radio{margin:0;padding:0;list-style:none}.elementor .gform_wrapper .gform_description{display:block;margin-bottom:var(--gf-row-gap)}.elementor .gform_wrapper .gform_description:empty{display:none}.elementor .gform_wrapper .gform_fields{display:grid;grid-template-columns:repeat(12, minmax(0, 1fr));gap:var(--gf-row-gap) var(--gf-col-gap);margin:0;padding:0}.elementor .gform_wrapper .gfield{grid-column:1/-1;min-width:0}@media(min-width: 768px){.elementor .gform_wrapper .gfield--width-half{grid-column:span 6}.elementor .gform_wrapper .gfield--width-third{grid-column:span 4}.elementor .gform_wrapper .gfield--width-two-thirds{grid-column:span 8}.elementor .gform_wrapper .gfield--width-quarter{grid-column:span 3}.elementor .gform_wrapper .gfield--width-three-quarter{grid-column:span 9}}.elementor .gform_wrapper .gfield_label,.elementor .gform_wrapper .gform-field-label{display:inline-block;margin-bottom:.4em;color:var(--gf-label-color);font-family:var(--mm-font-text);font-weight:var(--gf-label-weight);line-height:1.3}.elementor .gform_wrapper .gfield_required{margin-left:.15em;color:var(--gf-error)}.elementor .gform_wrapper .gfield_description{margin-top:.4em;font-size:.875em;line-height:1.5}.elementor .gform_wrapper .gfield input[type=text],.elementor .gform_wrapper .gfield input[type=email],.elementor .gform_wrapper .gfield input[type=tel],.elementor .gform_wrapper .gfield input[type=url],.elementor .gform_wrapper .gfield input[type=number],.elementor .gform_wrapper .gfield input[type=password],.elementor .gform_wrapper .gfield input[type=date],.elementor .gform_wrapper .gfield input[type=search],.elementor .gform_wrapper .gfield textarea,.elementor .gform_wrapper .gfield select{width:100%;padding:var(--gf-control-padding);color:var(--gf-text-color);background:var(--gf-field-bg);border:var(--gf-border);border-radius:var(--gf-radius);font:inherit;line-height:1.4}.elementor .gform_wrapper .gfield input:not([type=radio]):not([type=checkbox]),.elementor .gform_wrapper .gfield textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}.elementor .gform_wrapper .gfield textarea{min-height:8em;resize:vertical}.elementor .gform_wrapper .gfield input[type=file]{width:100%;padding:var(--gf-control-padding);background:var(--gf-field-bg);border:var(--gf-border);border-radius:var(--gf-radius);font:inherit}.elementor .gform_wrapper .gfield ::-moz-placeholder{color:inherit;opacity:.55}.elementor .gform_wrapper .gfield ::placeholder{color:inherit;opacity:.55}.elementor .gform_wrapper .gfield input:focus-visible,.elementor .gform_wrapper .gfield textarea:focus-visible,.elementor .gform_wrapper .gfield select:focus-visible{outline:var(--mm-focus-ring);outline-offset:2px}.elementor .gform_wrapper .ginput_complex{display:grid;grid-template-columns:repeat(auto-fit, minmax(10rem, 1fr));gap:var(--gf-col-gap)}.elementor .gform_wrapper .ginput_complex .ginput_full{grid-column:1/-1}.elementor .gform_wrapper .ginput_complex label,.elementor .gform_wrapper .gform-field-label--type-sub{display:block;margin-top:.3em;color:var(--gf-label-color);font-size:.8em;font-weight:400}.elementor .gform_wrapper .gchoice,.elementor .gform_wrapper .ginput_container_consent{display:flex;align-items:flex-start;gap:.6em}.elementor .gform_wrapper .gchoice+.gchoice{margin-top:.5em}.elementor .gform_wrapper .gchoice label,.elementor .gform_wrapper .ginput_container_consent label{margin:0;font-weight:400}.elementor .gform_wrapper .gfield input[type=radio],.elementor .gform_wrapper .gfield input[type=checkbox]{flex-shrink:0;width:1.1em;height:1.1em;margin-top:.25em;accent-color:var(--mm-color-primary)}.elementor .gform_wrapper .gfield--type-html{line-height:1.6}.elementor .gform_wrapper .gform_validation_errors{padding:1em 1.25em;border:2px solid var(--gf-error);border-radius:var(--gf-radius)}.elementor .gform_wrapper .gform_validation_errors h2{margin:0;color:var(--gf-error);font-size:1em}.elementor .gform_wrapper .gfield_validation_message,.elementor .gform_wrapper .validation_message{margin-top:.4em;color:var(--gf-error);font-size:.875em}.elementor .gform_wrapper .gfield_error input,.elementor .gform_wrapper .gfield_error textarea,.elementor .gform_wrapper .gfield_error select{border-color:var(--gf-error)}.elementor .gform_wrapper .gform_footer,.elementor .gform_wrapper .gform_page_footer{display:flex;gap:var(--gf-col-gap);margin-top:var(--gf-row-gap)}.elementor .gform_wrapper .gform_footer button,.elementor .gform_wrapper .gform_page_footer button{padding:.75em 2em;background:var(--gf-submit-bg);color:var(--gf-submit-color);border:0;border-radius:var(--gf-radius);font:inherit;font-weight:600;cursor:pointer}.elementor .gform_wrapper .gform_footer button:hover,.elementor .gform_wrapper .gform_page_footer button:hover{filter:brightness(0.92)}.elementor .gform_wrapper .gform_ajax_spinner{margin-left:.5em;vertical-align:middle}.elementor .gform_wrapper .gform_validation_container{position:absolute !important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}.elementor .gform_confirmation_message{padding:1em 1.25em;border-left:4px solid var(--mm-color-primary);font-family:var(--mm-font-text)}/*!
 * site/_index.scss — the per-client seam.
 *
 * EMPTY IN THE STARTER, ON PURPOSE. All client-specific styling accrues
 * in this directory after forking: add partials next to this file and
 * @use them from here. The layers above (tokens, base, elementor,
 * components) stay fork-invariant — override their custom properties
 * from here instead of editing them, e.g.:
 *
 *   .elementor .gform_wrapper {
 *       --gf-border: 1px solid #123456;
 *       --gf-radius: 0;
 *   }
 *
 * @package mm-comf
 * @version 0.1.0
 * @since   0.1.0
 */
