/* owner-tools v7 — WS19-P P1: outside the rep shell (act-as pending or failed) the customer code gate behind the acting bar is never
   shown (it said "Code not recognized." to a platform owner); once verification FAILED the boot loader stops too — the bar owns the state.
   v6 below, unchanged. Tokens only. */
/* Same compact panel/header grammar as Overview, using the shared spacing scale. */
.acting-pending [data-w],.acting-pending #savebtn{pointer-events:none}
.owner-profile{box-sizing:border-box;width:min(560px,calc(100% - 32px));max-height:calc(100dvh - 32px);padding:var(--s5);border:1px solid var(--card-line);border-radius:var(--radius-card);background:var(--card);color:var(--fg);font:var(--fs-base)/var(--lh-ui) var(--font-sans);box-shadow:var(--shadow-lg)}
.owner-profile::backdrop{background:rgb(0 0 0 / .55)}
.owner-profile-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s4);margin-bottom:var(--s5)}
.owner-profile-head h2{margin:0;font-size:var(--fs-body);font-weight:var(--fw-med)}
.owner-log-fields{display:block;font-size:var(--fs-fine);color:var(--muted)}
.owner-profile-head p{margin:4px 0 0;font-size:var(--fs-fine);color:var(--muted)}
.owner-profile-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s4)}
.owner-profile-fields label{display:flex;flex-direction:column;gap:8px;font-size:var(--fs-fine);font-weight:var(--fw-med)}
.owner-profile-wide{grid-column:1/-1}
.owner-profile-fields input,.owner-profile-fields textarea,.owner-profile-fields select{box-sizing:border-box;min-width:0;width:100%;min-height:40px;padding:8px var(--s3);border:1px solid var(--btn-line);border-radius:var(--radius-sm);background:var(--input-bg,var(--card));color:var(--fg);font:var(--fs-base) var(--font-sans)}
.owner-profile-fields input[readonly],.owner-profile-fields textarea[readonly],.owner-profile-fields select:disabled{color:var(--muted);opacity:1}
.owner-profile-fields label span{color:var(--muted);font-weight:400}
.owner-profile-facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s4);margin:var(--s5) 0;padding-top:var(--s5);border-top:1px solid var(--line)}
.owner-profile-facts dt{font-size:var(--fs-fine);color:var(--muted)}
.owner-profile-facts dd{margin:4px 0 0;font-size:var(--fs-base)}
.owner-profile-status{margin:0;font-size:var(--fs-fine);color:var(--muted)}
.owner-profile-actions{display:flex;justify-content:flex-end;gap:var(--s3);margin-top:var(--s5)}
@media(max-width:720px){.owner-profile-fields{grid-template-columns:minmax(0,1fr)}}
@media print{.rail-acting,.acct-exit,.owner-profile{display:none!important}}
/* Account fields reuse the compact neutral form used for company settings. */
.owner-profile-status{margin-top:var(--s4)}
.owner-profile-fields input:focus-visible,.owner-profile-fields textarea:focus-visible,.profile-danger input:focus-visible{outline:2px solid var(--fg);outline-offset:2px}
.profile-danger{margin-top:var(--s5);padding-top:var(--s4);border-top:1px solid var(--line);font-size:var(--fs-fine)}
.profile-danger summary{cursor:pointer;min-height:40px;display:flex;align-items:center;font-size:var(--fs-base)}
.profile-danger summary::before{content:'›';margin-right:8px}
.profile-danger[open] summary::before{transform:rotate(90deg)}
.profile-danger p{color:var(--muted);margin:0 0 var(--s3);line-height:var(--lh-text)}
.profile-danger label{display:block;font-size:var(--fs-fine);margin-bottom:8px;overflow-wrap:anywhere}
.profile-danger input{box-sizing:border-box;width:100%;min-height:40px;padding:8px var(--s3);font:var(--fs-base) var(--font-sans);color:var(--fg);background:var(--input-bg,var(--card));border:1px solid var(--btn-line);border-radius:var(--radius-sm)}
.profile-danger .d-btn{margin-top:var(--s3);margin-bottom:var(--s3)}
.profile-danger .d-btn.danger{color:var(--danger);border-color:var(--danger)}
.profile-setup{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);margin:var(--s3) var(--page-pad);padding:var(--s3);border:1px solid var(--line);border-radius:var(--radius-card);background:var(--card);font-size:var(--fs-fine);color:var(--muted)}
.profile-setup[hidden]{display:none}
.profile-setup b{display:block;color:var(--fg);font-size:var(--fs-base);font-weight:var(--fw-med);margin-bottom:4px}
.owner-directory-card>.dp-pending{order:-1}
.owner-directory-card[data-account-status="terminated"]{background:var(--band)}
@media(max-width:720px){.profile-setup{align-items:flex-start;flex-direction:column;margin:var(--s3) var(--s4)}.owner-profile-actions{flex-wrap:wrap}}

.owner-profile.profile-confirm #owner-profile-form{display:none}
.owner-profile.profile-confirm .profile-danger{margin-top:0;padding-top:0;border-top:0}
.owner-profile.profile-confirm .profile-danger[open] summary::before{transform:rotate(180deg)}

.owner-directory-tools{flex-wrap:wrap}
#owner-directory-results[data-mode=list] .owner-directory-list{grid-template-columns:minmax(0,1fr)}
@media(min-width:961px){#owner-directory-results[data-mode=list] .owner-directory-card{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr) auto;align-items:center}#owner-directory-results[data-mode=list] .owner-directory-card>.dp-pending{grid-column:1/-1;justify-self:start}#owner-directory-results[data-mode=list] .rowacts{margin-top:0}}

/* Contact details reuse the seller AP fields. Names remain a compact pair on
   phones; the address preserves line breaks and the dialog owns vertical scroll. */
.owner-profile-fields textarea{resize:vertical;min-height:64px;line-height:var(--lh-text)}
@media(max-width:720px){.owner-profile-fields{grid-template-columns:repeat(2,minmax(0,1fr))}.owner-profile-fields input,.owner-profile-fields textarea,.owner-profile-fields select{font-size:var(--fs-body)}.profile-email-field,.profile-phone-field,.owner-profile-fields label:has(select){grid-column:1/-1}.owner-profile-facts{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ===== v4 (WS1): impersonation lives in the account corner, not across the page =====
   The owner's own avatar sits bottom-left in the always-dark rail, so the acting state is painted
   there: an amber band naming the target account, with Exit as its own button (never nested in the
   account button). Amber is the warn hue at its dark-surface value, so it reads on #080808 in both
   themes. Collapsed rail: amber ring on the avatar plus an icon-only Exit. Phones (the rail is off
   screen): the topbar avatar returns with the ring and its menu leads with "Exit impersonation". */
body{--act-as:#F5C86B;--act-as-bg:#2E2413;--act-as-ink:#141414}
.rail-acting{display:none}
body.acting-as .rail-acting{display:flex;align-items:center;gap:var(--s2);padding:var(--s3) var(--s3) var(--s3) var(--s4);background:var(--act-as-bg);border-top:2px solid var(--act-as);color:var(--act-as)}
body.acting-as .rail-foot{border-top-color:var(--act-as)}
.rail-acting-t{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1;font-size:var(--fs-fine);line-height:var(--lh-ui)}
.rail-acting-t small{font-size:var(--fs-micro);font-weight:var(--fw-med);letter-spacing:.04em;text-transform:uppercase;color:var(--act-as)}
.rail-acting-t b{font-weight:var(--fw-med);color:#F7F7F5;overflow:hidden;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2}
.rail-acting-t .rail-acting-err{white-space:normal;color:var(--act-as)}
.rail .rail-exit{display:inline-flex;align-items:center;justify-content:center;gap:6px;flex:none;min-width:40px;min-height:40px;padding:0 var(--s3);border:1px solid var(--act-as);border-radius:var(--radius-btn);background:var(--act-as);color:var(--act-as-ink);font:inherit;font-size:var(--fs-fine);font-weight:var(--fw-med);cursor:pointer}
.rail .rail-exit:hover{filter:brightness(1.08)}
.rail .rail-exit:focus-visible{outline:2px solid #F7F7F5;outline-offset:2px}
.rail-exit svg,.acct-exit svg{width:14px;height:14px;flex:none}
.acct-exit svg{width:16px;height:16px}
body.acting-as .rail-acct{background:var(--act-as-bg)}
body.acting-as .rail-acct:hover{background:color-mix(in srgb,var(--act-as) 18%,var(--act-as-bg))}
body.acting-as .rail-acct .ini{border:2px solid var(--act-as);color:var(--act-as)}
body.acting-pending .rail-acting-t b{color:var(--act-as)}
/* collapsed rail (manual railmin); the <=1023px auto-collapse is handled just below */
body.railmin.acting-as .rail-acting{flex-direction:column;padding:var(--s2) 0;gap:var(--s2)}
body.railmin .rail-acting-t,body.railmin .rail-exit span{display:none}
body.railmin .rail .rail-exit{padding:0;width:40px}
/* every closed rail at <=1023px is the 48px strip, including the off-screen one on phones, so nothing
   may overflow it; the open phone drawer (body.drawer) gets the full layout back */
@media(max-width:1023px){
  body.repshell:not(.drawer).acting-as .rail-acting{flex-direction:column;padding:var(--s2) 0;gap:var(--s2)}
  body.repshell:not(.drawer) .rail-acting-t,body.repshell:not(.drawer) .rail-exit span{display:none}
  body.repshell:not(.drawer) .rail .rail-exit{padding:0;width:40px}
}
/* account menu: Exit leads the menu at every width while acting. Phones: the rail is off screen until
   the burger opens it, so the burger itself carries the signal (amber ring plus a badge dot) and the
   opened drawer shows the full amber block with Exit. The topbar avatar stays hidden (Oscar, WS1). */
.acctmenu .acct-exit{display:none}   /* scoped: the inline .sm-act{display:block} loads later */
body.acting-as .acctmenu .acct-exit{display:flex;align-items:center;gap:var(--s2);border-top:0;margin-top:0;color:var(--c-warn);background:var(--c-warn-bg);font-weight:var(--fw-med)}
body.acting-as .acctmenu .acct-exit:hover{background:var(--c-warn-bg);filter:brightness(.97)}
@media(max-width:720px){
  body.repshell.acting-as #railBurger{position:relative;border-color:var(--c-warn);background:var(--c-warn-bg);color:var(--c-warn);box-shadow:0 0 0 2px var(--c-warn)}
  body.repshell.acting-as #railBurger::after{content:'';position:absolute;top:-5px;right:-5px;width:10px;height:10px;border-radius:50%;background:var(--act-as);box-shadow:0 0 0 2px var(--bg)}
}
/* Codex PR#2 (1): outside the rep shell (boot, gate, a pending or failed verification) the rail does not exist; this bar is
   the reachable Exit there. Above #bootmark (450); hidden inside the rep shell, where the rail corner owns the state. */
.acting-bar{display:none}
body.acting-as:not(.repshell) #gate{display:none!important}
body.acting-failed:not(.repshell) #bootmark{display:none!important}
body.acting-as:not(.repshell) .acting-bar,body.acting-as.matrix .acting-bar{position:fixed;top:0;left:0;right:0;z-index:500;display:flex;align-items:center;justify-content:space-between;gap:var(--s3);padding:var(--s3) var(--s4);padding-top:calc(var(--s3) + env(safe-area-inset-top,0px));background:var(--act-as-bg);color:#F7F7F5;border-bottom:2px solid var(--act-as);font:var(--fs-fine)/var(--lh-ui) var(--font-sans)}
.acting-bar-t{min-width:0;overflow-wrap:anywhere}
.acting-bar-exit{display:inline-flex;align-items:center;gap:6px;flex:none;min-height:40px;padding:0 var(--s3);border:1px solid var(--act-as);border-radius:var(--radius-btn);background:var(--act-as);color:var(--act-as-ink);font:inherit;font-weight:var(--fw-med);cursor:pointer}
.acting-bar-exit:focus-visible{outline:2px solid #F7F7F5;outline-offset:2px}
.acting-bar-exit svg{width:14px;height:14px}
@media print{.acting-bar{display:none!important}}
.acting-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

/* ===== WS10 PR 4 — the company's own domain, on the owner's account profile ===== */
.owner-profile .owner-domain{margin-top:var(--s5);padding-top:var(--s4);border-top:1px solid var(--line)}
.owner-profile .owner-domain h3{margin:0 0 var(--s2);font-size:var(--fs-body);font-weight:var(--fw-med)}   /* WS15-C C2: the dialog's heading weight (500), not 600 */
.owner-profile .owner-domain-note{margin:0 0 var(--s2);font-size:var(--fs-fine);color:var(--muted);line-height:var(--lh-text)}
.owner-profile .owner-domain-note b{color:var(--fg);font-weight:500;overflow-wrap:anywhere}
.owner-profile .owner-domain-host{margin:0 0 var(--s2);display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2);overflow-wrap:anywhere}
.owner-profile .owner-domain-status{font-size:var(--fs-fine);padding:2px 8px;border-radius:var(--radius-btn);background:var(--band);color:var(--muted)}
.owner-profile .owner-domain-status[data-status="live"]{color:var(--ok,var(--fg))}
.owner-profile .owner-domain-status[data-status="error"]{color:var(--danger)}
.owner-profile .owner-domain-add{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2)}
.owner-profile .owner-domain-add label{width:100%;font-size:var(--fs-fine);color:var(--muted)}
.owner-profile .owner-domain-add input{flex:1 1 220px;box-sizing:border-box;min-width:0;min-height:40px;padding:8px var(--s3);border:1px solid var(--btn-line);border-radius:var(--radius-sm);background:var(--input-bg,var(--card));color:var(--fg);font:var(--fs-base) var(--font-sans)}
.owner-profile .owner-domain-add input:focus-visible{outline:2px solid var(--fg);outline-offset:2px}
@media(max-width:720px){.owner-profile .owner-domain-add input{font-size:var(--fs-body)}}
.owner-profile .owner-domain-dns td{overflow-wrap:anywhere;white-space:normal}
.owner-profile .owner-domain-actions{display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:var(--s2)}
.owner-profile .owner-domain-msg{margin:var(--s2) 0 0;font-size:var(--fs-fine);color:var(--muted);min-height:1em}
/* owner-tools v8 css — WS19-P P1 8 (Oscar: yes). On phones (<= 900px) the verified act-as state had no visible bar (only the rail
   corner, off screen, and a ring on the burger). The one acting bar (#actingBar, relabelled in place by paintActAs) is now a slim
   persistent strip at the top in EVERY act-as state — pending, confirmed, failed; inside or outside the rep shell — reading
   "Acting as <name>…" with a 44px Exit. Inside the rep shell the page, the sticky top bar and the rail start BELOW it, so it never
   covers them. Desktop (> 900px) is unchanged: the rail corner owns the state there. */
@media(max-width:900px){
  :root{--act-strip:calc(54px + env(safe-area-inset-top,0px))}
  body.acting-as .acting-bar{position:fixed;top:0;left:0;right:0;z-index:500;display:flex;align-items:center;justify-content:space-between;gap:var(--s2);
    box-sizing:border-box;height:var(--act-strip);padding:var(--s1) var(--s3);padding-top:calc(var(--s1) + env(safe-area-inset-top,0px));
    background:var(--act-as-bg);color:#F7F7F5;border-bottom:2px solid var(--act-as);font:var(--fs-fine)/var(--lh-ui) var(--font-sans)}
  body.acting-as .acting-bar-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  body.acting-failed .acting-bar-t{white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2}
  body.acting-as .acting-bar-exit{min-height:44px;min-width:44px;padding:0 var(--s3)}
  body.acting-as .acting-bar-exit span{display:none}                 /* "Exit" on a phone: the strip already says who */
  body.acting-as .acting-bar-exit::after{content:"Exit"}
  body.repshell.acting-as{padding-top:var(--act-strip)}
  body.repshell.acting-as .topbar{top:var(--act-strip)}
  body.repshell.acting-as .rail{top:var(--act-strip)}
}
/* owner-tools v9 css — Codex #70 R1 (P2): above 720px the site switcher (.tb-switch) is its own fixed tile at top:0 (fam.v9); at
   721–900px it sat under the strip. It starts below the strip like the top bar and the rail. */
@media(max-width:900px){body.repshell.acting-as .tb-switch{top:var(--act-strip)}}
