/* ─────────────────────────────────────────────────────────────────────────
   customer-portal.css — component classes for the customer-portal shell
   (views/portal/*). Loaded by views/portal/layouts/header.php after
   Theme::head(); bump Theme::CUSTOMER_CSS_VERSION when this changes.
   Colours come from the shell's tokens (classic values in header.php,
   brand values under html[data-theme="refresh"] in theme-refresh.css), with
   fallbacks for tokens the classic customer shell doesn't define.
   Theme-only flourishes (hero blob, rotated review card, pill nav) live in
   theme-refresh.css.
   ───────────────────────────────────────────────────────────────────────── */

/* ── Dashboard hero ────────────────────────────────────────────────────── */
.pt-hero { position: relative; overflow: hidden; padding: 28px 32px; }
.pt-hero-shape { display: none; }
.pt-hero-in { position: relative; display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
.pt-hero-copy { flex: 1 1 100%; min-width: 0; }
.pt-hero-logo { width: 56px; height: 56px; border-radius: 12px; object-fit: contain; background: #fff; border: 1px solid var(--border); flex-shrink: 0; }
.pt-hero-sub { font-size: 14px; margin-top: 6px; max-width: 560px; }
.pt-chips { display: flex; gap: 10px; flex-wrap: wrap; }
.pt-chip { display: flex; flex-direction: column; gap: 2px; padding: 12px 16px; border-radius: 14px; background: var(--surface2, #f8fafc); border: 1px solid var(--border); min-width: 140px; }
.pt-chip .k { font-size: 11px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.pt-chip .v { font-family: var(--font-hd, inherit); font-size: 22px; font-weight: 700; color: var(--navy); line-height: 1; margin-top: 2px; }
.pt-chip .s { font-size: 11px; color: var(--muted); }
.pt-chip .s.good { color: var(--green); font-weight: 600; }
.pt-flash-ok { background: var(--green-bg, #eafaf1); border-color: var(--green-line, #c3ecd4); color: var(--green-dk, #166534); padding: 12px 18px; }

/* ── Two-column body ───────────────────────────────────────────────────── */
.pt-cols { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 20px; }
.pt-col { display: flex; flex-direction: column; gap: 20px; min-width: 0; }
.pt-card h2 { font-size: 15px; font-weight: 700; }
.pt-hr { height: 1px; background: var(--border); margin: 14px 0; }

/* ── Visit rows ────────────────────────────────────────────────────────── */
.pt-visit { display: flex; align-items: center; gap: 14px; padding: 10px 0; border-bottom: 1px solid var(--border); }
.pt-visit:last-child { border-bottom: 0; }
.pt-visit .d { width: 46px; height: 46px; border-radius: 12px; background: var(--bg); display: flex; flex-direction: column; align-items: center; justify-content: center; flex-shrink: 0; }
.pt-visit .d b { font-family: var(--font-hd, inherit); font-size: 18px; line-height: 1; color: var(--navy); }
.pt-visit .d span { font-size: 10px; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); font-weight: 600; margin-top: 2px; }
.pt-visit-t { font-size: 14px; font-weight: 600; color: var(--navy); }
.pt-visit-m { font-size: 12px; color: var(--muted); }

/* ── Badges ────────────────────────────────────────────────────────────── */
.pt-badge { display: inline-flex; align-items: center; padding: 3px 10px; border-radius: 999px; font-size: 11px; font-weight: 700; letter-spacing: .02em; line-height: 1.5; white-space: nowrap; }
.pt-badge-lg { padding: 6px 14px; font-size: 12px; }
.pt-badge.b-navy   { background: var(--navy); color: #fff; }
.pt-badge.b-blue   { background: var(--teal-bg, #e3edf9); color: var(--teal, #1c5cab); }
.pt-badge.b-green  { background: var(--green-bg, #eafaf1); color: var(--green-dk, #166534); }
.pt-badge.b-yellow { background: var(--amber-bg, #fef3c7); color: var(--amber, #92400e); }
.pt-badge.b-coral  { background: var(--red-bg, #fdecea); color: var(--red, #c0392b); }
.pt-badge.b-purple { background: var(--purple-bg, #ede9fe); color: var(--purple, #6d28d9); }
.pt-badge.b-grey   { background: var(--surface2, #f8fafc); color: var(--muted); border: 1px solid var(--border); }

/* ── People ────────────────────────────────────────────────────────────── */
.pt-person { display: flex; align-items: center; gap: 12px; }
.pt-av { width: 40px; height: 40px; border-radius: 50%; background: var(--navy); color: #fff; font-size: 13px; font-weight: 600; display: flex; align-items: center; justify-content: center; flex-shrink: 0; overflow: hidden; position: relative; }
.pt-av img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.pt-av.av-blue  { background: var(--orange); color: #fff; }
.pt-av.av-green { background: var(--green); color: #fff; }
.pt-av.av-purple { background: var(--purple, #7c3aed); color: #fff; }

/* ── Termly review block ───────────────────────────────────────────────── */
.pt-review-in { position: relative; }
.pt-terms { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.pt-term { border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; background: var(--surface); }
.pt-term.empty { background: var(--surface2, #f8fafc); }

/* ── Notes / checks ────────────────────────────────────────────────────── */
.pt-note { display: flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 600; background: var(--surface2, #f1f5f9); border: 1px solid var(--border); color: var(--text-md, #334155); border-radius: 10px; padding: 10px 14px; }
.pt-note.good { background: var(--green-bg, #eafaf1); border-color: var(--green-line, #c3ecd4); color: var(--green-dk, #166534); }
.pt-check { border: 1px solid var(--border); border-radius: 10px; padding: 12px 14px; border-left: 4px solid var(--border); }
.pt-check-def { border-left: 3px solid var(--border); padding-left: 12px; }
.pt-sign { border-left: 4px solid var(--orange); background: var(--amber-bg, #fff7ed); }
.sg-overlay { position: fixed; inset: 0; background: rgba(18,32,56,.6); display: none; align-items: center; justify-content: center; padding: 24px; z-index: 1000; }
.sg-dialog { background: var(--surface); border-radius: 14px; max-width: 480px; width: 100%; max-height: 88vh; overflow: auto; box-shadow: var(--shadow); }

/* ── Promo carousel dots ───────────────────────────────────────────────── */
.pt-promo-dot { width: 8px; height: 8px; border-radius: 50%; border: none; padding: 0; cursor: pointer; background: var(--border); }
.pt-promo-dot.on { background: var(--orange); }

/* ── Section tiles ─────────────────────────────────────────────────────── */
.db-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 16px; }
.db-tile { text-decoration: none; color: inherit; display: block; }
.db-tile .t { font-weight: 600; display: flex; justify-content: space-between; gap: 8px; margin-bottom: 4px; align-items: baseline; }
.db-tile .t .stat { font-size: 12px; font-weight: 700; color: var(--orange); white-space: nowrap; }
.db-tile .d { font-size: 12px; color: var(--muted); margin-bottom: 10px; }
.db-tile .go { font-size: 11px; font-weight: 600; color: var(--orange); text-transform: uppercase; letter-spacing: .05em; }

@media (max-width: 900px) {
  .pt-cols { grid-template-columns: 1fr; }
  .pt-hero { padding: 22px 20px; }
  .pt-chip { min-width: calc(50% - 5px); flex: 1 1 auto; }
}

/* ── Brochures (FlippingBook embeds, v5.42.8) ──────────────────────────── */
.pt-brochures { display: grid; grid-template-columns: 1fr; gap: 14px; }
.pt-brochure { min-width: 0; }
.pt-brochure .fbo-embed { display: block; }
.pt-brochures.two { grid-template-columns: 1fr 1fr; }
@media (max-width: 640px) { .pt-brochures.two { grid-template-columns: 1fr; } }
.pt-brochure-share { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
.pt-brochure-share .t { font-size: 13px; font-weight: 600; color: var(--navy); margin-right: auto; }

/* ── Trust home: members list (v5.42.17) ───────────────────────────────── */
.pt-members { display: flex; flex-direction: column; }
.pt-member { display: grid; grid-template-columns: 40px minmax(0, 1fr) 110px 130px 80px auto; align-items: center; gap: 14px; padding: 12px 0; border-bottom: 1px solid var(--border); }
.pt-member:last-child { border-bottom: 0; }
.pt-member-head { padding: 0 0 8px; font-size: 11px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.pt-member-name { font-size: 14px; font-weight: 600; color: var(--navy); }
.pt-member-stat { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.pt-member-stat .k { display: none; font-size: 10px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.pt-member-stat .v { font-family: var(--font-hd, inherit); font-size: 16px; font-weight: 700; color: var(--navy); line-height: 1.1; white-space: nowrap; }
.pt-member-stat .v small { font-family: inherit; font-size: 11px; font-weight: 500; color: var(--muted); }
.pt-member-stat .v.muted { color: var(--muted); font-weight: 500; }
@media (max-width: 760px) {
  .pt-member-head { display: none; }
  /* Avatar · name · Open on the first row; each stat on its own row beneath the name. */
  .pt-member { grid-template-columns: 40px minmax(0, 1fr) auto; row-gap: 6px; }
  .pt-member-stat { grid-column: 2 / -1; flex-direction: row; align-items: baseline; gap: 6px; }
  .pt-member-stat .k { display: inline; }
  .pt-member-stat .v { font-size: 14px; }
}

/* Logo avatars (Trust home members, v5.42.18): white tile, logo fitted inside;
   the initials sit behind and show only when the image fails / is absent. */
.pt-av.av-logo { background: #fff; border: 1px solid var(--border); color: transparent; }
.pt-av.av-logo img { object-fit: contain; padding: 3px; background: #fff; }

/* ── Projects in Halo (v5.76.0): ticket rows with public-update hover cards, traffic-light stages ── */
.pd-tickets { border:1px solid var(--border); border-radius:11px; background:var(--surface); }
.pd-tk { position:relative; border-bottom:1px solid var(--border); }
.pd-tk:last-child { border-bottom:0; }
.pd-tk.is-project { background:#f6f8fb; }
.pd-tk-row { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:10px 14px; cursor:default; }
.pd-tk:hover .pd-tk-row, .pd-tk:focus-within .pd-tk-row { background:#eef7fb; }
.pd-tk-main { display:flex; align-items:center; gap:10px; min-width:0; flex:1; }
.pd-tk-kind { font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:var(--muted); flex-shrink:0; width:64px; }
.pd-tk-title { font-size:14px; font-weight:600; color:var(--navy); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pd-tk-meta { display:flex; align-items:center; gap:12px; font-size:12px; flex-shrink:0; }
.pd-pop { display:none; position:absolute; left:12px; right:12px; top:calc(100% - 2px); z-index:40; background:#fff; border:1px solid var(--border);
          border-radius:11px; box-shadow:0 10px 28px rgba(22,29,75,.16); padding:10px 14px; max-height:320px; overflow-y:auto; }
.pd-tk:hover .pd-pop, .pd-tk:focus-within .pd-pop { display:block; }
.pd-pop-head { font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:var(--muted); margin-bottom:6px; }
.pd-act { padding:6px 0; border-top:1px solid var(--border); }
.pd-act:first-of-type { border-top:0; }
.pd-pill.tone-green { background:#dcfce7; color:#166534; }
.pd-pill.tone-amber { background:#ffedd5; color:#9a3412; }
.pd-pill.tone-red   { background:#fee2e2; color:#991b1b; }
@media (max-width: 640px) { .pd-tk-row { flex-direction:column; align-items:flex-start; gap:4px; } .pd-tk-kind { width:auto; } }
/* ── v5.97.0 — a project in Halo, for the customer: header, four-stage journey, team feed ── */
.cpj-back { display:inline-block; font-size:13px; font-weight:600; color:var(--muted); text-decoration:none; margin-bottom:12px; }
.cpj-back:hover { color:var(--navy); }
.cpj-hero { position:relative; overflow:hidden; border-radius:22px; padding:28px 30px 24px; margin-bottom:18px; color:#fff;
  background:linear-gradient(120deg, #161D4B 0%, #26236E 55%, #4A35BC 100%); box-shadow:0 10px 30px rgba(22,29,75,.18); }
.cpj-hero::before { content:''; position:absolute; right:-70px; top:-110px; width:280px; height:280px; border-radius:80px; background:#18BFF7; opacity:.2; transform:rotate(22deg); pointer-events:none; }
.cpj-hero::after { content:''; position:absolute; right:220px; bottom:-140px; width:220px; height:220px; border-radius:66px; background:#A07EFA; opacity:.24; transform:rotate(-14deg); pointer-events:none; }
.cpj-hero-main { position:relative; z-index:1; max-width:780px; }
.cpj-eyebrow { font-size:13px; font-weight:700; letter-spacing:.06em; color:#24ECFB; margin-bottom:6px; }
.cpj-eyebrow .hand { font-size:1.35em; color:#18BFF7; letter-spacing:0; }
.cpj-title { font-family:var(--font-hd, inherit); font-weight:500; font-size:clamp(26px, 3.4vw, 40px); line-height:1.1; margin:0; color:#fff; }
.cpj-now { margin:10px 0 0; font-size:14.5px; line-height:1.55; color:rgba(255,255,255,.86); }
.cpj-chips { position:relative; z-index:1; display:grid; grid-template-columns:repeat(auto-fit, minmax(160px, 1fr)); gap:10px; margin-top:20px; }
.cpj-chip { display:flex; flex-direction:column; gap:2px; padding:12px 14px; border-radius:14px; background:rgba(255,255,255,.08); border:1px solid rgba(255,255,255,.16); }
.cpj-chip .k { font-size:10.5px; font-weight:700; letter-spacing:.07em; text-transform:uppercase; color:rgba(255,255,255,.7); }
.cpj-chip .v { font-family:var(--font-hd, inherit); font-size:26px; line-height:1.1; color:#fff; }
.cpj-chip .s { font-size:12px; color:rgba(255,255,255,.66); }
.cpj-sec-h { font-size:12px; font-weight:700; letter-spacing:.07em; text-transform:uppercase; color:var(--muted); margin:0 0 12px; }
.cpj-journey { margin-bottom:18px; }
.cpj-stages { list-style:none; margin:0; padding:0; display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:10px; }
.cpj-stage { display:flex; flex-direction:column; align-items:center; text-align:center; gap:4px; padding:14px 10px; border-radius:14px; background:var(--bg); border:1px solid var(--border); position:relative; }
.cpj-stage .cpj-dot { width:30px; height:30px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-weight:700; font-size:13px; background:var(--surface); border:2px solid var(--border); color:var(--muted); }
.cpj-stage-name { font-family:var(--font-hd, inherit); font-size:17px; color:var(--navy); }
.cpj-stage-sub { font-size:12px; color:var(--muted); }
.cpj-stage.done .cpj-dot { background:#30CCB3; border-color:#30CCB3; color:#fff; }
.cpj-stage.done .cpj-stage-sub { color:#148B79; font-weight:600; }
.cpj-stage.now { background:rgba(24,191,247,.1); border:2px solid #18BFF7; }
.cpj-stage.now .cpj-dot { background:#18BFF7; border-color:#18BFF7; color:#161D4B; box-shadow:0 0 0 5px rgba(24,191,247,.22); }
.cpj-stage.now .cpj-stage-sub { color:#0A7FAB; font-weight:700; }
.cpj-bar { height:8px; border-radius:999px; background:var(--bg); overflow:hidden; margin-top:14px; }
.cpj-bar span { display:block; height:100%; border-radius:999px; background:linear-gradient(90deg, #18BFF7, #30CCB3); }
.cpj-grid { display:grid; grid-template-columns:minmax(0, 1.6fr) minmax(0, 1fr); gap:18px; align-items:start; }
.cpj-side { display:flex; flex-direction:column; gap:18px; }
.cpj-feed { list-style:none; margin:0; padding:0 0 0 18px; border-left:2px solid var(--border); display:flex; flex-direction:column; gap:14px; }
.cpj-feed li { position:relative; }
.cpj-feed li::before { content:''; position:absolute; left:-25px; top:4px; width:12px; height:12px; border-radius:50%; background:#18BFF7; border:2px solid var(--surface); }
.cpj-feed-meta { font-size:12px; color:var(--muted); margin-bottom:3px; }
.cpj-feed-meta strong { color:var(--navy); }
.cpj-feed-note { font-size:14px; line-height:1.55; color:var(--text); white-space:pre-line; overflow-wrap:anywhere; }
.cpj-feed-legacy { padding:12px 0 0; margin-top:12px; border-top:1px solid var(--border); }
.cpj-overview { font-size:14px; line-height:1.6; color:var(--text); }
.cpj-overview a { color:var(--orange); }
.cpj-badge { font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--navy); background:#eef2f8; border:1px solid var(--border); border-radius:20px; padding:3px 10px; }
.cpj-miles { display:grid; grid-template-columns:repeat(auto-fill, minmax(220px, 1fr)); gap:10px; }
.cpj-mile { display:flex; align-items:center; gap:10px; padding:9px 12px; border:1px solid var(--border); border-radius:10px; background:var(--surface); }
.cpj-mile .cpj-dot { width:22px; height:22px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; font-size:12px; font-weight:700; flex-shrink:0; }
.cpj-mile-v { font-size:11px; font-weight:700; }
.cpj-mile.tone-green .cpj-dot { background:#dcfce7; color:#166534; } .cpj-mile.tone-green .cpj-mile-v { color:#166534; }
.cpj-mile.tone-amber .cpj-dot { background:#ffedd5; color:#9a3412; } .cpj-mile.tone-amber .cpj-mile-v { color:#9a3412; }
.cpj-mile.tone-red .cpj-dot   { background:#fee2e2; color:#991b1b; } .cpj-mile.tone-red .cpj-mile-v   { color:#991b1b; }
.cpj-sess { display:flex; justify-content:space-between; gap:12px; font-size:13px; padding:8px 2px; border-bottom:1px solid var(--border); }
@media (max-width:900px) { .cpj-grid { grid-template-columns:1fr; } }
@media (max-width:640px) { .cpj-hero { padding:22px 18px 18px; border-radius:18px; } .cpj-stages { grid-template-columns:repeat(2, minmax(0,1fr)); } }

/* ── Customer portal — documented kit reachability (v6.11.0) ── */
.pt-kit { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 10px; padding: 14px 18px; }
.pt-kit-item { display: flex; align-items: center; gap: 10px; border: 1px solid var(--border); border-radius: var(--radius); padding: 8px 12px; font-size: 13px; }
.pt-kit-item .sd-icon { color: var(--muted); flex: 0 0 auto; }
.pt-kit-name { flex: 1; min-width: 0; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-kit-sub { display: block; font-size: 11px; color: var(--muted); font-weight: 400; }
/* Inline stroke icons from SiteDoc::svgIcon (v6.11.0). */
.sd-icon { width: 16px; height: 16px; vertical-align: -3px; flex: 0 0 auto; }
/* Customer privacy notice — /customers/privacy (v6.31.0). Shared by the signed-in
   portal chrome and the standalone shell the page uses for visitors from the
   sign-in page, a capture share link or a survey link. */
.cpriv-shell { margin: 0; background: var(--bg, #f0f4f8); color: var(--text, #1a2e4a); }
.cpriv-top { background: var(--navy, #1a2e4a); padding: 14px 20px; display: flex; align-items: center; gap: 12px; }
.cpriv-top img { height: 26px; width: auto; display: block; }
.cpriv-top span { color: #cdd6e4; font-size: 13px; }
.cpriv { max-width: 820px; margin: 0 auto; padding: 8px 16px 40px; line-height: 1.55; }
.cpriv-shell .cpriv { padding-top: 28px; }
.cpriv .cpriv-meta { font-size: 12px; color: var(--muted); margin: 4px 0 20px; }
.cpriv h2 { font-size: 18px; margin: 28px 0 8px; padding-top: 18px; border-top: 1px solid var(--border); }
.cpriv h3 { font-size: 14px; font-weight: 700; margin: 18px 0 6px; }
.cpriv p, .cpriv li { font-size: 14px; }
.cpriv p { margin: 0 0 10px; }
.cpriv ul { padding-left: 22px; margin: 8px 0 12px; }
.cpriv li { margin-bottom: 4px; }
.cpriv a { color: var(--orange); }
.cpriv-toc { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 14px 18px; margin: 0 0 8px; }
.cpriv-toc ol { margin: 6px 0 0; padding-left: 20px; columns: 2; column-gap: 28px; }
.cpriv-toc li { font-size: 13px; break-inside: avoid; }
.cpriv-callout { background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--navy); border-radius: 8px; padding: 12px 14px; margin: 12px 0; font-size: 13.5px; }
.cpriv-callout.warn { border-left-color: var(--orange); }
.cpriv-table { width: 100%; border-collapse: collapse; margin: 8px 0 16px; font-size: 13px; background: var(--surface); }
.cpriv-table th, .cpriv-table td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--border); vertical-align: top; }
.cpriv-table th { background: var(--surface2); font-weight: 700; }
.cpriv-scroll { overflow-x: auto; }
.cpriv-foot { font-size: 12px; color: var(--muted); margin-top: 32px; padding-top: 16px; border-top: 1px solid var(--border); }
.pt-footer-link { color: inherit; }
@media (max-width: 640px) { .cpriv-toc ol { columns: 1; } }
