/* ==================================================================
   MyPetsFiles Design System -- mpf-design-system.css
   Version 20B.

   HONESTY NOTE FOR THE TEAM: this file did not exist anywhere in the
   real project before this delivery. mpf-public.css (built in earlier
   Version 20A rounds) already references dozens of --mpf-* custom
   properties and classes like .mpf-btn / .mpf-card / .mpf-widget /
   .mpf-status-chip / .mpf-progress-ring / .mpf-empty-state /
   .mpf-status-banner / .mpf-action-tile as if this file already
   existed. It did not. Every public page (welcome, login, register,
   pricing) has been loading undefined CSS variables and unstyled
   component classes this entire time. This file is being built fresh,
   for the first time, as the real Version 20 foundation -- it is not
   a restoration of a lost file. It defines exactly the tokens and
   classes that mpf-public.css, pet-dashboard.css, and every converted
   Version 20B template actually reference, based on a real grep audit
   of the current templates tree.

   Load order (every page must load in this order):
     1. mpf-design-system.css   (this file -- tokens + primitives)
     2. mpf-signature-theme.css (Signature-specific gradients/glow)
     3. mpf-public.css  OR  pet-dashboard.css (page-family composition)
   ================================================================== */

*, *::before, *::after { box-sizing: border-box; }

/* ==================================================================
   Version 20C -- Three-skin-ready token architecture.

   The full token set is defined twice, with identical values, on
   purpose:

   1. :root -- the universal fallback. Every page that has NOT yet
      been given a data-mpf-theme attribute (or that only sets
      data-mpf-root/data-mpf-mode from earlier rounds) still gets the
      correct dark Signature colors, so this change cannot regress any
      already-shipped page.
   2. [data-mpf-theme="signature-blue"] -- the real, named default
      skin. This is where a future [data-mpf-theme="signature-purple"]
      or [data-mpf-theme="signature-emerald"] block gets added later
      -- same variable names, different values, set on <body>. Nothing
      else in the codebase needs to change to add a skin; only this
      file does.

   Component CSS everywhere else in the project (mpf-public.css,
   pet-dashboard.css, every template) keeps using the same variable
   names it already does (--mpf-bg-page, --mpf-surface-1, etc.) --
   those names are NOT being renamed. A short list of aliases matching
   an alternate naming convention is included at the bottom of this
   block for anyone referencing tokens that way; they point at the
   exact same values, not a second source of truth.
   ================================================================== */

:root,
[data-mpf-theme="signature-blue"]{
    /* ---------- Core palette (dark Signature navy) ---------- */
    --mpf-navy:#0a1428;
    --mpf-navy-2:#0f1e3d;
    --mpf-bg-page:#0a1428;
    --mpf-surface-1:#101f3d;
    --mpf-surface-2:#152a4d;
    --mpf-surface-3:#1b3459;
    --mpf-border:rgba(255,255,255,.10);
    --mpf-border-strong:rgba(92,155,255,.42);
    --mpf-edge:rgba(255,255,255,.06);

    /* ---------- Text ---------- */
    --mpf-text-primary:#f3f6fb;
    --mpf-text-secondary:#9fb0cc;
    --mpf-text-muted:#6d7fa0;

    /* ---------- Brand / status ---------- */
    --mpf-accent:#3b82f6;
    --mpf-accent-2:#2563eb;
    --mpf-accent-cyan:#22d3ee;
    --mpf-success:#22c55e;
    --mpf-success-bg:rgba(34,197,94,.14);
    --mpf-warning:#f59e0b;
    --mpf-warning-bg:rgba(245,158,11,.14);
    --mpf-danger:#ef4444;
    --mpf-danger-bg:rgba(239,68,68,.14);

    /* ---------- Radius scale ---------- */
    --mpf-radius-sm:8px;
    --mpf-radius-md:14px;
    --mpf-radius-lg:20px;
    --mpf-radius-xl:28px;
    --mpf-radius-pill:999px;

    /* ---------- Shadow scale ---------- */
    --mpf-shadow-sm:0 2px 8px rgba(0,0,0,.25);
    --mpf-shadow-md:0 10px 30px rgba(0,0,0,.35);
    --mpf-shadow-lg:0 20px 50px rgba(0,0,0,.45);

    /* ---------- Spacing scale ---------- */
    --mpf-space-1:4px;
    --mpf-space-2:8px;
    --mpf-space-3:12px;
    --mpf-space-4:20px;
    --mpf-space-5:28px;
    --mpf-space-6:40px;

    /* ---------- Type scale ---------- */
    --mpf-text-caption:12.5px;
    --mpf-text-body:15px;
    --mpf-text-h3:19px;
    --mpf-text-h2:24px;
    --mpf-text-h1:32px;
    --mpf-weight-regular:400;
    --mpf-weight-medium:600;
    --mpf-weight-bold:800;
    --mpf-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;

    /* ---------- Alternate-naming aliases (same values, not a second
       source of truth -- see note above) ---------- */
    --mpf-bg:var(--mpf-bg-page);
    --mpf-bg-elevated:var(--mpf-surface-1);
    --mpf-surface:var(--mpf-surface-2);
    --mpf-surface-raised:var(--mpf-surface-3);
    --mpf-surface-soft:var(--mpf-surface-1);
    --mpf-text:var(--mpf-text-primary);
    --mpf-primary:var(--mpf-accent);
    --mpf-primary-hover:var(--mpf-accent-2);
    --mpf-shadow:var(--mpf-shadow-md);
}

html, body[data-mpf-root]{
    background:var(--mpf-bg-page);
    color:var(--mpf-text-primary);
    font-family:var(--mpf-font-family);
    font-size:var(--mpf-text-body);
    line-height:1.5;
    margin:0;
}

body[data-mpf-root] a{ color:inherit; }
body[data-mpf-root] h1,
body[data-mpf-root] h2,
body[data-mpf-root] h3{
    color:var(--mpf-text-primary);
    font-weight:var(--mpf-weight-bold);
    margin:0 0 var(--mpf-space-2);
}
body[data-mpf-root] p{ color:var(--mpf-text-secondary); margin:0 0 var(--mpf-space-3); }

/* ==================================================================
   Buttons -- .mpf-btn
   ================================================================== */
.mpf-btn{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:8px;
    /* Phase C: Global Styles indirection -- --mpf-btn-radius/-padding-y/
       -padding-x/-min-height are ONLY ever set inside cms_page.html's
       Global Styles <style> block (see that template), so a non-CMS
       page (admin portal, pet dashboard, login/register) never defines
       them and every .mpf-btn there falls straight through to the
       exact same literal defaults this rule has always had -- this is
       a genuine no-op outside CMS-rendered pages. */
    min-height:var(--mpf-btn-min-height, 44px);
    padding:var(--mpf-btn-padding-y, 10px) var(--mpf-btn-padding-x, 22px);
    border-radius:var(--mpf-btn-radius, var(--mpf-radius-pill));
    font-size:var(--mpf-text-body);
    font-weight:var(--mpf-weight-medium);
    text-decoration:none;
    cursor:pointer;
    border:1px solid transparent;
    transition:transform .12s ease, box-shadow .12s ease, background .12s ease, border-color .12s ease;
    white-space:nowrap;
}
.mpf-btn:focus-visible{ outline:2px solid var(--mpf-accent-cyan); outline-offset:2px; }

.mpf-btn--primary{
    background:linear-gradient(135deg,var(--mpf-accent),var(--mpf-accent-2));
    color:#ffffff;
    box-shadow:var(--mpf-shadow-sm);
}
.mpf-btn--primary:hover{ transform:translateY(-1px); box-shadow:var(--mpf-shadow-md); }

.mpf-btn--secondary{
    background:var(--mpf-surface-2);
    color:var(--mpf-text-primary);
    border-color:var(--mpf-border);
}
.mpf-btn--secondary:hover{ background:var(--mpf-surface-3); }

.mpf-btn--danger{
    background:var(--mpf-danger);
    color:#ffffff;
}
.mpf-btn--danger:hover{ filter:brightness(1.08); }

.mpf-btn--glass{
    background:rgba(255,255,255,.06);
    color:var(--mpf-text-primary);
    border-color:var(--mpf-border);
    backdrop-filter:blur(8px);
    -webkit-backdrop-filter:blur(8px);
}
.mpf-btn--glass:hover{ background:rgba(255,255,255,.12); }

.mpf-btn--full{ width:100%; }
.mpf-btn--sm{ min-height:36px; padding:6px 16px; font-size:var(--mpf-text-caption); }
.mpf-btn:disabled,
.mpf-btn[aria-disabled="true"]{ opacity:.55; cursor:not-allowed; transform:none !important; }

/* ==================================================================
   Cards -- .mpf-card
   ================================================================== */
.mpf-card{
    background:var(--mpf-surface-1);
    /* Phase C: same indirection pattern as .mpf-btn above --
       --mpf-card-radius/-shadow/-border-color are only ever set on CMS
       pages; every other page's .mpf-card (widgets, admin panels reuse
       this class in a few places) is completely unaffected. */
    border:1px solid var(--mpf-card-border-color, var(--mpf-border));
    border-radius:var(--mpf-card-radius, var(--mpf-radius-lg));
    padding:var(--mpf-space-4);
    box-shadow:var(--mpf-card-shadow, var(--mpf-shadow-sm));
}
.mpf-card--glass{
    background:rgba(21,42,77,.55);
    backdrop-filter:blur(14px);
    -webkit-backdrop-filter:blur(14px);
}
.mpf-card--interactive{ transition:transform .15s ease, box-shadow .15s ease, border-color .15s ease; }
.mpf-card--interactive:hover{
    transform:translateY(-2px);
    box-shadow:var(--mpf-shadow-md);
    border-color:rgba(59,130,246,.35);
}
.mpf-card--emergency{
    border-color:rgba(239,68,68,.45);
    background:linear-gradient(160deg,rgba(239,68,68,.10),var(--mpf-surface-1) 60%);
}
.mpf-card--featured{
    border-color:rgba(59,130,246,.45);
    box-shadow:0 0 0 1px rgba(59,130,246,.25), var(--mpf-shadow-md);
}

/* ==================================================================
   Widgets -- .mpf-widget / .mpf-widget-grid
   ================================================================== */
.mpf-widget-grid{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
    gap:var(--mpf-space-4);
}
.mpf-widget{
    background:var(--mpf-surface-1);
    border:1px solid var(--mpf-border);
    border-radius:var(--mpf-radius-md);
    padding:var(--mpf-space-4);
    display:flex;
    flex-direction:column;
    gap:6px;
    position:relative;
    overflow:hidden;
}
.mpf-widget--compact{ padding:var(--mpf-space-3); gap:4px; }
.mpf-widget--featured{
    background:linear-gradient(160deg,var(--mpf-surface-2),var(--mpf-surface-1));
    border-color:rgba(59,130,246,.4);
}
/* BUG FIX (pet-profile layout hotfix): .mpf-widget-accent is always
   applied as a SECOND class on the exact same element as .mpf-widget
   itself (see the mpf_widget() macro in design_system/_components.html,
   and the manual buttons in pets/partials/profile_status_cards.html --
   neither ever nests it as a child). The previous version of this rule
   set position:absolute; top:0; left:0; right:0; height:3px; directly
   on that shared selector. Because .mpf-widget-accent is declared after
   .mpf-widget in this file, its position:absolute silently overrode
   .mpf-widget's position:relative on every widget on the page (Health,
   Daily Care, Documents, Timeline, Profile completion, Pet care
   readiness, and all 8 quick-status cards) -- collapsing each one to a
   3px-tall strip and, since .id-page has no positioned ancestor,
   popping it out of the grid entirely to sit pinned at the very top of
   the viewport. That's what produced the "PET CARE READINESS / RECENT
   HEALTH UPDATE stretched across the top" symptom, and why the grid
   below it looked empty/reordered -- every widget in it had been
   pulled out of normal flow.
   Fix: the widget itself keeps its own position/background undisturbed.
   The decorative accent strip is now a ::before pseudo-element instead,
   positioned relative to its host .mpf-widget-accent element (which is
   always also .mpf-widget, already position:relative; overflow:hidden
   from the rule above) -- same visual strip, without touching the host
   element's own box. */
.mpf-widget-accent::before{
    content:"";
    position:absolute;
    top:0; left:0; right:0;
    height:3px;
    background:var(--mpf-widget-accent-color, linear-gradient(90deg,var(--mpf-accent),var(--mpf-accent-cyan)));
    pointer-events:none;
}
.mpf-widget-header{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:8px;
}
.mpf-widget-title{
    font-size:var(--mpf-text-caption);
    font-weight:var(--mpf-weight-medium);
    color:var(--mpf-text-secondary);
    text-transform:uppercase;
    letter-spacing:.06em;
}
.mpf-widget-value{
    font-size:var(--mpf-text-h1);
    font-weight:var(--mpf-weight-bold);
    color:var(--mpf-text-primary);
    line-height:1.1;
}
.mpf-widget-caption{
    font-size:var(--mpf-text-caption);
    color:var(--mpf-text-muted);
}
.mpf-widget-footer{
    margin-top:auto;
    padding-top:var(--mpf-space-2);
    border-top:1px solid var(--mpf-edge);
    font-size:var(--mpf-text-caption);
}

/* ==================================================================
   Action tiles
   ================================================================== */
.mpf-action-tile{
    display:flex;
    flex-direction:column;
    align-items:flex-start;
    gap:6px;
    background:var(--mpf-surface-2);
    border:1px solid var(--mpf-border);
    border-radius:var(--mpf-radius-md);
    padding:var(--mpf-space-3) var(--mpf-space-4);
    text-decoration:none;
    color:var(--mpf-text-primary);
    transition:transform .12s ease, border-color .12s ease;
}
.mpf-action-tile:hover{ transform:translateY(-1px); border-color:rgba(59,130,246,.4); }

/* ==================================================================
   Status chips / badges
   ================================================================== */
.mpf-status-chip{
    display:inline-flex;
    align-items:center;
    gap:6px;
    padding:4px 12px;
    border-radius:var(--mpf-radius-pill);
    font-size:var(--mpf-text-caption);
    font-weight:var(--mpf-weight-medium);
    background:var(--mpf-success-bg);
    color:var(--mpf-success);
    border:1px solid transparent;
}
.mpf-status-chip--neutral{ background:var(--mpf-surface-2); color:var(--mpf-text-secondary); }
.mpf-status-chip--good{ background:var(--mpf-success-bg); color:var(--mpf-success); }
.mpf-status-chip--info{ background:rgba(59,130,246,.14); color:var(--mpf-accent); }
.mpf-status-chip--danger{ background:var(--mpf-danger-bg); color:var(--mpf-danger); }
.mpf-status-chip--warning{ background:var(--mpf-warning-bg); color:var(--mpf-warning); }
.mpf-status-chip--pulse{ animation:mpf-pulse 2s ease-in-out infinite; }
@keyframes mpf-pulse{ 0%,100%{ opacity:1; } 50%{ opacity:.55; } }
@media(prefers-reduced-motion:reduce){ .mpf-status-chip--pulse{ animation:none; } }

/* ==================================================================
   Status banner (top-of-page alert strip)
   ================================================================== */
.mpf-status-banner{
    display:flex;
    align-items:center;
    gap:var(--mpf-space-3);
    padding:var(--mpf-space-3) var(--mpf-space-4);
    border-radius:var(--mpf-radius-md);
    background:var(--mpf-surface-2);
    border:1px solid var(--mpf-border);
    margin-bottom:var(--mpf-space-4);
}
.mpf-status-banner--good{ background:var(--mpf-success-bg); border-color:rgba(34,197,94,.3); }
.mpf-status-banner--info{ background:rgba(59,130,246,.12); border-color:rgba(59,130,246,.3); }
.mpf-status-banner--warning{ background:var(--mpf-warning-bg); border-color:rgba(245,158,11,.3); }
.mpf-status-banner--danger{ background:var(--mpf-danger-bg); border-color:rgba(239,68,68,.3); }
.mpf-status-banner--neutral{ background:var(--mpf-surface-2); border-color:var(--mpf-border); }
.mpf-status-banner--good .mpf-status-banner-dot{ background:var(--mpf-success); }
.mpf-status-banner--info .mpf-status-banner-dot{ background:var(--mpf-accent); }
.mpf-status-banner--warning .mpf-status-banner-dot{ background:var(--mpf-warning); }
.mpf-status-banner--danger .mpf-status-banner-dot{ background:var(--mpf-danger); }
.mpf-status-banner--neutral .mpf-status-banner-dot{ background:var(--mpf-text-muted); }
.mpf-status-banner-dot{
    width:10px; height:10px; border-radius:50%;
    background:var(--mpf-success);
    flex-shrink:0;
}
.mpf-status-banner-label{ font-weight:var(--mpf-weight-medium); color:var(--mpf-text-primary); }
.mpf-status-banner-detail{ color:var(--mpf-text-secondary); font-size:var(--mpf-text-caption); }

/* ==================================================================
   Progress indicators

   Real markup (from design_system/_components.html's mpf_progress_ring
   macro, and the hero photo ring in partials/profile_hero.html) is a
   plain <div class="mpf-progress-ring" data-mpf-ring
   style="--level:NN;--mpf-ring-color:...;--mpf-ring-size:..."> with
   either a text <span> or an <img> inside -- there is no inner <svg>.
   mpf-dashboard.js's real animateRings() animates the --level custom
   property from 0 to its target value via requestAnimationFrame, so
   the ring itself must be pure CSS driven by --level (0-100) using a
   conic-gradient, not an SVG stroke-dashoffset trick.
   ================================================================== */
.mpf-progress-ring{
    --mpf-ring-size:64px;
    --mpf-ring-color:var(--mpf-accent);
    --level:0;
    position:relative;
    width:var(--mpf-ring-size);
    height:var(--mpf-ring-size);
    border-radius:50%;
    display:flex;
    align-items:center;
    justify-content:center;
    flex-shrink:0;
    background:
        radial-gradient(closest-side, var(--mpf-surface-1) 76%, transparent 77% 100%),
        conic-gradient(var(--mpf-ring-color) calc(var(--level) * 1%), var(--mpf-surface-3) 0);
    transition:background .4s ease;
}
.mpf-progress-ring span{
    position:relative;
    z-index:1;
    font-size:var(--mpf-text-caption);
    font-weight:var(--mpf-weight-bold);
    color:var(--mpf-text-primary);
}
.mpf-progress-ring--live{ --mpf-ring-color:var(--mpf-danger); }

.mpf-progress-ring--photo{
    --mpf-ring-size:104px;
    padding:5px;
}
.mpf-progress-ring--photo img{
    position:relative;
    z-index:1;
    width:100%;
    height:100%;
    border-radius:50%;
    object-fit:cover;
    border:3px solid var(--mpf-navy);
    display:block;
}

.mpf-progress-bar{
    width:100%;
    height:8px;
    border-radius:var(--mpf-radius-pill);
    background:var(--mpf-surface-3);
    overflow:hidden;
}
.mpf-progress-bar > span{
    display:block;
    height:100%;
    background:linear-gradient(90deg,var(--mpf-accent),var(--mpf-accent-cyan));
    border-radius:var(--mpf-radius-pill);
}

/* ==================================================================
   Empty states
   ================================================================== */
.mpf-empty-state{
    text-align:center;
    padding:var(--mpf-space-6) var(--mpf-space-4);
    border:1px dashed var(--mpf-border);
    border-radius:var(--mpf-radius-lg);
    color:var(--mpf-text-secondary);
}
.mpf-empty-state h3{ color:var(--mpf-text-primary); }

/* ==================================================================
   Forms -- shared across every authenticated + public form
   ================================================================== */
.mpf-form-group{ display:flex; flex-direction:column; gap:6px; margin-bottom:var(--mpf-space-4); }
.mpf-form-group label{
    font-size:var(--mpf-text-caption);
    font-weight:var(--mpf-weight-medium);
    color:var(--mpf-text-secondary);
}
.mpf-form-group input[type="text"],
.mpf-form-group input[type="email"],
.mpf-form-group input[type="password"],
.mpf-form-group input[type="tel"],
.mpf-form-group input[type="date"],
.mpf-form-group input[type="file"],
.mpf-form-group select,
.mpf-form-group textarea{
    background:var(--mpf-surface-2);
    border:1px solid var(--mpf-border);
    border-radius:var(--mpf-radius-sm);
    color:var(--mpf-text-primary);
    padding:10px 14px;
    font-size:var(--mpf-text-body);
    font-family:inherit;
    width:100%;
}
.mpf-form-group input:focus,
.mpf-form-group select:focus,
.mpf-form-group textarea:focus{
    outline:none;
    border-color:var(--mpf-accent);
    box-shadow:0 0 0 3px rgba(59,130,246,.25);
}
.mpf-form-group textarea{ min-height:100px; resize:vertical; }
.mpf-form-row{
    display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:var(--mpf-space-4);
}
.mpf-form-row .mpf-form-group--full{ grid-column:1 / -1; }
@media(max-width:700px){ .mpf-form-row{ grid-template-columns:1fr; } }

.mpf-checkbox-row{
    display:flex;
    align-items:flex-start;
    gap:10px;
    margin-top:var(--mpf-space-3);
}
.mpf-checkbox-row input{ width:auto; margin-top:3px; }
.mpf-checkbox-row span{ color:var(--mpf-text-secondary); font-size:var(--mpf-text-caption); }

/* ==================================================================
   Alerts / notices (used by legacy inline pages once redirected
   through render_template -- keeps the "notice"/"notice success" API
   already relied on by BASE_STYLE-era markup working under Signature)
   ================================================================== */
.mpf-alert{
    padding:var(--mpf-space-3) var(--mpf-space-4);
    border-radius:var(--mpf-radius-md);
    background:var(--mpf-surface-2);
    border:1px solid var(--mpf-border);
    color:var(--mpf-text-primary);
    margin-bottom:var(--mpf-space-4);
}
.mpf-alert--success{ background:var(--mpf-success-bg); border-color:rgba(34,197,94,.3); color:var(--mpf-success); }
.mpf-alert--warning{ background:var(--mpf-warning-bg); border-color:rgba(245,158,11,.3); color:var(--mpf-warning); }
.mpf-alert--danger{ background:var(--mpf-danger-bg); border-color:rgba(239,68,68,.3); color:var(--mpf-danger); }

/* ==================================================================
   Tables
   ================================================================== */
.mpf-table{ width:100%; border-collapse:collapse; }
.mpf-table th,
.mpf-table td{
    text-align:left;
    padding:10px 14px;
    border-bottom:1px solid var(--mpf-edge);
    font-size:var(--mpf-text-body);
}
.mpf-table th{
    color:var(--mpf-text-secondary);
    font-weight:var(--mpf-weight-medium);
    font-size:var(--mpf-text-caption);
    text-transform:uppercase;
    letter-spacing:.05em;
}

/* ==================================================================
   Utility
   ================================================================== */
.mpf-page{ width:min(1180px,94%); margin:0 auto; padding:var(--mpf-space-5) 0 var(--mpf-space-6); }
.mpf-page--narrow{ width:min(720px,94%); }

/* ==================================================================
   Site shell primitives shared by every page family (public + app).
   Real gap found while verifying this delivery: _base_public.html and
   _base_app.html both reference .mpf-site-main and
   .mpf-site-footer-copy, but neither mpf-public.css nor any other
   stylesheet in the real project actually defines them -- adding the
   two real, missing rules here since this file loads on every page.
   ================================================================== */
.mpf-site-main{ display:block; min-height:60vh; }
.mpf-site-footer-copy{ color:var(--mpf-text-muted); font-size:var(--mpf-text-caption); }

/* ==================================================================
   Site header / footer structural layout -- real gap found while
   implementing the layout fix below. _base_app.html and
   _base_public.html both render <header class="mpf-site-header">
   with .mpf-site-header-inner / .mpf-site-logo / .mpf-site-nav-toggle
   / .mpf-site-nav inside it, and <footer class="mpf-site-footer">
   with .mpf-site-footer-inner / .mpf-site-footer-nav. Only the
   Signature-mode decorative layer (background blur, logo gradient) for
   two of these classes exists in mpf-signature-theme.css -- the actual
   structural layout (padding, flex, spacing, link styling) was never
   defined for the authenticated app shell, since _base_app.html does
   not load mpf-public.css. Adding the real, missing structural rules
   here since this file loads on every page (public and app).
   ================================================================== */
.mpf-site-header{
    padding:16px var(--mpf-space-4, 20px);
    border-bottom:1px solid var(--mpf-border, rgba(255,255,255,.10));
}
.mpf-site-header-inner{
    width:min(1400px,96%);
    margin:0 auto;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:var(--mpf-space-4, 20px);
}
.mpf-site-header-brand{
    display:flex;
    align-items:center;
    gap:var(--mpf-space-3, 12px);
}
.mpf-site-logo{
    font-size:21px;
    font-weight:var(--mpf-weight-bold, 800);
    text-decoration:none;
    letter-spacing:.01em;
    line-height:1;
}
.mpf-site-nav-toggle{
    display:none;
    background:transparent;
    border:1px solid var(--mpf-border, rgba(255,255,255,.10));
    border-radius:var(--mpf-radius-sm, 8px);
    color:var(--mpf-text-primary, #f3f6fb);
    font-size:19px;
    line-height:1;
    padding:6px 10px;
    cursor:pointer;
}
.mpf-site-nav-toggle:hover,
.mpf-site-nav-toggle:focus-visible{ border-color:var(--mpf-border-strong, rgba(92,155,255,.42)); }

.mpf-site-nav{
    display:flex;
    align-items:center;
    gap:6px;
    flex-wrap:wrap;
}
/* Nav items styled as compact pill links/buttons rather than plain
   inline text, per the "properly spaced navigation links or buttons"
   requirement. */
.mpf-site-nav-link{
    display:inline-flex;
    align-items:center;
    color:var(--mpf-text-secondary, #9fb0cc);
    text-decoration:none;
    font-size:var(--mpf-text-body, 15px);
    font-weight:var(--mpf-weight-medium, 600);
    padding:8px 14px;
    border-radius:var(--mpf-radius-pill, 999px);
    border:1px solid transparent;
    transition:background .15s ease, color .15s ease, border-color .15s ease;
}
.mpf-site-nav-link:hover,
.mpf-site-nav-link:focus-visible{
    color:var(--mpf-text-primary, #f3f6fb);
    background:var(--mpf-edge, rgba(255,255,255,.06));
}
/* Log Out reads as a distinct, secondary action -- outlined rather than
   filled/blended with the primary nav items. */
.mpf-site-nav-link--logout{
    margin-left:6px;
    border-color:var(--mpf-border, rgba(255,255,255,.10));
    color:var(--mpf-text-muted, #6d7fa0);
}
.mpf-site-nav-link--logout:hover,
.mpf-site-nav-link--logout:focus-visible{
    color:var(--mpf-text-primary, #f3f6fb);
    border-color:var(--mpf-border-strong, rgba(92,155,255,.42));
    background:var(--mpf-edge, rgba(255,255,255,.06));
}

@media(max-width:700px){
    .mpf-site-nav-toggle{ display:inline-flex; align-items:center; }
    .mpf-site-nav{
        display:none;
        width:100%;
        flex-direction:column;
        align-items:stretch;
        gap:2px;
        margin-top:14px;
    }
    .mpf-site-nav.is-open{ display:flex; }
    .mpf-site-nav-link{ width:100%; padding:10px 14px; }
    .mpf-site-nav-link--logout{ margin-left:0; margin-top:6px; }
}

.mpf-site-footer{
    padding:var(--mpf-space-5, 32px) var(--mpf-space-4, 20px);
    margin-top:var(--mpf-space-6, 40px);
    border-top:1px solid var(--mpf-border, rgba(255,255,255,.10));
}
.mpf-site-footer-inner{
    width:min(1400px,96%);
    margin:0 auto;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:var(--mpf-space-3, 12px);
    flex-wrap:wrap;
}
.mpf-site-footer-nav{ display:flex; gap:var(--mpf-space-4, 20px); }
.mpf-site-footer-nav a{
    color:var(--mpf-text-muted, #6d7fa0);
    text-decoration:none;
    font-size:var(--mpf-text-caption, 12.5px);
}
.mpf-site-footer-nav a:hover,
.mpf-site-footer-nav a:focus-visible{ color:var(--mpf-text-secondary, #9fb0cc); }


/* ==================================================================
   Pricing page (templates/pricing.html, Version 20A). Also a real gap
   found during this round's CSS-coverage verification: pricing.html
   references 11 .mpf-pricing-* classes that were never defined in
   mpf-public.css either (confirmed by direct search) -- the page has
   likely been rendering unstyled since Version 20A. Fixing it here
   since this file is guaranteed to load on that page too and this
   round's verification step is what caught it.
   ================================================================== */
.mpf-pricing-header{ text-align:center; padding:var(--mpf-space-6) 0 var(--mpf-space-4); }
.mpf-pricing-header-inner{ width:min(720px,94%); margin:0 auto; }
.mpf-pricing-row{ padding-bottom:var(--mpf-space-6); }
.mpf-pricing-row-inner{
    width:min(1180px,94%);
    margin:0 auto;
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(260px,1fr));
    gap:var(--mpf-space-4);
    align-items:stretch;
}
.mpf-pricing-card{ display:flex; flex-direction:column; gap:10px; position:relative; }
.mpf-pricing-card--featured{ border-color:rgba(59,130,246,.45); box-shadow:0 0 0 1px rgba(59,130,246,.25), var(--mpf-shadow-md); }
.mpf-pricing-badge{ position:absolute; top:var(--mpf-space-4); right:var(--mpf-space-4); }
.mpf-pricing-plan-name{ font-size:var(--mpf-text-h2); margin:6px 0 0; }
.mpf-pricing-price{ display:flex; align-items:baseline; gap:6px; flex-wrap:wrap; }
.mpf-pricing-price-amount{ font-size:36px; font-weight:var(--mpf-weight-bold); color:var(--mpf-text-primary); }
.mpf-pricing-price-period{ color:var(--mpf-text-muted); font-size:var(--mpf-text-caption); }
.mpf-pricing-price-annual{ width:100%; color:var(--mpf-text-secondary); font-size:var(--mpf-text-caption); }
.mpf-pricing-description{ color:var(--mpf-text-secondary); }
.mpf-pricing-feature-list{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px; flex:1; }
.mpf-pricing-feature-list li{
    padding-left:22px;
    position:relative;
    color:var(--mpf-text-secondary);
    font-size:var(--mpf-text-caption);
}
.mpf-pricing-feature-list li::before{
    content:"\2713";
    position:absolute;
    left:0;
    color:var(--mpf-success);
    font-weight:var(--mpf-weight-bold);
}
.mpf-pricing-note{ color:var(--mpf-text-muted); font-size:var(--mpf-text-caption); text-align:center; margin-top:6px; }

/* ==================================================================
   Admin Portal -- Phase 1 sidebar framework
   (templates/admin/_base_admin.html + templates/admin/home.html)

   Reusable, page-agnostic components: the sidebar shell, KPI cards,
   and the 3-panel activity/actions/alerts row. Every future admin
   page is expected to extend admin/_base_admin.html and reuse these
   same classes rather than writing new page-specific CSS.
   ================================================================== */
.mpf-admin-shell{
    width:min(1400px, 96%);
    margin:0 auto;
    display:flex;
    align-items:flex-start;
    gap:var(--mpf-space-4, 20px);
    padding:var(--mpf-space-5, 28px) 0 var(--mpf-space-6, 40px);
}

/* ---------- Sidebar ---------- */
.mpf-admin-sidebar{
    flex:0 0 220px;
    width:220px;
    position:sticky;
    top:calc(var(--mpf-space-5, 28px));
    background:var(--mpf-surface-1, #101f3d);
    border:1px solid var(--mpf-border, rgba(255,255,255,.10));
    border-radius:var(--mpf-radius-lg, 20px);
    padding:var(--mpf-space-3, 12px);
}
.mpf-admin-sidebar-nav{
    display:flex;
    flex-direction:column;
    gap:2px;
}
.mpf-admin-sidebar-link{
    display:flex;
    align-items:center;
    gap:10px;
    padding:9px 10px;
    border-radius:var(--mpf-radius-md, 14px);
    color:var(--mpf-text-secondary, #9fb0cc);
    text-decoration:none;
    font-size:var(--mpf-text-body, 15px);
    font-weight:var(--mpf-weight-medium, 600);
}
a.mpf-admin-sidebar-link:hover,
a.mpf-admin-sidebar-link:focus-visible{
    color:var(--mpf-text-primary, #f3f6fb);
    background:var(--mpf-edge, rgba(255,255,255,.06));
}
.mpf-admin-sidebar-link--active{
    color:var(--mpf-text-primary, #f3f6fb);
    background:var(--mpf-surface-3, #1b3459);
    border:1px solid var(--mpf-border-strong, rgba(92,155,255,.42));
    box-shadow:inset 3px 0 0 0 var(--mpf-accent-2, #2563eb);
    font-weight:var(--mpf-weight-bold, 800);
}
.mpf-admin-sidebar-link--soon{
    color:var(--mpf-text-muted, #6d7fa0);
    cursor:not-allowed;
}
.mpf-admin-sidebar-icon{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    flex-shrink:0;
    width:26px;
    height:26px;
    border-radius:var(--mpf-radius-sm, 8px);
    background:var(--mpf-surface-3, #1b3459);
    color:var(--mpf-text-secondary, #9fb0cc);
}
.mpf-admin-nav-icon-svg{ width:16px; height:16px; display:block; }
.mpf-admin-sidebar-link--active .mpf-admin-sidebar-icon{
    background:var(--mpf-accent-2, #2563eb);
    color:#ffffff;
}
.mpf-admin-sidebar-label{ flex:1; }
.mpf-admin-sidebar-soon-tag{
    font-size:10px;
    font-weight:var(--mpf-weight-bold, 800);
    text-transform:uppercase;
    letter-spacing:.04em;
    padding:2px 7px;
    border-radius:var(--mpf-radius-pill, 999px);
    background:var(--mpf-edge, rgba(255,255,255,.06));
    color:var(--mpf-text-muted, #6d7fa0);
}

/* ---------- Content column ---------- */
.mpf-admin-content{
    flex:1;
    min-width:0;
}

/* ---------- Top bar: title/breadcrumb + search + profile ---------- */
.mpf-admin-topbar{
    display:flex;
    align-items:center;
    justify-content:space-between;
    flex-wrap:wrap;
    gap:var(--mpf-space-4, 20px);
    margin-bottom:var(--mpf-space-5, 28px);
}
.mpf-admin-breadcrumb{
    color:var(--mpf-text-muted, #6d7fa0);
    font-size:var(--mpf-text-caption, 12.5px);
    margin-bottom:2px;
}
.mpf-admin-page-title{ margin:0; color:var(--mpf-text-primary, #f3f6fb); }
.mpf-admin-topbar-actions{
    display:flex;
    align-items:center;
    gap:var(--mpf-space-3, 12px);
    flex-wrap:wrap;
}
.mpf-admin-search-placeholder{
    padding:9px 14px;
    border-radius:var(--mpf-radius-pill, 999px);
    border:1px solid var(--mpf-border, rgba(255,255,255,.10));
    background:var(--mpf-surface-2, #152a4d);
    color:var(--mpf-text-muted, #6d7fa0);
    font-size:var(--mpf-text-caption, 12.5px);
    width:200px;
}
.mpf-admin-search-placeholder::placeholder{ color:var(--mpf-text-muted, #6d7fa0); }
.mpf-admin-profile{
    display:flex;
    align-items:center;
    gap:8px;
}
.mpf-admin-profile-name{
    color:var(--mpf-text-primary, #f3f6fb);
    font-weight:var(--mpf-weight-medium, 600);
    font-size:var(--mpf-text-body, 15px);
}

/* ---------- KPI cards ---------- */
.mpf-kpi-grid{
    display:grid;
    grid-template-columns:repeat(auto-fit, minmax(180px, 1fr));
    gap:var(--mpf-space-4, 20px);
    margin-bottom:var(--mpf-space-5, 28px);
}
.mpf-kpi-card{
    background:var(--mpf-surface-2, #152a4d);
    border:1px solid var(--mpf-border, rgba(255,255,255,.10));
    border-radius:var(--mpf-radius-lg, 20px);
    padding:var(--mpf-space-4, 20px);
}
.mpf-kpi-card--placeholder{ opacity:.75; }
.mpf-kpi-label{
    color:var(--mpf-text-muted, #6d7fa0);
    font-size:var(--mpf-text-caption, 12.5px);
    font-weight:var(--mpf-weight-medium, 600);
    margin-bottom:6px;
}
.mpf-kpi-value{
    font-size:30px;
    font-weight:var(--mpf-weight-bold, 800);
    color:var(--mpf-text-primary, #f3f6fb);
    line-height:1.1;
}
.mpf-kpi-caption{
    color:var(--mpf-text-muted, #6d7fa0);
    font-size:var(--mpf-text-caption, 12.5px);
    margin-top:4px;
}

/* ---------- Activity / Quick Actions / Alerts panel row ---------- */
.mpf-admin-panel-grid{
    display:grid;
    grid-template-columns:1.4fr 1fr 1fr;
    gap:var(--mpf-space-4, 20px);
    align-items:start;
}
@media(max-width:1100px){
    .mpf-admin-panel-grid{ grid-template-columns:1fr; }
}
.mpf-admin-panel{
    background:var(--mpf-surface-2, #152a4d);
    border:1px solid var(--mpf-border, rgba(255,255,255,.10));
    border-top:3px solid var(--mpf-border, rgba(255,255,255,.10));
    border-radius:var(--mpf-radius-lg, 20px);
    padding:var(--mpf-space-4, 20px);
}
.mpf-admin-panel--activity{ border-top-color:var(--mpf-accent-2, #2563eb); }
.mpf-admin-panel--actions{ border-top-color:var(--mpf-accent-cyan, #22d3ee); }
.mpf-admin-panel--alerts{ border-top-color:var(--mpf-warning, #f59e0b); }
.mpf-admin-panel-title{
    margin:0 0 var(--mpf-space-3, 12px);
    font-size:var(--mpf-text-h3, 19px);
    color:var(--mpf-text-primary, #f3f6fb);
}
.mpf-admin-activity-row{
    display:flex;
    justify-content:space-between;
    align-items:baseline;
    gap:10px;
    padding:9px 0;
    border-top:1px solid var(--mpf-edge, rgba(255,255,255,.06));
}
.mpf-admin-activity-row:first-of-type{ border-top:0; }
.mpf-admin-activity-action{
    color:var(--mpf-text-primary, #f3f6fb);
    font-weight:var(--mpf-weight-medium, 600);
    font-size:var(--mpf-text-body, 15px);
}
.mpf-admin-activity-meta{
    color:var(--mpf-text-muted, #6d7fa0);
    font-size:var(--mpf-text-caption, 12.5px);
}
.mpf-admin-activity-time{
    color:var(--mpf-text-muted, #6d7fa0);
    font-size:var(--mpf-text-caption, 12.5px);
    white-space:nowrap;
}
.mpf-admin-panel-link{
    display:inline-block;
    margin-top:var(--mpf-space-3, 12px);
    color:var(--mpf-accent-cyan, #22d3ee);
    font-weight:var(--mpf-weight-medium, 600);
    font-size:var(--mpf-text-caption, 12.5px);
    text-decoration:none;
}
.mpf-admin-panel-link:hover,
.mpf-admin-panel-link:focus-visible{ text-decoration:underline; }
.mpf-admin-quick-actions{
    display:flex;
    flex-direction:column;
    gap:8px;
}

/* ==================================================================
   Admin Portal -- Phase 2 polish: welcome section, subtle entrance
   animation for the dashboard content. Sidebar/topbar/KPI/panel base
   rules above are unchanged from Phase 1 except where noted.
   ================================================================== */
.mpf-admin-welcome{
    display:flex;
    align-items:center;
    justify-content:space-between;
    flex-wrap:wrap;
    gap:var(--mpf-space-4, 20px);
    padding:var(--mpf-space-4, 20px) var(--mpf-space-5, 28px);
    margin-bottom:var(--mpf-space-5, 28px);
    border-radius:var(--mpf-radius-lg, 20px);
    background:linear-gradient(135deg, var(--mpf-navy-2, #0f1e3d), var(--mpf-accent-2, #2563eb));
    border:1px solid rgba(255,255,255,.12);
    color:#ffffff;
}
.mpf-admin-welcome-text{ flex:1; min-width:200px; }
.mpf-admin-welcome-heading{ margin:0 0 4px; color:#ffffff; }
.mpf-admin-welcome-message{ margin:0; color:rgba(255,255,255,.85); font-size:var(--mpf-text-body, 15px); }
.mpf-admin-welcome-meta{
    display:flex;
    align-items:center;
    gap:10px;
    flex-wrap:wrap;
}
.mpf-admin-welcome-date{
    color:rgba(255,255,255,.85);
    font-size:var(--mpf-text-caption, 12.5px);
    white-space:nowrap;
}

/* Subtle entrance animation for the main dashboard sections -- purely
   presentational, respects prefers-reduced-motion. */
@keyframes mpf-admin-fade-in{
    from{ opacity:0; transform:translateY(6px); }
    to{ opacity:1; transform:translateY(0); }
}
.mpf-admin-topbar,
.mpf-admin-welcome,
.mpf-kpi-grid,
.mpf-admin-panel-grid{
    animation:mpf-admin-fade-in .35s ease both;
}
.mpf-admin-welcome{ animation-delay:.03s; }
.mpf-kpi-grid{ animation-delay:.06s; }
.mpf-admin-panel-grid{ animation-delay:.09s; }
@media(prefers-reduced-motion:reduce){
    .mpf-admin-topbar,
    .mpf-admin-welcome,
    .mpf-kpi-grid,
    .mpf-admin-panel-grid{ animation:none; }
}

/* ---------- Responsive: sidebar collapses to a horizontal strip
   above the content on narrow screens. No JS required -- this is a
   pure layout change, distinct from the existing top-nav mobile
   toggle (mpf-site-nav / mpf-site-nav-toggle), which is untouched. ---------- */
@media(max-width:900px){
    .mpf-admin-shell{ flex-direction:column; }
    .mpf-admin-sidebar{
        position:static;
        width:100%;
        flex:1 1 auto;
    }
    .mpf-admin-sidebar-nav{
        flex-direction:row;
        flex-wrap:nowrap;
        overflow-x:auto;
        gap:6px;
        padding-bottom:2px;
    }
    .mpf-admin-sidebar-link{
        flex:0 0 auto;
        white-space:nowrap;
    }
    .mpf-admin-topbar-actions{ width:100%; justify-content:space-between; }
    .mpf-admin-search-placeholder{ flex:1; width:auto; }
}

/* ==================================================================
   Admin Portal -- Users module (Phase 3)
   (templates/admin/users.html)

   Reusable table/search/filter components -- any future admin list
   page (Pets, Certificates, Orders, ...) should reuse these same
   classes rather than writing new ones.
   ================================================================== */
.mpf-admin-page-actions{
    display:flex;
    align-items:center;
    justify-content:space-between;
    flex-wrap:wrap;
    gap:var(--mpf-space-3, 12px);
    margin-bottom:var(--mpf-space-4, 20px);
}
.mpf-admin-user-count{
    color:var(--mpf-text-primary, #f3f6fb);
    font-size:var(--mpf-text-body, 15px);
}
.mpf-admin-user-count strong{ font-size:var(--mpf-text-h3, 19px); }
.mpf-admin-user-count-detail{
    color:var(--mpf-text-muted, #6d7fa0);
    font-size:var(--mpf-text-caption, 12.5px);
}

.mpf-admin-search-form{
    display:flex;
    gap:10px;
    flex-wrap:wrap;
    margin-bottom:var(--mpf-space-4, 20px);
}
.mpf-admin-search-input{
    flex:1;
    min-width:220px;
    padding:10px 16px;
    border-radius:var(--mpf-radius-pill, 999px);
    border:1px solid var(--mpf-border, rgba(255,255,255,.10));
    background:var(--mpf-surface-2, #152a4d);
    color:var(--mpf-text-primary, #f3f6fb);
    font-size:var(--mpf-text-body, 15px);
}
.mpf-admin-search-input::placeholder{ color:var(--mpf-text-muted, #6d7fa0); }

.mpf-admin-filter-pills{
    display:flex;
    gap:8px;
    flex-wrap:wrap;
    margin-bottom:var(--mpf-space-4, 20px);
}
.mpf-admin-filter-pill{
    display:inline-flex;
    align-items:center;
    gap:6px;
    padding:7px 16px;
    border-radius:var(--mpf-radius-pill, 999px);
    border:1px solid var(--mpf-border, rgba(255,255,255,.10));
    background:var(--mpf-surface-2, #152a4d);
    color:var(--mpf-text-secondary, #9fb0cc);
    font-size:var(--mpf-text-caption, 12.5px);
    font-weight:var(--mpf-weight-medium, 600);
}
.mpf-admin-filter-pill--active{
    background:var(--mpf-accent-2, #2563eb);
    border-color:var(--mpf-accent-2, #2563eb);
    color:#ffffff;
}
.mpf-admin-filter-pill--soon{ color:var(--mpf-text-muted, #6d7fa0); cursor:not-allowed; }

.mpf-admin-table-wrap{
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
}
.mpf-admin-table{
    width:100%;
    border-collapse:collapse;
    font-size:var(--mpf-text-body, 15px);
}
.mpf-admin-table th{
    text-align:left;
    padding:10px 14px;
    color:var(--mpf-text-muted, #6d7fa0);
    font-size:var(--mpf-text-caption, 12.5px);
    font-weight:var(--mpf-weight-medium, 600);
    text-transform:uppercase;
    letter-spacing:.04em;
    border-bottom:1px solid var(--mpf-border, rgba(255,255,255,.10));
    white-space:nowrap;
}
.mpf-admin-table td{
    padding:12px 14px;
    border-bottom:1px solid var(--mpf-edge, rgba(255,255,255,.06));
    color:var(--mpf-text-primary, #f3f6fb);
    vertical-align:middle;
}
.mpf-admin-table tr:last-child td{ border-bottom:0; }
.mpf-admin-table-primary{ font-weight:var(--mpf-weight-medium, 600); }
.mpf-admin-table-secondary{ color:var(--mpf-text-muted, #6d7fa0); font-size:var(--mpf-text-caption, 12.5px); }
.mpf-admin-row-actions{
    display:flex;
    gap:6px;
    flex-wrap:wrap;
}

.mpf-btn--disabled{
    opacity:.5;
    cursor:not-allowed;
    pointer-events:none;
}

@media(max-width:700px){
    .mpf-admin-table{ font-size:var(--mpf-text-caption, 12.5px); }
    .mpf-admin-table th,
    .mpf-admin-table td{ padding:8px 10px; }
}

/* ==================================================================
   Admin Portal -- Pet Details module (Phase 5)
   (templates/admin/pet_detail.html)

   Only genuinely new rule needed for this page: a photo hero
   treatment. Everything else (cards, tables, chips, empty states,
   buttons, disabled/"Soon" tags, the page-actions bar) reuses classes
   already shipped in Phases 1-4 above.

   PHASE 7.1: refined from a 72x72px thumbnail into a full-width hero
   band capped at a fixed height (never bigger, never smaller than the
   requested 220-280px desktop range), still object-fit: cover with
   rounded corners. Shorter on narrow screens via the media query
   below. These two classes are used nowhere outside this one page, so
   this change cannot affect Documents, Certificates, Pets, Users, or
   the Dashboard.
   ================================================================== */
.mpf-admin-detail-hero{
    display:flex;
    flex-direction:column;
    gap:var(--mpf-space-3, 12px);
    margin-bottom:var(--mpf-space-3, 12px);
}
.mpf-admin-detail-photo{
    display:block;
    width:100%;
    height:240px;
    border-radius:var(--mpf-radius-lg, 20px);
    object-fit:cover;
    border:1px solid var(--mpf-border, rgba(255,255,255,.10));
    background:var(--mpf-surface-2, #152a4d);
}
.mpf-admin-detail-photo--empty{
    background:linear-gradient(135deg, var(--mpf-surface-2, #152a4d), var(--mpf-surface-3, #0f1f3d));
}
.mpf-admin-detail-hero-info{
    display:flex;
    align-items:center;
    gap:10px;
    flex-wrap:wrap;
}
@media(max-width:700px){
    .mpf-admin-detail-photo{ height:160px; }
}

/* Beta Feedback Questionnaire -- Share Feedback modal (mpf-share-feedback.js) */
.mpf-sf-overlay{
    position:fixed; inset:0; z-index:1000;
    background:rgba(6,12,24,0.72);
    display:flex; align-items:center; justify-content:center;
    padding:16px;
}
.mpf-sf-overlay[hidden]{ display:none; }
.mpf-sf-card{
    background:var(--mpf-surface-1, #101c33);
    border:1px solid var(--mpf-border, #223255);
    border-radius:14px;
    max-width:440px; width:100%;
    padding:20px;
    box-shadow:0 20px 60px rgba(0,0,0,0.45);
}
.mpf-sf-header{
    display:flex; align-items:center; justify-content:space-between;
    margin-bottom:4px;
}
.mpf-sf-title{ font-weight:600; font-size:1.05rem; }
.mpf-sf-close{
    background:none; border:none; color:var(--mpf-text-secondary,#9fb0cc);
    font-size:1.4rem; line-height:1; cursor:pointer; padding:4px 8px;
}
.mpf-sf-hint{ margin:4px 0 16px; }
.mpf-sf-question{ font-weight:600; margin:0 0 12px; }
.mpf-sf-choices{ display:flex; flex-direction:column; gap:8px; margin-bottom:4px; }
.mpf-sf-choice{ display:flex; gap:8px; align-items:center; cursor:pointer; }
.mpf-sf-textarea{
    width:100%; box-sizing:border-box; resize:vertical;
    font:inherit; padding:8px; border-radius:8px;
    background:var(--mpf-surface-2, #16233f);
    border:1px solid var(--mpf-border, #223255);
    color:inherit;
}
.mpf-sf-actions{
    display:flex; align-items:center; justify-content:space-between;
    margin-top:20px; gap:10px; flex-wrap:wrap;
}
.mpf-sf-actions-right{ display:flex; gap:8px; margin-left:auto; flex-wrap:wrap; }
