.npm-pm{max-width:900px}.npm-pm-header{padding:22px 24px;margin:0 0 22px;border:1px solid #d9e2e0;border-radius:7px;background:linear-gradient(135deg,#f5f9f7,#fff)}.npm-pm-header h2{margin:2px 0 7px;font-size:30px}.npm-pm-header p:last-child{margin:0;color:#53615d}.npm-eyebrow{margin:0 0 4px!important;text-transform:uppercase;letter-spacing:.11em;font-size:10px!important;font-weight:700;color:#627b70}.npm-pm h3{margin:22px 0 9px;font-size:20px}.npm-pm-pledge,.npm-pm-address,.npm-pm-review{border:1px solid #dce3e0;border-radius:6px;padding:20px;margin:16px 0;background:#fff}.npm-campaign-heading{padding-bottom:16px;border-bottom:1px solid #e3ebe7}.npm-pm-pledge h4{margin:0;font-size:22px}.npm-state{margin:7px 0 0;color:#516159;font-size:13px}.npm-pledge-sections{display:grid;grid-template-columns:1fr;gap:20px;margin-top:18px}.npm-pledge-details,.npm-pledge-questions{padding:17px;border-radius:5px;background:#f8faf9}.npm-pledge-details h5{font-size:14px;margin:0 0 9px}.npm-total{margin:8px 0;font-size:14px;line-height:1.6}.npm-pm-pledge ul{margin:8px 0;padding-left:19px}.npm-pm-pledge form{margin-top:10px}.npm-manage-after-questions{margin-top:16px!important;padding-top:16px;border-top:1px solid #e1e7e3}.npm-pm-review{margin:0;padding:0;border:0;background:transparent}.npm-pm-review h4{margin:0 0 7px;font-size:16px}.npm-question{border:0;border-top:1px solid #e1e7e3;margin:24px 0 0;padding:8px 0 14px}.npm-question:first-of-type{margin-top:0;padding-top:8px}.npm-question legend{font-size:16px;line-height:1.45;font-weight:600;margin:0 0 6px;padding:0}.npm-question label{display:block;margin:7px 0}.npm-question input[type=text],.npm-question input[type=number],.npm-question textarea{width:100%;max-width:620px}.npm-question-help{display:block;font-size:.85em;font-weight:400;line-height:1.45;color:#666;margin:0 0 12px}.npm-address-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 14px}.npm-address-grid label{font-size:12px;font-weight:600}.npm-address-grid input{display:block;box-sizing:border-box;width:100%;height:34px;margin-top:3px}.npm-question-error{color:#b32d2e;font-weight:600;margin:6px 0}.npm-answer-saved{color:#555;font-size:.9em}.npm-credit{text-align:center;padding:18px 10px 2px;color:#75817d;font-size:12px}.npm-credit strong{font-size:14px;color:#526b60}.npm-credit a{font-weight:700;color:#43695a;text-decoration:none}.npm-credit span{margin-left:4px}@media(max-width:600px){.npm-address-grid,.npm-pledge-sections{grid-template-columns:1fr}.npm-pm-header{padding:18px}.npm-pm-pledge,.npm-pm-address{padding:15px}.npm-question legend{font-size:15px;line-height:1.45}}
/* Build 0.5.33 (Part E): optional small image per Survey choice — compact vertical list, no large product-card layout. */
.npm-choice-options{margin:6px 0}
.npm-choice-option{display:flex!important;align-items:center;gap:10px;margin:8px 0!important}
.npm-choice-option input{flex:0 0 auto;margin:0!important}
.npm-choice-thumb-wrap{flex:0 0 auto;line-height:0}
.npm-choice-thumb-wrap img,.npm-choice-thumb{display:block;width:110px;height:88px;object-fit:cover;border-radius:4px}
.npm-choice-label{flex:1 1 auto}
@media(max-width:600px){.npm-choice-thumb-wrap img,.npm-choice-thumb{width:80px;height:64px}}
.npm-pm-pledge h5,.npm-pm-review h4{font-size:18px;color:#294b3d;border-bottom:2px solid #cdded6;padding-bottom:8px}.npm-state{padding:10px 12px;border-left:4px solid #6d9883;background:#f3f8f5;border-radius:3px;font-weight:600}.npm-state-open{border-color:#21825c;background:#edf9f3;color:#155e43}.npm-state-locked,.npm-locked{border-color:#c64242;background:#fff3f1;color:#7f2424}.npm-locked{margin:18px 0 0;padding:14px 16px;border-left:4px solid}.npm-locked a{font-weight:700}
/* Keep the locked-answer notice clear of the Questions heading divider. */
.npm-pm-review h4 + p{margin:16px 0 18px}.npm-pm-review h4 + p .npm-locked{display:block;margin:0}

/* Locked-answer notice sits below—not on—the Questions divider. */
.npm-pm-review h4 + .npm-question-lock-notice{margin:16px 0 18px;padding:0}.npm-pm-review .npm-question-lock-notice .npm-locked{display:block;margin:0}.npm-pm-review h4 + .npm-question-intro{margin:16px 0 18px}

/* Final locked-answer alert geometry: never overlaps the Questions divider. */
.npm-pm-review h4{margin:0 0 18px!important}.npm-pm-review .npm-question-lock-notice{clear:both;display:block;margin:0 0 20px!important;padding:0!important}.npm-pm-review .npm-question-lock-notice .npm-locked{position:static;box-sizing:border-box;display:block;margin:0!important;padding:14px 16px!important;transform:none}.npm-pm-review .npm-question-lock-notice + form{margin-top:0}

/* Locked answer message: explicit independent block after the heading rule. */
.npm-pm-review h4 + .npm-question-lock-notice{border:0!important;border-top:0!important;background:transparent!important;margin:18px 0 20px!important;padding:0!important;line-height:normal!important}.npm-pm-review h4 + .npm-question-lock-notice .npm-locked{border-top:0!important;display:block!important;clear:both!important;float:none!important;margin:0!important;top:auto!important;bottom:auto!important}.npm-pm-review h4{position:relative;z-index:1}.npm-pm-review .npm-question-lock-notice{position:relative;z-index:0}

/* Account-page layout: collapsed Delivery address, Previous campaigns, My Account dashboard callout. */
.npm-pm-address-toggle{border:1px solid #dce3e0;border-radius:6px;margin:16px 0;background:#fff}
.npm-pm-address-toggle > summary{padding:16px 20px;font-size:16px;font-weight:600;color:#294b3d;cursor:pointer;list-style:none}
.npm-pm-address-toggle > summary::-webkit-details-marker{display:none}
.npm-pm-address-toggle > summary::before{content:"▸";display:inline-block;width:1em;margin-right:6px;transition:transform .12s ease}
.npm-pm-address-toggle[open] > summary::before{transform:rotate(90deg)}
.npm-pm-address-toggle > summary:focus-visible{outline:2px solid #21825c;outline-offset:2px}
.npm-pm-address-toggle .npm-pm-address{border:0;border-top:1px solid #e3ebe7;border-radius:0;margin:0;padding:18px 20px}
.npm-pm-previous{margin:26px 0 0;border:1px solid #dce3e0;border-radius:6px;background:#fff}
.npm-pm-previous > summary{padding:16px 20px;font-size:18px;font-weight:600;color:#294b3d;cursor:pointer;list-style:none}
.npm-pm-previous > summary::-webkit-details-marker{display:none}
.npm-pm-previous > summary::before{content:"▸";display:inline-block;width:1em;margin-right:6px;transition:transform .12s ease}
.npm-pm-previous[open] > summary::before{transform:rotate(90deg)}
.npm-pm-previous > summary:focus-visible{outline:2px solid #21825c;outline-offset:2px}
.npm-pm-previous .npm-pm-pledge{margin:0 20px 20px}
.npm-pm-previous > summary + .npm-pm-pledge{margin-top:0}
.npm-address-status{margin:0 0 14px;color:#43554d;font-size:13px;line-height:1.5}
.npm-pm-support{margin:26px 0 0;border:1px solid #dce3e0;border-radius:6px;padding:18px 20px;background:#fff}
.npm-pm-support h3{margin:0 0 10px;font-size:18px}
.npm-pm-support p{margin:6px 0;font-size:13px;color:#43554d}
.npm-dashboard-callout{border:1px solid #d9e2e0;border-radius:7px;background:linear-gradient(135deg,#f5f9f7,#fff);padding:20px 22px;margin:0 0 24px}
.npm-dashboard-callout h2{margin:0 0 6px;font-size:19px;color:#294b3d}
.npm-dashboard-callout p{margin:0 0 12px;color:#53615d}
.npm-dashboard-callout .npm-dashboard-callout-button{margin:0}

/* Build 0.5.14: private test-pledge session banner (account page only). */
.npm-pm-pledge-test{border:2px solid #b45309}
.npm-test-pledge-banner{background:#fff3cd;border-bottom:2px solid #b45309;color:#664d03;font-weight:600;padding:12px 16px;line-height:1.5}

/* Build 0.5.21: the combined locked-address save notice (see
   NPM_Addresses::save_notices()) is one outer WooCommerce error/warning
   alert wrapping a '.npm-address-save-summary' div — this hides *only*
   that alert's default WooCommerce error pseudo-icon (identified via
   :has(), never applied to WooCommerce error notices generally) and
   removes the icon's reserved left padding so the two inner rows below
   sit flush inside the alert. */
.woocommerce-error:has(.npm-address-save-summary){padding-left:1em!important}
.woocommerce-error:has(.npm-address-save-summary)::before{content:none!important;display:none!important}

/* Build 0.5.21: inner warning/success status rows inside the single combined
   address-save WooCommerce notice (see NPM_Addresses::notice_row()) — a
   CSS-only icon (no SVG/data image) per row, aligned with that row's first
   line of text and stacked with a small gap between rows. */
.npm-notice-row{display:flex;align-items:flex-start;gap:8px}
.npm-notice-row + .npm-notice-row{margin-top:10px}
.npm-notice-row__icon{flex:0 0 18px;width:18px;height:18px;border-radius:50%;text-align:center;line-height:18px;font-size:12px;font-weight:700;color:#fff}
.npm-notice-row__icon::before{content:"!"}
.npm-notice-row--warning .npm-notice-row__icon{background:#b32d2e}
.npm-notice-row--success .npm-notice-row__icon{background:#21825c}
.npm-notice-row--success .npm-notice-row__icon::before{content:"\2713"}
.npm-notice-row__text{flex:1 1 auto;min-width:0}
@media(max-width:600px){.npm-notice-row{gap:6px}.npm-notice-row__icon{flex-basis:16px;width:16px;height:16px;line-height:16px;font-size:11px}}

/* Build 0.5.24: branded NPM backer access pages (login/welcome, create
   account, lost/set password, reset password) — recreates the existing
   owner-approved Kickstarter-backer screen hierarchy: one cohesive card
   (heading, copy, and form all inside the same bordered/shadowed
   container — never a separate small title box floating on a blank
   page), a black uppercase primary action, an orange full-width secondary
   action, and a light divider between them. Namespaced .npm-access-*
   selectors only — nothing here touches theme CSS or the legacy
   page-kickstarter-*.php templates. */
/* Build 0.5.27: the live theme's page-content layout (float/grid/flex,
   narrower article width) was overriding this wrapper's geometry on the
   credentials (?mode=login) view specifically — strong selector + !important
   here (not just specificity) so every access screen gets identical,
   theme-independent card width/centering regardless of load order. */
.npm-access-page{
  max-width:560px!important;width:calc(100% - 32px)!important;
  margin:56px auto!important;padding:0!important;box-sizing:border-box!important;
  float:none!important;clear:both!important;display:block!important;position:relative!important;
}
.npm-access-card{background:#fdfcfa;border:1px solid #e3ddd2;border-radius:8px;box-shadow:0 2px 14px rgba(20,18,14,.07);padding:40px 36px;width:100%;box-sizing:border-box}
.npm-access-card-title{margin:0 0 20px;font-size:28px;line-height:1.25;font-weight:700;color:#211f1a;text-align:center}
.npm-access-welcome p,.npm-access-form>p{margin:0 0 16px;line-height:1.65;color:#3d3a34}
.npm-access-support{font-size:14px;color:#6b655c;text-align:center;margin:18px 0!important}
.npm-access-divider{border:0;border-top:1px solid #e3ddd2;margin:26px 0}
.npm-access-footer{margin:24px 0 0;padding-top:18px;border-top:1px solid #e3ddd2;font-size:13px;color:#7a746c;text-align:center}
.npm-access-note{font-size:13px;color:#7a746c;margin:8px 0 0!important}
/* Primary/secondary access-page actions are real WooCommerce button/button-primary
   elements (My Account > Pledge Manager's own markup pattern — see
   NPM_Addresses::dashboard_callout()/manage_form()), not plain anchors, so the
   live theme's existing button styling applies immediately. These rules layer
   the Kickstarter-screen geometry/color on top, tag-qualified (a.npm-access-btn-*,
   button.npm-access-btn-*) and scoped under .npm-access-page so they win over
   the theme/WooCommerce .button/.button-primary rules regardless of stylesheet
   load order, instead of relying on the class name alone. */
.npm-access-page a.npm-access-btn-primary,.npm-access-page button.npm-access-btn-primary,
.npm-access-page a.npm-access-btn-secondary,.npm-access-page button.npm-access-btn-secondary{
  display:block;width:100%;box-sizing:border-box;margin:22px 0 0;padding:14px 22px;
  text-align:center;text-decoration:none;font-weight:700;font-size:14px;line-height:1.3;
  border:0;border-radius:4px;cursor:pointer;font-family:inherit;
}
.npm-access-page a.npm-access-btn-primary,.npm-access-page button.npm-access-btn-primary{
  max-width:320px;margin-left:auto;margin-right:auto;background:#1c1a17;color:#fff!important;
  text-transform:uppercase;letter-spacing:.06em;
}
.npm-access-page a.npm-access-btn-primary:hover,.npm-access-page button.npm-access-btn-primary:hover,
.npm-access-page a.npm-access-btn-primary:focus,.npm-access-page button.npm-access-btn-primary:focus{
  background:#000;color:#fff!important;
}
.npm-access-page a.npm-access-btn-secondary,.npm-access-page button.npm-access-btn-secondary{
  background:#6c757d;color:#fff!important;font-size:15px;
}
.npm-access-page a.npm-access-btn-secondary:hover,.npm-access-page button.npm-access-btn-secondary:hover,
.npm-access-page a.npm-access-btn-secondary:focus,.npm-access-page button.npm-access-btn-secondary:focus{
  background:#5a6268;color:#fff!important;
}
.npm-access-form label{display:block;font-weight:600;margin:0 0 4px}
.npm-access-form input[type=text],.npm-access-form input[type=email],.npm-access-form input[type=password]{width:100%;box-sizing:border-box;height:38px;margin-top:2px;border:1px solid #d6d0c4;border-radius:4px;padding:0 10px}
.npm-access-remember label{font-weight:400;display:flex;align-items:center;gap:6px}
.npm-access-form form{margin:14px 0}
.npm-access-form p{margin:10px 0}
@media(max-width:600px){.npm-access-page{margin:28px auto}.npm-access-card{padding:28px 20px}.npm-access-card-title{font-size:24px}}

/* Build 0.5.36: Survey question intro image is now the same compact size as
   the per-choice thumbnails (.npm-choice-thumb) above, not a large full-width
   image — same visual style, same 110x88 object-fit:cover treatment. */
.npm-question-intro-image{display:block;margin:10px 0 16px;line-height:0}
.npm-question-intro-image img{display:block;width:110px;height:88px;object-fit:cover;border-radius:4px}
@media(max-width:600px){.npm-question-intro-image img{width:80px;height:64px}}
/* Build 0.5.36: optional per-question reference link — small, subtle,
   underlined text, never a large button; safe to wrap on narrow screens. */
.npm-question-reference-link{margin:2px 0 12px;font-size:.85em;line-height:1.4}
.npm-question-reference-link a{text-decoration:underline;color:#2c6e4f;word-break:break-word}

/* Build 0.5.40: anonymous-feedback Survey question. Build 0.5.41 (opt-in
   flow): superseded below.
   Build 0.5.42 (per-save anonymous response choice): a question that
   "allows anonymous responses" is a completely normal question by
   default — no border, no card, its ordinary textarea visible
   immediately (unaffected by anything in this section). Only when the
   backer ticks "Submit this response anonymously instead" does the
   SAME .npm-question fieldset gain the .npm-anonymous-selected class,
   which adds exactly one dashed border around the whole question
   (title, checkbox, privacy panel, textarea together) — never a second,
   nested panel. Deliberately soft/neutral (never a warning/error/success
   color) so it never reads as alarming, and readable at narrow widths.
   Nothing here changes normal Survey question spacing, image sizing, or
   option styling, and none of it applies to a question that does not
   allow anonymous responses at all. */
.npm-question.npm-anonymous-selected{border:1px dashed #8ca395;border-radius:6px;background:#fafaf8;padding:14px 16px}
.npm-anon-opt-in-label{display:block;margin:8px 0 0;font-size:.85em;font-weight:400;color:#5c6b64}
.npm-anon-opt-in-label input{margin-right:6px}
.npm-anonymous-feedback-panel{margin-top:10px}
.npm-anonymous-feedback-title{margin:0 0 6px;font-weight:600;font-size:.9em;color:#3d4a44}
.npm-anonymous-feedback-desc{margin:0;font-size:.85em;line-height:1.45;color:#5c6b64}
/* Build 0.5.43: a small gap below the LAST question's dashed frame,
   before the "Save my survey" button, so the checked (bordered) state
   never sits flush against it. Scoped to :last-of-type so it never adds
   spacing between two ordinary (unchecked) questions, and only applies
   at all once .npm-anonymous-selected is present. */
.npm-question.npm-anonymous-selected:last-of-type{margin-bottom:18px}
@media(max-width:600px){.npm-question.npm-anonymous-selected{padding:12px}}
/* Build 0.5.44: subtle emphasis on the specific phrases "for this
   question" (title) and "this response" (checkbox label) — underline
   only, never a link, never a color/weight change. */
.npm-anonymous-emphasis{text-decoration:underline;text-underline-offset:2px}
/* Build 0.5.48: backer-facing status card (phase pill + plain-language
   explanation) shown directly below the campaign name in My Account >
   Pledge Manager. The pill always reflects the real current campaign
   phase; the admin "Backer state message" (see .npm-status-custom) is
   rendered as its own separate line below the normal explanation and
   never replaces or restyles the pill. Compact, no JavaScript required. */
.npm-status-card{margin:9px 0 0}
.npm-status-pill{display:inline-block;padding:3px 11px;border-radius:999px;font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;line-height:1.5;background:#eef3f0;color:#3d4a44;border:1px solid #cdded6;white-space:nowrap}
.npm-status-pill--preparing,.npm-status-pill--inactive{background:#f1f2f0;color:#5c655f;border-color:#dadfdb}
.npm-status-pill--survey,.npm-status-pill--closing{background:#fdf3e2;color:#8a5a10;border-color:#f1d9a8}
.npm-status-pill--open{background:#edf9f3;color:#155e43;border-color:#bfe4d2}
.npm-status-pill--address-confirmation{background:#eaf2fb;color:#204d80;border-color:#c6dcf3}
.npm-status-pill--address-locked{background:#fff3f1;color:#7f2424;border-color:#f3c8c1}
.npm-status-pill--fulfilment{background:#edf9f3;color:#21683f;border-color:#bfe4d2}
.npm-status-text{margin:8px 0 0;font-size:13px;line-height:1.55;color:#516159}
.npm-status-text--primary{font-weight:600;color:#2f3d37}
.npm-status-custom{margin:8px 0 0;font-size:13px;line-height:1.55;color:#516159;font-style:italic}
@media(max-width:600px){.npm-status-pill{font-size:10px;padding:3px 9px}.npm-status-text,.npm-status-custom{font-size:12.5px}}
