/**
 * Pricetracker Portal — Mitt konto, Alternativ A (2026-06-11)
 *
 * Palette: VARUMARKESGUIDE.md §4 (kanon) · spec: design/mitt-konto/
 * CLAUDE-CODE-PROMPT-MITT-KONTO.md · prototyp: REFERENS-Prototyp-
 * Alternativ-A.dc.html.
 *
 * IMPORTANT: This file is loaded AFTER portal.css and is the canonical
 * styling for the entire account portal. All BEM classes (pt-portal__*)
 * are preserved so PHP rendering in PortalShortcodes.php does not need
 * to change for the basic structure. New variants like --rose / --peach
 * / --lilac / --butter are added on top for the dashboard stats,
 * tinted info cards, and the share-modal channels.
 *
 * (Städsvep 2026-06-12: alla regler mot klasser som inte längre finns i
 * PortalShortcodes-markupen är raderade — bl.a. den gamla pill-naven
 * .pt-portal__nav, eyebrows och hero-avataren. Grep-verifierat 0 träffar
 * i PHP/JS före varje radering.)
 */

/* ============================================================
   Design tokens
   ============================================================ */
:root {
    /* Kanon-palett — VARUMARKESGUIDE.md §4 */
    --ptp-bg: #f9fafb;
    /* Soft-ytor MÅSTE synas mot sidbakgrunden (#f9fafb) — gray-100 +
       1px border på ytorna som använder den (spec §2.1). */
    --ptp-bg-tint: #f3f4f6;
    --ptp-surface: #ffffff;
    --ptp-ink: #111827;
    --ptp-ink-soft: #4b5563;
    --ptp-ink-mute: #6b7280;
    --ptp-line: #e5e7eb;
    --ptp-line-strong: #d1d5db;

    /* Brand accents — kanon handlingsblå. */
    --ptp-accent: #3b82f6;
    --ptp-accent-deep: #2563eb;
    --ptp-accent-soft: #dbeafe;
    --ptp-accent-softer: #eff6ff;

    /* Vy-roller (spec §2.1) — varje vy har EGEN kanon-yta:
       roll          yta       border    ikon      djup text
       Favoriter     #fff1f2   #ffe4e6   #f43f5e   #e11d48
       Bevakningar   #fffbeb   #fde68a   #f59e0b   #b45309
       Önskelistor   #eff6ff   #dbeafe   #2563eb   #1d4ed8
       Omdömen/spar  #ecfdf5   #a7f3d0   #10b981   #047857
       Danger        #fef2f2   #fecaca   #ef4444   #dc2626  */
    --ptp-rose: #f43f5e;
    --ptp-rose-deep: #e11d48;
    --ptp-tint-rose: #fff1f2;
    --ptp-tint-rose-line: #ffe4e6;
    --ptp-amber: #f59e0b;
    --ptp-amber-deep: #b45309;
    --ptp-tint-amber: #fffbeb;
    --ptp-tint-amber-line: #fde68a;
    --ptp-green: #10b981;
    --ptp-tint-green-line: #a7f3d0;
    --ptp-tint-blue: #eff6ff;
    --ptp-tint-blue-line: #dbeafe;

    /* Legacy tint-namn (markup-kompatibilitet) → mappade till rollerna */
    --ptp-tint-peach: var(--ptp-tint-amber);
    --ptp-tint-sage: #ecfdf5;
    --ptp-tint-lilac: var(--ptp-tint-blue); /* lila utgår — blå yta */
    --ptp-tint-sky: var(--ptp-tint-blue);
    --ptp-tint-butter: var(--ptp-tint-amber);
    /* Tidigare odefinierade ikon-tokens (Mer-sheeten) — mappade */
    --ptp-sage: var(--ptp-green);
    --ptp-butter: var(--ptp-amber);
    --ptp-sky: var(--ptp-accent-deep);

    --ptp-success: #047857;
    --ptp-success-soft: #ecfdf5;
    --ptp-danger: #dc2626;
    --ptp-danger-soft: #fef2f2;

    /* EN fokusring + ETT hover-språk (spec §2.2-2.3) */
    --ptp-focus-ring: 0 0 0 3px rgba(37, 99, 235, 0.4);
    --ptp-shadow-hover: 0 6px 16px rgba(17, 24, 39, 0.08);

    /* Cool neutrals used INSIDE the unified .pt-alert-card system instead
       of the warm --ptp-bg-tint. Keeps the alert-card visually anchored
       to the brand-blue family without printing any actual accent color. */
    --ptp-card-soft:   #f3f4f6;
    --ptp-card-softer: #f9fafb;
    --ptp-card-line:   #e5e7eb;

    /* Legacy tokens (kept for backwards-compat with markup that still
       references the old indigo theme; mapped to the new palette so the
       overall feel is consistent). */
    
    --ptp-gray-50: #f9fafb;
    --ptp-gray-100: #f3f4f6;
    --ptp-gray-200: var(--ptp-line);
    --ptp-gray-300: var(--ptp-line-strong);
    --ptp-gray-400: var(--ptp-ink-mute);
    --ptp-gray-500: var(--ptp-ink-mute);
    --ptp-gray-600: var(--ptp-ink-soft);
    --ptp-gray-700: var(--ptp-ink-soft);
    --ptp-gray-800: var(--ptp-ink);
    --ptp-gray-900: var(--ptp-ink);
    --ptp-primary: var(--ptp-accent-deep);
    --ptp-primary-light: var(--ptp-accent-soft);
    --ptp-warning: #b45309;
    --ptp-warning-light: var(--ptp-tint-butter);
    --ptp-danger-light: var(--ptp-danger-soft);
    --ptp-success-light: var(--ptp-success-soft);

    /* Radii & shadows */
    --ptp-radius-sm: 10px;
    --ptp-radius: 14px;
    --ptp-radius-lg: 20px;
    --ptp-radius-xl: 28px;
    --ptp-radius-pill: 999px;
    --ptp-shadow-sm: 0 1px 2px rgba(17, 24, 39, 0.04);
    --ptp-shadow-md: 0 2px 6px rgba(17, 24, 39, 0.05), 0 1px 2px rgba(17, 24, 39, 0.04);
    --ptp-shadow-lg: 0 8px 24px rgba(17, 24, 39, 0.06), 0 2px 6px rgba(17, 24, 39, 0.04);
    --ptp-shadow-pop: 0 16px 48px rgba(17, 24, 39, 0.12), 0 4px 12px rgba(17, 24, 39, 0.06);

    --ptp-sidebar-width: 248px;

    /* Sajtens produktbild-overlay (samma recept som frontend.css /
       produktkorten på kategori- och produktsidor). frontend.css
       laddas INTE på portalsidorna, så utan den här definitionen
       föll ::after-overlayen tillbaka på en nästan osynlig
       rgba(0,0,0,0.02) — ägarfynd 2026-06-12. */
    --pt-card-image-overlay: rgb(139 140 142 / 5%);
}

/* ============================================================
   Page-wide background — Astra theme paints body white by default.
   We force the warm cream background on any document that contains
   the account portal and on the WordPress entry-content/article
   wrappers Astra wraps around our content. The selectors are
   specific enough to not bleed onto other pages.
   ============================================================ */
body:has(.pt-portal--sidebar),
body:has(.pt-portal--sidebar) #page,
body:has(.pt-portal--sidebar) #content,
body:has(.pt-portal--sidebar) .ast-container,
body:has(.pt-portal--sidebar) .ast-container-fluid,
body:has(.pt-portal--sidebar) #primary,
body:has(.pt-portal--sidebar) .site-content,
body:has(.pt-portal--sidebar) article,
body:has(.pt-portal--sidebar) .entry-content {
    background: var(--ptp-bg) !important;
}

/* Hide the WP page title ("Mitt konto") on portal pages — sidebar
   already shows the user, sub-pages have their own page-head. */
body:has(.pt-portal--sidebar) .entry-header,
body:has(.pt-portal--sidebar) header.entry-header { display: none !important; }

/* ============================================================
   Layout container
   ============================================================ */
/* ============================================================
   Break out of Astra's theme containers
   ────────────────────────────────────────────────────────────
   Astra wraps every page in:
   #page → #content.site-content → .ast-container (max-width: 1140px,
   padding: 20px) → #primary (margin: 4em 0) → #main → article →
   .entry-content

   Each layer adds padding, max-width or margin that prevents the
   portal sidebar from reaching the viewport-left edge. We zero
   them out only on pages that actually contain .pt-portal--sidebar
   so the rest of the site is unaffected.
   ============================================================ */
body:has(.pt-portal--sidebar) .ast-container,
body:has(.pt-portal--sidebar) .ast-container-fluid,
body:has(.pt-portal--sidebar) #primary,
body:has(.pt-portal--sidebar) #main,
body:has(.pt-portal--sidebar) article.ast-article-single,
body:has(.pt-portal--sidebar) .entry-content {
    max-width: none !important;
    width: 100% !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
    display: block !important;
    /* Tvinga visible på hela kedjan så ingen wrapper klipper
       portalens dropdowns/popovers. */
    overflow: visible !important;
}
body:has(.pt-portal--sidebar) #page,
body:has(.pt-portal--sidebar) #content {
    overflow: visible !important;
}

.pt-portal--sidebar {
    /* APP-LAYOUT (ägarbeslut 2026-06-12, prototypens egen modell):
       sidomenyn är en FAST helhöjdspanel (position:fixed-passet
       längre ner, scopat till body.pt-portal-page ≥961px) och allt
       annat — header, innehåll, footer — flyttas höger med
       margin-left = panelbredden. Ingen geometri ändras någonsin
       vid scroll. Gridden här är FALLBACK-läget (t.ex. shortcoden
       inbäddad på en sida utan body-klassen): statisk tvåkolumn.
       Mobil (≤960px) döljer menyn och kollapsar gridden via
       !important-passet längre ner i filen. */
    display: grid;
    grid-template-columns: var(--ptp-sidebar-width, 248px) minmax(0, 1fr);
    align-items: start;
    max-width: none;
    margin: 0;
    padding: 0;
    color: var(--ptp-ink);
    line-height: 1.55;
    min-height: 60vh;
    text-wrap: pretty;
    background: var(--ptp-bg);
}

.pt-portal--sidebar + .comments-area,
article:has(.pt-portal--sidebar) > .entry-header { display: none; }

/* ============================================================
   Sidebar — FAST HELHÖJDSPANEL (Alternativ A, spec §3 + ägarbeslut)
   ────────────────────────────────────────────────────────────
   Ägarbeslut (2026-06-12, tredje iterationen): både fixed+offset
   och sticky+höjdsynk underkända ("geometrin töjs när headern
   scrollar bort", "footern blir avlång"). Nu gäller prototypens
   egen modell: panelen är position:fixed kant-i-kant med
   viewporten (top→bottom, ≥961px, scopad till body.pt-portal-page
   som PortalService sätter på alla /mitt-konto/-sidor) — avatar-
   blocket börjar vid skärmens topp som i prototypen, bottenblocket
   (Inställningar + Logga ut, margin-top:auto + divider, prototypen
   rad 22-53) är ALLTID synligt och INGEN geometri ändras vid
   scroll. Header, innehåll och footer flyttas i stället höger med
   margin-left = panelbredden (passet under basblocket). Raka
   kanter (ingen radius, ingen skugga), vit yta med border-right.

   Mobil (≤960px) döljer hela sidomenyn (tab-bar tar över).
   ============================================================ */
.pt-portal__sidebar {
    width: var(--ptp-sidebar-width, 248px);
    background: var(--ptp-surface);
    border: 0;
    border-right: 1px solid var(--ptp-line);
    border-radius: 0;
    box-shadow: none;
    padding: 22px 14px;
    box-sizing: border-box;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 14px;
    overflow-y: auto;
}

/* ── App-layoutpasset: fast panel + allt annat höger ──
   Endast desktop (≥961px) och endast när body-klassen finns
   (PortalService::addPortalBodyClass — sätts när sidomenyn faktiskt
   renderas, dvs. inloggad på /mitt-konto/ inkl. undersidor). */
@media (min-width: 961px) {
    body.pt-portal-page .pt-portal__sidebar {
        position: fixed;
        /* WP admin-bar: WP:s admin-bar-CSS sätter
           --wp-admin--admin-bar-height (32px desktop) när baren
           visas; utan bar är variabeln odefinierad → 0px. */
        top: var(--wp-admin--admin-bar-height, 0px);
        left: 0;
        bottom: 0;
        /* Över sajt-headern (z 120) men under ALLA overlays:
           hamburger-drawern (9998/9999), login-modalen (10001),
           share-/delete-modaler (99999), wizard (100000),
           admin-baren (99999). Sökresultaten (z 200) och
           user-popupen ligger INUTI headern, som börjar 248px in —
           ingen geometrisk överlappning med panelen. Tab-baren
           (z 50) är mobil-only där panelen är dold. */
        z-index: 130;
    }
    /* Fallback för WP-versioner som visar admin-baren utan att
       definiera CSS-variabeln. */
    body.admin-bar.pt-portal-page .pt-portal__sidebar {
        top: var(--wp-admin--admin-bar-height, 32px);
    }

    /* Panelen ligger ovanpå — gridden görs enkel-kolumn med
       innehållet direkt (minst invasiva alternativet; ingen
       grid-spacer behövs när containern själv förskjuts). */
    body.pt-portal-page .pt-portal--sidebar {
        display: block;
        margin-left: var(--ptp-sidebar-width, 248px);
    }

    /* Headern och footern flyttas höger lika mycket — footern
       ligger därmed helt i innehållskolumnen och panelen går kant
       i kant ned till skärmbotten, precis som i prototypen. */
    body.pt-portal-page .pt-site-header,
    body.pt-portal-page .wb24-footer,
    body.pt-portal-page #colophon,
    body.pt-portal-page footer.site-footer {
        margin-left: var(--ptp-sidebar-width, 248px);
    }
    /* Nesting-guard: skulle temat någon gång wrappa wb24-footern i
       #colophon får bara den yttre wrappern förskjutningen. */
    body.pt-portal-page #colophon .wb24-footer,
    body.pt-portal-page footer.site-footer .wb24-footer {
        margin-left: 0;
    }
}


/* User block — compact row, no card chrome. */
.pt-portal__sidebar-user {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 0 6px;
    border-bottom: 0;
    margin-bottom: 0;
}

/* ETT avatar-recept för hela kontot (spec §3): navy→blå gradient,
   vita initialer 800. Återanvänds av hero- och member-avataren. */
.pt-portal__sidebar-avatar {
    width: 42px;
    height: 42px;
    flex: none;
    flex-shrink: 0;
    border-radius: 999px;
    background: linear-gradient(135deg, #1b3152, #2563eb);
    color: #ffffff;
    font-weight: 800;
    font-size: 14px;
    display: grid;
    place-items: center;
    box-shadow: none;
    border: 0;
    line-height: 1;
    text-transform: uppercase;
    overflow: hidden;
}

.pt-portal__sidebar-info {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 1px;
}

.pt-portal__sidebar-name {
    display: block;
    font-size: 14px;
    font-weight: 700;
    color: var(--ptp-ink);
    letter-spacing: -0.005em;
    line-height: 1.2;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.pt-portal__sidebar-email {
    display: block;
    font-size: 11px;
    color: var(--ptp-ink-mute);
    line-height: 1.2;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Nav — flex:1 så bottenblocket (margin-top:auto) trycks längst ner. */
.pt-portal__sidebar-nav {
    display: flex;
    flex-direction: column;
    gap: 3px;
    flex: 1;
    min-height: 0;
}

/* Nav-poster: pills (spec §3) — 13.5px/600 #374151, ikon 17px #9ca3af.
   Aktiv: bg #eff6ff, text+ikon #1d4ed8, 700. Hover: #f3f4f6. */
.pt-portal__sidebar-link {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 9px 12px;
    position: relative;
    color: #374151;
    font-size: 13.5px;
    font-weight: 600;
    text-decoration: none;
    background: transparent;
    border: 0;
    border-radius: var(--ptp-radius-pill);
    width: 100%;
    text-align: left;
    cursor: pointer;
    transition: background-color 0.15s ease, color 0.15s ease;
    font-family: inherit;
    line-height: 1.3;
}

.pt-portal__sidebar-link:hover {
    color: var(--ptp-ink);
    background: #f3f4f6;
}

.pt-portal__sidebar-link--active {
    color: #1d4ed8;
    font-weight: 700;
    background: var(--ptp-tint-blue);
}

.pt-portal__sidebar-link--active:hover {
    color: #1d4ed8;
    background: var(--ptp-tint-blue);
}

.pt-portal__sidebar-link--active::before { content: none; }

.pt-portal__sidebar-icon {
    width: 17px;
    height: 17px;
    flex: none;
    flex-shrink: 0;
    stroke-width: 2;
    color: #9ca3af;
}

.pt-portal__sidebar-link--active .pt-portal__sidebar-icon {
    color: #1d4ed8;
}

/* Badge-räknare: 11px/700 pill — grå på inaktiv rad, blå på aktiv. */
.pt-portal__sidebar-badge {
    margin-left: auto;
    font-size: 11px;
    font-weight: 700;
    padding: 1px 8px;
    border-radius: var(--ptp-radius-pill);
    background: #f3f4f6;
    color: #4b5563;
    line-height: 1.4;
    min-width: 0;
    text-align: center;
}

.pt-portal__sidebar-link--active .pt-portal__sidebar-badge {
    color: #1d4ed8;
    background: var(--ptp-accent-soft);
}

/* Divider före bottenblocket (Inställningar + Logga ut). margin-top:
   auto trycker divider + efterföljande länkar till botten i nuvarande
   markup (allt ligger direkt i nav-flexkolumnen). */
.pt-portal__sidebar-divider {
    margin-top: auto;
    height: 1px;
    background: var(--ptp-line);
    margin-bottom: 9px;
    margin-left: 0;
    margin-right: 0;
    border: 0;
    padding: 0;
}

/* KONTRAKT (Fas 2): när Inställningar + Logga ut flyttas in i en
   .pt-portal__sidebar-bottom-container tar containern över
   margin-top:auto-tricket — divider inuti den blir en vanlig linje. */
.pt-portal__sidebar-bottom-container {
    margin-top: auto;
    display: flex;
    flex-direction: column;
    gap: 3px;
}
.pt-portal__sidebar-bottom-container .pt-portal__sidebar-divider {
    margin-top: 0;
}

/* Divider direkt under avatar-blocket (prototypen rad 30). */
.pt-portal__sidebar-divider--top {
    margin: 0;
    flex: none;
}

/* Logga ut — muted rad, neutral hover (prototypens uttryck). */
.pt-portal__sidebar-link--logout {
    color: var(--ptp-ink-mute);
}

.pt-portal__sidebar-link--logout:hover {
    color: var(--ptp-ink);
    background: #f3f4f6;
}

/* ============================================================
   Main content
   ============================================================ */
.pt-portal__main {
    /* Ägarfix 2026-06-12: innehållet VÄNSTERSTÄLLS mot sidomenyn
       (margin:0, inte auto) — centrering i den breda grid-kolumnen
       gav ett enormt gap mellan meny och innehåll. max-width 1060
       behålls som läsbredd, padding 28px 40px som i prototypen. */
    min-width: 0;
    width: 100%;
    max-width: 1060px;
    margin: 0;
    padding: 28px 40px 48px;
    box-sizing: border-box;
}

/* Prototypen har INGET yttre vitt kort runt sektionerna — korten
   ligger direkt mot sidbakgrunden (#f9fafb). Neutralisera
   portal.css legacy-kortet på alla brytpunkter (mobilpasset gör
   samma sak med !important längre ner). */
.pt-portal--sidebar .pt-portal__section {
    background: transparent;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    padding: 0;
}

.pt-portal__section h2 {

    font-size: 22px;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--ptp-ink);
    margin: 0 0 14px;
}

.pt-portal__section h3 {

    font-size: 18px;
    font-weight: 700;
    color: var(--ptp-ink);
    margin: 0 0 8px;
}

/* ============================================================
   Page header (sub-pages)
   ============================================================ */
.pt-portal__page-header {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 24px;
    margin-bottom: 28px;
    flex-wrap: wrap;
}

.pt-portal__page-header > div { max-width: 100%; min-width: 0; }

/* Sektionsrubrik (prototypen rad 231-233 m.fl.): 22px/800 med
   räknaren på samma baslinje. */
.pt-portal__page-header h1 {
    font-weight: 800;
    font-size: 22px;
    line-height: 1.15;
    letter-spacing: -0.01em;
    color: var(--ptp-ink);
    margin: 0;
}

.pt-portal__page-header-titles {
    display: flex;
    align-items: baseline;
    gap: 10px;
    min-width: 0;
    flex-wrap: wrap;
}

.pt-portal__page-count {
    font-size: 13px;
    color: var(--ptp-ink-mute);
    white-space: nowrap;
}

.pt-portal__page-header h1 em {
    font-style: normal;
    color: var(--ptp-accent-deep);
}

.pt-portal__page-subtitle {
    margin: 4px 0 0;
    color: var(--ptp-ink-mute);
    font-size: 13px;
    max-width: 560px;
}

.pt-portal__page-header-actions {
    display: flex;
    gap: 10px;
    align-items: center;
    flex-wrap: wrap;
}

/* ============================================================
   Hero (dashboard greeting)
   ============================================================ */
/* Hero (spec §4.1): vitt kort, border, radius 16, INGEN dekor —
   blob/radialer raderade (gav optiskt lila). */
.pt-portal__hero {
    position: relative;
    border-radius: 16px;
    padding: 24px 28px;
    overflow: hidden;
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    margin-bottom: 18px; /* prototypens sektionsrytm (gap 18) */
}

.pt-portal__hero-greeting {

    font-weight: 800;
    font-size: clamp(24px, 2.4vw, 26px);
    line-height: 1.15;
    letter-spacing: -0.01em;
    margin: 0 0 6px;
    color: var(--ptp-ink);
    position: relative;
    z-index: 1;
}

.pt-portal__hero-greeting em {
    font-style: normal;
    color: inherit;
}

.pt-portal__hero-sub {
    margin: 0;
    color: var(--ptp-ink-mute);
    font-size: 14px;
    max-width: 540px;
    position: relative;
    z-index: 1;
}

/* KONTRAKT (Fas 2): besparingen i hero-underraden får denna klass. */
.pt-portal__hero-saving {
    color: var(--ptp-success);
    font-weight: 700;
}

/* ============================================================
   Stats grid (dashboard)
   ============================================================ */
.pt-portal__stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 12px; /* prototypen rad 79 */
    margin-bottom: 18px;
}

/* Statkort (spec §4.1): vitt kort, border, radius 14, padding 16,
   vänsterställt innehåll (prototypen), standardhover. */
.pt-portal__stat-card {
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: 14px;
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 10px;
    align-items: flex-start;
    text-align: left;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
    position: relative;
    overflow: hidden;
    text-decoration: none !important;
    color: inherit !important;
}

.pt-portal__stat-card:hover,
.pt-portal__stat-card:focus,
.pt-portal__stat-card:active {
    border-color: var(--ptp-line-strong);
    box-shadow: var(--ptp-shadow-hover);
    color: inherit !important;
    text-decoration: none !important;
    transform: none !important;
}

.pt-portal__stat-icon-wrap {
    width: 38px;
    height: 38px;
    border-radius: 10px;
    display: grid;
    place-items: center;
}

.pt-portal__stat-icon-wrap svg {
    width: 18px;
    height: 18px;
    stroke-width: 2;
}

/* Vy-färger (spec §2.1): Favoriter=rosa, Bevakningar=amber,
   Önskelistor=blå, Omdömen=GRÖN (success-rollen — var amber-dubblett). */
.pt-portal__stat-card--rose .pt-portal__stat-icon-wrap,
.pt-portal__stat-icon-wrap--heart {
    background: var(--ptp-tint-rose);
    color: var(--ptp-rose);
}
.pt-portal__stat-card--peach .pt-portal__stat-icon-wrap,
.pt-portal__stat-icon-wrap--bell {
    background: var(--ptp-tint-amber);
    color: var(--ptp-amber);
}
.pt-portal__stat-card--lilac .pt-portal__stat-icon-wrap,
.pt-portal__stat-icon-wrap--list {
    background: var(--ptp-tint-blue);
    color: #2563eb;
}
.pt-portal__stat-card--butter .pt-portal__stat-icon-wrap,
.pt-portal__stat-icon-wrap--star {
    background: var(--ptp-tint-sage);
    color: var(--ptp-green);
}
.pt-portal__stat-number {
    font-size: 25px; /* prototypen rad 83 */
    font-weight: 800;
    font-variant-numeric: tabular-nums;
    line-height: 1;
    letter-spacing: -0.02em;
    color: var(--ptp-ink);
    display: block;
}

.pt-portal__stat-label {
    font-size: 13px;
    color: var(--ptp-ink-mute);
    font-weight: 600;
    display: block;
}

/* ============================================================
   Cards (containers with header + body)
   ============================================================ */
.pt-portal__card {
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: 16px;
    padding: 24px;
    box-shadow: none;
    margin-bottom: 18px;
}

.pt-portal__card h3 {

    font-weight: 700;
    font-size: 16px;
    letter-spacing: -0.01em;
    color: var(--ptp-ink);
    margin: 0 0 4px;
}

.pt-portal__card p {
    margin: 0 0 16px;
    color: var(--ptp-ink-mute);
    font-size: 14px;
}

/* Danger-kort (spec §4.7): VIT yta + röd border — rubrik/ikon röda,
   brödtext i ink/grå (färg får inte bära allt, kanon §4.3). */
.pt-portal__card--danger {
    border-color: #fecaca;
    background: var(--ptp-surface);
}
.pt-portal__card--danger h3 { color: var(--ptp-danger); font-weight: 700; }
.pt-portal__card--danger p { color: var(--ptp-ink-soft); }

/* Inline-bekräftelserad för "Radera konto" (KONTRAKT med Fas 2:
   ersätter window.confirm). */
.pt-portal__danger-confirm {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    background: var(--ptp-danger-soft);
    border: 1px solid #fecaca;
    border-radius: 12px;
    padding: 12px 14px;
    margin-top: 12px;
}
.pt-portal__danger-confirm-text {
    font-size: 12.5px;
    font-weight: 700;
    color: var(--ptp-danger);
    flex: 1;
    min-width: 160px;
}

.pt-portal__card-header {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    margin-bottom: 18px;
    gap: 12px;
    flex-wrap: wrap;
}

.pt-portal__card-header h3 {
    font-weight: 700 !important;
    font-size: 16px !important;
    letter-spacing: -0.01em;
    color: var(--ptp-ink) !important;
    margin: 0 !important;
    padding: 0 !important;
    font-family: inherit !important;
    line-height: 1.25 !important;
}

.pt-portal__card-header-link {
    font-size: 13px !important;
    color: var(--ptp-accent-deep) !important;
    font-weight: 700 !important;
    text-decoration: none !important;
    display: inline-flex;
    align-items: center;
    gap: 4px;
}
.pt-portal__card-header-link:hover { color: #1d4ed8 !important; }

.pt-portal__card-subtitle {
    color: var(--ptp-ink-mute);
    font-size: 13px;
    margin-top: 2px;
    display: block;
}

/* ============================================================
   "Senast favoritmarkerat" som RADER (spec §4.1, prototypen).
   KONTRAKT (Fas 2): dagens markup renderar produktkort-grid; när
   dashboard-markupen byts till rader används dessa klasser:
   .pt-portal__dash-fav-rows > .pt-portal__dash-fav-row
     (__img · __info > __brand + __name · __price · rosa hjärt-svg)
   ============================================================ */
.pt-portal__dash-fav-rows {
    display: flex;
    flex-direction: column;
    gap: 12px;
}
.pt-portal__dash-fav-row {
    display: flex;
    align-items: center;
    gap: 12px;
    min-width: 0;
    text-decoration: none !important;
    color: inherit !important;
}
.pt-portal__dash-fav-row__img {
    width: 46px;
    height: 46px;
    flex: none;
    border-radius: 10px;
    background: var(--ptp-bg-tint);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}
.pt-portal__dash-fav-row__img img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}
.pt-portal__dash-fav-row__info {
    display: flex;
    flex-direction: column;
    gap: 1px;
    min-width: 0;
    flex: 1;
}
.pt-portal__dash-fav-row__brand {
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ptp-ink-mute);
}
.pt-portal__dash-fav-row__name {
    font-size: 13.5px;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.pt-portal__dash-fav-row__price {
    font-size: 14px;
    font-weight: 700;
    flex: none;
}
.pt-portal__dash-fav-row__heart {
    width: 16px;
    height: 16px;
    flex: none;
    color: var(--ptp-rose);
}

/* ============================================================
   Dashboard tvåkolumns-grid (prototypen rad 93-131):
   vänster = "Senast favoritmarkerat", höger = "Dina bevakningar".
   En kolumn när höger saknas (auto-fit) och på mobil.
   ============================================================ */
.pt-portal__dash-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
    gap: 18px;
    align-items: start;
}
.pt-portal__dash-col {
    display: flex;
    flex-direction: column;
    gap: 18px;
    min-width: 0;
}
/* Dash-kort (prototypen rad 94): radius 16, padding 20, kolumn med
   gap 12, rubrik 15px/700, footer-länk sist. */
.pt-portal__dash-card {
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 20px;
    border-radius: 16px;
    margin-bottom: 0;
    min-width: 0;
}
.pt-portal__dash-card .pt-portal__dash-card-title,
.pt-portal__dash-card h3.pt-portal__dash-card-title {
    font-size: 15px !important;
    font-weight: 700 !important;
    margin: 0 !important;
    color: var(--ptp-ink) !important;
}
.pt-portal__dash-card-link {
    margin-top: 2px;
    align-self: flex-start;
}
.pt-portal__dash-card .pt-portal__dash-fav-rows { gap: 12px; }
.pt-portal__dash-card .pt-portal__alert-stack { gap: 8px; }

/* Bevaknings-mini-korten på Översikten (prototypen rad 111-127):
   kompakt rad-kort — 38px miniatyr, namn 13.5/600, prisrad
   "Pris nu"/"Mål", 5px progressbar, 11px fotrad. Overrides på
   alert-card.css:s sm-variant (vyspecifika, scopas till dash-kortet;
   !important endast där alert-card.css själv kör !important). */
.pt-portal__dash-card .pt-alert-card--sm {
    padding: 10px 12px;
    gap: 8px;
    border-radius: 12px;
}
.pt-portal__dash-card .pt-alert-card--sm .pt-alert-card__head {
    gap: 10px;
    align-items: center;
}
.pt-portal__dash-card .pt-alert-card--sm .pt-alert-card__thumb {
    width: 38px;
    height: 38px;
    border-radius: 9px;
    border-color: #f3f4f6;
    background: var(--ptp-card-softer);
}
.pt-portal__dash-card .pt-alert-card--sm .pt-alert-card__chip {
    width: 26px;
    height: 38px;
    border-radius: 8px;
}
.pt-portal__dash-card .pt-alert-card--sm p.pt-alert-card__title {
    font-size: 13.5px !important;
    font-weight: 600;
    -webkit-line-clamp: 1;
}
.pt-portal__dash-card .pt-alert-card--sm .pt-alert-card__meta {
    margin-top: 1px;
    font-size: 11px;
}
.pt-portal__dash-card .pt-alert-card--sm .pt-alert-card__price-row-label {
    font-size: 11px;
    font-weight: 400;
    text-transform: none;
    letter-spacing: 0;
}
/* Prototypen: etikett + värde på SAMMA rad ("Pris nu 4 190 kr"). */
.pt-portal__dash-card .pt-alert-card--sm .pt-alert-card__price-now,
.pt-portal__dash-card .pt-alert-card--sm .pt-alert-card__price-target {
    flex-direction: row;
    align-items: baseline;
    gap: 6px;
}
.pt-portal__dash-card .pt-alert-card--sm .pt-alert-card__price-now > strong {
    font-size: 13.5px;
}
.pt-portal__dash-card .pt-alert-card--sm .pt-alert-card__price-target > strong {
    font-size: 12.5px;
    color: #1d4ed8;
}
.pt-portal__dash-card .pt-alert-card--sm .pt-alert-card__bar {
    height: 5px;
    border-radius: 3px;
}
.pt-portal__dash-card .pt-alert-card--sm .pt-alert-card__bar-footer {
    font-size: 11px;
}

/* ============================================================
   Filter row (tabs + actions on list views)
   ============================================================ */
.pt-portal__filter-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 22px;
    flex-wrap: wrap;
}

/* Filter-tabs (spec §4.2): pillcontainer gray-100 + border — SYNLIG
   mot sidbakgrunden. Aktiv flik: vit + lätt skugga + 700. */
.pt-portal__tabs {
    display: inline-flex;
    background: var(--ptp-bg-tint);
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius-pill);
    padding: 4px;
    gap: 2px;
    font-size: 13px;
    max-width: 100%;
    overflow-x: auto;
}

.pt-portal__tab {
    padding: 7px 16px;
    border-radius: var(--ptp-radius-pill);
    border: none;
    background: transparent;
    color: var(--ptp-ink-mute);
    font-weight: 600;
    cursor: pointer;
    white-space: nowrap;

    text-decoration: none;
    transition: 0.15s;
    line-height: 1.2;
}

.pt-portal__tab:hover { color: var(--ptp-ink); }
.pt-portal__tab.is-active {
    background: var(--ptp-surface);
    color: var(--ptp-ink);
    font-weight: 700;
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.08);
}

.pt-portal__tab svg { width: 14px; height: 14px; vertical-align: middle; }

.pt-portal__filter-actions {
    display: flex;
    gap: 8px;
    align-items: center;
}

/* ============================================================
   Buttons
   ============================================================ */
.pt-portal__cta-btn,
.pt-portal__btn-outline,
.pt-portal__btn-danger,
.pt-portal__btn-accent {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 10px 18px;
    border-radius: var(--ptp-radius-pill);
    font-weight: 700;
    font-size: 13.5px;
    border: 1px solid transparent;
    transition: 0.15s;
    white-space: nowrap;
    cursor: pointer;

    text-decoration: none;
    line-height: 1.2;
}

.pt-portal__cta-btn svg,
.pt-portal__btn-outline svg,
.pt-portal__btn-danger svg,
.pt-portal__btn-accent svg {
    width: 16px;
    height: 16px;
    stroke-width: 1.8;
}

.pt-portal__cta-btn {
    background: #2563eb;
    color: #ffffff;
    border-color: #2563eb;
}
.pt-portal__cta-btn:hover {
    background: #1d4ed8;
    color: #ffffff;
}

/* Ghost-knapp (spec §2.2): transparent, border rgba(17,24,39,0.14),
   hover border #9ca3af. */
.pt-portal__btn-outline {
    background: var(--ptp-surface);
    color: var(--ptp-ink);
    border-color: rgba(17, 24, 39, 0.14);
}
.pt-portal__btn-outline:hover {
    border-color: #9ca3af;
    background: var(--ptp-surface);
    color: var(--ptp-ink);
}
.pt-portal__btn-outline--small { padding: 6px 12px; font-size: 13px; }

.pt-portal__btn-accent {
    background: var(--ptp-accent-deep);
    color: white;
    border-color: var(--ptp-accent-deep);
}
.pt-portal__btn-accent:hover { filter: brightness(1.08); color: white; }

.pt-portal__btn-danger {
    background: var(--ptp-danger);
    color: white;
    border-color: var(--ptp-danger);
}
.pt-portal__btn-danger:hover { filter: brightness(1.05); color: white; }

/* Liten primärknapp — BLÅ (svart pill är reserverad för offer-CTA,
   kanon §4.1). .is-copied = grönt kvitto (KONTRAKT med portal.js). */
.pt-portal__btn-sm {
    padding: 7px 15px !important;
    font-size: 12.5px !important;
    background: var(--ptp-accent-deep) !important;
    color: #ffffff !important;
    border: 1px solid var(--ptp-accent-deep) !important;
    border-radius: var(--ptp-radius-pill) !important;
    cursor: pointer !important;
    font-weight: 700 !important;

    text-transform: none !important;
    letter-spacing: normal !important;
    line-height: 1.2 !important;
    box-shadow: none !important;
}
.pt-portal__btn-sm:hover {
    background: #1d4ed8 !important;
    border-color: #1d4ed8 !important;
    color: #ffffff !important;
}
.pt-portal__btn-sm.is-copied,
.pt-portal__btn-sm.is-copied:hover {
    background: var(--ptp-green) !important;
    border-color: var(--ptp-green) !important;
    color: #ffffff !important;
}

/* ============================================================
   Product grid + cards (favorites, dashboard preview)
   Desktop: 4 columns. Down to 3 / 2 on smaller screens.
   ============================================================ */
.pt-portal__product-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 14px;
}
.pt-portal__product-grid--full {
    grid-template-columns: repeat(4, 1fr);
}
.pt-portal__product-grid > *,
.pt-portal__product-grid--full > * {
    min-width: 0;
}

@media (max-width: 1080px) {
    .pt-portal__product-grid,
    .pt-portal__product-grid--full {
        grid-template-columns: repeat(3, 1fr);
    }
}
@media (max-width: 720px) {
    .pt-portal__product-grid,
    .pt-portal__product-grid--full {
        grid-template-columns: repeat(2, 1fr);
    }
}
@media (max-width: 420px) {
    .pt-portal__product-grid,
    .pt-portal__product-grid--full {
        grid-template-columns: repeat(2, 1fr);
        gap: 10px;
    }
}

/* Favorites results wrapper — no border, no padding. The cards
   themselves have their own borders. */
.pt-portal__favorites-results {
    background: transparent;
    border: 0;
    padding: 0;
}

.pt-portal__product-card {
    position: relative;
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: 12px;
    overflow: hidden;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
    display: flex;
    flex-direction: column;
}
.pt-portal__product-card:hover {
    border-color: var(--ptp-line-strong);
    box-shadow: var(--ptp-shadow-hover);
}

.pt-portal__product-link {
    display: flex;
    flex-direction: column;
    text-decoration: none;
    color: inherit;
    flex: 1;
}

/* Product image — matches the same overlay pattern used on other
   product cards (see wb24-product-carousel + pt-product-card on
   single-product / category pages). The ::after pseudo paints a
   subtle multiply overlay so all product photos blend visually
   regardless of background colour or transparency. */
.pt-portal__product-img {
    width: 100%;
    aspect-ratio: 1;
    background: var(--ptp-bg);
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
}
.pt-portal__product-img img {
    position: relative;
    z-index: 0;
    display: block;
    width: 100%;
    height: 100%;
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    margin: 0;
    padding: 0;
    /* Vit produktbakgrund blandas in i plattan (samma kanon-behandling
       som publika önskelistans `.pt-wishlist-public__product-img img`) -
       annars sitter en hård vit ruta OVANPÅ ytan (ägarfynd 2026-06-13). */
    mix-blend-mode: multiply;
}
.pt-portal__product-img::after {
    content: "";
    position: absolute;
    inset: 0;
    /* Fallback = sajtens kanon-overlay (inte den gamla svaga 2 %). */
    background-color: var(--pt-card-image-overlay, rgb(139 140 142 / 5%));
    pointer-events: none;
    z-index: 1;
}

.pt-portal__product-tag {
    position: absolute;
    top: 10px;
    left: 10px;
    padding: 3px 8px;
    border-radius: var(--ptp-radius-pill);
    font-size: 11px;
    font-weight: 600;
    background: var(--ptp-ink);
    color: var(--ptp-bg);
    letter-spacing: 0.02em;
    z-index: 2;
}
/* REA = röd familj (kanon §4.3 — aldrig blå rea-badge). */
.pt-portal__product-tag--sale { background: #fecaca; color: #991b1b; }
.pt-portal__product-tag--new { background: var(--ptp-success-soft); color: #047857; }

.pt-portal__product-body {
    padding: 14px 16px 16px;
    display: flex;
    flex-direction: column;
    gap: 4px;
    flex: 1;
}

.pt-portal__product-brand {
    display: block;
    font-size: 10.5px;
    color: var(--ptp-ink-mute);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    margin-bottom: 2px;
}

.pt-portal__product-title {
    display: -webkit-box;
    font-size: 13.5px;
    color: var(--ptp-ink);
    font-weight: 600;
    line-height: 1.35;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    min-height: 2.7em;
    margin-bottom: 4px;
}

.pt-portal__product-price-row {
    display: flex;
    align-items: baseline;
    gap: 8px;
    margin-top: auto;
    padding-top: 8px;
}

.pt-portal__product-price {

    font-size: 15px;
    font-weight: 700;
    color: var(--ptp-ink);
    letter-spacing: -0.01em;
}

.pt-portal__product-was {
    font-size: 12px;
    color: #9ca3af;
    text-decoration: line-through;
}

/* Prisfall = grön chip (spec §2.5/§4.2 — samma i grid och lista). */
.pt-portal__product-drop {
    font-size: 11px;
    font-weight: 700;
    color: var(--ptp-success);
    background: var(--ptp-success-soft);
    padding: 2px 8px;
    border-radius: var(--ptp-radius-pill);
    margin-left: auto;
    white-space: nowrap;
}

.pt-portal__product-stores {
    font-size: 12px;
    color: var(--ptp-ink-mute);
    display: block;
}

/* Ta bort-X på produktkorten — SVART X (ägarbeslut 2026-06-12:
   #111827, hover #000), 30px vit cirkel. Gäller bara X-IKONEN;
   rosa hjärtan på riktiga hjärt-knappar (.pt-favorite-btn med
   hjärtform) påverkas inte — de stylas i sina egna recept. */
.pt-portal .pt-portal__remove-btn,
.pt-portal--sidebar .pt-portal__remove-btn,
.pt-portal__product-card .pt-portal__remove-btn,
button.pt-portal__remove-btn {
    position: absolute !important;
    top: 8px !important;
    right: 8px !important;
    width: 30px !important;
    height: 30px !important;
    min-width: 30px !important;
    min-height: 30px !important;
    display: grid !important;
    place-items: center !important;
    background: var(--ptp-surface) !important;
    border: 1px solid var(--ptp-line) !important;
    border-radius: 50% !important;
    color: #111827 !important;
    cursor: pointer !important;
    transition: border-color 0.15s ease, background-color 0.15s ease !important;
    box-shadow: var(--ptp-shadow-sm) !important;
    padding: 0 !important;
    margin: 0 !important;
    line-height: 1 !important;
    font-size: 0 !important;
    z-index: 3 !important;
}
.pt-portal .pt-portal__remove-btn:hover,
.pt-portal--sidebar .pt-portal__remove-btn:hover,
.pt-portal__product-card .pt-portal__remove-btn:hover,
button.pt-portal__remove-btn:hover {
    background: var(--ptp-surface) !important;
    border-color: var(--ptp-line-strong) !important;
    color: #000000 !important;
}
.pt-portal .pt-portal__remove-btn svg,
.pt-portal--sidebar .pt-portal__remove-btn svg,
button.pt-portal__remove-btn svg {
    width: 14px !important;
    height: 14px !important;
    flex-shrink: 0 !important;
    fill: currentColor !important;
}

/* ============================================================
   Product list view (toggle from grid -> list on Favoriter)
   Mirrors the new design's <article class="product-row"> markup:
   image · info (brand + title + meta) · price (was+now+drop) ·
   actions (Visa button + trash icon).
   ============================================================ */
.pt-portal__product-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.pt-portal__product-row {
    display: grid;
    grid-template-columns: 72px 1fr auto auto;
    gap: 18px;
    align-items: center;
    padding: 12px 16px;
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: 12px;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
    text-decoration: none !important;
    color: inherit !important;
    position: relative;
}
.pt-portal__product-row:hover {
    border-color: var(--ptp-line-strong);
    box-shadow: var(--ptp-shadow-hover);
    color: inherit !important;
    text-decoration: none !important;
}

.pt-portal__product-row__img {
    width: 72px;
    height: 72px;
    border-radius: var(--ptp-radius);
    overflow: hidden;
    background: #fff;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 8px;
}
.pt-portal__product-row__img img {
    position: relative;
    z-index: 0;
    width: 100%;
    height: 100%;
    object-fit: contain;
    /* Samma multiply-behandling som rutnätsvyn (1.4.9) - annars saknades
       overlay-effekten helt i listvyn (ägarfynd 2026-06-13). */
    mix-blend-mode: multiply;
}
.pt-portal__product-row__img::after {
    content: "";
    position: absolute;
    inset: 0;
    /* Fallback = sajtens kanon-overlay (inte den gamla svaga 2 %). */
    background-color: var(--pt-card-image-overlay, rgb(139 140 142 / 5%));
    pointer-events: none;
    z-index: 1;
    border-radius: inherit;
}
.pt-portal__product-row__tag {
    position: absolute;
    top: 4px;
    left: 4px;
    padding: 2px 6px;
    border-radius: var(--ptp-radius-pill);
    font-size: 10px;
    font-weight: 700;
    background: #fecaca;
    color: #991b1b;
    z-index: 2;
}

.pt-portal__product-row__info { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.pt-portal__product-row__brand {
    margin: 0 0 2px;
    font-size: 10.5px;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ptp-ink-mute);
    font-weight: 700;
}
.pt-portal__product-row__title {
    margin: 0 0 4px;

    font-weight: 600;
    font-size: 14px;
    color: var(--ptp-ink);
    line-height: 1.3;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.pt-portal__product-row__meta {
    margin: 0;
    font-size: 12px;
    color: var(--ptp-ink-mute);
}

.pt-portal__product-row__price {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 2px;
    flex-shrink: 0;
}
.pt-portal__product-row__was {
    font-size: 12px;
    color: #9ca3af;
    text-decoration: line-through;
}
.pt-portal__product-row__now {

    font-weight: 700;
    font-size: 16px;
    color: var(--ptp-ink);
}
/* Besparing i listvyn = grönt (spec §4.2 — var blå chip). */
.pt-portal__product-row__drop {
    font-size: 12px;
    font-weight: 700;
    color: var(--ptp-success);
    background: transparent;
    padding: 0;
    border-radius: 0;
    white-space: nowrap;
}

.pt-portal__product-row__actions {
    display: flex;
    gap: 8px;
    align-items: center;
    flex-shrink: 0;
}

/* "Visa" link styled as ghost button — overrides for Astra theme. */
a.pt-portal__product-row__view,
.pt-portal__product-row__view {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    padding: 6px 12px !important;
    font-size: 13px !important;
    font-weight: 500 !important;
    background: var(--ptp-surface) !important;
    border: 1px solid var(--ptp-line) !important;
    border-radius: var(--ptp-radius-pill) !important;
    color: var(--ptp-ink) !important;
    cursor: pointer !important;
    text-decoration: none !important;
    text-transform: none !important;
    letter-spacing: normal !important;
    line-height: 1.2 !important;
    box-shadow: none !important;
    
    transition: 0.15s !important;
}
a.pt-portal__product-row__view:hover,
.pt-portal__product-row__view:hover {
    border-color: var(--ptp-line-strong) !important;
    background: var(--ptp-bg-tint) !important;
    color: var(--ptp-ink) !important;
    text-decoration: none !important;
}

/* Small icon button (trash) — matches design's .icon-btn--sm */
.pt-portal__product-row__icon-btn {
    width: 30px !important;
    height: 30px !important;
    border-radius: var(--ptp-radius) !important;
    background: var(--ptp-surface) !important;
    border: 1px solid var(--ptp-line) !important;
    color: var(--ptp-ink-mute) !important;
    display: grid !important;
    place-items: center !important;
    cursor: pointer !important;
    padding: 0 !important;
    margin: 0 !important;
    box-shadow: none !important;
    text-transform: none !important;
    transition: border-color 0.15s, color 0.15s, background 0.15s !important;
}
.pt-portal__product-row__icon-btn:hover {
    border-color: var(--ptp-line-strong) !important;
    color: var(--ptp-danger) !important;
    background: var(--ptp-danger-soft) !important;
}
.pt-portal__product-row__icon-btn svg { width: 14px !important; height: 14px !important; }

@media (max-width: 720px) {
    .pt-portal__product-row {
        grid-template-columns: 56px 1fr auto;
        grid-template-areas:
            "img info price"
            "img info actions";
        column-gap: 12px;
        row-gap: 4px;
        padding: 12px;
    }
    .pt-portal__product-row__img { grid-area: img; width: 56px; height: 56px; }
    .pt-portal__product-row__info { grid-area: info; min-width: 0; }
    .pt-portal__product-row__price { grid-area: price; align-items: flex-end; }
    .pt-portal__product-row__actions { grid-area: actions; justify-content: flex-end; }
    .pt-portal__product-row__title { font-size: 14px; }
}

/* Smooth grid <-> list transition: fade the entire results wrapper
   when the active view changes. The JS toggles data-view on the
   wrapper and we let the children fade instead of just snapping. */
.pt-portal__favorites-results {
    transition: opacity 0.18s ease;
}
.pt-portal__favorites-results [data-favorites-grid],
.pt-portal__favorites-results [data-favorites-rows] {
    animation: pt-view-fade 0.22s ease;
}
@keyframes pt-view-fade {
    from { opacity: 0; transform: translateY(4px); }
    to { opacity: 1; transform: translateY(0); }
}
.pt-portal__favorites-results [hidden] { display: none !important; }

/* ============================================================
   Sort dropdown (favorites filter)
   ============================================================ */
.pt-portal__sort {
    position: relative;
}

.pt-portal__sort-menu {
    position: absolute;
    top: calc(100% + 6px);
    right: 0;
    min-width: 200px;
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: 12px;
    box-shadow: 0 10px 28px rgba(17, 24, 39, 0.12);
    padding: 6px;
    z-index: 100;
    display: flex;
    flex-direction: column;
    gap: 2px;
    animation: pt-sort-fade 0.15s ease;
}
/* HTML [hidden] would normally set display:none, but our display:flex
   above wins specificity. Force-hide when the attribute is present. */
.pt-portal__sort-menu[hidden] { display: none !important; }
@keyframes pt-sort-fade {
    from { opacity: 0; transform: translateY(-4px); }
    to { opacity: 1; transform: translateY(0); }
}

.pt-portal__sort-option {
    background: none;
    border: none;
    padding: 8px 12px;
    border-radius: var(--ptp-radius-sm);
    
    font-size: 13px;
    color: var(--ptp-ink);
    text-align: left;
    cursor: pointer;
    transition: 0.15s;
    white-space: nowrap;
}
.pt-portal__sort-option:hover {
    background: var(--ptp-bg-tint);
}
/* Aktivt sorteringsval = 700 blå (KONTRAKT: JS sätter .is-active
   eller aria-checked="true" på valt alternativ). */
.pt-portal__sort-option.is-active,
.pt-portal__sort-option[aria-checked="true"] {
    color: #1d4ed8;
    font-weight: 700;
}

/* Icon-only tabs (used for grid/list view toggle) */
.pt-portal__tabs--icons .pt-portal__tab {
    padding: 7px 10px;
}
.pt-portal__tabs--icons .pt-portal__tab svg {
    display: block;
}

/* ============================================================
   Share-modal channels (favorites)
   ============================================================ */
.pt-share-modal--favorites .pt-share-modal__panel {
    max-width: 460px;
    padding: 32px 28px 24px;
    position: relative;
}

.pt-share-modal__head {
    text-align: left;
    margin-bottom: 20px;
    padding-right: 36px;
}
.pt-share-modal__icon {
    width: 44px;
    height: 44px;
    border-radius: var(--ptp-radius-pill);
    background: var(--ptp-accent-soft);
    color: var(--ptp-accent-deep);
    display: grid;
    place-items: center;
    margin-bottom: 14px;
}
.pt-share-modal--favorites h3 { margin: 0 0 4px !important; font-size: 17px !important; font-weight: 800 !important; }
.pt-share-modal__head p { margin: 0; font-size: 13.5px; color: var(--ptp-ink-mute); }

/* Kanal-cirklar (spec §4.3): 42px färgkodade tredjepartscirklar med
   etikett under — inga kort-ramar. !important behövs på bakgrunderna
   eftersom markupen sätter inline-style på channel-icon. */
.pt-share-modal__channels {
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    margin-top: 14px;
}
.pt-share-modal__channel {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 5px;
    width: 56px;
    padding: 0;
    background: transparent;
    border: 0;
    border-radius: 0;
    cursor: pointer;

    text-decoration: none;
    color: var(--ptp-ink);
    transition: 0.15s;
}
.pt-share-modal__channel:hover {
    border-color: transparent;
    background: transparent;
    color: var(--ptp-ink);
}
.pt-share-modal__channel-icon {
    width: 42px;
    height: 42px;
    border-radius: var(--ptp-radius-pill);
    display: grid;
    place-items: center;
    color: #ffffff !important;
    transition: box-shadow 0.15s ease;
}
.pt-share-modal__channel:hover .pt-share-modal__channel-icon {
    box-shadow: 0 4px 12px rgba(17, 24, 39, 0.2);
}
.pt-share-modal__channel-icon svg { stroke-width: 1.8; }
.pt-share-modal__channel[data-channel="mail"] .pt-share-modal__channel-icon { background: #374151 !important; }
.pt-share-modal__channel[data-channel="sms"] .pt-share-modal__channel-icon { background: #6b7280 !important; }
.pt-share-modal__channel[data-channel="whatsapp"] .pt-share-modal__channel-icon { background: #25D366 !important; }
.pt-share-modal__channel[data-channel="messenger"] .pt-share-modal__channel-icon { background: #0084FF !important; }
.pt-share-modal__channel[data-channel="facebook"] .pt-share-modal__channel-icon { background: #1877F2 !important; }
.pt-share-modal__channel[data-channel="more"] .pt-share-modal__channel-icon { background: var(--ptp-accent-deep) !important; }
.pt-share-modal__channel-label {
    font-size: 10.5px;
    color: var(--ptp-ink-mute);
    font-weight: 600;
}

/* ============================================================
   Block (legacy section wrapper)
   ============================================================ */
.pt-portal__block { margin-bottom: 18px; }

/* ============================================================
   Alert cards (Bevakningar): .pt-portal__alert-group definieras
   LÄNGRE NER i filen (sektionen "alert-stack/-group" nära slutet).
   Den äldre dubblettgenerationen som låg här är raderad (spec §2.7
   — den förlorade ändå mot den senare definitionen).
   ============================================================ */

/* ============================================================
   Wishlist cards
   ============================================================ */
/* Listkorten (prototypen rad 236-254): 4 kolumner desktop / 2 mobil,
   gap 14. Kortet är en KOLUMN: ikonplatta, namn+meta, knapprad. */
.pt-portal__wishlist-cards {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 14px;
    margin-bottom: 24px;
}
@media (max-width: 1280px) {
    .pt-portal__wishlist-cards { grid-template-columns: repeat(3, 1fr); }
}

.pt-portal__wishlist-card {
    border-radius: 14px;
    padding: 18px;
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 10px;
    text-decoration: none;
    color: inherit;
    min-width: 0;
}
.pt-portal__wishlist-card:hover {
    border-color: var(--ptp-line-strong);
    box-shadow: var(--ptp-shadow-hover);
}

.pt-portal__wishlist-card--expired { opacity: 0.7; }

/* Ikonplatta 40px i listans färg (prototypen rad 239). */
.pt-portal__wishlist-card-icon {
    width: 40px;
    height: 40px;
    display: grid;
    place-items: center;
    border-radius: 11px;
    flex-shrink: 0;
    font-size: 20px;
    line-height: 1;
}

.pt-portal__wishlist-card-info { min-width: 0; width: 100%; }

.pt-portal__wishlist-card-name {
    font-size: 14.5px;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--ptp-ink) !important;
    margin: 0 0 2px;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 8px;
}
.pt-portal__wishlist-card-name:hover { color: var(--ptp-accent-deep) !important; }

.pt-portal__wishlist-card-meta {
    font-size: 12px;
    color: var(--ptp-ink-mute);
    display: flex;
    gap: 6px;
    align-items: center;
    flex-wrap: wrap;
}

/* Knapprad (prototypen rad 244-247): textpills "Redigera"/"Dela"
   + diskret papperskorg längst till höger. */
.pt-portal__wishlist-card-actions {
    display: flex;
    gap: 6px;
    align-items: center;
    width: 100%;
    margin-top: 2px;
}
.pt-portal__wishlist-card-btn,
a.pt-portal__wishlist-card-btn,
button.pt-portal__wishlist-card-btn {
    display: inline-flex;
    align-items: center;
    color: var(--ptp-ink) !important;
    background: var(--ptp-surface);
    font-size: 11.5px;
    font-weight: 700;
    border-radius: var(--ptp-radius-pill);
    padding: 5px 12px;
    border: 1px solid rgba(17, 24, 39, 0.14);
    cursor: pointer;
    white-space: nowrap;
    line-height: 1.3;
    text-decoration: none !important;
    transition: border-color 0.15s ease;
}
.pt-portal__wishlist-card-btn:hover {
    border-color: #9ca3af;
}
.pt-portal__wishlist-card-trash {
    margin-left: auto;
    width: 28px;
    height: 28px;
    flex: none;
    border-radius: 999px;
    border: 1px solid var(--ptp-line);
    background: var(--ptp-surface);
    color: var(--ptp-ink-mute);
    display: grid;
    place-items: center;
    cursor: pointer;
    padding: 0;
    transition: border-color 0.15s ease, color 0.15s ease;
}
.pt-portal__wishlist-card-trash:hover {
    border-color: #fecaca;
    color: var(--ptp-danger);
}

/* Edit wishlist card */
.pt-portal__card--edit {
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    box-shadow: var(--ptp-shadow-sm);
}

.pt-portal__form-section {
    margin-bottom: 22px;
}

.pt-portal__label {
    display: block;
    font-size: 12px;
    font-weight: 500;
    color: var(--ptp-ink-soft);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    margin-bottom: 8px;
}

.pt-portal__field-hint {
    font-size: 12px;
    color: var(--ptp-ink-mute);
    margin: -2px 0 8px;
}

/* Tillbaka-länk (spec §4.3): blå 700. */
.pt-portal__back-link {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    font-weight: 700;
    color: var(--ptp-accent-deep) !important;
    text-decoration: none !important;
    margin-bottom: 10px;
}
.pt-portal__back-link:hover { color: #1d4ed8 !important; }

/* Ikonväljare (spec §4.3): grid med etiketter under varje ikon —
   täcker alla högtider. Vald = blå-soft bg + blå border. */
.pt-portal__icon-picker {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(64px, 1fr));
    gap: 8px;
    max-height: 230px;
    overflow-y: auto;
    padding: 2px;
}
.pt-portal__icon-option {
    width: auto;
    min-height: 60px;
    border: 1.5px solid var(--ptp-line);
    border-radius: 11px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    padding: 8px 2px 6px;
    cursor: pointer;
    transition: 0.15s;
    background: var(--ptp-surface);
}
.pt-portal__icon-option input { position: absolute; opacity: 0; pointer-events: none; }
.pt-portal__icon-option:hover { border-color: var(--ptp-line-strong); background: var(--ptp-bg-tint); }
.pt-portal__icon-option--selected,
.pt-portal__icon-option--selected:hover {
    border-color: var(--ptp-accent-deep);
    background: var(--ptp-tint-blue);
}
.pt-portal__icon-emoji { font-size: 22px; line-height: 1; }
/* Prototypens ikon-grid (rad 350-355): monokroma SVG-ikoner 19px —
   grå (#6b7280) i vila, #1d4ed8 när optionen är vald. Spannet
   .pt-portal__icon-emoji behåller sitt (frysta) klassnamn men bär
   numera SVG:n i stället för emoji (ägarfynd 2026-06-12). */
.pt-portal__icon-emoji svg { display: block; }
.pt-portal__icon-option .pt-portal__icon-emoji { color: #6b7280; }
.pt-portal__icon-option--selected .pt-portal__icon-emoji { color: #1d4ed8; }
/* Etikett under ikonen. .pt-wizard__icon-label = KONTRAKT-alias för
   Fas 2 (samma recept som befintliga .pt-portal__icon-label). */
.pt-portal__icon-label,
.pt-wizard__icon-label {
    font-size: 9.5px;
    font-weight: 600;
    color: var(--ptp-ink-mute);
    text-align: center;
    line-height: 1.2;
    text-transform: none;
    letter-spacing: 0;
}
.pt-portal__icon-option--selected .pt-portal__icon-label,
.pt-portal__icon-option--selected .pt-wizard__icon-label {
    color: #1d4ed8;
    font-weight: 700;
}

/* Color picker — RENA 30px-cirklar (prototypen rad 360-364):
   swatchen ÄR färgen, vald = blå border + fokusring. Etiketten
   behålls i markupen för skärmläsare men visas inte. */
.pt-portal__color-picker {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
}
.pt-portal__color-option {
    width: 30px;
    height: 30px;
    border: 2px solid var(--ptp-surface);
    border-radius: 999px;
    display: block;
    position: relative;
    padding: 0;
    cursor: pointer;
    transition: box-shadow 0.15s ease, border-color 0.15s ease;
    background: var(--color-primary, var(--ptp-accent));
    box-sizing: border-box;
}
.pt-portal__color-option input { position: absolute; opacity: 0; pointer-events: none; }
.pt-portal__color-option:hover { box-shadow: 0 0 0 2px var(--ptp-line-strong); }
/* Vald swatch: blå border + kanon-ring (prototypen). */
.pt-portal__color-option--selected,
.pt-portal__color-option--selected:hover {
    border-color: var(--ptp-accent-deep);
    box-shadow: var(--ptp-focus-ring);
}
.pt-portal__color-swatch {
    display: none; /* plattan målas på själva optionen */
}
.pt-portal__color-label {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}

/* Allow claims toggle row */
.pt-portal__toggle-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 16px;
    background: var(--ptp-bg-tint);
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius);
    cursor: pointer;
    transition: 0.15s;
}
.pt-portal__toggle-row:hover { border-color: var(--ptp-line-strong); }
.pt-portal__toggle-row input { position: absolute; opacity: 0; pointer-events: none; }
/* Toggle-spår 40x23 (spec §4.7): på = #2563eb, av = #d1d5db. */
.pt-portal__toggle-switch {
    --w: 40px;
    width: var(--w);
    height: 23px;
    border-radius: var(--ptp-radius-pill);
    background: var(--ptp-line-strong);
    border: none;
    position: relative;
    flex-shrink: 0;
    transition: background-color 0.15s ease;
}
.pt-portal__toggle-switch::after {
    content: '';
    position: absolute;
    top: 2.5px;
    left: 2.5px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: white;
    box-shadow: var(--ptp-shadow-sm);
    transition: left 0.15s ease;
}
.pt-portal__toggle-row input:checked + .pt-portal__toggle-switch {
    background: var(--ptp-accent-deep);
}
.pt-portal__toggle-row input:checked + .pt-portal__toggle-switch::after {
    left: calc(100% - 20.5px);
}
.pt-portal__toggle-text { display: flex; flex-direction: column; gap: 2px; flex: 1; }
.pt-portal__toggle-text strong {
    font-size: 14px;
    font-weight: 600;
    color: var(--ptp-ink);
}
.pt-portal__toggle-text small {
    font-size: 12px;
    color: var(--ptp-ink-mute);
}

/* ============================================================
   Redigeringsvyn — kort-header + produktrader (prototypen
   rad 256-309): ikonplatta 46px, namn, meta; rader med miniatyr
   42px, brand/namn, antal, pris 14/700, reserverad-chip, korg;
   "Totalt värde"-rad och lägg-till-rad med border-top.
   ============================================================ */
.pt-portal__edit-head {
    display: flex;
    align-items: flex-start;
    gap: 13px;
    margin-bottom: 22px;
    flex-wrap: wrap;
}
.pt-portal__edit-head-icon {
    width: 46px;
    height: 46px;
    flex: none;
    border-radius: 12px;
    display: grid;
    place-items: center;
    font-size: 22px;
    line-height: 1;
}
.pt-portal__edit-head-info {
    flex: 1;
    min-width: 160px;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.pt-portal__edit-name-input,
input.pt-portal__edit-name-input {
    font-size: 17px !important;
    font-weight: 800 !important;
    letter-spacing: -0.01em;
    padding: 6px 10px !important;
    max-width: 420px;
}
.pt-portal__edit-head-meta {
    font-size: 12.5px;
    color: var(--ptp-ink-mute);
}

/* Uppercase-listetikett (prototypen rad 279: "PRODUKTER"). */
.pt-portal__list-label {
    display: block;
    font-size: 11px;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: #9ca3af;
    margin-bottom: 8px;
}

/* Wishlist products list (in edit) — prototypens radrecept. */
.pt-portal__wishlist-products {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.pt-portal__wishlist-product-item {
    display: flex;
    gap: 12px;
    align-items: center;
    flex-wrap: wrap;
    padding: 10px 14px;
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: 12px;
    transition: border-color 0.15s ease;
}
.pt-portal__wishlist-product-item:hover { border-color: var(--ptp-line-strong); }
.pt-portal__wishlist-product-img {
    width: 42px;
    height: 42px;
    flex: none;
    object-fit: contain;
    border-radius: 9px;
    background: var(--ptp-card-softer);
    border: 1px solid #f3f4f6;
    box-sizing: border-box;
    padding: 2px;
}
.pt-portal__wishlist-product-img--custom {
    display: grid;
    place-items: center;
    color: var(--ptp-line-strong);
    background: var(--ptp-card-softer);
}
div.pt-portal__wishlist-product-img {
    display: grid;
    place-items: center;
    color: var(--ptp-line-strong);
}
.pt-portal__wishlist-product-info {
    min-width: 0;
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 1px;
}
.pt-portal__wishlist-product-brand {
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #9ca3af;
}
.pt-portal__wishlist-product-brand:empty { display: none; }
.pt-portal__wishlist-product-name {
    display: block;
    font-size: 13.5px;
    color: var(--ptp-ink);
    font-weight: 600;
    line-height: 1.3;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.pt-portal__wishlist-product-price {
    font-size: 14px;
    font-weight: 700;
    color: var(--ptp-ink);
    flex: none;
    display: block;
}
.pt-portal__wishlist-product-qty {
    display: flex;
    align-items: center;
    gap: 5px;
    flex: none;
}
.pt-portal__qty-suffix {
    font-size: 11.5px;
    color: var(--ptp-ink-mute);
}
.pt-portal__qty-input {
    width: 48px;
    padding: 5px 6px;
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius-sm);
    font-size: 13px;
    text-align: center;
    background: var(--ptp-surface);
    color: var(--ptp-ink);
}
/* Reserverad-chip (prototypen rad 295): grön soft-pill med bock. */
.pt-portal__reserved-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 10.5px;
    font-weight: 700;
    color: var(--ptp-success);
    background: var(--ptp-success-soft);
    border-radius: var(--ptp-radius-pill);
    padding: 3px 9px;
    flex: none;
    white-space: nowrap;
}
.pt-portal__wishlist-remove-product {
    width: 30px;
    height: 30px;
    flex: none;
    border-radius: 50%;
    background: transparent;
    border: 1px solid var(--ptp-line);
    color: var(--ptp-ink-mute);
    display: grid;
    place-items: center;
    cursor: pointer;
    transition: border-color 0.15s ease, color 0.15s ease;
}
.pt-portal__wishlist-remove-product:hover {
    background: transparent;
    border-color: #fecaca;
    color: var(--ptp-danger);
}

/* "Totalt värde"-raden (prototypen rad 301-304). */
.pt-portal__wishlist-total {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
    padding: 8px 4px 2px;
}
.pt-portal__wishlist-total span {
    font-size: 12px;
    color: var(--ptp-ink-mute);
}
.pt-portal__wishlist-total strong {
    font-size: 14px;
    font-weight: 700;
    color: var(--ptp-ink);
}

/* Lägg-till-raden i redigeringsvyn (prototypen rad 306-309). */
.pt-portal__edit-add-row {
    border-top: 1px solid #f3f4f6;
    padding-top: 14px;
    margin-bottom: 22px;
}

.pt-portal__empty-inline {
    color: var(--ptp-ink-mute);
    font-size: 13px;
    padding: 16px;
    text-align: center;
    background: var(--ptp-bg-tint);
    border-radius: var(--ptp-radius);
    margin: 0;
}

/* Add products picker (favorites grid as picker) */
.pt-portal__add-products-details {
    margin-bottom: 16px;
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius);
    background: var(--ptp-bg-tint);
    overflow: hidden;
}

.pt-portal__add-products-details[open] {
    background: var(--ptp-surface);
}

.pt-portal__add-products-summary {
    font-size: 13px;
    color: var(--ptp-ink);
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 14px 16px;
    font-weight: 500;
    list-style: none;
    transition: 0.15s;
}
.pt-portal__add-products-summary::-webkit-details-marker,
.pt-portal__add-products-summary::marker { display: none; }
.pt-portal__add-products-summary::after {
    content: '';
    margin-left: auto;
    width: 8px;
    height: 8px;
    border-right: 2px solid var(--ptp-ink-mute);
    border-bottom: 2px solid var(--ptp-ink-mute);
    transform: rotate(45deg);
    transition: transform 0.2s;
}
.pt-portal__add-products-details[open] .pt-portal__add-products-summary::after {
    transform: rotate(-135deg);
}

/* Favorit-picker som RADER (spec §4.3 steg 3 — prototypen). */
.pt-portal__add-products-grid {
    display: flex;
    flex-direction: column;
    gap: 6px;
    max-height: 200px;
    overflow-y: auto;
    padding: 0;
}
.pt-portal__add-products-details .pt-portal__add-products-grid {
    padding: 8px 16px 16px;
}

.pt-portal__add-product-btn,
.pt-portal__product-checkbox {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 12px;
    border: 1px solid var(--ptp-line);
    background: var(--ptp-surface);
    border-radius: 10px;
    text-align: left;
    cursor: pointer;

    transition: 0.15s;
    font-size: 13px;
    font-weight: 600;
    color: var(--ptp-ink);
    position: relative;
}

.pt-portal__add-product-btn img,
.pt-portal__product-checkbox img {
    width: 32px;
    height: 32px;
    object-fit: contain;
    border-radius: 6px;
    flex-shrink: 0;
    background: var(--ptp-bg-tint);
}

.pt-portal__add-product-btn span,
.pt-portal__product-checkbox span {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    line-height: 1.3;
}

.pt-portal__add-product-btn:hover,
.pt-portal__product-checkbox:hover {
    border-color: var(--ptp-line-strong);
    background: var(--ptp-surface);
}

.pt-portal__add-product-btn svg {
    flex-shrink: 0;
    color: var(--ptp-ink-mute);
}

.pt-portal__product-checkbox input { position: absolute; opacity: 0; pointer-events: none; }
/* Checkbox-ruta (spec §4.3 steg 3): synlig ruta först i raden —
   vald = blå fylld + vit bock. */
.pt-portal__check-icon {
    order: -1;
    width: 18px;
    height: 18px;
    padding: 2px;
    border-radius: 5px;
    border: 1.5px solid var(--ptp-line-strong);
    background: var(--ptp-surface);
    color: #ffffff;
    opacity: 1;
    box-sizing: border-box;
    transition: background-color 0.15s ease, border-color 0.15s ease;
    flex-shrink: 0;
}
.pt-portal__product-checkbox:has(input:checked) {
    border-color: var(--ptp-accent-deep);
    background: var(--ptp-tint-blue);
}
.pt-portal__product-checkbox:has(input:checked) .pt-portal__check-icon {
    background: var(--ptp-accent-deep);
    border-color: var(--ptp-accent-deep);
}
.pt-portal__product-qty-create {
    width: 44px;
    padding: 4px 6px;
    border: 1px solid var(--ptp-line);
    border-radius: 6px;
    font-size: 12px;
    text-align: center;
    background: var(--ptp-bg);
    
}

.pt-portal__custom-product-row {
    display: flex;
    gap: 8px;
}
.pt-portal__custom-products-list {
    margin-top: 8px;
    display: flex;
    flex-direction: column;
    gap: 6px;
}
/* Egna önskemål som taggar (spec §4.3 — prototypen: grå chips). */
.pt-portal__custom-product-item {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 8px 6px 12px;
    background: var(--ptp-bg-tint);
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius-pill);
    color: #374151;
    font-size: 12px;
    font-weight: 600;
}
.pt-portal__custom-product-name { flex: 1; }
.pt-portal__custom-product-remove {
    background: var(--ptp-surface);
    border: none;
    color: #9ca3af;
    cursor: pointer;
    padding: 3px;
    display: grid;
    place-items: center;
    border-radius: 50%;
}
.pt-portal__custom-product-remove:hover {
    background: var(--ptp-surface);
    color: var(--ptp-danger);
}

.pt-portal__form-actions {
    display: flex;
    gap: 10px;
    align-items: center;
    flex-wrap: wrap;
    margin-top: 8px;
}

/* ============================================================
   Reviews list
   ============================================================ */
.pt-portal__reviews-list {
    display: flex;
    flex-direction: column;
    gap: 14px;
}

.pt-portal__review-card {
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius-lg);
    padding: 22px;
    box-shadow: var(--ptp-shadow-sm);
}

.pt-portal__review-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    margin-bottom: 12px;
    flex-wrap: wrap;
}

.pt-portal__review-product {
    display: flex;
    align-items: center;
    gap: 12px;
    text-decoration: none;
    color: inherit;
    min-width: 0;
}

.pt-portal__review-product-img {
    width: 56px;
    height: 56px;
    object-fit: contain;
    border-radius: var(--ptp-radius);
    background: #fff;
    padding: 4px;
    flex-shrink: 0;
    border: 1px solid var(--ptp-line);
    box-sizing: border-box;
}
.pt-portal__review-product-img--placeholder {
    display: grid;
    place-items: center;
    color: var(--ptp-ink-mute);
    background: var(--ptp-bg-tint);
    border: 1px solid var(--ptp-line);
}

/* Namn + datum i kolumn bredvid miniatyren (prototypen rad 931-934:
   produktnamn 13.5/700 över datumraden 11.5 #9ca3af). */
.pt-portal__review-product-text {
    display: flex;
    flex-direction: column;
    gap: 1px;
    min-width: 0;
}

.pt-portal__review-product-name {
    font-size: 13.5px;
    color: var(--ptp-ink);
    font-weight: 700;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    line-height: 1.3;
}

/* Förälderlösa omdömen (ägarfynd 2026-06-12): produkten är raderad
   från sajten → headern renderas som <span> (ingen länk, ingen tom
   href) med dämpat fallback-namn. Placeholder-bilden behålls. */
.pt-portal__review-product--gone { cursor: default; }
.pt-portal__review-product-name--gone {
    color: var(--ptp-ink-mute);
    font-weight: 600;
}

/* Betygsraden LYFT (spec §4.6): stjärnor 19px amber + betal 800. */
.pt-portal__review-rating {
    display: flex;
    align-items: center;
    gap: 2px;
    flex-shrink: 0;
    color: var(--ptp-amber);
}
.pt-portal__review-rating svg { width: 19px; height: 19px; }

/* KONTRAKT (Fas 2): siffer-betyget ("4,0") intill stjärnorna. */
.pt-portal__review-score {
    font-size: 15px;
    font-weight: 800;
    color: var(--ptp-ink);
    margin-left: 6px;
}

.pt-portal__review-title {

    font-size: 15px;
    font-weight: 700;
    color: var(--ptp-ink);
    margin: 0 0 6px;
    line-height: 1.3;
}

.pt-portal__review-content {
    font-size: 14px;
    color: var(--ptp-ink-soft);
    line-height: 1.55;
    margin: 0 0 12px;
}

/* Pros/cons (spec §4.6): SYNLIG yta gray-100 + border. */
.pt-portal__review-proscons {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 14px;
    margin: 0 0 14px;
    padding: 14px;
    background: var(--ptp-bg-tint);
    border: 1px solid var(--ptp-line);
    border-radius: 12px;
}
.pt-portal__review-pros strong,
.pt-portal__review-cons strong {
    display: block;
    font-size: 10.5px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    margin-bottom: 6px;
    color: var(--ptp-ink-soft);
}
.pt-portal__review-pros strong { color: var(--ptp-success); }
.pt-portal__review-cons strong { color: var(--ptp-danger); }
.pt-portal__review-proscons ul {
    margin: 0;
    padding-left: 18px;
    font-size: 12.5px;
    color: #1f2937;
    line-height: 1.5;
}
/* Plus gröna / minus röda (spec §4.6) — markörfärg per kolumn. */
.pt-portal__review-pros li::marker { color: var(--ptp-green); }
.pt-portal__review-cons li::marker { color: #ef4444; }

/* Ytan renderas numera ALLTID (gömd när tom) så att inline-
   redigeringen kan spegla nya punkter utan reload. hidden-attributet
   måste vinna över author-display:grid ovan (UA:ns [hidden]-regel
   förlorar annars mot den). */
.pt-portal__review-proscons[hidden] { display: none; }

/* Footerrad (prototypen rad 962-966): hjälpsam-räknaren till vänster,
   ghost "Redigera" + danger-ghost "Ta bort" (pills MED text) till
   höger. Datumet bor i headern, inte här. */
.pt-portal__review-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    border-top: 1px solid var(--ptp-bg-tint);
    padding-top: 12px;
    margin-top: 4px;
    flex-wrap: wrap;
}
.pt-portal__review-date {
    font-size: 11.5px;
    color: #9ca3af;
}

.pt-portal__review-actions {
    display: flex;
    gap: 10px;
    align-items: center;
}

.pt-portal__review-helpful {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 12px;
    color: #9ca3af;
}

/* Ghost-pill "Redigera" (prototypen rad 964: 12/700 #111827,
   border rgba(17,24,39,0.14), hover border #9ca3af). */
.pt-portal__review-edit-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 6px 14px;
    border-radius: var(--ptp-radius-pill);
    font-size: 12px;
    font-weight: 700;
    line-height: 1.2;
    color: #111827;
    background: transparent;
    border: 1px solid rgba(17, 24, 39, 0.14);
    cursor: pointer;
    white-space: nowrap;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.pt-portal__review-edit-btn:hover {
    color: #111827;
    background: transparent;
    border-color: #9ca3af;
}

/* Danger-ghost-PILL "Ta bort" MED text (prototypen rad 965 +
   ägarfynd 2026-06-12 — inte längre bara en rund röd ikon):
   border #fecaca, text #dc2626, hover bg #fef2f2. */
.pt-portal__review-delete {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    width: auto;
    height: auto;
    padding: 6px 14px;
    border-radius: var(--ptp-radius-pill);
    font-size: 12px;
    font-weight: 700;
    line-height: 1.2;
    background: none;
    border: 1px solid #fecaca;
    color: var(--ptp-danger);
    cursor: pointer;
    transition: 0.15s;
    white-space: nowrap;
}
.pt-portal__review-delete:hover {
    background: var(--ptp-danger-soft);
    border-color: #fecaca;
    color: var(--ptp-danger);
}

/* Inline-redigeringsläge (ägarfynd 2026-06-12): kortet BYTER helt
   till redigeringsläge — formuläret ersätter rubrik + text + pros/
   cons-ytan + footern medan det är öppet (pros/cons redigeras numera
   i formen, så läs-ytan får inte ligga kvar och dubblera). Soft-yta
   gray-100 + border per prototypens formspråk. */
.pt-portal__review-edit-form {
    display: none;
    flex-direction: column;
    gap: 12px;
    margin: 0 0 14px;
    padding: 14px;
    background: var(--ptp-bg-tint);
    border: 1px solid var(--ptp-line);
    border-radius: 12px;
}
.pt-portal__review-card.is-editing .pt-portal__review-edit-form {
    display: flex;
}
.pt-portal__review-card.is-editing .pt-portal__review-title,
.pt-portal__review-card.is-editing .pt-portal__review-content,
.pt-portal__review-card.is-editing .pt-portal__review-proscons,
.pt-portal__review-card.is-editing .pt-portal__review-footer {
    display: none;
}
.pt-portal__review-edit-form .pt-portal__form-section {
    display: flex;
    flex-direction: column;
    gap: 5px;
    margin: 0;
}
.pt-portal__review-edit-textarea {
    resize: vertical;
    min-height: 90px;
    font-family: inherit;
}
.pt-portal__review-edit-form .pt-portal__form-actions {
    display: flex;
    gap: 8px;
    align-items: center;
    margin: 0;
}
.pt-portal__review-edit-stars {
    display: flex;
    gap: 2px;
}
.pt-portal__review-edit-star {
    background: none !important;
    border: 0 !important;
    padding: 2px !important;
    margin: 0 !important;
    box-shadow: none !important;
    line-height: 0;
    color: #e5e7eb;
    cursor: pointer;
    transition: color 0.1s ease, transform 0.1s ease;
}
.pt-portal__review-edit-star:hover { transform: scale(1.08); }
.pt-portal__review-edit-star.is-on { color: var(--ptp-amber); }
.pt-portal__review-edit-star svg { display: block; fill: currentColor; }

/* Fördelar/nackdelar i redigeringsläget (ägarkrav 2026-06-12): samma
   taggrad-inmatning som produktsidans omdömesformulär (Enter lägger
   till, max 5, kryss tar bort). Chipboxen är input-ytan: samma bg/
   border/fokusring som .pt-portal__input (spec §2.3 — EN fokusring). */
.pt-portal__review-chipbox {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    padding: 6px 10px;
    background: var(--ptp-bg);
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius);
    cursor: text;
    transition: 0.15s;
}
.pt-portal__review-chipbox:focus-within {
    border-color: var(--ptp-accent-deep);
    background: var(--ptp-surface);
    box-shadow: var(--ptp-focus-ring);
}
.pt-portal__review-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 8px 4px 10px;
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius-pill);
    font-size: 12px;
    font-weight: 600;
    color: var(--ptp-ink);
    line-height: 1.2;
}
/* Kryss-knappen i chipen — samma Astra-säkra nollning som stjärnorna
   (temat sätter annars bg/padding/skugga på button). */
.pt-portal__review-chip button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 16px;
    height: 16px;
    background: none !important;
    border: 0 !important;
    padding: 0 !important;
    margin: 0 !important;
    box-shadow: none !important;
    color: var(--ptp-ink-mute);
    cursor: pointer;
    line-height: 0;
    transition: color 0.15s ease;
}
.pt-portal__review-chip button:hover { color: var(--ptp-danger); }
/* Själva textfältet är borderlöst inne i chipboxen (boxen bär
   border + fokusring via :focus-within). */
.pt-portal__review-chipbox input[data-edit-chip-input] {
    flex: 1;
    min-width: 120px;
    border: 0 !important;
    background: transparent !important;
    padding: 4px 2px !important;
    margin: 0 !important;
    font-size: 13px;
    color: var(--ptp-ink);
    outline: none !important;
    box-shadow: none !important;
}
.pt-portal__review-chip-hint {
    margin: 4px 0 0;
    font-size: 11px;
    color: var(--ptp-ink-mute);
}
/* Fältens labels bär roll-färgerna — samma gröna/röda som läs-ytan. */
.pt-portal__review-edit-form .pt-portal__label--pros { color: var(--ptp-success); }
.pt-portal__review-edit-form .pt-portal__label--cons { color: var(--ptp-danger); }

.pt-portal__review-edit-status {
    font-size: 12.5px;
    font-weight: 600;
    color: var(--ptp-danger);
}

/* Återanvändbar danger-ghost-pill (KONTRAKT — t.ex. "Ta bort" i
   omdömes-footern och "Radera mitt konto" i Inställningar). */
.pt-portal__btn-ghost-danger {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 7px 15px;
    border-radius: var(--ptp-radius-pill);
    font-size: 12.5px;
    font-weight: 700;
    color: var(--ptp-danger);
    background: transparent;
    border: 1px solid #fecaca;
    cursor: pointer;
    white-space: nowrap;
    text-decoration: none;
    transition: 0.15s;
    line-height: 1.2;
}
.pt-portal__btn-ghost-danger:hover {
    background: var(--ptp-danger-soft);
    color: var(--ptp-danger);
}

/* ============================================================
   Settings sections
   ============================================================ */
.pt-portal__settings { display: flex; flex-direction: column; gap: 18px; max-width: 760px; }

.pt-portal__settings-section {
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius-lg);
    padding: 24px 26px;
    box-shadow: var(--ptp-shadow-sm);
}

.pt-portal__settings-section-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 18px;
}
.pt-portal__settings-section-header svg {
    width: 18px;
    height: 18px;
    color: var(--ptp-accent-deep);
    stroke-width: 1.8;
    flex-shrink: 0;
}
.pt-portal__settings-section-header h3 {
    margin: 0 !important;

    font-size: 14.5px !important;
    font-weight: 700 !important;
    color: var(--ptp-ink) !important;
    letter-spacing: -0.01em;
}

.pt-portal__settings-list {
    display: flex;
    flex-direction: column;
    gap: 0;
}

.pt-portal__settings-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 14px 0;
    border-bottom: 1px solid var(--ptp-line);
    text-decoration: none;
    color: inherit;
}
.pt-portal__settings-row:last-child { border-bottom: none; padding-bottom: 0; }
.pt-portal__settings-row:first-child { padding-top: 0; }

.pt-portal__settings-row-info {
    display: flex;
    align-items: center;
    gap: 10px;
    flex: 1;
    min-width: 0;
}

.pt-portal__settings-row-title {
    display: block;
    font-size: 14px;
    font-weight: 500;
    color: var(--ptp-ink);
    margin: 0 0 2px;
}

.pt-portal__settings-row-desc {
    display: block;
    font-size: 12.5px;
    color: var(--ptp-ink-mute);
    line-height: 1.45;
}
.pt-portal__settings-row-desc--connected { color: var(--ptp-success); font-weight: 600; }

.pt-portal__settings-row-action {
    background: none;
    border: none;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    color: var(--ptp-ink-mute);
    cursor: pointer;
    display: grid;
    place-items: center;
    transition: 0.15s;
}
.pt-portal__settings-row-action:hover {
    background: var(--ptp-bg-tint);
    color: var(--ptp-ink);
}
.pt-portal__settings-row--expanded .pt-portal__settings-row-action svg {
    transform: rotate(180deg);
}

.pt-portal__settings-row--link svg { color: var(--ptp-ink-mute); }
.pt-portal__settings-row--link:hover .pt-portal__settings-row-title { color: var(--ptp-accent-deep); }

.pt-portal__settings-row-locked {
    color: var(--ptp-ink-mute);
}

.pt-portal__settings-expand {
    padding: 16px 0 4px;
}

/* Providerikon på SYNLIG platta (spec §4.7): gray-100 + border. */
.pt-portal__provider-icon {
    width: 36px;
    height: 36px;
    border-radius: 10px;
    background: var(--ptp-bg-tint);
    border: 1px solid var(--ptp-line);
    display: grid;
    place-items: center;
    flex-shrink: 0;
    overflow: hidden;
}
.pt-portal__provider-icon svg { width: 22px; height: 22px; }

.pt-portal__provider-badge {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    color: var(--ptp-success);
    background: var(--ptp-success-soft);
}

/* Toggle (settings) — 40x23 (spec §4.7): på #2563eb, av #d1d5db. */
.pt-portal__toggle {
    width: 40px;
    height: 23px;
    position: relative;
    flex-shrink: 0;
}
.pt-portal__toggle-input {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}
.pt-portal__toggle-slider {
    position: absolute;
    inset: 0;
    background: var(--ptp-line-strong);
    border-radius: var(--ptp-radius-pill);
    cursor: pointer;
    transition: background-color 0.15s ease;
}
.pt-portal__toggle-slider::after {
    content: '';
    position: absolute;
    top: 2.5px;
    left: 2.5px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: white;
    box-shadow: var(--ptp-shadow-sm);
    transition: left 0.15s ease;
}
.pt-portal__toggle-input:checked ~ .pt-portal__toggle-slider {
    background: var(--ptp-accent-deep);
}
.pt-portal__toggle-input:checked ~ .pt-portal__toggle-slider::after {
    left: calc(100% - 20.5px);
}

/* Spara-kvitto (spec §4.7, KONTRAKT med portal.js): grön chip
   "Ändringar sparade" som visas i 2,5 s. */
.pt-portal__saved-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 700;
    color: var(--ptp-success);
    background: var(--ptp-success-soft);
    border-radius: var(--ptp-radius-pill);
    padding: 4px 12px;
}
.pt-portal__saved-chip svg { width: 11px; height: 11px; flex: none; }

/* Member info card (settings) */
.pt-portal__card--member { padding: 24px; }
.pt-portal__member-header {
    display: flex;
    align-items: center;
    gap: 13px;
}
/* Member-avatar = ETT avatar-recept (spec §3/§4.7). */
.pt-portal__member-avatar {
    width: 46px;
    height: 46px;
    border-radius: 50%;
    background: linear-gradient(135deg, #1b3152, #2563eb);
    display: grid;
    place-items: center;

    font-weight: 800;
    font-size: 15px;
    color: #ffffff;
    border: 0;
    flex-shrink: 0;
    line-height: 1;
    text-transform: uppercase;
    object-fit: cover;
}
.pt-portal__member-info { min-width: 0; }
.pt-portal__member-name {

    font-size: 14.5px;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--ptp-ink);
    margin: 0 0 2px;
}
.pt-portal__member-since {
    font-size: 12px;
    color: var(--ptp-ink-mute);
    margin: 0;
}

/* Profile form fields */
.pt-portal__form-grid {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 14px;
    margin-bottom: 16px;
}

.pt-portal__field {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.pt-portal__field label {
    font-size: 12px;
    font-weight: 500;
    color: var(--ptp-ink-soft);
    text-transform: uppercase;
    letter-spacing: 0.06em;
}

.pt-portal__input,
.pt-portal__field input,
.pt-portal__field select,
.pt-portal__field textarea {
    width: 100%;
    padding: 10px 14px;
    border: 1px solid var(--ptp-line);
    background: var(--ptp-bg);
    border-radius: var(--ptp-radius);
    
    font-size: 14px;
    color: var(--ptp-ink);
    transition: 0.15s;
    box-sizing: border-box;
    outline: none;
}

/* EN fokusring för hela kontot (spec §2.3). */
.pt-portal__input:focus,
.pt-portal__field input:focus,
.pt-portal__field select:focus,
.pt-portal__field textarea:focus {
    border-color: var(--ptp-accent-deep);
    background: var(--ptp-surface);
    box-shadow: var(--ptp-focus-ring);
}

.pt-portal__input--name {
    font-size: 16px;
    padding: 14px 16px;
    border-width: 1.5px;
    background: var(--ptp-surface);
}

/* Readonly-fält SYNLIGA (spec §4.7): gray-100 + border. */
.pt-portal__field--readonly .pt-portal__input,
.pt-portal__field--readonly input {
    background: var(--ptp-bg-tint);
    border-color: var(--ptp-line);
    color: var(--ptp-ink-soft);
}

/* ============================================================
   Tomlägesstandard (spec §2.6): 1.5px dashed #d1d5db, radius 16,
   ikoncirkel 48px i VYNS tint, rubrik 15px/700, blå pill-CTA.
   ============================================================ */
.pt-portal__empty-state {
    text-align: center;
    padding: 48px 28px;
    background: transparent;
    border: 1.5px dashed var(--ptp-line-strong);
    border-radius: 16px;
    color: var(--ptp-ink-mute);
}

.pt-portal__empty-icon {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: var(--ptp-bg-tint);
    display: grid;
    place-items: center;
    margin: 0 auto 14px;
    color: var(--ptp-ink-soft);
    padding: 13px;
    box-sizing: border-box;
}
.pt-portal__empty-icon--small {
    width: 40px;
    height: 40px;
    padding: 10px;
    margin-bottom: 12px;
}

/* Vy-tint på tomlägets ikoncirkel — via sektionswrappern (finns i
   markup) ELLER modifierare (KONTRAKT för ytor utan wrapper). */
.pt-portal__favorites .pt-portal__empty-icon,
.pt-portal__empty-icon--favorites {
    background: var(--ptp-tint-rose);
    color: var(--ptp-rose);
}
.pt-portal__alerts .pt-portal__empty-icon,
.pt-portal__empty-icon--alerts {
    background: var(--ptp-tint-amber);
    color: var(--ptp-amber);
}
.pt-portal__wishlists .pt-portal__empty-icon,
.pt-portal__empty-icon--wishlists {
    background: var(--ptp-tint-blue);
    color: var(--ptp-accent-deep);
}
.pt-portal__reviews .pt-portal__empty-icon,
.pt-portal__empty-icon--reviews {
    background: var(--ptp-tint-sage);
    color: var(--ptp-green);
}

.pt-portal__empty-state h3 {

    font-weight: 700 !important;
    font-size: 15px !important;
    color: var(--ptp-ink) !important;
    margin: 0 0 6px !important;
}
.pt-portal__empty-state p {
    color: var(--ptp-ink-mute);
    margin: 0 0 20px;
    font-size: 13px;
    line-height: 1.55;
    max-width: 340px;
    margin-left: auto;
    margin-right: auto;
}
.pt-portal__empty-state--compact { padding: 36px 20px; }
.pt-portal__empty-state--inline {
    padding: 20px;
    border-style: solid;
    border-width: 1px;
    background: var(--ptp-bg-tint);
    border-color: var(--ptp-line);
    border-radius: var(--ptp-radius);
}

/* ============================================================
   Laddningsstandard (spec §2.6) — EN spinner + skeleton för hela
   kontot. KONTRAKT-klasser: .pt-portal__spinner / .pt-portal__skeleton.
   ============================================================ */
.pt-portal__spinner {
    display: inline-block;
    width: 22px;
    height: 22px;
    flex: none;
    border: 3px solid var(--ptp-accent-soft);
    border-top-color: var(--ptp-accent-deep);
    border-radius: 50%;
    box-sizing: border-box;
    animation: pt-portal-spin 0.8s linear infinite;
}
@keyframes pt-portal-spin {
    to { transform: rotate(360deg); }
}

.pt-portal__skeleton {
    position: relative;
    overflow: hidden;
    background: var(--ptp-line);
    border-radius: 8px;
    min-height: 12px;
}
.pt-portal__skeleton::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(90deg, transparent, var(--ptp-bg-tint), transparent);
    animation: pt-portal-skeleton 1.2s ease-in-out infinite;
}
@keyframes pt-portal-skeleton {
    from { transform: translateX(-100%); }
    to { transform: translateX(100%); }
}
@media (prefers-reduced-motion: reduce) {
    .pt-portal__spinner { animation-duration: 1.6s; }
    .pt-portal__skeleton::after { animation: none; }
}

/* ============================================================
   Modals
   ============================================================ */
.pt-modal,
#pt-delete-modal,
.pt-share-modal {
    position: fixed;
    inset: 0;
    background: rgba(17, 24, 39, 0.4);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    z-index: 99999;
    display: grid;
    place-items: center;
    padding: 20px;
    animation: pt-modal-fade 0.2s ease;
}

.pt-share-modal[hidden] { display: none; }

@keyframes pt-modal-fade { from { opacity: 0; } to { opacity: 1; } }

.pt-modal__content,
.pt-share-modal__panel {
    background: var(--ptp-surface);
    border-radius: 16px;
    width: 100%;
    max-width: 460px;
    padding: 24px;
    box-shadow: 0 20px 50px rgba(17, 24, 39, 0.25);
    animation: pt-modal-in 0.25s ease;
    position: relative;
}

@keyframes pt-modal-in {
    from { transform: translateY(8px); opacity: 0; }
    to { transform: translateY(0); opacity: 1; }
}

.pt-modal__content h3,
.pt-share-modal__panel h3 {

    font-size: 17px !important;
    font-weight: 800 !important;
    margin: 0 0 6px !important;
    color: var(--ptp-ink) !important;
}

.pt-modal__content p,
.pt-share-modal__panel p {
    color: var(--ptp-ink-mute);
    margin: 0 0 18px;
    font-size: 14px;
}

.pt-modal__actions {
    display: flex;
    gap: 10px;
    justify-content: flex-end;
    margin-top: 8px;
    flex-wrap: wrap;
}

.pt-share-modal__header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 16px;
}
.pt-share-modal__header-titles {
    display: flex;
    flex-direction: column;
    gap: 3px;
    flex: 1;
    min-width: 0;
}
/* Underrad i delningsmodalen (prototypen rad 1161). */
.pt-share-modal__panel p.pt-share-modal__desc,
.pt-share-modal__desc {
    margin: 0;
    font-size: 12.5px;
    color: var(--ptp-ink-mute);
}
/* Uppercase-sektionsetikett ("DELA VIA", prototypen rad 1170). */
.pt-share-modal__section-label {
    display: block;
    font-size: 11px;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: #9ca3af;
    margin: 0 0 8px;
}

.pt-share-modal__close {
    background: none;
    border: none;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    color: var(--ptp-ink-mute);
    cursor: pointer;
    display: grid;
    place-items: center;
    transition: 0.15s;
    font-size: 22px;
    line-height: 1;
}
.pt-share-modal__close:hover {
    background: var(--ptp-bg-tint);
    color: var(--ptp-ink);
}

.pt-share-modal__link-row {
    display: flex;
    gap: 8px;
    margin-bottom: 16px;
    padding: 6px 6px 6px 14px;
    background: var(--ptp-bg-tint);
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius);
    align-items: center;
}
.pt-share-modal__link-input {
    flex: 1;
    padding: 6px 0;
    border: none;
    background: transparent;
    
    font-size: 13px;
    color: var(--ptp-ink);
    outline: none;
    min-width: 0;
}
/* Kopiera-knappen: blå TEXT-pill "Kopiera" (prototypen rad 1167).
   .is-copied = grönt kvitto "Kopierad!" i 2 s (KONTRAKT med
   inline-JS som växlar texten via data-attribut). */
.pt-share-modal__copy-btn {
    padding: 7px 15px;
    font-size: 12px;
    font-weight: 700;
    color: #ffffff;
    background: var(--ptp-accent-deep);
    border: none;
    border-radius: var(--ptp-radius-pill);
    cursor: pointer;
    white-space: nowrap;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    transition: background-color 0.15s ease;
}
.pt-share-modal__copy-btn:hover {
    background: #1d4ed8;
}
.pt-share-modal__copy-btn.is-copied,
.pt-share-modal__copy-btn.is-copied:hover {
    background: var(--ptp-green);
}

/* Kanal-cirklar i önskeliste-delningsmodalen (spec §4.3): 42px
   färgkodade tredjepartscirklar med vit glyf — ikonens cirkelplatta
   målas direkt på svg-elementet (markupen är knapp + svg).
   KONTRAKT (Fas 2): etikett under = .pt-share-modal__icon-label. */
.pt-share-modal__socials,
.pt-share-modal__socials--icons {
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    margin-bottom: 18px;
}

.pt-share-modal__icon-btn {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 5px;
    width: 56px;
    padding: 0;
    background: transparent;
    border: 0;
    border-radius: 0;
    color: var(--ptp-ink-mute);
    text-decoration: none;
    cursor: pointer;
    transition: 0.15s;
    font-size: 10.5px;
    font-weight: 600;
}
.pt-share-modal__icon-btn:hover {
    border-color: transparent;
    color: var(--ptp-ink);
}
.pt-share-modal__icon-btn svg {
    width: 42px;
    height: 42px;
    padding: 11px;
    border-radius: 999px;
    box-sizing: border-box;
    background: #6b7280;
    color: #ffffff;
    transition: box-shadow 0.15s ease;
}
.pt-share-modal__icon-btn:hover svg {
    box-shadow: 0 4px 12px rgba(17, 24, 39, 0.2);
}
.pt-share-modal__icon-btn--whatsapp { color: var(--ptp-ink-mute); }
.pt-share-modal__icon-btn--whatsapp svg { background: #25D366; }
.pt-share-modal__icon-btn--messenger { color: var(--ptp-ink-mute); }
.pt-share-modal__icon-btn--messenger svg { background: #0084FF; }
.pt-share-modal__icon-btn--sms { color: var(--ptp-ink-mute); }
.pt-share-modal__icon-btn--sms svg { background: #6b7280; }
.pt-share-modal__icon-btn--facebook { color: var(--ptp-ink-mute); }
.pt-share-modal__icon-btn--facebook svg { background: #1877F2; }
.pt-share-modal__icon-btn--email { color: var(--ptp-ink-mute); }
.pt-share-modal__icon-btn--email svg { background: #374151; }
.pt-share-modal__icon-label {
    font-size: 10.5px;
    font-weight: 600;
    color: var(--ptp-ink-mute);
}

.pt-share-modal__email-section {
    border-top: 1px solid #f3f4f6;
    padding-top: 14px;
}
/* "SKICKA MED E-POST" — samma uppercase-recept som "DELA VIA". */
.pt-share-modal__email-label,
.pt-share-modal__panel p.pt-share-modal__email-label {
    font-size: 11px;
    color: #9ca3af;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    margin: 0 0 8px;
    font-weight: 800;
}
.pt-share-modal__email-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-bottom: 8px;
}
.pt-share-modal__email-tags:empty { display: none; }
.pt-share-modal__email-tag {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    background: var(--ptp-tint-blue);
    color: #1d4ed8;
    border-radius: var(--ptp-radius-pill);
    font-size: 12px;
    font-weight: 600;
}
.pt-share-modal__email-tag button {
    background: none;
    border: none;
    color: #1d4ed8;
    font-size: 16px;
    cursor: pointer;
    padding: 0;
    line-height: 1;
}
.pt-share-modal__email-tag button:hover { color: var(--ptp-danger); }

.pt-share-modal__email-form {
    display: flex;
    gap: 8px;
}
.pt-share-modal__email-form input {
    flex: 1;
    padding: 10px 14px;
    border: 1px solid var(--ptp-line);
    background: var(--ptp-bg);
    border-radius: var(--ptp-radius);
    
    font-size: 14px;
    outline: none;
    transition: 0.15s;
    color: var(--ptp-ink);
}
.pt-share-modal__email-form input:focus {
    border-color: var(--ptp-accent-deep);
    background: var(--ptp-surface);
    box-shadow: var(--ptp-focus-ring);
    outline: none;
}
.pt-share-modal__email-hint {
    font-size: 11px;
    color: var(--ptp-ink-mute);
    margin: 8px 0 0;
}

.pt-share-modal__status {
    font-size: 13px;
    padding: 10px 14px;
    border-radius: var(--ptp-radius);
    margin-top: 10px;
}
.pt-share-modal__status--ok { background: var(--ptp-success-soft); color: var(--ptp-success); }
.pt-share-modal__status--error { background: var(--ptp-danger-soft); color: var(--ptp-danger); }

/* ============================================================
   Login page (logged-out view)
   ============================================================ */
.pt-login {
    max-width: 460px;
    margin: 48px auto 64px;
    padding: 36px 32px 32px;
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius-xl);
    box-shadow: var(--ptp-shadow-lg);
    
    color: var(--ptp-ink);
}

.pt-login__header {
    text-align: center;
    margin-bottom: 28px;
}

.pt-login__header h2 {
    
    font-size: 26px;
    font-weight: 700;
    letter-spacing: -0.02em;
    margin: 0 0 6px;
    color: var(--ptp-ink);
}

.pt-login__header p {
    color: var(--ptp-ink-mute);
    margin: 0;
    font-size: 14px;
    line-height: 1.5;
}

.pt-login__error {
    background: var(--ptp-danger-soft);
    color: var(--ptp-danger);
    padding: 12px 14px;
    border-radius: var(--ptp-radius);
    margin-bottom: 16px;
    font-size: 13px;
}

.pt-login__methods { display: flex; flex-direction: column; gap: 12px; }

.pt-login__field { margin-bottom: 8px; }
.pt-login__field label {
    display: block;
    font-size: 12px;
    color: var(--ptp-ink-soft);
    margin-bottom: 6px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    font-weight: 500;
}
.pt-login__field input {
    width: 100%;
    padding: 12px 14px;
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius);
    font-size: 14px;
    background: var(--ptp-bg);
    box-sizing: border-box;
    
    color: var(--ptp-ink);
    transition: 0.15s;
}
.pt-login__field input:focus {
    outline: none;
    border-color: var(--ptp-accent-deep);
    background: var(--ptp-surface);
    box-shadow: 0 0 0 4px var(--ptp-accent-softer);
}

.pt-login__btn {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 12px 18px;
    border-radius: var(--ptp-radius-pill);
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    transition: 0.15s;
    border: 1px solid transparent;
    
    line-height: 1.2;
}
.pt-login__btn:active { transform: none; }
.pt-login__btn--email {
    background: var(--ptp-ink);
    color: var(--ptp-bg);
    border-color: var(--ptp-ink);
}
.pt-login__btn--email:hover { background: #1f2937; }

.pt-login__btn--google,
.pt-login__btn--apple {
    background: var(--ptp-surface);
    color: var(--ptp-ink);
    border-color: var(--ptp-line);
}
.pt-login__btn--google:hover,
.pt-login__btn--apple:hover {
    /* Pinnad till gamla bg-tint-värdet — login-sidan ska INTE ändras
       (spec §1.4) trots att --ptp-bg-tint bytt värde. */
    background: #f9fafb;
    border-color: var(--ptp-line-strong);
}

.pt-login__divider {
    text-align: center;
    color: var(--ptp-ink-mute);
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    margin: 4px 0;
    position: relative;
}
.pt-login__divider::before,
.pt-login__divider::after {
    content: '';
    position: absolute;
    top: 50%;
    width: calc(50% - 30px);
    height: 1px;
    background: var(--ptp-line);
}
.pt-login__divider::before { left: 0; }
.pt-login__divider::after { right: 0; }
.pt-login__divider span { background: var(--ptp-surface); padding: 0 12px; }

.pt-login__social { display: flex; flex-direction: column; gap: 8px; }

.pt-login__footer {
    text-align: center;
    font-size: 12px;
    color: var(--ptp-ink-mute);
    margin-top: 20px;
    padding-top: 16px;
    border-top: 1px solid var(--ptp-line);
    line-height: 1.6;
}
.pt-login__footer a { color: var(--ptp-accent-deep); text-decoration: none; }
.pt-login__footer a:hover { text-decoration: underline; }

.pt-login__message {
    text-align: center;
    padding: 20px;
}
.pt-login__message h3 {
    
    font-size: 18px;
    font-weight: 500;
    color: var(--ptp-ink);
    margin: 12px 0 6px;
}
.pt-login__message p {
    font-size: 14px;
    color: var(--ptp-ink-mute);
    margin: 0;
}

/* ============================================================
   Favorite button (heart pill — used on product cards/popups)
   ============================================================ */
/* Favorit-hjärtan = ROSA (kanon §4, spec §2.5 — synkad med
   portal.css:724-758 som redan kör kanon-rosa). */
.pt-favorite-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 14px;
    border: 1px solid var(--ptp-line);
    background: var(--ptp-surface);
    color: var(--ptp-ink-soft);
    border-radius: var(--ptp-radius-pill);
    cursor: pointer;
    font-size: 13px;
    font-weight: 600;
    transition: 0.15s;

}
.pt-favorite-btn:hover {
    border-color: var(--ptp-rose);
    color: var(--ptp-rose);
}
.pt-favorite-btn--active {
    background: var(--ptp-tint-rose);
    color: var(--ptp-rose);
    border-color: var(--ptp-rose);
}
.pt-favorite-btn--active:hover {
    background: var(--ptp-tint-rose-line);
    color: var(--ptp-rose-deep);
}
.pt-favorite-btn .dashicons { font-size: 16px; width: 16px; height: 16px; line-height: 1; }

/* ============================================================
   Animations
   ============================================================ */
@keyframes pt-portal-pulse {
    0%, 100% { transform: scale(1); }
    50% { transform: scale(1.06); }
}

/* ============================================================
   Responsive
   ============================================================ */
@media (max-width: 1080px) {
    .pt-portal__form-grid { grid-template-columns: 1fr 1fr; }
}

/* (≤960px: sidomenyn döljs helt och tab-baren tar över — alla
   mobilregler är konsoliderade i ETT pass i mobilsektionen längre
   ner i filen. Det gamla pill-nav-blocket som låg här var dött —
   sidomenyn döljs ovillkorligt på mobil — och är raderat, spec §2.7.) */

@media (max-width: 720px) {
    .pt-portal__alert-group { padding: 18px; border-radius: 16px; }
    .pt-portal__alert-group-header { gap: 10px; padding-bottom: 12px; margin-bottom: 12px; }

    .pt-portal__review-card { padding: 18px; }
    .pt-portal__review-proscons { grid-template-columns: 1fr; gap: 10px; }
    .pt-portal__form-grid { grid-template-columns: 1fr; }
}

@media (max-width: 560px) {
    .pt-portal__stats-grid { grid-template-columns: 1fr 1fr; }
    .pt-portal__product-grid,
    .pt-portal__product-grid--full { grid-template-columns: 1fr 1fr; }
    .pt-portal__page-header { gap: 14px; margin-bottom: 22px; }
    .pt-portal__page-header h1 { font-size: 22px; }
    .pt-portal__settings-section { padding: 20px 18px; }
    .pt-portal__card { padding: 18px; }
}

@media (max-width: 420px) {
    .pt-portal__product-grid,
    .pt-portal__product-grid--full { grid-template-columns: 1fr 1fr; gap: 8px; }
    .pt-portal__hero-greeting { font-size: 22px; }
    .pt-portal__hero-sub { font-size: 13.5px; }
    .pt-portal__icon-picker { gap: 6px; }
    .pt-portal__color-picker { gap: 8px; }
}

/* ============================================================
   Utility classes
   ============================================================ */
.pt-portal__badge {
    display: inline-flex;
    align-items: center;
    font-size: 11px;
    font-weight: 600;
    padding: 2px 10px;
    border-radius: var(--ptp-radius-pill);
    background: var(--ptp-bg-tint);
    color: var(--ptp-ink-soft);
}
.pt-portal__badge--expired { background: var(--ptp-bg-tint); color: var(--ptp-ink-mute); }

/* ============================================================
   Portal v4: wishlist wizard + watch redesign
   ============================================================ */
.pt-wizard-modal[hidden] { display: none !important; }
.pt-wizard-modal {
    position: fixed;
    inset: 0;
    z-index: 100000;
    display: grid;
    place-items: center;
    padding: 20px;
    background: rgba(17, 24, 39, 0.5);
}
.pt-wizard-modal__panel {
    width: min(520px, 100%);
    max-height: min(760px, calc(100vh - 40px));
    overflow: auto;
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: 16px;
    box-shadow: 0 20px 50px rgba(17, 24, 39, 0.25);
    position: relative;
}
.pt-wizard-modal__close {
    position: absolute;
    top: 14px;
    right: 14px;
    z-index: 2;
    width: 34px !important;
    height: 34px !important;
    padding: 0 !important;
    border-radius: 999px !important;
    border: 1px solid var(--ptp-line) !important;
    background: var(--ptp-surface) !important;
    /* Svart, synligt kryss - utan explicit font-size/line-height
       nollades glyfen av temats knappstilar (ägarfynd 2026-06-12). */
    color: #111827 !important;
    font-size: 18px !important;
    line-height: 1 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    box-shadow: none !important;
}
.pt-wizard-modal__close:hover,
.pt-wizard-modal__close:focus-visible {
    border-color: var(--ptp-line-strong) !important;
    background: var(--ptp-bg-tint) !important;
    color: var(--ptp-ink) !important;
}
.pt-wizard {
    display: grid;
    gap: 0;
}
/* Wizard-head (prototypen rad 316-331): rubrik 17/800 + underrad,
   pips-raden under — ingen tonad yta, ingen border. */
.pt-wizard__head {
    display: flex;
    flex-direction: column;
    gap: 16px;
    align-items: stretch;
    padding: 24px 64px 0 24px;
    border-bottom: 0;
    background: transparent;
}
.pt-wizard__head-titles {
    display: flex;
    flex-direction: column;
    gap: 3px;
}
.pt-wizard__head h3 {
    margin: 0 !important;
    font-size: 17px !important;
    font-weight: 800 !important;
}
.pt-wizard__head-sub {
    margin: 0 !important;
    font-size: 12.5px !important;
    color: var(--ptp-ink-mute) !important;
}
/* Live-preview = mini-kort längst ner i modalen (prototypen rad
   405-414): uppercase-etikett + vit rad med border, ikonplatta i
   vald färg, namn + meta i kolumn. */
.pt-wizard__previewwrap {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin: 0 24px;
    border-top: 1px solid #f3f4f6;
    padding-top: 12px;
}
.pt-wizard__preview-label {
    font-size: 11px;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: #9ca3af;
}
.pt-wizard__preview {
    min-height: 0;
    border-radius: 12px;
    border: 1px solid var(--ptp-line);
    background: var(--ptp-surface);
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: flex-start;
    gap: 11px;
    padding: 10px 14px;
}
.pt-wizard__preview-emoji {
    font-size: 19px;
    line-height: 1;
    width: 38px;
    height: 38px;
    flex: none;
    display: grid;
    place-items: center;
    border-radius: 10px;
    background: color-mix(in oklab, var(--wishlist-preview-color, var(--ptp-accent)) 14%, #ffffff);
    /* SVG-ikonen (prototypen rad 408: ikon i vald färg på ljus platta). */
    color: var(--wishlist-preview-color, var(--ptp-accent-deep));
}
.pt-wizard__preview-emoji svg,
.pt-wizard__summary-emoji svg { display: block; }
.pt-wizard__summary-emoji { color: var(--wishlist-preview-color, var(--ptp-accent-deep)); }
.pt-portal__wishlist-card-icon span { display: grid; place-items: center; line-height: 1; }
.pt-portal__wishlist-card-icon svg,
.pt-portal__edit-head-icon svg { display: block; }
.pt-wizard__preview-text {
    display: flex;
    flex-direction: column;
    gap: 1px;
    min-width: 0;
}
.pt-wizard__summary-emoji {
    font-size: 22px;
    line-height: 1;
}
.pt-wizard__preview strong,
.pt-wizard__summary strong {
    font-size: 13.5px;
    font-weight: 700;
    color: var(--ptp-ink);
}
.pt-wizard__preview small,
.pt-wizard__summary span {
    color: var(--ptp-ink-mute);
    font-size: 11.5px;
}
/* Pips (prototypen rad 323-331): numrerade cirklar via CSS-counter —
   klar = fylld blå/vit siffra, aktiv = vit + 2px blå border + blå
   siffra, kommande = vit + grå border/siffra. Förbindelselinjerna
   FLEXAR mellan cirklarna (pipwrap flex:1); stegnamnet ligger
   längst till höger. */
.pt-wizard__progress {
    display: flex;
    align-items: center;
    gap: 0;
    counter-reset: pt-wizard-step;
}
.pt-wizard__pipwrap {
    display: flex;
    align-items: center;
    flex: 1;
    min-width: 0;
}
.pt-wizard__pipline {
    flex: 1;
    height: 2px;
    border-radius: 1px;
    background: var(--ptp-line);
    margin: 0 5px;
}
.pt-wizard__pip {
    counter-increment: pt-wizard-step;
    width: 28px !important;
    height: 28px !important;
    padding: 0 !important;
    border: 1.5px solid var(--ptp-line-strong) !important;
    border-radius: 999px !important;
    background: var(--ptp-surface) !important;
    color: #9ca3af !important;
    font-size: 12px !important;
    font-weight: 800 !important;
    line-height: 1 !important;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    position: relative;
    flex: none;
    box-sizing: border-box;
    cursor: pointer;
}
.pt-wizard__pip::before {
    content: counter(pt-wizard-step);
}
.pt-wizard__pip.is-done {
    background: var(--ptp-accent-deep) !important;
    border-color: var(--ptp-accent-deep) !important;
    color: #ffffff !important;
}
/* Linjen EFTER en klar pip blir blå (prototypens lineBg). */
.pt-wizard__pip.is-done + .pt-wizard__pipline {
    background: var(--ptp-accent-deep);
}
.pt-wizard__pip.is-active {
    background: var(--ptp-surface) !important;
    border: 2px solid var(--ptp-accent-deep) !important;
    color: #1d4ed8 !important;
}
/* Stegnamnet till höger om pipsen (prototypen rad 330). */
.pt-wizard__progress .pt-wizard__foot-step {
    flex: none;
    font-size: 12px;
    font-weight: 700;
    color: #374151;
    white-space: nowrap;
}
.pt-wizard__body {
    padding: 18px 24px;
}
.pt-wizard__panel {
    display: none;
}
.pt-wizard__panel.is-active {
    display: flex;
    flex-direction: column;
    gap: 18px;
}
.pt-wizard__panel h4 {
    margin: 0 !important;
    font-size: 16px !important;
    font-weight: 700 !important;
}
.pt-wizard__hint {
    margin: -10px 0 0;
    color: var(--ptp-ink-soft);
    font-size: 14px;
}
/* Steg 4-summeringen är redundant sedan förhandsvisningen alltid
   ligger längst ner i modalen (prototypen) — markupen behålls för
   JS-kontraktet (data-preview-*-summary) men visas inte. */
.pt-wizard__summary {
    display: none;
}
/* Fotrad (prototypen rad 415-427): Avbryt | spacer | Tillbaka +
   Nästa/Skapa — ingen border (preview-raden ovanför bär linjen). */
.pt-wizard__foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 16px 24px 24px;
    border-top: 0;
}
.pt-wizard__foot-spacer {
    flex: 1;
}
.pt-wizard__foot-step {
    font-size: 13px;
    color: var(--ptp-ink-mute);
}
.pt-wizard__actions {
    display: flex;
    gap: 8px;
    align-items: center;
}
/* Prototypen visar ingen Tillbaka-knapp på steg 1 — portal.js sätter
   disabled där, vi gömmer den helt. */
.pt-wizard__actions [data-wishlist-wizard-back][disabled] {
    display: none;
}
/* Wizardens knappar är kompaktare än portalens standardpills
   (prototypen rad 416-426: 13px, padding 8px 16/20px). Trippelklass
   för att vinna över Astra-passets tvåklass-!important. */
.pt-portal--sidebar .pt-wizard__foot .pt-portal__btn-outline,
.pt-portal--sidebar .pt-wizard__foot .pt-portal__cta-btn,
.pt-wizard__foot .pt-portal__btn-outline,
.pt-wizard__foot .pt-portal__cta-btn {
    padding: 8px 16px !important;
    font-size: 13px !important;
}
.pt-portal--sidebar .pt-wizard__foot .pt-portal__cta-btn,
.pt-wizard__foot .pt-portal__cta-btn {
    padding: 8px 20px !important;
}
/* Blå outline-variant ("Lägg till" i wizard-steget, prototypen
   rad 386): blå text + 1.5px blå border, hover blå-soft yta. */
.pt-portal__btn-outline--accent,
.pt-portal--sidebar .pt-portal__btn-outline--accent,
.pt-portal--sidebar button.pt-portal__btn-outline--accent {
    color: var(--ptp-accent-deep) !important;
    border: 1.5px solid var(--ptp-accent-deep) !important;
    background: var(--ptp-surface) !important;
}
.pt-portal__btn-outline--accent:hover,
.pt-portal--sidebar .pt-portal__btn-outline--accent:hover,
.pt-portal--sidebar button.pt-portal__btn-outline--accent:hover {
    background: var(--ptp-tint-blue) !important;
    border-color: var(--ptp-accent-deep) !important;
    color: var(--ptp-accent-deep) !important;
}
/* Pris i favorit-pickerns rader (prototypen rad 377). */
.pt-portal__product-checkbox .pt-portal__product-checkbox-price {
    display: inline;
    flex: none;
    font-size: 12.5px;
    font-weight: 700;
    color: var(--ptp-ink-mute);
    white-space: nowrap;
}
/* Datumfältet (v1.4.4): samma fältrecept som .pt-portal__input
   (prototypen steg 0: border #d1d5db, radius 10, vit yta, kanon-
   fokusring) - tidigare hade triggern mute-utseende och en
   :focus-visible som var identisk med hovern (brott mot
   fokusring-standarden). Kalender-popovern (__panel m.fl.) ersätter
   webbläsarens ostylbara native-picker; native-inputen ligger kvar
   dold som värdebärare (frysta id:n). */
.pt-date-field {
    width: 100% !important;
    display: flex !important;
    align-items: center !important;
    gap: 10px !important;
    min-height: 44px !important;
    padding: 10px 13px !important;
    border: 1px solid #d1d5db !important;
    border-radius: 10px !important;
    background: #ffffff !important;
    color: var(--ptp-ink-mute) !important;
    font-size: 13.5px !important;
    text-align: left !important;
    cursor: pointer;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.pt-date-field:hover {
    border-color: #9ca3af !important;
    background: #ffffff !important;
    color: var(--ptp-ink-mute) !important;
}
.pt-date-field:focus-visible {
    outline: none !important;
    border-color: #2563eb !important;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.4) !important;
    background: #ffffff !important;
}
.pt-date-field.has-value,
.pt-date-field.has-value:hover {
    color: var(--ptp-ink) !important;
}
.pt-date-field [data-date-value] {
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pt-date-field__clear {
    width: 22px;
    height: 22px;
    display: inline-grid;
    place-items: center;
    border-radius: 999px;
    background: var(--ptp-bg-tint);
    color: var(--ptp-ink-soft);
}
.pt-date-field__clear:hover {
    background: #e5e7eb;
    color: var(--ptp-ink);
}
.pt-date-field__native {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    opacity: 0 !important;
    overflow: hidden !important;
    clip: rect(0 0 0 0) !important;
    clip-path: inset(50%) !important;
    white-space: nowrap !important;
    pointer-events: none !important;
}
/* Popover-ankare: fältgruppen som triggern bor i (klassen sätts av
   portal.js vid init). */
.pt-date-field-anchor {
    position: relative;
}
.pt-date-field__panel {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    z-index: 60;
    width: 286px;
    max-width: 100%;
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 12px;
    box-shadow: 0 10px 28px rgba(17, 24, 39, 0.12);
    padding: 12px;
}
.pt-date-field__panel[hidden] {
    display: none !important;
}
.pt-date-field__nav {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: 8px;
}
.pt-date-field__nav-btn {
    width: 28px !important;
    height: 28px !important;
    padding: 0 !important;
    display: inline-grid;
    place-items: center;
    border: 1px solid #e5e7eb !important;
    border-radius: 999px !important;
    background: #ffffff !important;
    color: #6b7280 !important;
    cursor: pointer;
    box-shadow: none !important;
}
.pt-date-field__nav-btn:hover {
    border-color: #9ca3af !important;
    color: #111827 !important;
}
.pt-date-field__nav-btn:focus-visible {
    outline: none !important;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.4) !important;
}
.pt-date-field__nav-btn[disabled] {
    opacity: 0.35;
    cursor: default;
    pointer-events: none;
}
.pt-date-field__month {
    font-size: 13px;
    font-weight: 700;
    color: #111827;
    text-align: center;
    flex: 1;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.pt-date-field__grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
}
.pt-date-field__weekday {
    font-size: 10.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: #9ca3af;
    text-align: center;
    padding: 4px 0;
}
.pt-date-field__day {
    height: 32px !important;
    padding: 0 !important;
    border: 0 !important;
    border-radius: 8px !important;
    background: transparent !important;
    color: #1f2937 !important;
    font-size: 12.5px !important;
    font-weight: 600 !important;
    line-height: 1 !important;
    cursor: pointer;
    box-shadow: none !important;
}
.pt-date-field__day:hover {
    background: #f3f4f6 !important;
}
.pt-date-field__day:focus-visible {
    outline: none !important;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.4) !important;
}
.pt-date-field__day.is-today {
    box-shadow: inset 0 0 0 1.5px #d1d5db !important;
}
.pt-date-field__day.is-selected {
    background: #2563eb !important;
    color: #ffffff !important;
    font-weight: 700 !important;
}
.pt-date-field__day.is-selected:hover {
    background: #1d4ed8 !important;
}
.pt-date-field__day[disabled] {
    color: #d1d5db !important;
    cursor: default;
    pointer-events: none;
}
.pt-date-field__day--blank {
    pointer-events: none;
}
.pt-date-field__foot {
    display: flex;
    justify-content: flex-end;
    border-top: 1px solid #f3f4f6;
    margin-top: 8px;
    padding-top: 8px;
}
.pt-date-field__clear-btn {
    border: 0 !important;
    background: transparent !important;
    color: #6b7280 !important;
    font-size: 12px !important;
    font-weight: 700 !important;
    border-radius: 999px !important;
    padding: 5px 10px !important;
    cursor: pointer;
    box-shadow: none !important;
}
.pt-date-field__clear-btn:hover {
    background: #f3f4f6 !important;
    color: #111827 !important;
}
.pt-date-field__clear-btn:focus-visible {
    outline: none !important;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.4) !important;
}
/* "Ny lista" (prototypen rad 250-253): streckat kort, CENTRERAD
   kolumn — blå pluscirkel 38px + blå etikett 13.5/700.
   Hover: blå border + blå-soft yta. */
.pt-portal__wishlist-card--new,
button.pt-portal__wishlist-card--new {
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-height: 140px;
    background: transparent;
    border: 1.5px dashed var(--ptp-line-strong) !important;
    text-align: center;
    color: var(--ptp-ink-soft) !important;
    cursor: pointer;
}
.pt-portal__wishlist-card--new:hover {
    border-color: var(--ptp-accent-deep) !important;
    background: var(--ptp-tint-blue) !important;
    color: #1d4ed8 !important;
    box-shadow: none !important;
}
.pt-portal__wishlist-card-new-icon {
    width: 38px;
    height: 38px;
    display: grid;
    place-items: center;
    border-radius: 50%;
    background: var(--ptp-tint-blue);
    color: var(--ptp-accent-deep);
}
.pt-portal__wishlist-card-new-text {
    font-size: 13.5px;
    font-weight: 700;
    color: #1d4ed8;
}
.pt-portal__wishlist-shares {
    margin-top: 24px;
}
.pt-portal__share-rows {
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.pt-portal__share-row {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    gap: 12px;
    align-items: center;
    padding: 12px;
    border: 1px solid var(--ptp-line);
    border-radius: var(--ptp-radius);
    background: var(--ptp-surface);
}
.pt-portal__share-row:hover {
    border-color: var(--ptp-line-strong);
}
.pt-portal__share-avatar {
    width: 36px;
    height: 36px;
    display: grid;
    place-items: center;
    border-radius: 50%;
    background: var(--ptp-tint-sage);
    color: #047857;
    font-weight: 600;
}
.pt-portal__share-main {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.pt-portal__share-main strong,
.pt-portal__share-main small {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pt-portal__share-main small,
.pt-portal__share-meta {
    color: var(--ptp-ink-mute);
    font-size: 12px;
}
.pt-portal__alerts {
    display: flex;
    flex-direction: column;
}
.pt-portal__alerts > .pt-portal__page-header { order: 0; }
.pt-portal__watch-hero { order: 1; }
.pt-portal__alert-group--baskets { order: 2; }
.pt-portal__alert-group--products { order: 3; }
/* Watch-hero (spec §4.5, Alternativ A): NAVY varumärkesyta.
   Den döda original-gradienten + den ljusblå !important-plattan
   (tidigare sist i filen) är raderade (spec §2.7).
   KONTRAKT (Bevakningar/Fas 2): dekoren — tre koncentriska cirklar
   stroke #5196cc/#4682b4/#3b6e9e, opacity 0.18, uppe till höger —
   är en inline-SVG i markupen (se prototypen rad 732). */
.pt-portal__watch-hero {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 20px;
    align-items: center;
    margin-bottom: 22px;
    padding: 24px 28px;
    border: 0;
    border-radius: 16px;
    background: linear-gradient(135deg, #1b3152, #142540);
    position: relative;
    overflow: hidden;
}
.pt-portal__watch-hero-eyebrow {
    display: block;
    margin-bottom: 7px;
    color: rgba(255, 255, 255, 0.65);
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.1em;
}
.pt-portal__watch-hero h2 {
    margin: 0 !important;
    font-size: 23px !important;
    font-weight: 800 !important;
    line-height: 1.2 !important;
    letter-spacing: -0.01em !important;
    color: #ffffff !important;
}
.pt-portal__watch-hero p {
    max-width: 560px;
    margin: 7px 0 0;
    font-size: 13.5px;
    color: rgba(255, 255, 255, 0.72);
}
.pt-portal__watch-hero-stats {
    min-width: 0;
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    position: relative;
}
.pt-portal__watch-hero-stats div {
    padding: 12px 18px;
    border: 1px solid rgba(255, 255, 255, 0.16);
    border-radius: 12px;
    background: rgba(255, 255, 255, 0.08);
    min-width: 84px;
}
.pt-portal__watch-hero-stats strong {
    display: block;
    font-size: 20px;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
    color: #ffffff;
}
.pt-portal__watch-hero-stats span {
    color: rgba(255, 255, 255, 0.65);
    font-size: 11.5px;
}
@media (max-width: 720px) {
    .pt-wizard-modal { padding: 10px; align-items: end; }
    .pt-wizard-modal__panel { max-height: calc(100vh - 20px); border-radius: 20px 20px 0 0; }
    .pt-wizard__head { padding: 20px 54px 0 18px; }
    .pt-wizard__body { padding: 16px 18px; }
    .pt-wizard__previewwrap { margin: 0 18px; }
    .pt-wizard__foot { padding: 14px 18px 18px; }
    .pt-wizard__actions { justify-content: flex-end; }
    .pt-portal__watch-hero { grid-template-columns: 1fr; padding: 20px; }
    .pt-portal__share-row { grid-template-columns: auto minmax(0, 1fr); }
    .pt-portal__share-meta { grid-column: 2; }
}
@media (max-width: 360px) {
    .pt-portal__page-header { align-items: stretch; }
    .pt-portal__page-header .pt-portal__cta-btn { width: 100%; justify-content: center; }
    .pt-portal__watch-hero { padding: 18px; }
    .pt-portal__watch-hero-stats div { min-width: 0; flex: 1 1 auto; }
    .pt-wizard__actions { flex-wrap: wrap; }
    .pt-wizard__actions > button { flex: 1 1 auto; justify-content: center; }
}

/* ============================================================
   ÖNSKELISTOR v1.4.4 — wizard-footerns [hidden]-fix, fältkonsekvens,
   status-standard samt HELA den publika delade vyn
   (pt-wishlist-public__ saknade tidigare CSS helt och hållet).
   Ligger FÖRE Astra-sektionen (regeln om att Astra-overrides är
   sist i filen är helig).
   ============================================================ */

/* ROTORSAKEN till "Skapa listan syns på alla steg": author-regeln
   display:inline-flex på knappklasserna vinner alltid över UA-
   stylesheetens [hidden] { display:none } (samma fälla som
   .pt-portal__sort-menu / .pt-wizard-modal längre upp). portal.js
   togglar hidden korrekt - dessa regler gör att attributet biter. */
.pt-wizard__foot [hidden],
.pt-portal__cta-btn[hidden],
.pt-portal__btn-outline[hidden],
.pt-share-modal__icon-btn[hidden],
.pt-date-field__clear[hidden] {
    display: none !important;
}

/* "(valfritt)"-suffix i fältetiketter (prototypen steg 0). */
.pt-portal__label-optional {
    font-weight: 400;
    color: #9ca3af;
}

/* Fältfel (t.ex. tomt namn i wizarden) - synlig feedback i stället
   för det gamla tysta snäppet. */
.pt-portal__field-error {
    margin: 6px 0 0;
    font-size: 12px;
    font-weight: 600;
    color: #dc2626;
}
.pt-portal__input[aria-invalid="true"] {
    border-color: #ef4444 !important;
}

/* EN status-standard för portal-statusar (skapa/spara-kvitton).
   showStatus() i inline-JS:en behåller numera elementets egen
   BEM-stam i stället för att tvinga på share-modal-klasser. */
.pt-portal__status {
    margin-top: 10px;
    padding: 10px 14px;
    border-radius: 10px;
    font-size: 13px;
    font-weight: 600;
}
.pt-portal__status--ok {
    background: #ecfdf5;
    color: #047857;
    border: 1px solid #a7f3d0;
}
.pt-portal__status--error {
    background: #fef2f2;
    color: #dc2626;
    border: 1px solid #fecaca;
}
.pt-wizard .pt-portal__status {
    margin: 0 24px 20px;
}

/* Kanon-fokusring på antal-fälten (saknades i båda recepten). */
.pt-portal__qty-input:focus-visible,
.pt-portal__product-qty-create:focus-visible,
.pt-share-modal__link-input:focus-visible {
    outline: none !important;
    border-color: #2563eb !important;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.4) !important;
}
.pt-share-modal__link-input:focus-visible {
    border-radius: 8px;
}
.pt-portal__product-qty-create {
    border-radius: 10px !important;
}

/* Edit-headerns nya element: Dela-knapp till höger (prototypen
   rad 122) + "Gäller till {datum}"-metan. */
.pt-portal__edit-head-share {
    margin-left: auto;
    align-self: flex-start;
    flex: none;
    display: inline-flex !important;
    align-items: center;
    gap: 6px;
    white-space: nowrap;
}
.pt-portal__edit-head-expiry {
    color: #9ca3af;
}
.pt-portal__edit-head-expiry--expired {
    color: #dc2626;
    font-weight: 700;
}

/* Orphan-rader i redigeringsvyn: produkten finns inte längre på
   sajten - nedtonad rad som bara går att ta bort. */
.pt-portal__wishlist-product-item--orphan {
    background: var(--ptp-bg-tint);
}
.pt-portal__wishlist-product-item--orphan .pt-portal__wishlist-product-name {
    color: #6b7280;
}
.pt-portal__wishlist-product-item--orphan .pt-portal__wishlist-product-img {
    opacity: 0.6;
}

/* ------------------------------------------------------------
   PUBLIK DELAD VY (/onskelista/{slug}/) — "Festlig gradient"
   (Förslag A, godkänd designprototyp 2026-06-12). Tema-gradienten
   + scrim/deep-vars kommer inline från PHP (getColorCss); sidan
   ligger UTANFÖR .pt-portal - typografi/knappar pansras med
   !important mot temats globala stilar.
   ------------------------------------------------------------ */
@keyframes ptwlPop {
    0% { transform: scale(0.4); opacity: 0; }
    60% { transform: scale(1.08); opacity: 1; }
    100% { transform: scale(1); opacity: 1; }
}
@keyframes ptwlBurst {
    0% { transform: translate(0, 0) scale(1); opacity: 1; }
    100% { transform: translate(var(--tx), var(--ty)) scale(0.4); opacity: 0; }
}
@keyframes ptwlSheet {
    from { transform: translateY(36px); opacity: 0; }
    to { transform: translateY(0); opacity: 1; }
}
@keyframes ptwlFade {
    from { opacity: 0; }
    to { opacity: 1; }
}
.pt-wishlist-public {
    color: #111827;
}
/* HERO: lager (1) scrim (2) konfetti (3) innehåll. */
.pt-wishlist-public__header {
    position: relative;
    overflow: hidden;
}
.pt-wishlist-public__scrim {
    position: absolute;
    inset: 0;
    background: rgba(17, 24, 39, var(--pt-wishlist-scrim, 0));
    pointer-events: none;
}
.pt-wishlist-public__confetti {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
}
.pt-wishlist-public__header-inner {
    position: relative;
    max-width: 680px;
    margin: 0 auto;
    padding: 46px 20px 62px;
    text-align: center;
}
.pt-wishlist-public__icon {
    width: 64px;
    height: 64px;
    margin: 0 auto;
    border-radius: 20px;
    background: rgba(255, 255, 255, 0.18);
    border: 1px solid rgba(255, 255, 255, 0.25);
    display: grid;
    place-items: center;
    color: #ffffff;
}
.pt-wishlist-public__icon span {
    display: grid;
    place-items: center;
    line-height: 1;
}
.pt-wishlist-public__icon svg {
    display: block;
}
.pt-wishlist-public__title {
    margin: 16px 0 0 !important;
    font-size: clamp(26px, 5vw, 38px) !important;
    font-weight: 800 !important;
    line-height: 1.2 !important;
    color: #ffffff !important;
    text-shadow: 0 1px 2px rgba(17, 24, 39, 0.18);
    text-wrap: balance;
    text-transform: none !important;
    letter-spacing: 0 !important;
}
.pt-wishlist-public__owner {
    margin: 8px 0 0 !important;
    font-size: 15px !important;
    color: rgba(255, 255, 255, 0.92) !important;
}
.pt-wishlist-public__owner strong {
    font-weight: 800;
    color: #ffffff;
}
.pt-wishlist-public__pills {
    display: flex;
    gap: 8px;
    justify-content: center;
    flex-wrap: wrap;
    margin-top: 16px;
}
.pt-wishlist-public__expires,
.pt-wishlist-public__count {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0 !important;
    background: rgba(255, 255, 255, 0.16);
    border: 1px solid rgba(255, 255, 255, 0.28);
    color: #ffffff !important;
    font-size: 12.5px !important;
    font-weight: 700 !important;
    padding: 6px 12px;
    border-radius: 999px;
}
/* Svävande instruktionskort över hero-kanten. */
.pt-wishlist-public__claim-hint {
    position: relative;
    z-index: 2;
    max-width: 640px;
    margin: -30px auto 0;
    padding: 0 16px;
}
.pt-wishlist-public__claim-hint-card {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 14px;
    padding: 14px 16px;
    box-shadow: 0 10px 28px rgba(17, 24, 39, 0.1);
}
.pt-wishlist-public__claim-hint-icon {
    width: 32px;
    height: 32px;
    flex: none;
    border-radius: 999px;
    background: var(--pt-wishlist-light, #eff6ff);
    color: var(--pt-wishlist-deep, #1d4ed8);
    display: grid;
    place-items: center;
}
.pt-wishlist-public__claim-hint-card p {
    margin: 2px 0 0 !important;
    font-size: 13.5px !important;
    line-height: 1.55 !important;
    color: #374151 !important;
}
/* PRODUKTLISTA. */
.pt-wishlist-public__products {
    max-width: 760px;
    margin: 0 auto;
    padding: 24px 16px 56px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}
.pt-wishlist-public__product {
    position: relative;
    display: flex;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 14px;
    padding: 14px 16px;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.pt-wishlist-public__product:hover {
    border-color: #d1d5db;
    box-shadow: 0 6px 16px rgba(17, 24, 39, 0.08);
}
/* Reserverad rad: mjuk grön ton i stället för nedtoning. */
.pt-wishlist-public__product--claimed {
    background: #fbfefc;
    border-color: #d1fae5;
}
.pt-wishlist-public__product--claimed .pt-wishlist-public__product-name {
    color: #374151;
}
.pt-wishlist-public__product-link {
    display: flex;
    align-items: center;
    gap: 14px;
    flex: 1 1 220px;
    min-width: 0;
    color: inherit !important;
    text-decoration: none !important;
}
.pt-wishlist-public__product-img {
    position: relative;
    width: 72px;
    height: 72px;
    flex: none;
    border-radius: 10px;
    background: #f9fafb;
    border: 1px solid #f3f4f6;
    display: grid;
    place-items: center;
    overflow: visible;
}
.pt-wishlist-public__product-img img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    border-radius: 10px;
    mix-blend-mode: multiply;
}
.pt-wishlist-public__product-placeholder {
    color: #9ca3af;
    display: grid;
    place-items: center;
}
/* Grön bock-badge nere-höger på miniatyren (ersätter heloverlayen). */
.pt-wishlist-public__product-claimed-badge {
    position: absolute;
    right: -4px;
    bottom: -4px;
    width: 24px;
    height: 24px;
    border-radius: 999px;
    background: #10b981;
    border: 2px solid #ffffff;
    display: grid;
    place-items: center;
}
.pt-wishlist-public__product-info {
    flex: 1 1 220px;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 3px;
    justify-content: center;
}
.pt-wishlist-public__product-brand {
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #6b7280;
}
.pt-wishlist-public__product-name {
    font-size: 14.5px;
    font-weight: 700;
    line-height: 1.35;
    color: #111827;
    overflow: hidden;
    text-overflow: ellipsis;
}
/* Antals-chip i temats ton; fullbokad = grön. */
.pt-wishlist-public__product-quantity {
    align-self: flex-start;
    margin-top: 2px;
    font-size: 11.5px;
    font-weight: 700;
    padding: 2px 9px;
    border-radius: 999px;
    background: var(--pt-wishlist-light, #eff6ff);
    color: var(--pt-wishlist-deep, #1d4ed8);
}
.pt-wishlist-public__product-quantity--done {
    background: #ecfdf5;
    color: #047857;
}
/* Prisrad "Från 97 kr · 10 butiker" på EN rad. */
.pt-wishlist-public__product-meta {
    display: flex;
    gap: 6px;
    align-items: baseline;
    margin-top: 2px;
    font-size: 13px;
    color: #6b7280;
}
.pt-wishlist-public__product-price strong {
    font-size: 15px;
    font-weight: 800;
    color: #111827;
}
.pt-wishlist-public__product-stores::before {
    content: "· ";
}
/* Åtgärdskolumnen. */
.pt-wishlist-public__product-claim {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin-left: auto;
    flex: 0 1 auto;
    align-items: flex-end;
}
/* "Hitta bästa pris" = blå soft-chip (synlig även på mobil). */
.pt-wishlist-public__product-compare-hint {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    gap: 6px;
    height: 32px;
    padding: 0 13px !important;
    border-radius: 999px !important;
    background: #eff6ff !important;
    color: #1d4ed8 !important;
    font-size: 12px !important;
    font-weight: 700 !important;
    white-space: nowrap;
    text-decoration: none !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    box-shadow: none !important;
    transition: background 0.15s ease;
}
.pt-wishlist-public__product-compare-hint:hover {
    background: #dbeafe !important;
    color: #1d4ed8 !important;
}
.pt-wishlist-public__claim-btn {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    gap: 7px;
    background: #2563eb !important;
    color: #ffffff !important;
    border: 0 !important;
    border-radius: 999px !important;
    height: 38px;
    padding: 0 16px !important;
    font-size: 13px !important;
    font-weight: 700 !important;
    line-height: 1 !important;
    white-space: nowrap;
    cursor: pointer;
    text-transform: none !important;
    letter-spacing: 0 !important;
    box-shadow: none !important;
    transition: background 0.15s ease;
}
.pt-wishlist-public__claim-btn:hover {
    background: #1d4ed8 !important;
    color: #ffffff !important;
}
.pt-wishlist-public__claim-btn:focus-visible {
    outline: none !important;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.4) !important;
}
.pt-wishlist-public__claimed-text {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    background: #ecfdf5;
    color: #047857;
    font-size: 12.5px;
    font-weight: 700;
    height: 34px;
    padding: 0 14px;
    border-radius: 999px;
    white-space: nowrap;
}
.pt-wishlist-public__buy-anyway {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    gap: 6px;
    height: 30px;
    padding: 0 12px !important;
    border-radius: 999px !important;
    background: #ffffff !important;
    border: 1px solid #e5e7eb !important;
    color: #4b5563 !important;
    font-size: 12px !important;
    font-weight: 700 !important;
    white-space: nowrap;
    text-decoration: none !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    box-shadow: none !important;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.pt-wishlist-public__buy-anyway:hover {
    border-color: #d1d5db !important;
    box-shadow: 0 6px 16px rgba(17, 24, 39, 0.08) !important;
    color: #4b5563 !important;
}
/* TOMLÄGE: streckat kort med listans EGEN ikon i temats platta. */
.pt-wishlist-public__empty {
    max-width: 640px;
    margin: 32px auto 56px;
    border: 1.5px dashed #d1d5db;
    border-radius: 16px;
    background: #ffffff;
    padding: 48px 24px;
    text-align: center;
}
.pt-wishlist-public__empty-icon {
    width: 48px;
    height: 48px;
    border-radius: 999px;
    background: var(--pt-wishlist-light, #eff6ff);
    color: var(--pt-wishlist-deep, #1d4ed8);
    display: grid;
    place-items: center;
    margin: 0 auto 14px;
}
.pt-wishlist-public__empty-icon svg {
    display: block;
}
.pt-wishlist-public__empty-title {
    font-size: 15px;
    font-weight: 700;
    color: #111827;
}
.pt-wishlist-public__empty p {
    margin: 6px auto 0 !important;
    max-width: 340px;
    font-size: 13.5px !important;
    line-height: 1.6 !important;
    color: #6b7280 !important;
}
/* CTA: navy gradient + stålblå cirkeldekor + vit logga. */
.pt-wishlist-public__cta {
    position: relative;
    overflow: hidden;
    background: linear-gradient(135deg, #1b3152 0%, #142540 100%);
    padding: 48px 20px 36px;
    text-align: center;
}
.pt-wishlist-public__cta-decor {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
}
.pt-wishlist-public__cta-content {
    position: relative;
    max-width: 640px;
    margin: 0 auto;
}
.pt-wishlist-public__cta-content h3 {
    margin: 0 !important;
    font-size: 23px !important;
    font-weight: 800 !important;
    color: #ffffff !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
}
.pt-wishlist-public__cta-content p {
    margin: 10px auto 0 !important;
    max-width: 440px;
    font-size: 14.5px !important;
    line-height: 1.6 !important;
    color: #b9c8de !important;
}
.pt-wishlist-public__cta-buttons {
    display: flex;
    gap: 10px;
    justify-content: center;
    flex-wrap: wrap;
    margin-top: 22px;
}
.pt-wishlist-public__cta-brand {
    display: block;
    margin: 32px auto 0;
    width: clamp(130px, 26vw, 180px);
    height: auto;
    opacity: 0.95;
}
.pt-wishlist-public__btn {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    gap: 7px;
    height: 42px;
    border-radius: 999px !important;
    padding: 0 22px !important;
    font-size: 14px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    white-space: nowrap;
    cursor: pointer;
    text-decoration: none !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    box-shadow: none !important;
    transition: background 0.15s ease, border-color 0.15s ease;
}
.pt-wishlist-public__btn--primary {
    background: #2563eb !important;
    color: #ffffff !important;
    border: 0 !important;
}
.pt-wishlist-public__btn--primary:hover {
    background: #1d4ed8 !important;
    color: #ffffff !important;
}
.pt-wishlist-public__btn--secondary {
    background: transparent !important;
    color: #ffffff !important;
    border: 1px solid rgba(255, 255, 255, 0.35) !important;
}
.pt-wishlist-public__btn--secondary:hover {
    border-color: rgba(255, 255, 255, 0.7) !important;
    color: #ffffff !important;
}
/* Ghost-variant för LJUS bakgrund (utgångna sidan). */
.pt-wishlist-public__btn--ghost {
    height: 40px;
    padding: 0 18px !important;
    background: transparent !important;
    border: 1px solid rgba(17, 24, 39, 0.14) !important;
    color: #111827 !important;
    font-size: 13.5px !important;
}
.pt-wishlist-public__btn--ghost:hover {
    border-color: #d1d5db !important;
    box-shadow: 0 6px 16px rgba(17, 24, 39, 0.08) !important;
    color: #111827 !important;
}
.pt-wishlist-public__btn:focus-visible {
    outline: none !important;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.4) !important;
}
/* CLAIM-MODAL (bottom-sheet på mobil, se @media). */
.pt-wishlist-public__claim-modal {
    position: fixed;
    inset: 0;
    z-index: 100000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: rgba(17, 24, 39, 0.5);
    animation: ptwlFade 0.18s ease;
}
.pt-wishlist-public__claim-modal[hidden] {
    display: none !important;
}
.pt-wishlist-public__claim-modal-panel {
    position: relative;
    width: 100%;
    max-width: 430px;
    background: #ffffff;
    border-radius: 18px;
    padding: 22px;
    box-shadow: 0 24px 60px rgba(17, 24, 39, 0.25);
    animation: ptwlSheet 0.22s ease;
}
.pt-wishlist-public__claim-modal-close {
    position: absolute;
    top: 12px;
    right: 12px;
    z-index: 2;
    width: 30px !important;
    height: 30px !important;
    padding: 0 !important;
    border: 0 !important;
    border-radius: 999px !important;
    background: #f3f4f6 !important;
    color: #6b7280 !important;
    font-size: 16px !important;
    line-height: 1 !important;
    cursor: pointer;
    box-shadow: none !important;
}
.pt-wishlist-public__claim-modal-close:hover {
    background: #e5e7eb !important;
    color: #111827 !important;
}
/* Produktstrip överst i modalen. */
.pt-wishlist-public__claim-product {
    display: flex;
    align-items: center;
    gap: 12px;
    background: #f9fafb;
    border: 1px solid #f3f4f6;
    border-radius: 12px;
    padding: 10px 12px;
    margin-right: 32px;
}
.pt-wishlist-public__claim-product-thumb {
    width: 50px;
    height: 50px;
    flex: none;
    border-radius: 8px;
    background: #ffffff;
    border: 1px solid #e5e7eb;
    display: grid;
    place-items: center;
    overflow: hidden;
}
.pt-wishlist-public__claim-product-thumb img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}
.pt-wishlist-public__claim-product-info {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.pt-wishlist-public__claim-product-name {
    font-size: 13px;
    font-weight: 700;
    line-height: 1.35;
    color: #111827;
}
.pt-wishlist-public__claim-product-price {
    font-size: 12px;
    color: #6b7280;
}
.pt-wishlist-public__claim-modal-panel h3 {
    margin: 14px 0 0 !important;
    padding-right: 24px;
    font-size: 18px !important;
    font-weight: 800 !important;
    color: #111827 !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
}
.pt-wishlist-public__claim-idle > p {
    margin: 6px 0 0 !important;
    font-size: 13.5px !important;
    line-height: 1.6 !important;
    color: #6b7280 !important;
}
.pt-wishlist-public__claim-user {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 14px;
    background: #f3f4f6;
    border: 1px solid #e5e7eb;
    border-radius: 10px;
    padding: 9px 12px;
    color: #6b7280;
}
.pt-wishlist-public__claim-user span {
    font-size: 13.5px;
    font-weight: 700;
    color: #111827;
}
.pt-wishlist-public__claim-qty-section {
    margin-top: 14px;
}
.pt-wishlist-public__claim-qty-label {
    display: block;
    font-size: 13px;
    font-weight: 700;
    color: #374151;
}
.pt-wishlist-public__claim-qty-row {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 8px;
}
.pt-wishlist-public__claim-qty-btn {
    width: 36px !important;
    height: 36px !important;
    padding: 0 !important;
    border: 1px solid #d1d5db !important;
    border-radius: 999px !important;
    background: #ffffff !important;
    color: #374151 !important;
    font-size: 17px !important;
    font-weight: 700 !important;
    line-height: 1 !important;
    cursor: pointer;
    box-shadow: none !important;
}
.pt-wishlist-public__claim-qty-btn:hover {
    border-color: #9ca3af !important;
}
.pt-wishlist-public__claim-qty-input {
    width: 54px;
    height: 36px;
    text-align: center;
    border: 1px solid #d1d5db !important;
    border-radius: 10px !important;
    padding: 0 !important;
    font-size: 14px !important;
    font-weight: 700 !important;
    color: #111827 !important;
    background: #ffffff !important;
    -moz-appearance: textfield;
}
.pt-wishlist-public__claim-qty-input::-webkit-inner-spin-button,
.pt-wishlist-public__claim-qty-input::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
.pt-wishlist-public__claim-qty-input:focus-visible {
    outline: none !important;
    border-color: #2563eb !important;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.4) !important;
}
.pt-wishlist-public__claim-qty-hint {
    font-size: 12px;
    color: #6b7280;
}
.pt-wishlist-public__claim-submit {
    margin-top: 16px;
    width: 100% !important;
    height: 44px;
    border: 0 !important;
    border-radius: 12px !important;
    background: #2563eb !important;
    color: #ffffff !important;
    font-size: 14.5px !important;
    font-weight: 700 !important;
    cursor: pointer;
    text-transform: none !important;
    letter-spacing: 0 !important;
    box-shadow: none !important;
    transition: background 0.15s ease, opacity 0.15s ease;
}
.pt-wishlist-public__claim-submit:hover {
    background: #1d4ed8 !important;
}
.pt-wishlist-public__claim-submit:focus-visible {
    outline: none !important;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.4) !important;
}
.pt-wishlist-public__claim-submit[disabled] {
    opacity: 0.7;
    cursor: default;
}
.pt-wishlist-public__claim-status {
    margin-top: 12px;
    font-size: 13px;
    font-weight: 600;
    border-radius: 10px;
    padding: 10px 14px;
}
.pt-wishlist-public__claim-status.is-success {
    background: #ecfdf5;
    color: #047857;
    border: 1px solid #a7f3d0;
}
.pt-wishlist-public__claim-status.is-error {
    background: #fef2f2;
    color: #dc2626;
    border: 1px solid #fecaca;
}
/* Succé-läget: bock-pop + konfettiburst. */
.pt-wishlist-public__claim-success {
    position: relative;
    text-align: center;
    padding: 26px 6px 14px;
}
.pt-wishlist-public__claim-success[hidden] {
    display: none !important;
}
.pt-wishlist-public__claim-success-anim {
    position: relative;
    display: inline-block;
}
.pt-wishlist-public__claim-success-check {
    width: 64px;
    height: 64px;
    border-radius: 999px;
    background: #ecfdf5;
    display: grid;
    place-items: center;
    margin: 0 auto;
    animation: ptwlPop 0.4s ease;
}
.pt-wishlist-public__confetti-bit {
    position: absolute;
    left: 50%;
    top: 30px;
    animation: ptwlBurst 0.8s ease-out forwards;
    pointer-events: none;
}
.pt-wishlist-public__claim-success-title {
    margin-top: 14px;
    font-size: 16.5px;
    font-weight: 800;
    color: #111827;
}
.pt-wishlist-public__claim-success p {
    margin: 6px 0 0 !important;
    font-size: 13px !important;
    color: #6b7280 !important;
}
/* UTGÅNGEN LISTA. */
.pt-wishlist-public--expired {
    min-height: 70vh;
    display: grid;
    place-items: center;
    padding: 48px 16px;
}
.pt-wishlist-public__expired-content {
    max-width: 480px;
    width: 100%;
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 18px;
    padding: 40px 28px 32px;
    text-align: center;
    box-shadow: 0 10px 28px rgba(17, 24, 39, 0.06);
}
.pt-wishlist-public__expired-icon {
    width: 56px;
    height: 56px;
    margin: 0 auto 16px;
    border-radius: 999px;
    background: #fffbeb;
    color: #f59e0b;
    display: grid;
    place-items: center;
}
.pt-wishlist-public__expired-content h1 {
    margin: 0 !important;
    font-size: 22px !important;
    font-weight: 800 !important;
    color: #111827 !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
}
.pt-wishlist-public__expired-desc {
    margin: 10px auto 0 !important;
    font-size: 14px !important;
    line-height: 1.65 !important;
    color: #6b7280 !important;
}
.pt-wishlist-public__expired-owner {
    display: flex;
    gap: 10px;
    align-items: flex-start;
    margin-top: 18px;
    background: #eff6ff;
    border: 1px solid #dbeafe;
    border-radius: 12px;
    padding: 13px 15px;
    text-align: left;
}
.pt-wishlist-public__expired-owner svg {
    flex: none;
    margin-top: 1px;
}
.pt-wishlist-public__expired-owner span {
    font-size: 13px;
    line-height: 1.55;
    color: #1e3a8a;
}
.pt-wishlist-public__extend-btn {
    display: block !important;
    margin-top: 12px;
    width: 100%;
    height: 44px;
    line-height: 44px !important;
    border: 0 !important;
    border-radius: 12px !important;
    background: #2563eb !important;
    color: #ffffff !important;
    font-size: 14.5px !important;
    font-weight: 700 !important;
    text-align: center;
    text-decoration: none !important;
    text-transform: none !important;
    letter-spacing: 0 !important;
    box-shadow: none !important;
    transition: background 0.15s ease;
}
.pt-wishlist-public__extend-btn:hover {
    background: #1d4ed8 !important;
    color: #ffffff !important;
}
.pt-wishlist-public__extend-btn:focus-visible {
    outline: none !important;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.4) !important;
}
.pt-wishlist-public__expired-actions {
    display: flex;
    gap: 10px;
    justify-content: center;
    flex-wrap: wrap;
    margin-top: 20px;
}
/* MOBIL ≤720 (förstaklass): fullbredds-åtgärder, bottom-sheet-modal. */
@media (max-width: 720px) {
    .pt-wishlist-public__header-inner {
        padding: 36px 16px 56px;
    }
    .pt-wishlist-public__products {
        padding: 20px 14px 48px;
    }
    .pt-wishlist-public__product {
        padding: 12px 14px;
    }
    .pt-wishlist-public__product-claim {
        flex: 1 1 100%;
        align-items: stretch;
    }
    .pt-wishlist-public__product-compare-hint,
    .pt-wishlist-public__claim-btn,
    .pt-wishlist-public__claimed-text,
    .pt-wishlist-public__buy-anyway {
        width: 100%;
        justify-content: center;
    }
    .pt-wishlist-public__claim-modal {
        align-items: flex-end;
        padding: 0;
    }
    .pt-wishlist-public__claim-modal-panel {
        max-width: none;
        border-radius: 18px 18px 0 0;
    }
    .pt-wishlist-public__cta {
        padding: 40px 18px 30px;
    }
    .pt-wishlist-public__empty {
        margin-left: 14px;
        margin-right: 14px;
    }
}

/* Sök-sektionen som FRAMTRÄDANDE blå-soft kort (ägarfynd v1.4.6:
   sökrutan smälte in och missades nästan). */
.pt-portal__wishlist-search-section {
    background: #eff6ff;
    border: 1px solid #dbeafe;
    border-radius: 12px;
    padding: 12px 14px 14px;
}
.pt-portal__wishlist-search-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11px !important;
    font-weight: 800 !important;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #1d4ed8 !important;
    margin-bottom: 8px;
}
.pt-portal__wishlist-search-section .pt-portal__wishlist-search-input {
    background: #ffffff !important;
    border-color: #bfdbfe !important;
}
/* Produktsök i wizard/redigeringsvyn (v1.4.5): fält med förstoringsglas
   + dropdown-kort i samma formspråk som sortmenyn. */
.pt-portal__wishlist-search {
    position: relative;
}
.pt-portal__wishlist-search-icon {
    position: absolute;
    left: 13px;
    top: 50%;
    transform: translateY(-50%);
    color: #9ca3af;
    pointer-events: none;
}
.pt-portal__wishlist-search .pt-portal__wishlist-search-input {
    padding-left: 38px !important;
}
.pt-portal__wishlist-search-results {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    right: 0;
    z-index: 60;
    background: #ffffff;
    border: 1px solid #e5e7eb;
    border-radius: 12px;
    box-shadow: 0 10px 28px rgba(17, 24, 39, 0.12);
    max-height: 290px;
    overflow-y: auto;
    padding: 6px;
}
.pt-portal__wishlist-search-results[hidden] {
    display: none !important;
}
.pt-portal__wishlist-search-msg {
    padding: 12px 10px;
    font-size: 12.5px;
    color: #6b7280;
}
.pt-portal__wishlist-search-item {
    width: 100% !important;
    display: flex !important;
    align-items: center;
    gap: 10px;
    padding: 8px 10px !important;
    border: 0 !important;
    border-radius: 10px !important;
    background: transparent !important;
    text-align: left !important;
    cursor: pointer;
    box-shadow: none !important;
}
.pt-portal__wishlist-search-item:hover {
    background: #f9fafb !important;
}
.pt-portal__wishlist-search-item:focus-visible {
    outline: none !important;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.4) !important;
}
.pt-portal__wishlist-search-item img,
.pt-portal__wishlist-search-thumb {
    width: 36px;
    height: 36px;
    flex: none;
    border-radius: 8px;
    object-fit: contain;
    background: #f9fafb;
    border: 1px solid #f3f4f6;
}
.pt-portal__wishlist-search-info {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 1px;
}
.pt-portal__wishlist-search-brand {
    font-size: 9.5px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #9ca3af;
}
.pt-portal__wishlist-search-name {
    font-size: 13px;
    font-weight: 600;
    color: #111827;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pt-portal__wishlist-search-price {
    flex: none;
    font-size: 12.5px;
    font-weight: 700;
    color: #6b7280;
    white-space: nowrap;
}
.pt-portal__wishlist-search-add {
    flex: none;
    font-size: 12px;
    font-weight: 700;
    color: #2563eb;
    white-space: nowrap;
}
.pt-portal__wishlist-search-item.is-added {
    cursor: default;
}
.pt-portal__wishlist-search-item.is-added .pt-portal__wishlist-search-add {
    color: #047857;
}

/* ============================================================
   ÖNSKELISTOR v1.4.7 — "Redigera + Guide"-redesign (godkänd
   Claude Design 2026-06-13). Live-preview-banners, sektionerad
   redigeringsvy, antalsstegrare, grupperat lägg-till, wizard-
   hero + etiketterade pips + förslagschips + e-postinbjudan +
   succévy. Placerad EFTER komponentsektionerna men FÖRE Astra-
   resetsen så den vinner kaskaden mot äldre wishlist/wizard-regler.
   ============================================================ */

/* Delade pop/burst-keyframes (succé-bock + konfetti). */
@keyframes pt-wizard-pop {
    0%   { transform: scale(0.4); opacity: 0; }
    60%  { transform: scale(1.08); opacity: 1; }
    100% { transform: scale(1); opacity: 1; }
}
@keyframes pt-wizard-burst {
    0%   { transform: translate(0, 0) scale(1); opacity: 1; }
    100% { transform: translate(var(--tx, 0), var(--ty, 0)) scale(0.4); opacity: 0; }
}
@keyframes pt-wizard-fade {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* ---- Redigeringsvyns topbar (back-link + rubrik på en rad) ---- */
.pt-portal__edit-topbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    margin-bottom: 14px;
}
.pt-portal__edit-topbar .pt-portal__back-link { margin-bottom: 0; }
.pt-portal__edit-topbar-title {
    margin: 0 !important;
    font-size: 15px !important;
    font-weight: 800 !important;
    color: var(--ptp-ink) !important;
}

/* Kortet får klippa banner-hörnen rundade. */
.pt-portal__card--edit {
    border-radius: 16px;
    overflow: hidden;
}

/* ---- Live-förhandsvisning (mini-hero i listans tema) ---- */
.pt-portal__edit-preview {
    position: relative;
    overflow: hidden;
    padding: 20px 20px 18px;
    /* gradient sätts inline; faller tillbaka på accent */
    background: var(--ptp-accent);
}
.pt-portal__edit-preview-scrim,
.pt-wizard__preview-scrim {
    position: absolute;
    inset: 0;
    background: rgba(17, 24, 39, var(--pt-wishlist-scrim, 0));
    pointer-events: none;
}
.pt-portal__edit-preview-confetti,
.pt-wizard__preview-confetti {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
}
.pt-portal__edit-preview-badge {
    position: absolute;
    top: 10px;
    right: 12px;
    z-index: 1;
    font-size: 10px;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.75);
    background: rgba(17, 24, 39, 0.18);
    padding: 3px 9px;
    border-radius: 999px;
}
.pt-portal__edit-preview-row {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 14px;
}
.pt-portal__edit-preview-icon {
    width: 48px;
    height: 48px;
    flex: 0 0 auto;
    border-radius: 15px;
    background: rgba(255, 255, 255, 0.18);
    border: 1px solid rgba(255, 255, 255, 0.25);
    display: grid;
    place-items: center;
    color: #ffffff;
}
.pt-portal__edit-preview-icon svg { display: block; }
.pt-portal__edit-preview-info { min-width: 0; flex: 1; }
.pt-portal__edit-preview-name {
    font-size: 18px;
    font-weight: 800;
    color: #ffffff;
    text-shadow: 0 1px 2px rgba(17, 24, 39, 0.18);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.pt-portal__edit-preview-pills {
    display: flex;
    gap: 6px;
    margin-top: 6px;
    flex-wrap: wrap;
}
.pt-portal__edit-preview-pill {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    background: rgba(255, 255, 255, 0.16);
    border: 1px solid rgba(255, 255, 255, 0.28);
    color: #ffffff;
    font-size: 11px;
    font-weight: 700;
    padding: 3px 9px;
    border-radius: 999px;
    white-space: nowrap;
}
.pt-portal__edit-preview-view {
    margin-left: auto;
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 32px;
    padding: 0 13px;
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.95);
    color: #111827 !important;
    font-size: 12px;
    font-weight: 700;
    text-decoration: none !important;
}
.pt-portal__edit-preview-view:hover { background: #ffffff; color: #111827 !important; }
.pt-portal__edit-preview-view svg { display: block; }

/* ---- Redigeringskroppen + sektionsetiketter ---- */
.pt-portal__edit-body { padding: 20px; }
.pt-portal__edit-body .pt-portal__edit-head {
    align-items: flex-end;
    gap: 12px;
    margin-bottom: 0;
}
.pt-portal__section-label {
    display: block;
    font-size: 11px;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ptp-ink-mute);
    margin-bottom: 0;
}
.pt-portal__edit-section { margin-top: 26px; margin-bottom: 0; }

/* Dela-knappen i edit-head (pill, blå-soft). */
.pt-portal__edit-head-share {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    height: 38px;
    padding: 0 15px;
    border-radius: 999px !important;
    border: none !important;
    cursor: pointer;
    background: #eff6ff !important;
    color: #1d4ed8 !important;
    font-size: 13px !important;
    font-weight: 700 !important;
    width: auto !important;
    flex: 0 0 auto;
}
.pt-portal__edit-head-share:hover { background: #dbeafe !important; }
.pt-portal__edit-head-share svg { display: block; }

/* ---- Antalsstegrare (-/+ runt "{n} st") ---- */
.pt-portal__qty-step {
    width: 26px;
    height: 26px;
    flex: 0 0 auto;
    border-radius: 999px !important;
    border: 1px solid var(--ptp-line) !important;
    background: var(--ptp-surface) !important;
    font-size: 14px !important;
    font-weight: 700 !important;
    color: #374151 !important;
    line-height: 1 !important;
    cursor: pointer;
    display: grid;
    place-items: center;
    padding: 0 !important;
}
.pt-portal__qty-step:hover { border-color: var(--ptp-line-strong) !important; }
.pt-portal__qty-step:disabled { opacity: 0.4; cursor: default; }
.pt-portal__qty-display {
    min-width: 34px;
    text-align: center;
    font-size: 13px;
    font-weight: 700;
    color: var(--ptp-ink);
}
.pt-portal__qty-input[hidden] { display: none !important; }

/* ---- Grupperat lägg-till-block ---- */
.pt-portal__add-group {
    margin-top: 14px;
    border: 1px solid var(--ptp-line);
    border-radius: 12px;
    background: #fbfcfd;
    padding: 14px;
}
.pt-portal__add-group .pt-portal__wishlist-search { margin-top: 10px; }
.pt-portal__add-group .pt-portal__custom-product-row { margin-top: 10px; }
.pt-portal__add-group .pt-portal__edit-add-row {
    border-top: 0;
    padding-top: 0;
    margin-bottom: 0;
}
/* Favoriter som horisontella chips (inte radlista) i edit-blocket. */
.pt-portal__add-group .pt-portal__add-products-grid {
    flex-direction: row;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 10px;
    max-height: none;
    overflow: visible;
    padding: 0;
}
.pt-portal__add-group .pt-portal__add-product-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    width: auto;
    border: 1px solid var(--ptp-line);
    border-radius: 999px;
    background: var(--ptp-surface);
    padding: 5px 12px 5px 5px;
    cursor: pointer;
}
.pt-portal__add-group .pt-portal__add-product-btn:hover {
    border-color: var(--ptp-line-strong);
    box-shadow: 0 6px 16px rgba(17, 24, 39, 0.08);
}
.pt-portal__add-group .pt-portal__add-product-btn img {
    width: 26px;
    height: 26px;
    border-radius: 999px;
    flex: 0 0 auto;
    object-fit: cover;
    border: 1px solid #f3f4f6;
    background: var(--ptp-bg-tint);
}
/* Specificiteten höjd (0,3,0) så den slår den äldre
   ".pt-portal__add-product-btn span"-regeln (0,1,1) — annars vann
   dess line-clamp:2/flex:1 och chip-pillen blev en tvårads-box. */
.pt-portal__add-group .pt-portal__add-product-btn .pt-portal__add-product-name {
    flex: 0 1 auto;
    min-width: 0;
    font-size: 12px;
    font-weight: 700;
    color: #374151;
    max-width: 180px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    -webkit-line-clamp: none;
    display: inline;
    line-height: 1.3;
}
.pt-portal__add-group .pt-portal__add-product-btn .pt-portal__add-product-plus {
    flex: 0 0 auto;
    font-size: 12px;
    font-weight: 800;
    color: var(--ptp-accent-deep);
    white-space: nowrap;
}
.pt-portal__add-group .pt-portal__add-product-btn.is-added {
    opacity: 0.55;
    cursor: default;
    pointer-events: none;
}
.pt-portal__add-group .pt-portal__add-product-btn.is-added .pt-portal__add-product-plus {
    color: var(--ptp-success);
}

/* ---- Delning: datum + delningslänk sida vid sida ---- */
.pt-portal__edit-share-row {
    display: flex;
    gap: 12px;
    margin-top: 12px;
    flex-wrap: wrap;
}
.pt-portal__edit-share-col { flex: 1 1 220px; min-width: 0; }
.pt-portal__edit-link-row {
    display: flex;
    gap: 8px;
    margin-top: 6px;
}
.pt-portal__edit-link-input,
input.pt-portal__edit-link-input {
    flex: 1;
    min-width: 0;
    height: 42px;
    border: 1px solid var(--ptp-line);
    border-radius: 10px;
    background: var(--ptp-bg-tint);
    padding: 0 12px;
    font-size: 12.5px;
    color: var(--ptp-ink-mute);
    text-overflow: ellipsis;
}
.pt-portal__edit-copy-btn {
    height: 42px;
    padding: 0 14px;
    border-radius: 10px !important;
    border: 1px solid var(--ptp-line) !important;
    background: var(--ptp-surface) !important;
    font-size: 13px !important;
    font-weight: 700 !important;
    color: #374151 !important;
    cursor: pointer;
    white-space: nowrap;
    flex: 0 0 auto;
    width: auto !important;
}
.pt-portal__edit-copy-btn:hover { border-color: var(--ptp-line-strong) !important; }
.pt-portal__edit-copy-btn.is-copied {
    background: var(--ptp-success-soft) !important;
    border-color: var(--ptp-success) !important;
    color: var(--ptp-success) !important;
}

/* ---- Sticky åtgärdsrad i edit-vyn ---- */
.pt-portal__edit-actions {
    position: sticky;
    bottom: 0;
    z-index: 5;
    margin-top: 0;
    padding: 14px 20px;
    background: rgba(255, 255, 255, 0.95);
    -webkit-backdrop-filter: blur(4px);
    backdrop-filter: blur(4px);
    border-top: 1px solid #f3f4f6;
}

/* ============================================================
   Färgväljare — kolumndesign med synlig etikett + bock (override
   av den äldre rena-cirkel-varianten ovan). Swatchen bär färgen
   och en vit bock när vald; ringen markerar val.
   ============================================================ */
.pt-portal__color-picker { align-items: flex-start; }
.pt-portal__color-option {
    width: auto;
    height: auto;
    border: none;
    background: transparent;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 5px;
    padding: 0;
    border-radius: 0;
    /* Nollställ den äldre --selected-fokusringen som annars spökade
       runt hela kolumnen (ringen bor nu på swatchen, se nedan). */
    box-shadow: none;
}
.pt-portal__color-option:hover { box-shadow: none; }
.pt-portal__color-swatch {
    display: grid;
    place-items: center;
    width: 30px;
    height: 30px;
    border-radius: 999px;
    background: var(--color-primary, var(--ptp-accent));
    box-shadow: inset 0 0 0 1px rgba(17, 24, 39, 0.08);
    transition: box-shadow 0.15s ease;
}
.pt-portal__color-check { display: none; }
.pt-portal__color-option--selected .pt-portal__color-swatch {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px var(--color-primary, var(--ptp-accent));
}
.pt-portal__color-option--selected:hover .pt-portal__color-swatch {
    box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px var(--color-primary, var(--ptp-accent));
}
.pt-portal__color-option--selected .pt-portal__color-check { display: block; }
.pt-portal__color-label {
    position: static;
    width: auto;
    height: auto;
    overflow: visible;
    clip: auto;
    clip-path: none;
    white-space: nowrap;
    font-size: 10.5px;
    font-weight: 700;
    color: var(--ptp-ink-mute);
}
.pt-portal__color-option--selected .pt-portal__color-label { color: var(--ptp-ink); }
/* Wizardens swatchar något mindre (prototypen 28px). */
#pt-wishlist-colors .pt-portal__color-swatch { width: 28px; height: 28px; }

/* ============================================================
   Wizard-hero (live-preview-banner som panelens topp)
   ============================================================ */
.pt-wizard__preview-banner {
    position: relative;
    overflow: hidden;
    padding: 18px 20px 16px;
    background: var(--ptp-accent);
}
.pt-wizard__sr-title {
    position: absolute !important;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    white-space: nowrap;
    margin: 0;
}
.pt-wizard__preview-badge {
    position: absolute;
    top: 10px;
    left: 12px;
    z-index: 1;
    font-size: 10px;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.75);
    background: rgba(17, 24, 39, 0.18);
    padding: 3px 9px;
    border-radius: 999px;
}
/* Stäng-X på bannern: vit på mörk genomskinlig cirkel (synlig mot
   den färgade gradienten). Override av den vita default-knappen. */
.pt-wizard__preview-banner .pt-wizard-modal__close {
    top: 12px !important;
    right: 12px !important;
    width: 30px !important;
    height: 30px !important;
    border-radius: 999px !important;
    border: none !important;
    background: rgba(17, 24, 39, 0.22) !important;
    color: #ffffff !important;
    font-size: 16px !important;
}
.pt-wizard__preview-banner .pt-wizard-modal__close:hover,
.pt-wizard__preview-banner .pt-wizard-modal__close:focus-visible {
    background: rgba(17, 24, 39, 0.35) !important;
    color: #ffffff !important;
}
.pt-wizard__preview-row {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: 16px;
}
/* Bannerns ikonplatta (override av den ljusa bottenkort-varianten). */
.pt-wizard__preview-banner .pt-wizard__preview-emoji {
    width: 42px;
    height: 42px;
    border-radius: 13px;
    background: rgba(255, 255, 255, 0.18);
    border: 1px solid rgba(255, 255, 255, 0.25);
    color: #ffffff;
}
.pt-wizard__preview-banner .pt-wizard__preview-text strong {
    font-size: 16px;
    font-weight: 800;
    color: #ffffff;
    text-shadow: 0 1px 2px rgba(17, 24, 39, 0.18);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.pt-wizard__preview-banner .pt-wizard__preview-text small {
    font-size: 11.5px;
    color: rgba(255, 255, 255, 0.85);
    white-space: nowrap;
}

/* ============================================================
   Etiketterad stegindikator (kolumn per steg + connector + namn)
   ============================================================ */
.pt-wizard__progress--labelled {
    display: flex;
    align-items: flex-start;
    gap: 0;
    padding: 16px 24px 0;
    counter-reset: none;
}
.pt-wizard__stepcol {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    position: relative;
}
.pt-wizard__progress--labelled .pt-wizard__pipline {
    position: absolute;
    top: 13px;
    left: -50%;
    width: 100%;
    height: 2px;
    margin: 0;
    border-radius: 0;
    background: var(--ptp-line);
}
.pt-wizard__progress--labelled .pt-wizard__pip {
    position: relative;
    z-index: 1;
    width: 26px !important;
    height: 26px !important;
    border-width: 2px !important;
    counter-increment: none;
}
.pt-wizard__progress--labelled .pt-wizard__pip::before { content: none !important; }
/* Förbindelselinjen i steg N färgas blå när steg N-1:s pip är klar
   (immediate-sibling: bara linjen direkt efter en klar pip-kolumn). */
.pt-wizard__stepcol:has(.pt-wizard__pip.is-done) + .pt-wizard__stepcol .pt-wizard__pipline { background: var(--ptp-accent-deep); }
.pt-wizard__pip-num { display: inline; }
.pt-wizard__pip-check { display: none; }
.pt-wizard__pip.is-done .pt-wizard__pip-num { display: none; }
.pt-wizard__pip.is-done .pt-wizard__pip-check { display: block; }
.pt-wizard__steplabel {
    margin-top: 5px;
    font-size: 10.5px;
    font-weight: 700;
    color: var(--ptp-ink-mute);
    text-align: center;
    line-height: 1.2;
}
.pt-wizard__stepcol:has(.pt-wizard__pip.is-active) .pt-wizard__steplabel,
.pt-wizard__stepcol:has(.pt-wizard__pip.is-done) .pt-wizard__steplabel { color: var(--ptp-ink); }

/* ---- Förslagschips (steg 1) ---- */
.pt-wizard__suggestions {
    display: flex;
    gap: 7px;
    margin-top: 12px;
    flex-wrap: wrap;
}
.pt-wizard__suggestion {
    border: 1px solid var(--ptp-line) !important;
    border-radius: 999px !important;
    background: var(--ptp-surface) !important;
    padding: 6px 13px !important;
    font-size: 12px !important;
    font-weight: 700 !important;
    color: #374151 !important;
    cursor: pointer;
    white-space: nowrap;
    width: auto !important;
}
.pt-wizard__suggestion:hover {
    border-color: var(--ptp-accent-deep) !important;
    color: var(--ptp-accent-deep) !important;
}

/* ---- E-postinbjudan (steg 4) ---- */
.pt-wizard__invite { margin-top: 12px; }

/* Steg 4-summeringskort: ikon i temats light/deep. */
.pt-wizard__summary-emoji {
    width: 34px;
    height: 34px;
    flex: 0 0 auto;
    border-radius: 10px;
    background: var(--pt-wishlist-light, var(--ptp-bg-tint));
    color: var(--pt-wishlist-deep, var(--ptp-accent-deep));
    display: grid;
    place-items: center;
}

/* ============================================================
   Succévyn efter "Skapa listan"
   ============================================================ */
.pt-wizard__success {
    position: relative;
    text-align: center;
    padding: 40px 28px 30px;
    animation: pt-wizard-fade 0.25s ease;
}
.pt-wizard__success[hidden] { display: none !important; }
.pt-wizard__success-anim {
    position: relative;
    display: inline-block;
}
.pt-wizard__success-check {
    width: 64px;
    height: 64px;
    border-radius: 999px;
    background: #ecfdf5;
    display: grid;
    place-items: center;
    margin: 0 auto;
    animation: pt-wizard-pop 0.4s ease;
}
.pt-wizard__success-check svg { display: block; }
.pt-wizard__confetti {
    position: absolute;
    left: 50%;
    top: 30px;
    animation: pt-wizard-burst 0.8s ease-out forwards;
    pointer-events: none;
}
.pt-wizard__success-title {
    margin-top: 16px;
    font-size: 18px;
    font-weight: 800;
    color: var(--ptp-ink);
}
.pt-wizard__success-sub {
    margin: 7px auto 0;
    max-width: 350px;
    font-size: 13.5px;
    line-height: 1.6;
    color: var(--ptp-ink-mute);
}
.pt-wizard__success-linkrow {
    display: flex;
    gap: 8px;
    margin: 18px auto 0;
    max-width: 380px;
}
.pt-wizard__success-copy {
    height: 42px;
    padding: 0 16px;
    border-radius: 10px !important;
    border: none !important;
    background: var(--ptp-accent-deep) !important;
    color: #ffffff !important;
    font-size: 13px !important;
    font-weight: 700 !important;
    cursor: pointer;
    white-space: nowrap;
    flex: 0 0 auto;
    width: auto !important;
}
.pt-wizard__success-copy:hover { background: #1d4ed8 !important; }
.pt-wizard__success-copy.is-copied {
    background: var(--ptp-success) !important;
}
.pt-wizard__success-sharelabel {
    display: block;
    margin-top: 20px;
}
.pt-wizard__success-channels {
    display: flex;
    gap: 16px;
    justify-content: center;
    margin-top: 10px;
    flex-wrap: wrap;
}
.pt-wizard__success-channel {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 5px;
    text-decoration: none !important;
}
.pt-wizard__success-channel-circle {
    width: 44px;
    height: 44px;
    border-radius: 999px;
    display: grid;
    place-items: center;
    color: #ffffff;
}
.pt-wizard__success-channel-circle svg { display: block; }
.pt-wizard__success-channel-label {
    font-size: 10.5px;
    font-weight: 700;
    color: var(--ptp-ink-mute);
}
.pt-wizard__success-emails {
    margin: 16px 0 0;
    font-size: 12.5px;
    font-weight: 700;
    color: var(--ptp-success);
}
.pt-wizard__success-emails[hidden] { display: none !important; }
.pt-wizard__success-actions {
    display: flex;
    gap: 10px;
    justify-content: center;
    margin-top: 16px;
}
.pt-wizard__success-actions .pt-portal__btn-outline {
    height: 38px;
    padding: 0 16px;
    border-radius: 999px !important;
}

/* ============================================================
   Designbart datumfält — popover som öppnas UPPÅT (i wizard-modalen
   där det inte får växa nedåt ur panelen). JS sätter --up-klassen.
   ============================================================ */
.pt-date-field__panel--up {
    top: auto !important;
    bottom: calc(100% + 6px) !important;
}

/* ---- Responsivt ---- */
@media (max-width: 600px) {
    .pt-portal__edit-preview-view { display: none; }
    .pt-portal__edit-preview-name { font-size: 16px; }
    .pt-wizard__steplabel { font-size: 9.5px; }
    .pt-portal__edit-share-col { flex: 1 1 100%; }
}

/* ============================================================
   ÖNSKELISTOR v1.4.8 — lägg-till-blockets tvådelning (sajt-produkt
   vs eget önskemål), wizardens invite-hint, succévyns stäng-X.
   ============================================================ */
.pt-portal__add-block-label {
    display: flex;
    align-items: center;
    gap: 6px;
}
.pt-portal__add-block-label svg { color: var(--ptp-ink-mute); flex: none; }
.pt-portal__add-block-hint {
    margin: 4px 0 10px;
    font-size: 11.5px;
    color: var(--ptp-ink-mute);
    line-height: 1.4;
}
.pt-portal__add-block-hint--wizard { margin: 2px 0 8px; }
.pt-portal__add-divider {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 16px 0;
}
.pt-portal__add-divider::before,
.pt-portal__add-divider::after {
    content: "";
    flex: 1;
    height: 1px;
    background: var(--ptp-line);
}
.pt-portal__add-divider span {
    font-size: 10.5px;
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: #9ca3af;
}
.pt-wizard__invite-more-hint {
    display: flex;
    align-items: center;
    gap: 6px;
    margin: 6px 0 0;
    font-size: 11.5px;
    color: var(--ptp-ink-mute);
    line-height: 1.4;
}
.pt-wizard__invite-more-hint svg { flex: none; color: var(--ptp-accent-deep); }
/* Succévyns stäng-X bor i .pt-wizard__success (position:relative); basknappen
   .pt-wizard-modal__close ger vit cirkel + svart kryss (syns mot vit succéyta). */
.pt-wizard__success-close { top: 12px !important; right: 12px !important; }

/* Succévyns e-postinbjudan (flyttad hit från steg 4): centrerad kolumn,
   vänsterställt innehåll, gröna kvitto-taggar för skickade adresser. */
.pt-wizard__success-invite {
    max-width: 380px;
    margin: 18px auto 0;
    text-align: left;
}
.pt-wizard__success-invite .pt-wizard__success-sharelabel { margin-top: 0; text-align: left; }
.pt-wizard__success-invite-form {
    display: flex;
    gap: 8px;
    margin-top: 8px;
}
.pt-wizard__success-invite-form input {
    flex: 1;
    min-width: 0;
    height: 42px;
    border: 1px solid var(--ptp-line);
    border-radius: 10px;
    padding: 0 12px;
    font-family: inherit;
    font-size: 13.5px;
    color: var(--ptp-ink);
    background: var(--ptp-surface);
}
.pt-wizard__success-invite-form input:focus {
    border-color: var(--ptp-accent-deep);
    box-shadow: var(--ptp-focus-ring);
    outline: none;
}
.pt-wizard__success-invite-form button { height: 42px; flex: 0 0 auto; white-space: nowrap; }
.pt-wizard__success-invite-status { margin: 8px 0 0; text-align: left; }
.pt-share-modal__email-tag--sent {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    background: var(--ptp-success-soft, #ecfdf5);
    color: var(--ptp-success, #047857);
}
.pt-share-modal__email-tag--sent svg { flex: none; }

/* ============================================================
   ASTRA THEME OVERRIDES — placed late in the file so they take
   precedence over the component sections above. NOTE: the blocks
   that follow (the consolidated mobile pass, alert-stack and the
   canonical alert-group block) intentionally come AFTER this
   section and carry their own targeted Astra resets where needed
   (cascade verified 2026-06-12). Astra applies global styles
   to button, a, input, h1, h2, h3 with high specificity (theme
   class .ast-* + body class). Without these overrides, our portal
   buttons inherit theme uppercase + extra padding + box-shadow on
   hover, which breaks the canon look.
   ============================================================ */

/* All <a> elements inside the portal sidebar/main: no hover
   underline, no theme font-transform, no theme letter-spacing. */
.pt-portal--sidebar a,
.pt-portal--sidebar a:hover,
.pt-portal--sidebar a:focus,
.pt-portal--sidebar a:active,
.pt-portal--sidebar a:visited {
    text-decoration: none !important;
    text-transform: none !important;
    letter-spacing: normal !important;
}

/* All <button> elements inside the portal: reset theme defaults so
   our explicit BEM-class styles win without extra !important
   battles in every individual rule. Buttons that don't have a
   class will still look like raw OS buttons (rare). */
.pt-portal--sidebar button,
.pt-portal--sidebar button:hover,
.pt-portal--sidebar button:focus,
.pt-portal--sidebar button:active {
    text-transform: none !important;
    letter-spacing: normal !important;
    
    box-shadow: none !important;
    text-decoration: none !important;
}
.pt-portal--sidebar button:focus-visible {
    outline: none !important;
    box-shadow: var(--ptp-focus-ring) !important;
}

/* Astra adds extra padding to inputs in some skins. Reset to our
   own field metrics. */
.pt-portal--sidebar input[type="text"],
.pt-portal--sidebar input[type="email"],
.pt-portal--sidebar input[type="password"],
.pt-portal--sidebar input[type="number"],
.pt-portal--sidebar input[type="date"],
.pt-portal--sidebar select,
.pt-portal--sidebar textarea {
    
    box-shadow: none !important;
}
/* Fokusring-undantaget för fält (speglar knapp-undantaget ovan) -
   utan detta släcker input-reseten kanon-ringen på portalens fält. */
.pt-portal--sidebar input:focus-visible,
.pt-portal--sidebar select:focus-visible,
.pt-portal--sidebar textarea:focus-visible {
    box-shadow: var(--ptp-focus-ring) !important;
}

/* h1/h2/h3/h4 — Astra forces serif/uppercase/letter-spacing on
   theme headers. Force our display font + sizes. */
.pt-portal--sidebar h1,
.pt-portal--sidebar h2,
.pt-portal--sidebar h3,
.pt-portal--sidebar h4 {

    text-transform: none !important;
    letter-spacing: -0.01em !important;
    color: var(--ptp-ink) !important;
}
.pt-portal--sidebar .pt-portal__page-header h1 {
    letter-spacing: -0.02em !important;
}
.pt-portal--sidebar .pt-portal__hero-greeting {
    letter-spacing: -0.02em !important;
}
/* Undantag från ink-forceringen ovan: navy-herons vita rubrik och
   danger-kortets röda rubrik. */
.pt-portal--sidebar .pt-portal__watch-hero h2 {
    color: #ffffff !important;
}
.pt-portal--sidebar .pt-portal__card--danger h3 {
    color: var(--ptp-danger) !important;
}

/* CTA / outline / accent / soft / danger buttons — these classes
   are BEM-controlled, override Astra global button CSS. The
   transition + cursor were already in our base rule, but Astra
   overrides padding/font on hover; force again here. */
.pt-portal--sidebar .pt-portal__cta-btn,
.pt-portal--sidebar .pt-portal__btn-outline,
.pt-portal--sidebar .pt-portal__btn-accent,
.pt-portal--sidebar .pt-portal__btn-danger {
    padding: 10px 18px !important;
    font-size: 13.5px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    border-radius: var(--ptp-radius-pill) !important;
    box-shadow: none !important;
    cursor: pointer !important;
    text-decoration: none !important;
    white-space: nowrap !important;
}
.pt-portal--sidebar .pt-portal__cta-btn:hover,
.pt-portal--sidebar .pt-portal__btn-outline:hover,
.pt-portal--sidebar .pt-portal__btn-accent:hover,
.pt-portal--sidebar .pt-portal__btn-danger:hover {
    box-shadow: none !important;
    text-decoration: none !important;
    transform: none !important;
}
.pt-portal--sidebar .pt-portal__btn-outline--small {
    padding: 6px 12px !important;
    font-size: 13px !important;
}

/* Sidebar links — Astra would otherwise add underline on hover. */
.pt-portal--sidebar .pt-portal__sidebar-link,
.pt-portal--sidebar .pt-portal__sidebar-link:hover,
.pt-portal--sidebar .pt-portal__sidebar-link:focus,
.pt-portal--sidebar .pt-portal__sidebar-link:active,
.pt-portal--sidebar .pt-portal__sidebar-link:visited {
    text-decoration: none !important;
    box-shadow: none !important;
}
/* …men tangentbordsfokus får kanon-ringen (spec §2.3 — sidomenyn
   saknade tidigare all fokus-stil). */
.pt-portal--sidebar .pt-portal__sidebar-link:focus-visible {
    outline: none !important;
    box-shadow: var(--ptp-focus-ring) !important;
}

/* Card-header link arrow — no underline. */
.pt-portal--sidebar .pt-portal__card-header-link,
.pt-portal--sidebar .pt-portal__card-header-link:hover,
.pt-portal--sidebar .pt-portal__card-header-link:focus {
    text-decoration: none !important;
}

/* Fav button on cards — keep round, no theme button-padding. */
.pt-portal--sidebar .pt-portal__remove-btn,
.pt-portal--sidebar .pt-portal__remove-btn:hover,
.pt-portal--sidebar .pt-portal__remove-btn:focus {
    padding: 0 !important;
    box-shadow: var(--ptp-shadow-sm) !important;
}

/* Toggle row label — Astra adds margin-bottom on labels. */
.pt-portal--sidebar .pt-portal__toggle-row {
    margin: 0 !important;
}

/* Fields (form labels): Astra makes them block + small font. */
.pt-portal--sidebar .pt-portal__field label,
.pt-portal--sidebar .pt-portal__label {
    margin-bottom: 0 !important;
}

/* Tabs (filter row) — keep buttons compact + no Astra padding. */
.pt-portal--sidebar .pt-portal__tab,
.pt-portal--sidebar .pt-portal__tab:hover,
.pt-portal--sidebar .pt-portal__tab:focus {
    padding: 7px 16px !important;
    font-size: 13px !important;
    font-weight: 600 !important;
    box-shadow: none !important;
    text-decoration: none !important;
    transform: none !important;
    line-height: 1.2 !important;
    white-space: nowrap !important;
}
.pt-portal--sidebar .pt-portal__tabs--icons .pt-portal__tab {
    padding: 7px 10px !important;
}
.pt-portal--sidebar .pt-portal__tab.is-active {
    font-weight: 700 !important;
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.08) !important;
}

/* Sort menu options — Astra adds button styles. */
.pt-portal--sidebar .pt-portal__sort-option,
.pt-portal--sidebar .pt-portal__sort-option:hover,
.pt-portal--sidebar .pt-portal__sort-option:focus {
    padding: 8px 12px !important;
    font-size: 13px !important;
    text-align: left !important;
    text-transform: none !important;
    box-shadow: none !important;
    border-radius: var(--ptp-radius-sm) !important;
}

/* Share modal channels — Astra adds underline on <a>. */
.pt-portal--sidebar .pt-share-modal a,
.pt-portal--sidebar ~ .pt-share-modal a,
.pt-share-modal a,
.pt-share-modal a:hover,
.pt-share-modal a:focus,
.pt-share-modal a:visited {
    text-decoration: none !important;
}

/* Toggle / radio inputs accent color — match brand blue. */
.pt-portal--sidebar input[type="checkbox"],
.pt-portal--sidebar input[type="radio"] {
    accent-color: var(--ptp-accent-deep);
}

/* Final portal button states and hover policy. Theme CSS may target generic
   buttons late, so these states intentionally use !important. */
.pt-portal--sidebar .pt-portal__cta-btn,
.pt-portal--sidebar button.pt-portal__cta-btn {
    background: #2563eb !important;
    border: 1px solid #2563eb !important;
    color: #fff !important;
}
.pt-portal--sidebar .pt-portal__cta-btn:hover,
.pt-portal--sidebar button.pt-portal__cta-btn:hover,
.pt-portal--sidebar .pt-portal__cta-btn:focus-visible,
.pt-portal--sidebar button.pt-portal__cta-btn:focus-visible {
    background: #1d4ed8 !important;
    border-color: #1d4ed8 !important;
    color: #fff !important;
}
.pt-portal--sidebar .pt-portal__cta-btn:active,
.pt-portal--sidebar button.pt-portal__cta-btn:active {
    background: #1e40af !important;
    border-color: #1e40af !important;
    color: #fff !important;
}
/* Ghost-knapp (spec §2.2): transparent-vit, border rgba(17,24,39,0.14),
   hover: border → #9ca3af. */
.pt-portal--sidebar .pt-portal__btn-outline,
.pt-portal--sidebar button.pt-portal__btn-outline {
    background: var(--ptp-surface) !important;
    border: 1px solid rgba(17, 24, 39, 0.14) !important;
    color: var(--ptp-ink) !important;
}
.pt-portal--sidebar .pt-portal__btn-outline:hover,
.pt-portal--sidebar button.pt-portal__btn-outline:hover,
.pt-portal--sidebar .pt-portal__btn-outline:focus-visible,
.pt-portal--sidebar button.pt-portal__btn-outline:focus-visible {
    background: var(--ptp-surface) !important;
    border-color: #9ca3af !important;
    color: var(--ptp-ink) !important;
}
.pt-portal--sidebar .pt-portal__btn-outline:active,
.pt-portal--sidebar button.pt-portal__btn-outline:active {
    background: var(--ptp-bg-tint) !important;
    border-color: #9ca3af !important;
    color: var(--ptp-ink) !important;
}
.pt-portal--sidebar button:disabled,
.pt-portal--sidebar .pt-portal__cta-btn:disabled,
.pt-portal--sidebar .pt-portal__btn-outline:disabled {
    opacity: 0.55 !important;
    cursor: not-allowed !important;
    filter: grayscale(0.15) !important;
}
/* Hover-språket (spec §2.2): border #e5e7eb → #d1d5db + skugga
   0 6px 16px rgba(17,24,39,0.08). INGA transforms, ingen bildzoom.
   (Den gamla !important-nollningen av all hover-skugga och den
   ljusblå watch-hero-plattan är raderade — spec §2.2/§2.7.) */
.pt-portal--sidebar .pt-portal__stat-card:hover,
.pt-portal--sidebar .pt-portal__product-card:hover,
.pt-portal--sidebar .pt-portal__product-row:hover,
.pt-portal--sidebar .pt-portal__wishlist-card:hover {
    border-color: var(--ptp-line-strong) !important;
    box-shadow: var(--ptp-shadow-hover) !important;
    transform: none !important;
}

/* ============================================================
   Sök-dropdown (önskelistor) — ASTRA-HÄRDNING. Produktnamnen blev
   osynliga/överlappande i temats kontext (ägarfynd 2026-06-13),
   trots att vår egen CSS renderar raden korrekt isolerat (verifierat
   via repro-screenshot). Astra nollar/ärver färg + layout på knapp-
   barnen; !important-pansra namn/varumärke/kolumn i BÅDE wizard-
   modalen och redigeringsvyn. Frysta klasser, bara hårdade värden.
   ============================================================ */
.pt-portal__wishlist-search-info {
    display: flex !important;
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 1px !important;
    min-width: 0 !important;
}
.pt-portal__wishlist-search-name {
    color: #111827 !important;
    font-size: 13px !important;
    font-weight: 600 !important;
    line-height: 1.3 !important;
    text-decoration: none !important;
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    max-width: 100% !important;
    text-transform: none !important;
}
.pt-portal__wishlist-search-brand {
    color: #9ca3af !important;
    line-height: 1.2 !important;
    text-decoration: none !important;
}
.pt-portal__wishlist-search-price { color: #6b7280 !important; }
.pt-portal__wishlist-search-add { color: #2563eb !important; }
.pt-portal__wishlist-search-item.is-added .pt-portal__wishlist-search-add { color: #047857 !important; }

/* ============================================================
   Mobile redesign (handoff: mitt konto mobil)
   ────────────────────────────────────────────────────────────
   Adds:
   - Hero body wrapper (works on both desktop and mobile)
   - Quick-actions row (primary CTA + outline secondary)
   - Bottom tab-bar (mobile-only, replaces sidebar)
   - "Mer"-sheet (bottom-sheet overflow for tab-bar)

   All colours/spacing reuse existing --ptp-* tokens; no new design
   primitives are introduced. Desktop layout (≥961px) is unaffected.
   (Hero-avataren är borttagen ur markupen — receptet raderat i
   städsvepet 2026-06-12.)
   ============================================================ */

/* ---------- Hero layout ---------- */
.pt-portal__hero {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
}
.pt-portal__hero-body {
    flex: 1;
    min-width: 0;
    position: relative;
    z-index: 1;
}

/* ---------- Quick-actions row ---------- */
.pt-portal__quick-actions {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    margin: 0 0 18px;
}
/* Quick actions (spec §4.1): EN blå primärnivå — primär = blå pill,
   övriga = ghost-pills. Glow + transform borttagna. */
.pt-portal__quick-action {
    flex: 0 1 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 10px 20px;
    min-height: 0;
    border-radius: var(--ptp-radius-pill);
    background: var(--ptp-surface); /* prototypen: vita ghost-pills */
    border: 1px solid rgba(17, 24, 39, 0.14);
    color: var(--ptp-ink);
    font-family: inherit;
    font-size: 13.5px;
    font-weight: 700;
    line-height: 1.2;
    text-align: center;
    text-decoration: none;
    white-space: nowrap;
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
    cursor: pointer;
}
.pt-portal__quick-action svg {
    color: inherit;
    flex: none;
    width: 16px;
    height: 16px;
}
.pt-portal__quick-action:hover {
    background: var(--ptp-surface);
    border-color: #9ca3af;
    box-shadow: 0 4px 12px rgba(17, 24, 39, 0.07);
    color: var(--ptp-ink);
}
.pt-portal__quick-action--primary,
.pt-portal__quick-action--primary:link,
.pt-portal__quick-action--primary:visited {
    background: var(--ptp-accent-deep);
    color: #ffffff;
    border-color: var(--ptp-accent-deep);
    box-shadow: none;
}
.pt-portal__quick-action--primary svg {
    color: #ffffff;
}
.pt-portal__quick-action--primary:hover {
    background: #1d4ed8;
    border-color: #1d4ed8;
    color: #ffffff;
    box-shadow: none;
}
.pt-portal__quick-action:focus-visible {
    outline: none;
    box-shadow: var(--ptp-focus-ring);
}

/* ---------- Bottom tab-bar (hidden on desktop) ---------- */
.pt-portal__tabbar {
    display: none;
}

/* ---------- "Mer"-sheet (uses position:fixed so the desktop never
     sees it unless it gets opened; safe to leave declared globally) ---------- */
.pt-portal__more-scrim {
    position: fixed;
    inset: 0;
    z-index: 60;
    background: rgba(17, 24, 39, 0.5);
    opacity: 0;
    transition: opacity 200ms ease;
}
.pt-portal__more-scrim.is-open { opacity: 1; }
.pt-portal__more-scrim[hidden] { display: none; }

.pt-portal__more-sheet {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 61;
    background: var(--ptp-surface);
    border-top-left-radius: 20px;
    border-top-right-radius: 20px;
    padding: 8px 0 calc(28px + env(safe-area-inset-bottom, 0px));
    box-shadow: 0 -10px 30px rgba(17, 24, 39, 0.12);
    transform: translateY(100%);
    transition: transform 250ms cubic-bezier(0.2, 0.7, 0.2, 1);
    font-family: inherit;
}
.pt-portal__more-sheet.is-open { transform: translateY(0); }
.pt-portal__more-sheet[hidden] { display: none; }

.pt-portal__more-sheet-handle {
    width: 40px;
    height: 4px;
    border-radius: 999px;
    background: var(--ptp-line-strong);
    margin: 4px auto 14px;
}
.pt-portal__more-sheet-title {
    font-size: 13px;
    font-weight: 600;
    color: var(--ptp-ink-mute);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    padding: 0 22px 8px;
}

.pt-portal__more-row {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 22px;
    min-height: 56px;
    color: var(--ptp-ink);
    text-decoration: none;
    width: 100%;
    background: none;
    border: 0;
    cursor: pointer;
    font: inherit;
    text-align: left;
}
.pt-portal__more-row:hover { background: var(--ptp-bg-tint); }
.pt-portal__more-row:active { background: var(--ptp-bg); }
.pt-portal__more-row:focus-visible {
    outline: 2px solid rgba(37, 99, 235, 0.4);
    outline-offset: -2px;
}

/* Mer-sheetens rader (spec §4.9, prototypen): 14.5px/600 #374151 med
   neutralt grå ikoner #9ca3af — de tidigare trasiga ikonfärgs-tokens
   (sage/butter/sky var odefinierade) är ersatta. */
.pt-portal__more-row-icon {
    width: 24px;
    height: 24px;
    border-radius: 0;
    background: transparent;
    color: #9ca3af;
    display: grid;
    place-items: center;
    flex: none;
}
.pt-portal__more-row-icon svg {
    width: 19px;
    height: 19px;
}
.pt-portal__more-row-icon--sage,
.pt-portal__more-row-icon--butter,
.pt-portal__more-row-icon--sky,
.pt-portal__more-row-icon--danger {
    background: transparent;
    color: #9ca3af;
}

.pt-portal__more-row-label {
    flex: 1;
    font-size: 14.5px;
    font-weight: 600;
    color: #374151;
    line-height: 1.3;
}
.pt-portal__more-row-chev {
    width: 18px;
    height: 18px;
    color: var(--ptp-ink-mute);
    flex: none;
}
/* KONTRAKT (Fas 2): badge-räknare i Mer-sheetens rader. */
.pt-portal__more-row-badge {
    margin-left: auto;
    font-size: 11px;
    font-weight: 700;
    color: #4b5563;
    background: #f3f4f6;
    border-radius: var(--ptp-radius-pill);
    padding: 1px 8px;
    flex: none;
}
.pt-portal__more-divider {
    height: 1px;
    background: var(--ptp-line);
    margin: 6px 22px;
}
/* Logga ut — muted (prototypen), under dividern. */
.pt-portal__more-logout {
    color: var(--ptp-ink-mute);
    font-weight: 600;
}
.pt-portal__more-logout .pt-portal__more-row-label { color: var(--ptp-ink-mute); }

/* Body-scroll lock while the sheet is open. */
body.pt-more-open { overflow: hidden; }

/* ---------- Mobile-only overrides ---------- */
@media (max-width: 960px) {
    /* Hide the desktop sidebar — the bottom tab-bar takes over. */
    .pt-portal--sidebar .pt-portal__sidebar { display: none !important; }

    /* Collapse the grid to a single column and reserve bottom space
       for the fixed tab-bar + iOS safe-area. */
    .pt-portal--sidebar {
        grid-template-columns: minmax(0, 1fr) !important;
        padding-bottom: calc(74px + env(safe-area-inset-bottom, 22px));
    }

    /* On mobile main content takes full width — container padding
       (det konsoliderade mobilpasset) tar över, så main-kolumnens
       desktop-padding nollställs. */
    .pt-portal__main {
        max-width: none;
        margin: 0;
        padding: 0 !important;
    }

    .pt-portal__tabbar {
        display: block;
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 50;
        padding-bottom: env(safe-area-inset-bottom, 22px);
        background: rgba(255, 255, 255, 0.92);
        backdrop-filter: saturate(160%) blur(18px);
        -webkit-backdrop-filter: saturate(160%) blur(18px);
        border-top: 1px solid var(--ptp-line);
        font-family: inherit;
    }
    .pt-portal__tabbar-row {
        display: grid;
        /* auto-fit i st.f. hårdkodad repeat(5,1fr) — antalet flikar
           kan ändras utan av-centrering (spec §4.9). */
        grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
        padding: 8px 6px 2px;
    }
    .pt-portal__tabbar-tab {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 4px;
        padding: 6px 4px 4px;
        min-height: 52px;
        color: var(--ptp-ink-mute);
        text-decoration: none;
        background: none;
        border: 0;
        cursor: pointer;
        font-family: inherit;
        font-size: 11px;
        position: relative;
        -webkit-appearance: none;
        appearance: none;
    }
    .pt-portal__tabbar-tab:hover { color: var(--ptp-ink-soft); }
    .pt-portal__tabbar-tab.is-active,
    .pt-portal__tabbar-tab[aria-current="page"] {
        color: #1d4ed8;
    }
    .pt-portal__tabbar-tab.is-active .pt-portal__tabbar-label,
    .pt-portal__tabbar-tab[aria-current="page"] .pt-portal__tabbar-label {
        font-weight: 700;
    }
    .pt-portal__tabbar-tab:focus-visible {
        outline: 2px solid rgba(37, 99, 235, 0.4);
        outline-offset: 2px;
        border-radius: 8px;
    }
    .pt-portal__tabbar-icon {
        width: 22px;
        height: 22px;
        color: #9ca3af;
    }
    .pt-portal__tabbar-tab.is-active .pt-portal__tabbar-icon,
    .pt-portal__tabbar-tab[aria-current="page"] .pt-portal__tabbar-icon {
        color: #1d4ed8;
    }
    .pt-portal__tabbar-label {
        font-size: 10px;
        font-weight: 600;
        line-height: 1;
        white-space: nowrap;
    }
    /* Badge = samma blå familj som aktiv flik (spec §4.9 — löser
       navy/rosa-kollisionen). */
    .pt-portal__tabbar-badge {
        position: absolute;
        top: 2px;
        right: calc(50% - 18px);
        font-size: 10px;
        font-weight: 700;
        line-height: 1;
        padding: 3px 5px;
        border-radius: 999px;
        background: #2563eb;
        color: #ffffff;
        min-width: 16px;
        text-align: center;
    }

    /* (Mobil-måtten för hero/statkort/padding ligger samlade i DET
       ENDA mobil-!important-passet längre ner — spec §2.7.) */
}

/* Stack quick-actions vertically on very small phones so the labels
   never truncate and tap targets stay generous. */
@media (max-width: 380px) {
    .pt-portal__quick-actions { flex-direction: column; }
}

/* Reduced-motion users get instant transitions instead of slides. */
@media (prefers-reduced-motion: reduce) {
    .pt-portal__more-scrim,
    .pt-portal__more-sheet,
    .pt-portal__quick-action {
        transition: none;
    }
}

/* ============================================================
   Mobile redesign — bug fixes & polish
   ────────────────────────────────────────────────────────────
   - Theme button styles (Astra etc.) leak into the new tab-bar
     and Mer-sheet because <button> is a high-impact selector
     for most themes. We force-reset every state with high
     specificity (double-class) + !important to win.
   - Badge = kanon-blå #2563eb (spec §4.9), satt i tab-barens
     basregel ovan.
   - Mobile padding tightened — the previous 18px side-padding
     left a thick "outer frame" feel; 10px is closer to a real
     mobile-app feel where cards almost reach the edge.
   ============================================================ */

/* ---------- Tab-bar button reset (against theme styles) ---------- */
.pt-portal__tabbar-tab.pt-portal__tabbar-tab,
.pt-portal__tabbar-tab.pt-portal__tabbar-tab:link,
.pt-portal__tabbar-tab.pt-portal__tabbar-tab:visited {
    background: transparent !important;
    background-image: none !important;
    background-color: transparent !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    text-shadow: none !important;
    text-decoration: none !important;
    transform: none !important;
    font-family: inherit !important;
    cursor: pointer !important;
    -webkit-appearance: none !important;
    appearance: none !important;
    outline: none;
}
.pt-portal__tabbar-tab.pt-portal__tabbar-tab:hover,
.pt-portal__tabbar-tab.pt-portal__tabbar-tab:focus {
    background: transparent !important;
    background-image: none !important;
    border: 0 !important;
    box-shadow: none !important;
    text-shadow: none !important;
    transform: none !important;
    outline: none !important;
    color: var(--ptp-ink-soft) !important;
}
.pt-portal__tabbar-tab.pt-portal__tabbar-tab.is-active,
.pt-portal__tabbar-tab.pt-portal__tabbar-tab.is-active:hover,
.pt-portal__tabbar-tab.pt-portal__tabbar-tab[aria-current="page"],
.pt-portal__tabbar-tab.pt-portal__tabbar-tab[aria-current="page"]:hover {
    color: #1d4ed8 !important;
}
.pt-portal__tabbar-tab.pt-portal__tabbar-tab:active {
    background: transparent !important;
    background-image: none !important;
    border: 0 !important;
    box-shadow: none !important;
    transform: none !important;
    color: #1d4ed8 !important;
}
.pt-portal__tabbar-tab.pt-portal__tabbar-tab:focus-visible {
    outline: 2px solid rgba(37, 99, 235, 0.4) !important;
    outline-offset: 2px !important;
    border-radius: 8px !important;
}

/* ---------- Mer-row button reset ---------- */
.pt-portal__more-row.pt-portal__more-row,
.pt-portal__more-row.pt-portal__more-row:link,
.pt-portal__more-row.pt-portal__more-row:visited {
    background: transparent !important;
    background-image: none !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    text-shadow: none !important;
    text-decoration: none !important;
    transform: none !important;
    font: inherit !important;
    font-family: inherit !important;
    cursor: pointer !important;
    -webkit-appearance: none !important;
    appearance: none !important;
    text-align: left !important;
}
.pt-portal__more-row.pt-portal__more-row:hover,
.pt-portal__more-row.pt-portal__more-row:focus {
    background: var(--ptp-bg-tint) !important;
    background-image: none !important;
    border: 0 !important;
    box-shadow: none !important;
    text-shadow: none !important;
    transform: none !important;
    outline: none !important;
}
.pt-portal__more-row.pt-portal__more-row:active {
    background: var(--ptp-bg) !important;
    border: 0 !important;
    box-shadow: none !important;
    transform: none !important;
}
.pt-portal__more-row.pt-portal__more-row:focus-visible {
    outline: 2px solid rgba(37, 99, 235, 0.4) !important;
    outline-offset: -2px !important;
}

/* ---------- DET ENDA mobil-!important-passet (spec §2.7: de tre
   staplade passen är konsoliderade hit) ---------- */
@media (max-width: 960px) {
    /* Tight outer padding — was 20px 18px which created a visible
       outer frame around the hero card. Going to 10px puts the cards
       closer to the screen edge for a true mobile-app feel. */
    .pt-portal--sidebar {
        padding: 12px 10px calc(74px + env(safe-area-inset-bottom, 22px)) !important;
        gap: 14px !important;
        overflow-x: clip;
    }
    .pt-portal__page-header h1 { font-size: 22px; }
    /* Statkort + listkort: 2 kolumner (prototypen, mobil 390px). */
    .pt-portal__stats-grid { grid-template-columns: 1fr 1fr; }
    .pt-portal__wishlist-cards { grid-template-columns: 1fr 1fr; gap: 10px; }
    /* "Visa"-knappen i favoritlistvyn döljs — för trångt (spec §4.2). */
    .pt-portal__product-row__view,
    a.pt-portal__product-row__view { display: none !important; }
    /* Grid-blowout-skydd: gridbarn får aldrig tvinga horisontell
       scroll (spec §4.9). */
    .pt-portal__stats-grid > *,
    .pt-portal__wishlist-cards > *,
    .pt-portal__alert-stack > * { min-width: 0; }
    /* Hero: tighter padding (was 22px 20px) so the card hugs the
       screen edge. */
    .pt-portal__hero {
        padding: 18px 16px 16px !important;
        margin-bottom: 14px !important;
        gap: 14px !important;
    }
    .pt-portal__hero-greeting {
        font-size: 22px !important;
        margin-bottom: 4px !important;
    }
    .pt-portal__hero-sub {
        font-size: 14px !important;
    }
    /* Stat-cards: tighter inner padding + smaller gap between cards. */
    .pt-portal__stats-grid {
        gap: 10px !important;
        margin-bottom: 14px !important;
    }
    .pt-portal__stat-card {
        padding: 14px 14px !important;
    }
    .pt-portal__stat-number {
        font-size: 26px !important;
    }
    .pt-portal__stat-label {
        font-size: 12px !important;
    }
    /* Recent-favorites card + section padding. */
    .pt-portal__card {
        padding: 14px !important;
        border-radius: var(--ptp-radius-lg) !important;
    }
    .pt-portal__card-header {
        padding-bottom: 10px !important;
        margin-bottom: 10px !important;
    }
    .pt-portal__product-grid {
        gap: 8px !important;
    }
    /* Quick-actions tighten too — behåller pill-proportionerna. */
    .pt-portal__quick-actions {
        margin-bottom: 14px !important;
        gap: 8px !important;
        flex-wrap: wrap;
    }
    .pt-portal__quick-action {
        padding: 10px 16px !important;
        min-height: 0 !important;
        font-size: 13px !important;
    }
    /* Settings & other sections — pull side-padding inward. */
    .pt-portal__settings-section {
        padding: 16px 14px !important;
    }
    .pt-portal__page-header {
        gap: 10px !important;
        margin-bottom: 16px !important;
    }
}

/* On very small phones (≤380px) push it tighter still so the
   pastel hero doesn't feel cramped against the screen edge. */
@media (max-width: 380px) {
    .pt-portal--sidebar {
        padding: 10px 8px calc(74px + env(safe-area-inset-bottom, 22px)) !important;
    }
    .pt-portal__hero {
        padding: 16px 14px 14px !important;
    }
    .pt-portal__stat-card {
        padding: 12px !important;
    }
}

/* ---------- Strip the section wrapper on mobile ----------
   `.pt-portal__section` adds a white background, padding, shadow and
   border-radius around the whole dashboard/settings/etc. content.
   On desktop that creates a tidy outer card; on mobile it nests a
   white card inside another white container, doubling padding and
   making everything feel boxed-in. Wipe it out on mobile so the
   inner cards reach the screen edge naturally. */
@media (max-width: 960px) {
    .pt-portal__section {
        background: transparent !important;
        background-color: transparent !important;
        background-image: none !important;
        padding: 0 !important;
        border: 0 !important;
        border-radius: 0 !important;
        box-shadow: none !important;
    }
}

/* ============================================================
   Mobile redesign round 3 — page-level cleanup
   ────────────────────────────────────────────────────────────
   1. Hide the redundant "Mitt konto"-eyebrow (the H1 below it
      already tells the user where they are).
   2. Centre the hero greeting/avatar on mobile (was left-aligned,
      looked off with a wide-open card).
   3. Reset .pt-portal__tab buttons against theme styles — the
      grid/list view-toggle gets a stray blue background on :focus.
   4. Sort dropdown was going off-screen — clamp it to the viewport.
   5. Watch-hero stacks vertically and shrinks gracefully on mobile.
   6. Favorites toolbar wraps + groups so chips, sort and view-
      toggle don't stack as one tall lonely column.
   ============================================================ */

/* 1 — Eyebrows: Alternativ A använder inga eyebrows. Markupen är
   bortstädad ur PortalShortcodes.php (Fas 2) — den tidigare
   display:none-!important-släckningen är därmed raderad (spec §4.1). */

/* 2 — Centre the hero on mobile so the whole card reads like a
   "welcome card", not a left-aligned text block. */
@media (max-width: 960px) {
    .pt-portal__hero {
        flex-direction: column !important;
        align-items: center !important;
        text-align: center !important;
        gap: 12px !important;
    }
    .pt-portal__hero-body {
        text-align: center !important;
        width: 100% !important;
    }
    .pt-portal__hero-greeting {
        justify-content: center !important;
    }
}

/* 3 — Full reset for the grid/list view-toggle buttons. Astra
   tags `button:focus` with a background; we wipe every state. */
.pt-portal__tab.pt-portal__tab,
.pt-portal__tab.pt-portal__tab:link,
.pt-portal__tab.pt-portal__tab:visited {
    background: transparent !important;
    background-image: none !important;
    border: 0 !important;
    box-shadow: none !important;
    text-shadow: none !important;
    transform: none !important;
    font-family: inherit !important;
    cursor: pointer !important;
    -webkit-appearance: none !important;
    appearance: none !important;
    color: var(--ptp-ink-soft) !important;
}
.pt-portal__tab.pt-portal__tab:hover {
    background: transparent !important;
    color: var(--ptp-ink) !important;
    box-shadow: none !important;
    transform: none !important;
}
.pt-portal__tab.pt-portal__tab:focus,
.pt-portal__tab.pt-portal__tab:active {
    background: transparent !important;
    box-shadow: none !important;
    transform: none !important;
    outline: none !important;
}
.pt-portal__tab.pt-portal__tab.is-active,
.pt-portal__tab.pt-portal__tab.is-active:hover,
.pt-portal__tab.pt-portal__tab.is-active:focus {
    background: var(--ptp-surface) !important;
    color: var(--ptp-ink) !important;
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.08) !important;
    transform: none !important;
}
.pt-portal__tab.pt-portal__tab:focus-visible {
    outline: 2px solid rgba(37, 99, 235, 0.4) !important;
    outline-offset: 2px !important;
    border-radius: var(--ptp-radius-pill) !important;
}

/* 4 — Sort dropdown was anchored right:0 with no clamp, so on
   mobile it slid off-screen when the toggle button sat near the
   right edge. Clamp via max-width and let it open whichever
   direction it has room for. */
@media (max-width: 600px) {
    .pt-portal__sort-menu {
        right: 0 !important;
        left: auto !important;
        min-width: 0 !important;
        width: max-content !important;
        max-width: calc(100vw - 24px) !important;
    }
}

/* 5 — Bevakningar hero on mobile. The grid stacked to two columns
   on tablet but kept the 220px sidebar of stat cards on small
   phones; here we collapse to a single column and put the stats
   inline as 3 equal columns so the whole hero reads in one glance
   instead of "tall paragraph + stacked stat boxes". */
@media (max-width: 960px) {
    .pt-portal__watch-hero {
        grid-template-columns: minmax(0, 1fr) !important;
        gap: 14px !important;
        padding: 18px !important;
        margin-bottom: 14px !important;
    }
    .pt-portal__watch-hero-main h2,
    .pt-portal__watch-hero h2 {
        font-size: 20px !important;
        margin: 0 !important;
    }
    .pt-portal__watch-hero-main p {
        font-size: 13px !important;
    }
    .pt-portal__watch-hero-stats {
        min-width: 0 !important;
        gap: 8px !important;
    }
    .pt-portal__watch-hero-stats div {
        flex: 1 1 0 !important;
        min-width: 0 !important;
        padding: 10px 8px !important;
        text-align: center !important;
    }
    .pt-portal__watch-hero-stats strong {
        font-size: 17px !important;
    }
    .pt-portal__watch-hero-stats span {
        font-size: 11px !important;
        line-height: 1.3 !important;
        display: block !important;
    }
}
@media (max-width: 380px) {
    .pt-portal__watch-hero-stats {
        gap: 6px !important;
    }
    .pt-portal__watch-hero-stats div {
        padding: 8px 6px !important;
    }
    .pt-portal__watch-hero-stats span {
        font-size: 10px !important;
    }
}

/* 6 — Favorites toolbar (page-header + filter chips + sort + view
   toggle). On desktop these sit in one row; on mobile the previous
   styling just let them stack vertically which felt random. Now
   they wrap into logical clusters: actions row on top, filter row
   below, sort+view-toggle as a pair on the same row. */
@media (max-width: 720px) {
    .pt-portal__page-header {
        flex-wrap: wrap !important;
        align-items: flex-start !important;
    }
    .pt-portal__page-header-actions {
        flex-wrap: wrap !important;
        gap: 8px !important;
        width: 100% !important;
        justify-content: flex-start !important;
    }
    .pt-portal__page-header-actions > * {
        flex: 0 0 auto !important;
    }
    .pt-portal__filter-actions {
        flex-wrap: wrap !important;
        gap: 6px !important;
        align-items: center !important;
    }
    /* Position sort + view-toggle as one tight pair so they don't
       each take a full row on narrow screens. */
    .pt-portal__sort {
        flex: 0 0 auto !important;
    }
    .pt-portal__tabs--icons {
        flex: 0 0 auto !important;
        margin-left: auto !important;
    }
}

/* ============================================================
   .pt-portal__alert-stack — vertical stack wrapper that holds every
   .pt-alert-card on dashboard previews and the full bevakningar-sida.
   ============================================================ */
.pt-portal__alert-stack {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

/* ============================================================
   .pt-portal__alert-group — section card that wraps a stack with a
   header (icon + title + count badge). Used for the two groups on
   the bevakningar-sida: produktbevakningar and varukorgsbevakningar.
   Moved here from inline <style> inside renderAlertsSection().
   ============================================================ */
.pt-portal__alert-group {
    background: var(--ptp-surface);
    border: 1px solid var(--ptp-line);
    border-radius: 16px;
    padding: 20px;
    margin-bottom: 16px;
}
/* Extra luft mellan produkt- och varukorgsgrupperna (ägarfynd 2026-06-13:
   de satt för tätt) - utöver gruppens margin-bottom. */
.pt-portal__alert-group + .pt-portal__alert-group { margin-top: 14px; }
/* Bevakningsfiltrets rad (1.4.10): luft ned till första gruppen. Återanvänder
   .pt-portal__filter-row/.pt-portal__tabs men har bara en flik-rad. */
.pt-portal__filter-row--alerts { margin-bottom: 18px; }
.pt-portal__alert-group[hidden] { display: none !important; }
.pt-portal__alert-group-header {
    /* Icon tile (36px) + title block (~40px with title+subtitle) +
       count badge (24px). Centre-aligning every child used to leave
       the icon hovering between the two text rows because the title
       block is taller than the icon. Top-align them instead so the
       icon's bottom-half lines up with the title row, and use a tiny
       padding-top on the title column to compensate for the icon
       tile's vertical padding — the title's text-baseline now sits
       at the icon's optical centre, which is what the eye expects
       from an "icon + heading + sub-heading" layout. */
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 16px;
    padding-bottom: 14px;
    border-bottom: 1px solid var(--ptp-line);
}
/* Gruppikoner (spec §4.5): Produktbevakningar = klocka amber på
   warning-soft (vyns identitet); Varukorg = grönt på success-soft. */
.pt-portal__alert-group-icon {
    flex-shrink: 0;
    width: 36px;
    height: 36px;
    border-radius: 10px;
    background: var(--ptp-tint-amber);
    color: var(--ptp-amber);
    display: flex;
    align-items: center;
    justify-content: center;
}
.pt-portal__alert-group--baskets .pt-portal__alert-group-icon {
    background: var(--ptp-success-soft);
    color: var(--ptp-green);
}
.pt-portal__alert-group-titles {
    flex: 1;
    min-width: 0;
    /* Center the title+subtitle pair against the icon's 36px height
       so the optical mid of the text matches the icon's mid. */
    min-height: 36px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}
.pt-portal__alert-group-title,
p.pt-portal__alert-group-title {
    margin: 0 !important;
    padding: 0 !important;
    font-family: inherit !important;
    font-size: 16px;
    font-weight: 700;
    color: var(--ptp-ink);
    line-height: 1.25;
}
.pt-portal__alert-group-subtitle,
p.pt-portal__alert-group-subtitle {
    margin: 2px 0 0 !important;
    padding: 0 !important;
    font-family: inherit !important;
    font-size: 13px;
    color: var(--ptp-ink-mute);
    line-height: 1.45;
}
.pt-portal__alert-group-count {
    flex-shrink: 0;
    align-self: center;
    min-width: 24px;
    height: 24px;
    padding: 0 8px;
    border-radius: 999px;
    background: var(--ptp-card-soft);
    color: var(--ptp-ink-soft);
    font-size: 12px;
    font-weight: 700;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.pt-portal__alert-group--baskets .pt-portal__alert-group-count {
    background: var(--ptp-success-soft);
    color: var(--ptp-success);
}
.pt-portal__alert-group--products .pt-portal__alert-group-count {
    background: var(--ptp-tint-amber);
    color: var(--ptp-amber-deep);
}
@media (max-width: 720px) {
    .pt-portal__alert-group {
        padding: 16px;
        border-radius: 14px;
    }
    .pt-portal__alert-group-header {
        gap: 10px;
        margin-bottom: 12px;
        padding-bottom: 12px;
    }
    .pt-portal__alert-group-title { font-size: 15px; }
    .pt-portal__alert-group-subtitle { font-size: 12px; }
}
@media (max-width: 420px) {
    .pt-portal__alert-group { padding: 14px 12px; }
}

/* ============================================================
   .pt-alert-card system has been moved to assets/css/alert-card.css
   (single source of truth, identical contents on every surface).
   The standalone file is enqueued by:
     - Assets.php (for every logged-in user, so the floating
       header popup is styled on pages using the WB24 mega-header
       variant too)
     - SiteHeaderService (when the custom site-header is active)
     - PortalShortcodes (on /mitt-konto/* pages)
   DO NOT paste the rules back into this file. Duplicating ~800
   lines silently diverges the two copies on the next edit.
   ============================================================ */

