/* EndSchool Detector, sibling pass 2026-10-04 (design-r1/review-detector.md).
   The page is rebuilt from the Humanizer's own parts (static/index.html): its :root tokens, the lit
   .box pane with a floating .pcap label, the .btn-brand / .btn-ghost pair, the h1 gradient, the
   .bar action row with its .allowance readout, the teal/sky horizon and the house header/footer.
   The former "quiet luxury" system (Cormorant, ivory ink, gold) is gone; the only gold left is the
   Humanizer's own shimmer on the primary button.
   This file is ALSO the stylesheet of the public shared page (/detector/shared): SHARE_PAGE in
   src/api/customer-text-forwarder.mjs links /detector-luxe-r3.css by name, so the .sharedPage rules
   at the end live here and the filename must not change. */

:root{
  color-scheme:dark;
  --bg:#000; --fg:#fafafa; --muted:rgba(255,255,255,.62); --faint:rgba(255,255,255,.40);
  --hairline:rgba(255,255,255,.06);
  --line:rgba(255,255,255,.10);
  --line-strong:rgba(255,255,255,.16);
  --r-lg:14px; --r-md:12px; --r-sm:10px;
  --edge-lit:rgba(255,255,255,.14);
  --edge-side:rgba(255,255,255,.075);
  --edge-base:rgba(255,255,255,.035);
  --surface-top:#131316;
  --surface-bottom:#0a0a0c;
  --surface:linear-gradient(180deg,var(--surface-top) 0%,#0d0d10 46%,var(--surface-bottom) 100%);
  --cap-h:34px;
  --fade:24px;
  --gutter:10px;
  --label-size:9.5px; --label-track:.155em;
  --readout-track:.06em;
  --brand-size:11px; --brand-track:.145em;
  --bloom:0 26px 64px -46px rgba(56,189,248,.42), 0 10px 34px -28px rgba(16,185,129,.24);
  --emerald:#10b981; --emerald-soft:rgba(16,185,129,.35);
  --sky:#38bdf8; --sky-soft:rgba(56,189,248,.22);
  --err:#ff6b60; --err-bg:rgba(255,107,96,.08); --err-line:rgba(255,107,96,.28);
  --amber:#e0a33e;
  /* Highlight inks (review 1.8): from --err, the Humanizer's --note-missing amber and --emerald. */
  --ai:rgba(255,107,96,.20);
  --assisted:rgba(224,190,128,.20);
  --human:rgba(16,185,129,.16);
  --sans:"Inter Tight",-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;
  --mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --pane-h:clamp(320px,52vh,560px);
}
@media (pointer:coarse){:root{--gutter:0px}}
*{box-sizing:border-box}
[hidden]{display:none!important}

::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,.16);background-clip:padding-box;border:2px solid transparent;border-radius:999px;transition:background-color 150ms ease}
::-webkit-scrollbar-thumb:hover{background-color:rgba(255,255,255,.30)}
::-webkit-scrollbar-corner{background:transparent}
*{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.16) transparent}

@keyframes cta-shimmer{0%,62%{transform:translateX(-110%) skewX(-18deg)}100%{transform:translateX(190%) skewX(-18deg)}}
@keyframes result-in{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}

html,body{background:var(--bg)}
body{
  margin:0;color:var(--fg);font-family:var(--sans);font-size:16px;line-height:1.6;
  -webkit-font-smoothing:antialiased;
  background:
    radial-gradient(1100px 520px at 50% -8%, rgba(56,189,248,.10), transparent 62%),
    radial-gradient(760px 420px at 50% 2%, rgba(16,185,129,.09), transparent 58%),
    #000;
  background-repeat:no-repeat;
  min-height:100dvh;
}
a{color:inherit}
::selection{background:rgba(56,189,248,.28);color:#fff}
:focus-visible{outline:2px solid #fff;outline-offset:3px}
.srOnly{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* The Humanizer's .wrap geometry, in document flow: results, history and batch lists are long. */
.shell{max-width:1160px;min-height:100dvh;margin:0 auto;padding:0 22px 26px;display:flex;flex-direction:column}
main{flex:1 0 auto;min-width:0}

/* ---------- house header: copied from index.html (base block + "HEADER, OWNER PASS 2026-10-04") ----------
   Same markup as index/pricing/account: signature left, account line centred on one line, product
   switch right; equal --hdr-gap from the line at >=1260px with the row reaching 64px past the content. */
.topbar{
  display:flex;align-items:center;flex-wrap:wrap;column-gap:10px;row-gap:0;flex:0 0 auto;
  padding-top:clamp(12px,1.85vh,20px);margin:0 0 clamp(5px,.8vh,16px);
}
.brandhome{display:flex;align-items:center;gap:9px;flex:0 0 auto;text-decoration:none;color:#fff}
.brandhome img{width:23px;height:23px;object-fit:contain;flex:0 0 auto}
.brandword{font-family:var(--sans);font-size:15px;font-weight:500;letter-spacing:-.025em}
.prodswitch{
  order:2;margin-left:auto;flex:0 0 auto;display:inline-flex;padding:2px;
  border:1px solid var(--line);border-radius:999px;background:#0d0d0f;
}
.prodseg{
  display:inline-flex;align-items:center;justify-content:center;
  height:32px;padding:0 8px;border-radius:999px;white-space:nowrap;text-decoration:none;
  color:var(--muted);
  font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.10em;text-transform:uppercase;
  transition:background-color .18s ease,color .18s ease,box-shadow .18s ease;
}
.prodseg:hover{color:var(--fg)}
.prodseg[aria-current]{background:rgba(255,255,255,.04);color:var(--fg);box-shadow:inset 0 0 0 1px var(--line)}
.topline{
  order:3;flex:1 1 100%;margin:0;
  display:flex;align-items:center;justify-content:center;gap:0 7px;flex-wrap:wrap;text-align:center;
  font-family:var(--mono);font-size:var(--brand-size);font-weight:500;letter-spacing:var(--brand-track);
  text-transform:uppercase;color:rgba(255,255,255,.34);line-height:1.4;
}
.brandlink{
  color:rgba(255,255,255,.52);text-decoration:none;
  font-size:var(--brand-size);letter-spacing:var(--brand-track);
  transition:color .18s ease;
}
.brandlink:hover{color:var(--fg)}
.brandlink[hidden]{display:none}
.brandsep{color:rgba(255,255,255,.16);font-weight:300;padding:0 6px}
.brandsep[hidden]{display:none}
@media (max-width:359px){.prodseg{padding:0 7px;letter-spacing:.06em}}
@media (min-width:640px){
  .topbar{column-gap:16px}
  .prodswitch{padding:4px}
  .prodseg{height:34px;padding:0 16px;font-size:10.5px;letter-spacing:.155em}
}
@media (min-width:1100px){
  .topbar{display:grid;grid-template-columns:1fr 1fr 1fr;align-items:center}
  .brandhome{grid-column:1;grid-row:1;justify-self:start}
  .prodswitch{grid-column:3;grid-row:1;justify-self:end;margin-left:0}
  .topline{grid-column:2;grid-row:1;justify-self:center;flex:0 1 auto}
}
:root{--hdr-gap:32px}
.topline{flex-wrap:nowrap;white-space:nowrap}
@media (min-width:640px){.prodseg{padding:0 11px;letter-spacing:.1em}}
@media (min-width:1100px){
  .topbar{display:flex}
  .brandhome,.prodswitch,.topline{grid-column:auto;grid-row:auto}
  .prodswitch{margin-left:auto}
  .topline{flex:1 1 100%;justify-self:auto}
}
@media (min-width:1100px) and (max-width:1319px){
  .topbar{width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);padding-left:clamp(24px,2.5vw,40px);padding-right:clamp(24px,2.5vw,40px);box-sizing:border-box}
  html{overflow-x:clip}
}
@media (min-width:1320px){
  /* OWNER 2026-10-04 (2): the signature and the switch sit in the page's own corners; the line stays
     centred between them. The row is full-bleed, with the page gutter on each side. */
  .topbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;column-gap:24px;
    width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);padding-left:clamp(24px,2.5vw,40px);padding-right:clamp(24px,2.5vw,40px);box-sizing:border-box}
  .brandhome{grid-column:1;grid-row:1;justify-self:start;margin:0}
  .topline{grid-column:2;grid-row:1;justify-self:center;flex:0 0 auto}
  .prodswitch{grid-column:3;grid-row:1;justify-self:end;margin:0}
  html{overflow-x:clip} /* 100vw counts a desktop scrollbar; never scroll sideways for it */
}
@media (max-width:639px){.topbar{row-gap:6px}}
@media(max-height:520px) and (min-width:560px){
  .topbar{padding-top:2px;margin-bottom:2px;column-gap:12px}
  .prodswitch{padding:2px;order:3}
  .prodseg{height:32px;padding:0 7px;font-size:10px;letter-spacing:.06em}
  .topline{order:2;flex:1 1 0;min-width:0;line-height:1.35;gap:0 4px}
  .brandsep{padding:0 2px}
}

/* ---------- footer (house, as index.html) ---------- */
.sitefoot{
  margin:clamp(16px,2.6vh,34px) 0 0;text-align:center;flex:0 0 auto;line-height:2;
  display:flex;flex-wrap:wrap;align-items:center;justify-content:center;row-gap:2px;
  font-family:var(--mono);font-size:var(--brand-size);font-weight:400;letter-spacing:var(--brand-track);
  text-transform:uppercase;color:rgba(255,255,255,.30);
}
.sitefoot a{color:rgba(255,255,255,.5);text-decoration:none;transition:color .18s ease}
.sitefoot a:hover{color:#fff}
.sitefoot .sep{color:rgba(255,255,255,.15);font-weight:300;padding:0 6px}
@media (max-width:520px){.sitefoot{column-gap:6px}.sitefoot .sep{display:none}}
.sitefoot .support-email{text-transform:none;letter-spacing:.03em}

/* ---------- title + the one tab row ---------- */
.hero{text-align:center;padding:clamp(20px,3.2vh,32px) 0 0}
.hero h1{
  margin:0;font-size:clamp(38px,6.4vw,72px);font-weight:700;letter-spacing:-.034em;line-height:1.0;
  background:linear-gradient(180deg,#fff 30%,rgba(255,255,255,.78));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.hero .lede{display:none}

/* Text / Image / My checks: a smaller sibling of the product switch (same track, ring and type). */
.checkmodes{display:flex;width:max-content;max-width:100%;margin:14px auto 0;padding:3px;
  border:1px solid var(--line);border-radius:999px;background:#0d0d0f}
.checkmodes:has(#imageMode[hidden]):has(#historyMode[hidden]){display:none}
.checkmodes button{appearance:none;height:30px;padding:0 16px;border:0;border-radius:999px;background:transparent;cursor:pointer;
  color:var(--muted);font:500 10px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;
  transition:background-color .18s ease,color .18s ease,box-shadow .18s ease}
.checkmodes button:hover{color:var(--fg)}
.checkmodes button[aria-pressed="true"]{background:rgba(255,255,255,.04);color:var(--fg);box-shadow:inset 0 0 0 1px var(--line)}

/* ---------- views (CSS-only switching; scripts only set data-checker-view) ---------- */
[data-checker-view="image"] #textWorkspace,[data-checker-view="image"] #plagiarismPanel{display:none}
[data-checker-view="text"] #imagePanel{display:none}
[data-checker-view="history"] #textWorkspace,[data-checker-view="history"] #imagePanel,[data-checker-view="history"] #plagiarismPanel{display:none}
main:not([data-checker-view="history"]) #historyPanel{display:none}
html body[data-plagiarism-mode="off"] main #plagiarismPanel,
html body[data-history-mode="off"] main #historyPanel,
html body[data-history-mode="off"] #historyMode,
html body[data-image-mode="off"] main #imagePanel,
html body[data-image-mode="off"] #imageMode{display:none!important}
/* The plagiarism controls now live in the text bar, outside #plagiarismPanel, so they no longer
   inherit its `hidden`: tie them to it (and to the injected flag) explicitly. */
html body[data-plagiarism-mode="off"] :is(#checkPlagiarism,#forgetPlagiarismChecks,#plagiarismStatus,.plgQuote),
main:has(#plagiarismPanel[hidden]) :is(#checkPlagiarism,#forgetPlagiarismChecks,#plagiarismStatus,.plgQuote){display:none!important}

/* ---------- panes ---------- */
.workspace{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-auto-rows:minmax(var(--pane-h),auto);gap:18px;margin-top:18px}
.checkmodes[hidden]+#textWorkspace .workspace{margin-top:clamp(18px,3vh,30px)}
.box{
  position:relative;
  border:1px solid;
  border-top-color:var(--edge-lit);border-right-color:var(--edge-side);
  border-left-color:var(--edge-side);border-bottom-color:var(--edge-base);
  border-radius:var(--r-lg);background:var(--surface);
  min-width:0;display:flex;flex-direction:column;overflow:hidden;
  box-shadow:var(--bloom);
  transition:border-color .22s ease, box-shadow .22s ease;
}
.box:focus-within,
.imageInput:has(#imageDrop[data-dragging="true"]){
  border-top-color:rgba(56,189,248,.52);border-right-color:rgba(56,189,248,.28);
  border-left-color:rgba(56,189,248,.28);border-bottom-color:rgba(56,189,248,.18);
  box-shadow:0 0 30px -14px rgba(56,189,248,.50), var(--bloom);
}
.result:has(#resultBody:not([hidden])) .resultOverview,
.imageOutput:has(#imageResult:not([hidden])){
  border-top-color:rgba(16,185,129,.55);border-right-color:rgba(16,185,129,.30);
  border-left-color:rgba(16,185,129,.30);border-bottom-color:rgba(16,185,129,.20);
  box-shadow:0 0 30px -14px rgba(16,185,129,.55), var(--bloom);
}
/* The floating label: opaque under its words, then a fade, so text scrolls up through it. */
.pcap{position:absolute;top:0;left:0;right:var(--gutter);z-index:2;
  display:flex;align-items:flex-start;justify-content:space-between;gap:12px;
  padding:13px 18px 5px;pointer-events:none;background-color:var(--surface-top)}
.pcap::before{content:'';position:absolute;left:0;right:0;top:100%;height:var(--fade);z-index:-1;
  background:linear-gradient(180deg,var(--surface-top) 0%,rgba(19,19,22,.86) 30%,rgba(19,19,22,.45) 62%,rgba(19,19,22,0) 100%)}
.label,.pcap h2,.pcap h3{margin:0;font-family:var(--mono);font-size:var(--label-size);font-weight:500;line-height:1.6;
  letter-spacing:var(--label-track);text-transform:uppercase;color:rgba(255,255,255,.46);white-space:nowrap}
.count{font-family:var(--mono);font-size:var(--label-size);font-weight:400;line-height:1.6;
  letter-spacing:var(--readout-track);min-width:0;text-align:right;color:rgba(255,255,255,.36);font-variant-numeric:tabular-nums}
/* Panes that do not scroll (sources, history) keep the same label, in flow. */
#plagiarismPanel .pcap,#historyPanel .pcap{position:static;right:auto;background:none;padding:13px 18px 5px}
#plagiarismPanel .pcap::before,#historyPanel .pcap::before{display:none}

/* ---------- text input pane ---------- */
textarea{font-family:var(--sans);color:var(--fg)}
.inputPanel textarea#draft{display:block;flex:1 1 auto;min-height:0;width:100%;
  padding:calc(var(--cap-h) + var(--fade)) 18px 12px;border:0;background:transparent;color:var(--fg);
  font-size:15.5px;line-height:1.7;resize:none;outline:none;scrollbar-gutter:stable}
textarea::placeholder,input::placeholder{color:rgba(255,255,255,.26)}
textarea:disabled{cursor:not-allowed}
.paneFoot{display:flex;align-items:center;gap:10px 12px;flex-wrap:wrap;padding:8px 14px 14px 18px;flex:0 0 auto}
.paneFoot>:last-child{margin-left:auto}
.paneFoot .controls{display:flex;gap:8px;flex-wrap:wrap}

/* Source chips: a mini segmented control in the pane's corner, not a second row of tabs. */
.intakeTabs{display:inline-flex;flex:0 0 auto;padding:2px;border:1px solid var(--line);border-radius:999px;background:#0d0d0f}
.intakeTabs button{appearance:none;height:24px;padding:0 11px;border:0;border-radius:999px;background:transparent;cursor:pointer;
  color:var(--muted);font:500 var(--label-size)/1 var(--mono);letter-spacing:var(--label-track);text-transform:uppercase;white-space:nowrap;
  transition:background-color .18s ease,color .18s ease,box-shadow .18s ease}
.intakeTabs button:hover:not(:disabled){color:var(--fg)}
.intakeTabs button[aria-pressed="true"]{background:rgba(255,255,255,.05);color:var(--fg);box-shadow:inset 0 0 0 1px var(--line)}
.intakeTabs button:disabled{opacity:.4;cursor:default}
/* A one-item tab bar is noise: hide the chips when Paste is the only source. */
.inputPanel .intakeTabs:has(#intakeUpload[hidden]):has(#intakeUrl[hidden]),
body[data-document-intake="off"][data-url-intake="off"] .inputPanel .intakeTabs{display:none}

#importReviewPanel label,.batchItem label,.imageBatchItem label{display:flex;align-items:center;gap:9px;font-size:12.5px;line-height:1.4;color:var(--muted);cursor:pointer}
input[type="checkbox"]{accent-color:#56b89b;width:15px;height:15px;margin:0;flex:0 0 auto}
label{display:block}

/* URL view: the URL row sits at the top of the pane body; until a preview fills the text, it is
   the whole pane (centred), so nothing asks for 60 words under an empty URL field. */
.urltools{display:none;gap:10px;align-items:center;flex-wrap:wrap;padding:calc(var(--cap-h) + 12px) 18px 0;flex:0 0 auto}
.urltools input{flex:1 1 220px;min-width:0;height:40px;padding:0;border:0;border-bottom:1px solid var(--line);border-radius:0;background:transparent;
  color:var(--fg);font:15.5px var(--sans);outline:none;transition:border-color .18s ease}
.urltools input:focus{border-bottom-color:rgba(56,189,248,.6)}
.urltools input:disabled{cursor:not-allowed}
main[data-intake-view="url"] #urlTools{display:flex}
main[data-intake-view="url"] .inputPanel #draft{padding-top:16px}
main[data-intake-view="url"] .inputPanel #draft:placeholder-shown{display:none}
main[data-intake-view="url"] .inputPanel:has(#draft:placeholder-shown) #urlTools{flex:1 1 auto;align-content:center;justify-content:center;padding:calc(var(--cap-h) + var(--fade)) 28px 0}
main[data-intake-view="url"] .inputPanel:has(#draft:placeholder-shown) #urlTools input{flex-basis:100%;max-width:440px;text-align:center}

/* File view: the pane body is the drop target (no dashed inner box). */
#fileTools{display:none}
main[data-intake-view="upload"] #fileTools{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;
  padding:calc(var(--cap-h) + 12px) 18px 0;text-align:center;flex:0 0 auto}
main[data-intake-view="upload"] .inputPanel:has(#draft:placeholder-shown) #fileTools{flex:1 1 auto;padding:calc(var(--cap-h) + var(--fade)) 28px 12px}
main[data-intake-view="upload"] .inputPanel:has(#draft:placeholder-shown) #draft{display:none}
main[data-intake-view="upload"] .inputPanel:not(:has(#draft:placeholder-shown)) #fileTools{flex-direction:row;flex-wrap:wrap;justify-content:flex-start;gap:8px 14px}
main[data-intake-view="upload"] .inputPanel:not(:has(#draft:placeholder-shown)) #draft{padding-top:16px}
#fileTools .hint{margin:0;font-size:15.5px;line-height:1.5;color:rgba(255,255,255,.34)}
main[data-intake-view="upload"] .inputPanel:not(:has(#draft:placeholder-shown)) #fileTools .hint{font-size:12.5px}
body[data-document-intake="off"] #intakeUpload,body[data-document-intake="off"] #fileTools,body[data-document-intake="off"] #batchTools,body[data-document-intake="off"] #chooseBatch,
body[data-url-intake="off"] #intakeUrl,body[data-url-intake="off"] #urlTools{display:none!important}

/* Batch: while files are queued the batch list owns the pane, and Check for AI steps aside. */
#batchTools{display:none;padding:0 18px;min-height:0}
main[data-intake-view="upload"] #batchTools{display:block}
main[data-intake-view="upload"] .inputPanel:has(#batchItems:not(:empty)) #batchTools{flex:1 1 auto;overflow:auto;padding-bottom:6px}
main[data-intake-view="upload"] .inputPanel:has(#batchItems:not(:empty)) :is(#draft,#importReviewPanel,.meter){display:none!important}
main[data-intake-view="upload"] .inputPanel:has(#batchItems:not(:empty)) #fileTools{flex:0 0 auto;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;gap:8px 14px;padding:calc(var(--cap-h) + 12px) 18px 6px}
main[data-intake-view="upload"] .inputPanel:has(#batchItems:not(:empty)) #fileTools .hint{font-size:12.5px}
main[data-intake-view="upload"]:has(#batchItems:not(:empty)) #check{display:none}
#batchTools h3,#imageBatchTools h3{display:none}
#batchItems:empty~#startBatch,#imageBatchItems:empty~#startImageBatch{display:none}
.batchItem,.imageBatchItem{padding:14px 0;border-top:1px solid var(--hairline)}
.batchItem:first-child,.imageBatchItem:first-child{border-top:0}
.batchItem strong,.imageBatchItem strong{display:block;font-weight:600;font-size:15px;line-height:1.35;overflow-wrap:anywhere}
.batchItem .hint,.imageBatchItem .hint{margin:4px 0 0}
.batchItem textarea{display:block;width:100%;min-height:96px;max-height:180px;margin:10px 0;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);
  background:rgba(0,0,0,.25);font-size:14px;line-height:1.6;resize:none;outline:none}
.batchItem textarea:focus{border-color:rgba(56,189,248,.4)}
.batchItem .status,.imageBatchItem .status{margin:8px 0;text-align:left;font:400 10.5px/1.6 var(--mono);letter-spacing:var(--readout-track);color:var(--muted)}
.imageBatchItem img{display:block;width:120px;height:120px;margin:10px 0;border:1px solid var(--line);border-radius:var(--r-sm);object-fit:cover;background:#0d0d0f}
#startBatch,#startImageBatch{margin:14px 0 4px}

/* ---------- buttons (the Humanizer's pair; .primary/.secondary are what the scripts emit) ---------- */
button{font-family:var(--sans);cursor:pointer}
button:active:not(:disabled){transform:scale(.97)}
.primary,.secondary,#forgetPlagiarismChecks{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap;
  height:44px;padding:0 22px;border-radius:999px;border:1px solid transparent;
  font-family:var(--sans);font-size:14px;font-weight:600;letter-spacing:-.005em;text-decoration:none;
  transition:transform .1s ease, background-color .18s ease, border-color .18s ease, color .18s ease, box-shadow .18s ease, opacity .18s ease;
}
.primary{
  position:relative;overflow:hidden;background:#fff;color:#0a0a0a;border-color:#fff;
  box-shadow:0 10px 32px rgba(16,185,129,.35), 0 2px 8px rgba(56,189,248,.22), inset 0 1px 0 rgba(255,255,255,.35);
}
.primary::after{
  content:"";position:absolute;top:0;bottom:0;left:0;width:62%;
  background:linear-gradient(100deg,transparent,rgba(255,214,102,.30) 30%,rgba(255,226,150,.85) 50%,rgba(255,214,102,.30) 70%,transparent);
  transform:translateX(-110%) skewX(-18deg);
  animation:cta-shimmer 4.2s ease-in-out infinite;pointer-events:none;
}
.primary:hover:not(:disabled){background:rgba(255,255,255,.92);box-shadow:0 16px 44px rgba(16,185,129,.45), 0 4px 12px rgba(56,189,248,.3)}
.primary:disabled{opacity:.42;cursor:default;box-shadow:none}
.primary:disabled::after{animation:none;opacity:0}
.secondary,#forgetPlagiarismChecks{background:transparent;color:rgba(255,255,255,.82);border-color:var(--line)}
.secondary:hover:not(:disabled),#forgetPlagiarismChecks:hover:not(:disabled){color:#fff;border-color:var(--line-strong);background:rgba(255,255,255,.04)}
.secondary:disabled,#forgetPlagiarismChecks:disabled{opacity:.34;cursor:default}
/* The bar's pair is the Humanize / Copy pair, at full size. */
.bar .primary,.bar .secondary{height:54px;padding:0 34px;font-size:15.5px}
.bar .primary{min-width:168px}
/* Compact ghosts inside panes. */
.paneFoot .secondary,.urltools .secondary,#fileTools .secondary:not(.textlink){height:34px;padding:0 15px;font-size:13px}
#fileTools #chooseFile{height:40px;padding:0 20px;font-size:14px}
main[data-intake-view="upload"] .inputPanel:not(:has(#draft:placeholder-shown)) #fileTools #chooseFile{height:34px;padding:0 15px;font-size:13px}
.inputPanel #clear{border-color:transparent;color:var(--muted);padding:0 12px}
.inputPanel #clear:hover:not(:disabled){color:#fff;border-color:var(--line);background:transparent}
/* "Choose up to N files": a quiet text link under the drop prompt. */
.secondary.textlink{height:auto;padding:4px 0;border:0;border-radius:0;background:none!important;color:var(--muted);font-size:13px;font-weight:500;
  text-decoration:underline;text-decoration-color:rgba(255,255,255,.25);text-underline-offset:3px}
.secondary.textlink:hover:not(:disabled){color:#fff;text-decoration-color:rgba(255,255,255,.6)}
#forgetPlagiarismChecks{height:32px;padding:0 14px;font-size:12.5px;margin:10px auto 0}

/* ---------- the bar: actions centred, allowance right, messages under it ---------- */
.bar{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:16px;align-items:center;padding:clamp(16px,2.6vh,30px) 0 0}
.actions{grid-column:2;display:flex;gap:12px;justify-content:center;align-items:center}
.actions .resultNav{display:contents}
.allowance{grid-column:3;justify-self:end;display:flex;flex-direction:column;align-items:flex-end;gap:2px;min-width:0;
  color:var(--muted);font-family:var(--mono);font-size:10px;letter-spacing:var(--readout-track);line-height:1.5;
  font-variant-numeric:tabular-nums;text-align:right}
.allowance small{font-size:10px;color:rgba(255,255,255,.52)}
.barnotes{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;text-align:center}
.barnotes:not(:has(> :not(:empty):not([hidden]))){display:none}
.barnotes .status{margin:0;max-width:660px;color:var(--muted);font-size:13px;line-height:1.5;text-wrap:pretty}
.barnotes .status:empty{display:none}
.barnotes>*+*{margin-top:6px}
#signInHelp{margin:0;font-size:12.5px;color:var(--muted)}
#signInHelp a{color:var(--fg);text-decoration:underline;text-decoration-color:rgba(255,255,255,.35);text-underline-offset:3px;transition:text-decoration-color .18s ease}
#signInHelp a:hover{text-decoration-color:#fff}
.status{margin:12px 0 0;color:var(--muted);font-size:13px;line-height:1.55}
.status:empty{display:none}
.hint{color:var(--faint);font-size:12.5px;line-height:1.6}

/* Result state: "New check" replaces "Check for AI"; the pane's own messages stand down. */
#newTextCheck{display:none}
main:has(#resultBody:not([hidden])) #newTextCheck{display:inline-flex}
main:has(#resultBody:not([hidden])) #check{display:none}
main:has(#resultBody:not([hidden])) #status{display:none}

/* ---------- text result: the document on the left, the verdict pane on the right ---------- */
.result{display:contents}
.inputPanel,.resultDocument{grid-column:1;grid-row:1}
.resultOverview{grid-column:2;grid-row:1}
.resultDocument{display:none}
main:has(#resultBody:not([hidden])) .inputPanel{display:none}
main:has(#resultBody:not([hidden])) .resultDocument{display:flex;max-height:max(var(--pane-h),72vh)}
.sectionview{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;margin:0}
.sectionview .pcap{align-items:center}
#sectionNote{display:none}
.sectiontext{flex:1 1 auto;min-height:0;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;
  padding:calc(var(--cap-h) + var(--fade)) 18px 22px;font-size:15.5px;line-height:1.72;color:rgba(255,255,255,.88);
  scrollbar-gutter:stable;animation:result-in .36s cubic-bezier(.2,.7,.3,1) both}
.sectiontext span[data-kind]{border-radius:3px;padding:.1em 0;-webkit-box-decoration-break:clone;box-decoration-break:clone;color:#fff}
.sectiontext span[data-kind="ai"]{background:var(--ai)}
.sectiontext span[data-kind="assisted"]{background:var(--assisted)}
.sectiontext span[data-kind="human"]{background:var(--human)}
.sectiontext span[data-kind="other"]{text-decoration:underline dotted rgba(255,255,255,.35);text-underline-offset:4px}
.legend{display:flex;gap:14px;flex-wrap:wrap;justify-content:flex-end;font:500 var(--label-size)/1.6 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.46)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend span::before{content:"";width:8px;height:8px;border-radius:2px;background:rgba(16,185,129,.75)}
.legend [data-kind="ai"]::before{background:rgba(255,107,96,.85)}
.legend [data-kind="assisted"]::before{background:rgba(224,190,128,.85)}
.sectionview:not(:has(.sectiontext span[data-kind])) .legend{display:none}

#resultIntro{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.empty{flex:1 1 auto;min-height:0;display:flex;align-items:center;justify-content:center;padding:calc(var(--cap-h) + var(--fade)) 28px 28px}
.empty-mark{display:block;position:relative;width:64px;height:1px;
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.20) 0 2px,transparent 2px 7px)}
.empty-mark::after{content:'';position:absolute;left:50%;top:50%;width:5px;height:5px;
  margin:-2.5px 0 0 -2.5px;border-radius:50%;background:rgba(255,255,255,.22);box-shadow:0 0 14px rgba(56,189,248,.45)}
.resultOverview:has(#resultBody:not([hidden])) .empty,
.imageOutput:has(#imageResult:not([hidden])) .empty{display:none}
#resultBody,#imageResult{padding:calc(var(--cap-h) + 14px) 22px 20px;display:flex;flex-direction:column;flex:1 1 auto;
  animation:result-in .36s cubic-bezier(.2,.7,.3,1) both}
#resultBody[hidden],#imageResult[hidden]{display:none!important}
.verdict{margin:6px 0 22px;font-size:clamp(40px,4.4vw,56px);font-weight:700;letter-spacing:-.034em;line-height:1.02;
  background:linear-gradient(180deg,#fff 30%,rgba(255,255,255,.78));-webkit-background-clip:text;background-clip:text;color:transparent;overflow-wrap:anywhere}
.stats,.imageFacts{margin:0 0 22px;padding:0;border-top:1px solid var(--hairline)}
.stats div,.imageFacts div{display:flex;justify-content:space-between;align-items:baseline;gap:16px;padding:10px 0;border-bottom:1px solid var(--hairline)}
/* Sentence case on purpose: the row reads "Checks left today 2" as a phrase (and probes read it so). */
.stats dt,.imageFacts dt{font:400 13px/1.5 var(--sans);letter-spacing:0;color:var(--muted);white-space:nowrap}
.stats dd,.imageFacts dd{margin:0;font:400 12px/1.5 var(--mono);letter-spacing:var(--readout-track);color:var(--fg);font-variant-numeric:tabular-nums lining-nums;text-align:right;min-width:0;overflow-wrap:anywhere}
.recordActions{display:flex;flex-wrap:wrap;gap:8px;margin-top:auto}
.recordActions .secondary{height:36px;padding:0 16px;font-size:13px}

/* ---------- image ---------- */
#imagePanel>.eyebrow,#imagePanel>h2,#imageResult>.eyebrow{display:none}
.imageInput,.imageOutput{min-height:var(--pane-h)}
#imageDrop{flex:1 1 0;display:grid;place-items:center;align-content:end;min-height:0;padding:calc(var(--cap-h) + var(--fade)) 28px 6px;
  text-align:center;color:rgba(255,255,255,.34);font-size:15.5px;line-height:1.5}
#imageBatchTools{padding:0 18px 4px;text-align:center;flex:1 1 0}
#imagePanel:has(#imagePreview:not([hidden])) #imageBatchTools,main[data-image-intake="url"] #imageBatchTools{flex:0 0 auto}
.imageInput:has(#imageBatchItems:not(:empty)) #imageBatchTools{flex:1 1 auto;overflow:auto;text-align:left;padding-top:4px}
.imageInput:has(#imageBatchItems:not(:empty)) #imageDrop{flex:0 0 auto;padding-bottom:4px}
main[data-image-intake="upload"] #imagePanel .urltools{display:none}
main[data-image-intake="url"] :is(#imageDrop,#chooseImage,#pasteImage){display:none}
main[data-image-intake="url"] #imagePanel .urltools{display:flex}
main[data-image-intake="url"] .imageInput:has(#imagePreview[hidden]) .urltools{flex:1 1 auto;align-content:center;justify-content:center;padding:calc(var(--cap-h) + var(--fade)) 28px 0}
main[data-image-intake="url"] .imageInput:has(#imagePreview[hidden]) .urltools input{flex-basis:100%;max-width:440px;text-align:center}
/* The preview replaces the drop prompt inside the same pane. */
#imagePreview{display:block;flex:0 1 auto;min-height:0;width:auto;height:auto;max-width:calc(100% - 36px);max-height:min(50vh,460px);margin:calc(var(--cap-h) + 14px) auto 14px;
  border-radius:var(--r-sm);object-fit:contain}
.imageInput:has(#imagePreview:not([hidden])) #imageDrop{display:none}
main[data-image-intake="url"] .imageInput:has(#imagePreview:not([hidden])) #imagePreview{margin-top:12px}
.imageFormatHelp{margin:6px 18px 10px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);text-align:left}
.imageFormatHelp strong{display:block;font-weight:600;font-size:13px;margin:0 0 4px}
.imageFormatHelp p{margin:0;font-size:12.5px;line-height:1.6;color:var(--muted)}
/* Result state: the left pane is the checked image, the right one the verdict. */
#imagePanel:has(#imageResult:not([hidden])) :is(#imageDrop,.urltools,#imageBatchTools,.paneFoot,.imageFormatHelp,#checkImage,#imageStatus){display:none!important}
#imagePanel:has(#imageResult:not([hidden])) #imagePreview{margin:calc(var(--cap-h) + 14px) auto 18px}
#imagePanel:has(#imageResult:not([hidden])) .imageInput{justify-content:center}
#imageDetails{margin:-10px 0 18px;font-size:13px;line-height:1.55;color:var(--muted)}
.imageLikelihood{margin:0 0 22px}
.imageLikelihood>div:first-child{display:flex;justify-content:space-between;align-items:baseline;gap:12px}
.imageLikelihood>div:first-child span{font:500 var(--label-size)/1.6 var(--mono);letter-spacing:var(--label-track);text-transform:uppercase;color:rgba(255,255,255,.46)}
.imageLikelihood strong{font:500 12px/1.5 var(--mono);letter-spacing:var(--readout-track);color:var(--fg);font-variant-numeric:tabular-nums lining-nums}
.imageLikelihoodScale{display:flex;justify-content:space-between;font:400 var(--label-size)/1.6 var(--mono);letter-spacing:var(--readout-track);color:rgba(255,255,255,.36)}
#imageLikelihood{display:block;width:100%;height:4px;margin:10px 0 6px;border:0;border-radius:4px;background:#ffffff12}
#imageLikelihood::-webkit-meter-bar{border:0;border-radius:4px;background:#ffffff12;height:4px}
#imageLikelihood::-webkit-meter-optimum-value,#imageLikelihood::-webkit-meter-suboptimum-value,#imageLikelihood::-webkit-meter-even-less-good-value{border-radius:4px;background:rgba(255,255,255,.72)}
#imageLikelihood::-moz-meter-bar{border-radius:4px;background:rgba(255,255,255,.72)}

/* ---------- plagiarism: a SOURCES pane under the grid, only once there is a result ---------- */
#plagiarismPanel{margin-top:18px}
#plagiarismPanel:not(:has(#plagiarismResult:not([hidden]))){display:none}
#plagiarismPanel>.eyebrow,#plagiarismPanel>.hint{display:none}
#plagiarismPanel>h2{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
#plagiarismResult .pcap{align-items:baseline}
#plagiarismHeading{color:rgba(255,255,255,.62);letter-spacing:var(--readout-track);text-transform:none;font-weight:400;font-variant-numeric:lining-nums tabular-nums}
#plagiarismSummary{margin:2px 18px 0;font-size:13px;line-height:1.55;color:var(--muted)}
#plagiarismReviewGrid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(220px,1fr);gap:28px;margin:16px 18px 18px}
#plagiarismReviewGrid:has(#plagiarismPassages[hidden]){display:none}
#plagiarismPassages,#plagiarismMatches{min-width:0;margin:0;padding:0}
#plagiarismPassages h4{margin:0 0 4px;font:500 var(--label-size)/1.6 var(--mono);letter-spacing:var(--label-track);text-transform:uppercase;color:rgba(255,255,255,.46)}
#plagiarismPassages .hint{margin:0 0 10px}
#plagiarismHighlighted{white-space:pre-wrap;overflow-wrap:anywhere;font-size:15.5px;line-height:1.72;color:rgba(255,255,255,.88);max-height:min(60vh,520px);overflow:auto}
#plagiarismHighlighted mark{background:rgba(224,190,128,.22);color:#fff;border-radius:3px}
#plagiarismMatches{list-style:none;counter-reset:match;border-top:1px solid var(--hairline)}
#plagiarismMatches li{counter-increment:match;display:flex;align-items:baseline;gap:10px;padding:10px 0;border-bottom:1px solid var(--hairline);font-size:13px;color:var(--muted);min-width:0}
#plagiarismMatches li::before{content:counter(match,decimal-leading-zero);flex:0 0 auto;font:400 10px var(--mono);color:var(--faint)}
#plagiarismMatches a{margin-left:auto;flex:0 0 auto;color:var(--fg);text-decoration:underline;text-decoration-color:rgba(255,255,255,.3);text-underline-offset:3px;max-width:55%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#plagiarismResult .recordActions{margin:0 18px 16px}
#plagiarismPanel>.checknotes{margin:0 18px 14px;text-align:left}

/* ---------- my checks ---------- */
#historyPanel{margin-top:18px;min-height:var(--pane-h)}
.historyFilters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 18px;padding:4px 18px 0}
.historyFilters label{display:grid;gap:4px;min-width:0;font:500 var(--label-size)/1.6 var(--mono);letter-spacing:var(--label-track);text-transform:uppercase;color:rgba(255,255,255,.46)}
select,.historyItem input:not([type="checkbox"]){width:100%;height:36px;padding:0;border:0;border-bottom:1px solid var(--line);border-radius:0;background:transparent;
  color:var(--fg);font:14px var(--sans);letter-spacing:0;text-transform:none;outline:none;transition:border-color .18s ease}
select:focus,.historyItem input:not([type="checkbox"]):focus{border-bottom-color:rgba(56,189,248,.6)}
select option{background:#0d0d0f;color:var(--fg)}
#historyStatus{margin:14px 18px 0;font:400 10.5px/1.6 var(--mono);letter-spacing:var(--readout-track);color:var(--muted)}
#historyList{padding:4px 18px 8px}
.historyItem{display:flex;flex-direction:column;padding:18px 0;border-top:1px solid var(--hairline)}
#historyList .historyItem:first-child{border-top:0}
.historyHead{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap}
.historyHead strong{font-weight:600;font-size:15.5px;line-height:1.35}
.historyHead strong::first-letter{text-transform:uppercase}
.historyHead span{font:400 var(--label-size)/1.6 var(--mono);letter-spacing:var(--readout-track);color:rgba(255,255,255,.36);font-variant-numeric:tabular-nums}
.historyItem code{display:block;margin:4px 0 10px;font:400 var(--label-size)/1.6 var(--mono);color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.historyItem>label{margin:10px 0 2px;font:500 var(--label-size)/1.6 var(--mono);letter-spacing:var(--label-track);text-transform:uppercase;color:rgba(255,255,255,.46)}
.historyItem>label:has(input[type="checkbox"]){display:flex;align-items:flex-start;gap:9px;margin-top:12px;font:400 12.5px/1.55 var(--sans);letter-spacing:0;text-transform:none;color:var(--muted);order:1}
.historyItem textarea{width:100%;min-height:52px;resize:none;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:rgba(0,0,0,.25);font-size:14px;line-height:1.55;outline:none}
.historyItem textarea:focus{border-color:rgba(56,189,248,.4)}
/* Consent before the button it unlocks; Delete last, set apart and destructive on hover. */
.historyItem>.historyActions{order:2}
.historyItem>input[type="url"]{order:3;margin-top:10px;font:12px var(--mono);text-overflow:ellipsis}
.historyItem>.status{order:4;margin:8px 0 0}
.historyActions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.historyActions .secondary{height:34px;padding:0 15px;font-size:13px}
#historyList .historyActions>button:nth-child(2){order:9;margin-left:auto}
#historyList .historyActions>button:nth-child(2):hover:not(:disabled){color:#ff9a91;border-color:rgba(255,107,96,.5);background:rgba(255,107,96,.08)}
#historyLoadMore{display:flex;margin:6px auto 18px;height:36px;padding:0 18px;font-size:13px}

/* ---------- one quiet line: Open a saved record · Details ---------- */
.notes{display:flex;flex-wrap:wrap;justify-content:center;align-items:flex-start;gap:0 26px;max-width:760px;margin:clamp(18px,3vh,30px) auto 0}
.checknotes>summary{cursor:pointer;min-height:44px;display:flex;align-items:center;gap:8px;justify-content:center;list-style:none;
  font:400 var(--brand-size)/1.4 var(--mono);letter-spacing:var(--brand-track);text-transform:uppercase;color:rgba(255,255,255,.5);transition:color .18s ease}
.checknotes>summary::-webkit-details-marker{display:none}
.checknotes>summary::before{content:"";width:0;height:0;border-left:4px solid currentColor;border-top:3.5px solid transparent;border-bottom:3.5px solid transparent;opacity:.7;transition:transform .18s ease}
.checknotes[open]>summary::before{transform:rotate(90deg)}
.checknotes>summary:hover{color:#fff}
.notes>.checknotes[open]{flex-basis:100%;order:2;text-align:left;padding:4px 0 0;border-top:1px solid var(--hairline);margin-top:4px}
.checknotes .hint,.checknotes .fine{font-size:12.5px;line-height:1.7;color:var(--muted);margin:10px 0 0}
#plagiarismPanel>.checknotes>summary{justify-content:flex-start;min-height:36px;font-size:10px}
/* Details shows only the rules that apply to the view on screen. */
main[data-checker-view="text"] .notes .fine:not([data-for="text"]):not([data-for="plagiarism"]):not([data-for="all"]),
main[data-checker-view="image"] .notes .fine:not([data-for="image"]):not([data-for="all"]),
main[data-checker-view="history"] .notes .fine:not([data-for="history"]):not([data-for="all"]){display:none}
main:has(#plagiarismPanel[hidden]) .notes .fine[data-for="plagiarism"],
html body[data-plagiarism-mode="off"] .notes .fine[data-for="plagiarism"]{display:none}
#localRecordPanel .historyActions{justify-content:center}
#localRecordPanel .historyActions .secondary{height:36px;padding:0 18px;font-size:13px}
#localRecordPanel>.status{text-align:center}
/* An opened record reads as a result pane. */
#localRecordView{margin:16px 0 0;padding:20px 22px;border:1px solid;border-color:var(--edge-lit) var(--edge-side) var(--edge-base);border-radius:var(--r-lg);
  background:var(--surface);box-shadow:var(--bloom);display:block}
#localRecordView h3{margin:0 0 10px;font-size:22px;font-weight:700;letter-spacing:-.025em;line-height:1.2;color:var(--fg)}
#localRecordView p{margin:0;padding:8px 0;border-bottom:1px solid var(--hairline);font-size:13px;line-height:1.55;color:var(--muted)}
#localRecordView pre{white-space:pre-wrap;overflow-wrap:anywhere;margin:14px 0 0;font:15.5px/1.72 var(--sans);color:rgba(255,255,255,.88)}
#localRecordView ol{margin:14px 0 0;padding:0 0 0 18px;font-size:13px;color:var(--muted)}
#localRecordView ol li{padding:4px 0}
#localRecordView ol a{color:var(--fg)}
#localRecordView img{max-width:100%;max-height:420px;border-radius:var(--r-sm)}
#localRecordView>label{display:grid;gap:8px;margin:14px 0;font-size:13px;color:var(--muted)}
#localRecordView>button{margin-top:14px;height:36px;padding:0 16px;font-size:13px}

/* ---------- in-page confirm dialog (inline styles set by script; restyled to the pane) ---------- */
dialog{background:var(--surface-top)!important;color:var(--fg)!important;border:1px solid var(--edge-side)!important;border-top-color:var(--edge-lit)!important;
  border-radius:var(--r-lg)!important;box-shadow:0 30px 80px -30px rgba(0,0,0,.9), var(--bloom);font-size:15px}
dialog::backdrop{background:rgba(0,0,0,.6);backdrop-filter:blur(2px)}
dialog .secondary,dialog .primary{height:40px;padding:0 18px;font-size:14px}
dialog .primary{background:transparent;color:#ff9a91;border-color:rgba(255,107,96,.5);box-shadow:none}
dialog .primary::after{display:none}
dialog .primary:hover:not(:disabled){background:rgba(255,107,96,.10);color:#ffb4ad;box-shadow:none}

@media (prefers-reduced-motion:reduce){
  .primary::after{animation:none;opacity:0}
  .sectiontext,#resultBody,#imageResult{animation:none}
  button:active:not(:disabled){transform:none}
}

/* ---------- small screens: the Humanizer's portrait block ---------- */
@media (max-width:860px){
  .workspace{grid-template-columns:minmax(0,1fr);grid-auto-rows:auto;gap:12px}
  .inputPanel,.resultDocument,.resultOverview{grid-column:1;grid-row:auto}
  .inputPanel{min-height:clamp(240px,40dvh,380px)}
  /* Before a result, the empty right pane would be dead space on a phone. */
  #textWorkspace:not(:has(#resultBody:not([hidden]))) .resultOverview,
  #imagePanel:not(:has(#imageResult:not([hidden]))) .imageOutput{display:none}
  .resultOverview,.imageOutput{order:-1}
  main:has(#resultBody:not([hidden])) .resultDocument{max-height:none;min-height:0}
  .sectiontext{overflow:visible;padding-top:10px}
  .resultDocument .pcap{position:relative;right:0;flex-wrap:wrap;row-gap:4px}
  .resultDocument .pcap::before{display:none}
  .legend{justify-content:flex-start}
  .imageInput,.imageOutput{min-height:0}
  .imageInput{min-height:clamp(240px,40dvh,380px)}
  #imagePanel:has(#imageResult:not([hidden])) .imageInput{min-height:0}
  #imagePanel:has(#imageResult:not([hidden])) #imagePreview{max-height:46vh}
  .bar{grid-template-columns:minmax(0,1fr);gap:12px}
  .actions{grid-column:1;min-width:0}
  .bar .primary,.bar .secondary{flex:1;min-width:145px;padding:0 20px}
  .allowance{grid-column:1;justify-self:stretch;align-items:flex-start;text-align:left;flex-direction:row;flex-wrap:wrap;gap:0 12px}
  #plagiarismReviewGrid{grid-template-columns:1fr}
}
@media (max-width:640px){
  .shell{padding:0 16px 22px}
  .checkmodes{width:100%;display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr)}
  .checkmodes button{height:36px;padding:0 8px}
  .checkmodes button[hidden]{display:none}
  .historyFilters{gap:10px}
  .historyFilters label{letter-spacing:.08em}
  .verdict{font-size:44px}
  #resultBody,#imageResult{padding-left:18px;padding-right:18px}
  .paneFoot{padding-left:16px;padding-right:12px}
}
@media (max-width:360px){.bar .primary,.bar .secondary{min-width:0}}

/* ---------- print: a calm paper record ---------- */
#printSource,#printMeta,#printHeader,#printFooter{display:none}
@media print{
  @page{size:A4;margin:19mm 18mm 21mm}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  body{background:#fbfaf6!important;color:#17241e!important;font:14px/1.55 "Inter Tight",Arial,sans-serif}
  .shell{display:block!important;max-width:none;padding:0}
  main{display:block!important;padding:0!important;background:none!important}
  .topbar,.hero,.checkmodes,.inputPanel,.resultDocument,.pcap,.empty,.paneFoot,.urltools,.inputtools,.bar,.status,.hint,.checknotes,.sitefoot,.fine,.imagedrop,.legend,#imageBatchTools,.imageFormatHelp,button{display:none!important}
  .workspace{display:block!important;margin:0!important}
  .box{border:0!important;background:none!important;box-shadow:none!important;min-height:0!important;overflow:visible!important;display:block!important;color:#17241e!important}
  .result,.imagepanel{display:block!important;color:#17241e!important;min-height:0!important;text-align:left!important;max-width:none!important;margin:0!important;padding:0!important;border:0!important;background:none!important;box-shadow:none!important}
  #resultBody,#imageResult{padding:0!important;animation:none!important}
  #printHeader{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:0 0 23px;border-bottom:1px solid #a6aea2}
  #printHeader .printBrand{font-size:18px;font-weight:700;letter-spacing:-.035em}
  #printHeader .printIssue{text-align:right;font:600 9px/1.7 ui-monospace,monospace;letter-spacing:.11em;text-transform:uppercase;color:#66746b}
  [data-print-report="text"] #imagePanel,[data-print-report="text"] #plagiarismPanel,
  [data-print-report="image"] #textWorkspace,[data-print-report="image"] #plagiarismPanel,
  [data-print-report="plagiarism"] #textWorkspace,[data-print-report="plagiarism"] #imagePanel{display:none!important}
  body[data-print-report="text"] main #textWorkspace,
  body[data-print-report="plagiarism"] main #plagiarismPanel,
  body[data-print-report="image"] main #imagePanel{display:block!important}
  body[data-print-report="image"] .imageWorkspace{display:grid!important;grid-template-columns:72mm minmax(0,1fr);column-gap:13mm;align-items:start;margin-top:12mm!important}
  body[data-print-report="image"] #imagePreview{display:block!important;margin:0!important;width:72mm!important;max-width:72mm!important;max-height:76mm!important;object-fit:contain;border:1px solid #d6dbd2!important;border-radius:2px!important;background:#f1f1ed;break-inside:avoid}
  body[data-print-report="image"] #imageResult .imageFacts{display:none!important}
  .eyebrow{display:block!important;color:#718075!important;margin:26px 0 6px;font:650 9px/1.5 ui-monospace,monospace;letter-spacing:.18em;text-transform:uppercase}
  #imagePanel>.eyebrow,#imagePanel>h2,#plagiarismPanel>h2,#imageResult>.eyebrow{display:none!important}
  .verdict{font:700 52px/1.05 "Inter Tight",Arial,sans-serif!important;letter-spacing:-.035em!important;margin:24px 0 16px!important;color:#17241e!important;background:none!important;-webkit-text-fill-color:#17241e}
  #imageDetails{font-size:13px;color:#66746b!important;margin:0 0 18px}
  .stats{margin-top:20px;border-top:1px solid #d6dbd2;padding-top:6px;max-width:105mm}
  .stats div{border-bottom:1px solid #e5e8e0;padding:7px 0;margin:0}
  .stats dt,.imageFacts dt{color:#66746b!important;font:600 9px/1.5 ui-monospace,monospace!important;letter-spacing:.12em}
  .stats dd,.imageFacts dd{color:#17241e!important;font:600 12px/1.5 "Inter Tight",Arial,sans-serif!important}
  .stats div:last-child{display:none}
  .result p,.imagepanel p{color:#17241e!important}
  .imageLikelihood strong,.imageLikelihood span,.imageLikelihoodScale,.imageLikelihood>div:first-child span{color:#17241e!important}
  #imageLikelihood{background:#d6dbd2}
  #imageLikelihood::-webkit-meter-bar{background:#d6dbd2}
  #imageLikelihood::-webkit-meter-optimum-value,#imageLikelihood::-webkit-meter-suboptimum-value,#imageLikelihood::-webkit-meter-even-less-good-value{background:#17241e}
  #plagiarismPanel{display:block;margin:0!important}
  #plagiarismHeading{display:block;font:700 26px/1.2 "Inter Tight",Arial,sans-serif!important;color:#17241e!important;margin:24px 0 8px;letter-spacing:-.03em!important}
  #plagiarismResult .pcap{display:block!important;position:static;background:none;padding:0}
  #plagiarismResult .pcap .label{display:none}
  #plagiarismSummary,#plagiarismReviewGrid,#plagiarismResult .recordActions{margin-left:0!important;margin-right:0!important}
  #plagiarismHighlighted{max-height:none;overflow:visible;color:#17241e}
  #plagiarismHighlighted mark{background:#f1e2bf;color:#17241e}
  #plagiarismPassages h4{color:#66746b}
  #plagiarismMatches li{padding:8px 0;border-bottom:1px solid #e5e8e0;break-inside:avoid;color:#28352c}
  #printMeta{display:block;white-space:pre-wrap;overflow-wrap:anywhere;font:10px/1.7 ui-monospace,monospace;color:#59685e;padding:16px 0;border-top:1px solid #d6dbd2;margin-top:24px}
  #printSource{display:block;white-space:normal;overflow-wrap:anywhere;border-top:1px solid #d6dbd2;margin-top:0;padding-top:18px}
  [data-print-report="image"] #printSource{display:none}
  #printSource h2{font-size:17px;letter-spacing:-.025em;margin:0 0 12px}
  #printSourceText{white-space:pre-wrap;font-size:12px;line-height:1.7;color:#28352c}
  #printSource>p:last-child{display:none}
  #printFooter{display:block;margin-top:28px;border-top:1px solid #d6dbd2;padding-top:9px;color:#718075;font:9px/1.4 ui-monospace,monospace;letter-spacing:.025em}
  a{color:#17241e;text-decoration:underline}
  .notes{display:block;margin:0;max-width:none}
  body[data-print-report="local"] main #textWorkspace,
  body[data-print-report="local"] main #imagePanel,
  body[data-print-report="local"] main #plagiarismPanel,
  body[data-print-report="local"] main #historyPanel,
  body[data-print-report="local"] #printMeta,
  body[data-print-report="local"] #printSource{display:none!important}
  body[data-print-report="local"] main #localRecordPanel{display:block!important;margin:20px 0!important;color:#17241e!important;border:0!important;text-align:left!important;padding:0!important}
  body[data-print-report="local"] #localRecordPanel>summary,
  body[data-print-report="local"] #localRecordPanel>.hint,
  body[data-print-report="local"] #localRecordPanel>.historyActions,
  body[data-print-report="local"] #localRecordView label{display:none!important}
  body[data-print-report="local"] #localRecordView:not([hidden]){display:block!important;border:0;padding:0;background:none;box-shadow:none}
  body[data-print-report="local"] #localRecordView h3{font-size:28px;letter-spacing:-.04em;color:#17241e}
  body[data-print-report="local"] #localRecordView p,body[data-print-report="local"] #localRecordView pre,body[data-print-report="local"] #localRecordView li{color:#17241e!important;border-color:#e5e8e0}
  body[data-print-report="local"] #localRecordView img{max-width:115mm;max-height:96mm;object-fit:contain;break-inside:avoid}
  .sectiontext span[data-kind],.sectiontext span[data-cp]{color:#17241e!important;opacity:1!important}
}

/* ---------- public shared summary (/detector/shared, server-rendered SHARE_PAGE) ---------- */
body.sharedPage{padding:clamp(40px,9vh,104px) 22px 0}
.sharedPage>.mark{display:block;width:26px;height:26px;margin:0 auto 22px;object-fit:contain;opacity:.92}
.sharedPage main{max-width:560px;margin:0 auto;padding:0 0 64px;text-align:center}
.sharedPage small{display:block;font:500 var(--label-size)/1.6 var(--mono);letter-spacing:var(--label-track);text-transform:uppercase;color:rgba(255,255,255,.46)}
.sharedPage h1{margin:12px 0 28px;font-size:clamp(30px,5vw,48px);font-weight:700;letter-spacing:-.034em;line-height:1.05;
  background:linear-gradient(180deg,#fff 30%,rgba(255,255,255,.78));-webkit-background-clip:text;background-clip:text;color:transparent}
.sharedPage dl{display:grid;grid-template-columns:auto minmax(0,1fr);margin:0 0 28px;padding:6px 20px;text-align:left;
  border:1px solid;border-color:var(--edge-lit) var(--edge-side) var(--edge-base);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--bloom)}
.sharedPage dl:empty{display:none}
.sharedPage dt,.sharedPage dd{padding:11px 0;border-bottom:1px solid var(--hairline)}
.sharedPage dt:nth-last-of-type(1),.sharedPage dd:last-of-type{border-bottom:0}
.sharedPage dt{padding-right:24px;font:500 var(--label-size)/1.6 var(--mono);letter-spacing:var(--label-track);text-transform:uppercase;color:rgba(255,255,255,.46);line-height:1.5;padding-top:12px}
.sharedPage dd{margin:0;text-align:right;overflow-wrap:anywhere;font:400 12px/1.5 var(--mono);letter-spacing:var(--readout-track);color:var(--fg);font-variant-numeric:tabular-nums lining-nums}
.sharedPage p{margin:0;font-size:12px;line-height:1.7;color:var(--faint)}
.sharedPage main:has(#facts:empty) #note{display:none}
.sharedPage.sharedFull main{max-width:760px}
.sharedReport{margin:0 0 28px;text-align:left;padding:18px 20px;border:1px solid;border-color:var(--edge-lit) var(--edge-side) var(--edge-base);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--bloom)}
.sharedReport .legend{justify-content:flex-start;margin:0 0 4px}
.sharedReport .sectiontext{max-height:none;overflow-x:auto;overflow-y:hidden;contain:paint;padding:14px 0 4px;animation:none}
.sharedReport .sectiontext span{unicode-bidi:isolate}
.sharedReport .sectiontext [data-cp]{font-size:.72em;letter-spacing:0;opacity:.72;white-space:nowrap}
.sharedSections{list-style:none;margin:18px 0 0;padding:0;border-top:1px solid var(--hairline);counter-reset:section}
.sharedSections li{display:flex;justify-content:space-between;gap:16px;padding:10px 0;border-bottom:1px solid var(--hairline);font-size:13px;color:var(--muted);counter-increment:section}
.sharedSections li:last-child{border-bottom:0}
.sharedSections li span:first-child::before{content:counter(section,decimal-leading-zero);display:inline-block;width:30px;font:400 10px var(--mono);color:var(--faint);font-variant-numeric:tabular-nums}
.sharedSections li span:first-child::after{content:"";display:inline-block;width:8px;height:8px;margin-left:10px;border-radius:2px;background:rgba(16,185,129,.75);vertical-align:middle}
.sharedSections li[data-kind="ai"] span:first-child::after{background:rgba(255,107,96,.85)}
.sharedSections li[data-kind="assisted"] span:first-child::after{background:rgba(224,190,128,.85)}
.sharedSections li[data-kind="other"] span:first-child::after{background:transparent;border:1px dotted rgba(255,255,255,.45)}
.sharedSections li span:first-child{min-width:0;overflow-wrap:anywhere}
.sharedSections li span:last-child{flex-shrink:0;color:var(--fg);font:400 12px/1.5 var(--mono);font-variant-numeric:tabular-nums}
@media (max-width:640px){body.sharedPage{padding-left:16px;padding-right:16px}.sharedReport{padding:14px 16px}}

/* ---------- Pangram's own screenshot: the primary result (Detector session, 2026-10-04) ----------
   Contract: <figure class="pangramProof"><img …></figure> as the FIRST child of #resultBody, of a
   .historyItem, or of the shared page's <main>. Our numbers follow it as secondary text. The image is
   Pangram-card width (~700–1000px) and renders at the container's width, never wider. */
.pangramProof{margin:0 0 18px;padding:0;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;background:#fff;flex:0 0 auto}
.pangramProof img{display:block;width:100%;height:auto;max-width:100%}
.pangramProof figcaption{padding:8px 12px;background:var(--surface);border-top:1px solid var(--line);font:400 var(--label-size)/1.6 var(--mono);letter-spacing:.06em;color:var(--faint)}
.pangramProof:has(img[hidden]),.pangramProof:not(:has(img)){display:none}
/* the verdict pane grows to the document pane's height and scrolls inside, so a tall screenshot never clips */
main:has(#resultBody:not([hidden])) .resultOverview{max-height:max(var(--pane-h),72vh)}
#resultBody{min-height:0;overflow:auto;scrollbar-gutter:stable}
.historyItem .pangramProof{margin:12px 0 10px;max-width:760px}
.sharedPage main>.pangramProof{margin:18px 0 22px}

/* PANGRAM ITSELF LEADS (owner priority, 2026-10-04): when a text result carries Pangram's screenshot,
   the two panes stack -- the result pane spans the full width on top, so the screenshot renders at
   ~1,100px (its natural 1139px), with our numbers beneath it; the checked text follows below. */
main:has(#resultBody:not([hidden])>.pangramProof img:not([hidden])) .workspace{grid-template-columns:minmax(0,1fr);grid-auto-rows:auto}
main:has(#resultBody:not([hidden])>.pangramProof img:not([hidden])) .resultOverview{grid-column:1;grid-row:1;max-height:none}
main:has(#resultBody:not([hidden])>.pangramProof img:not([hidden])) .resultDocument{grid-column:1;grid-row:2;max-height:min(60vh,640px)}
main:has(#resultBody:not([hidden])>.pangramProof img:not([hidden])) #resultBody{overflow:visible}
#resultBody>.pangramProof{margin:4px auto 22px;width:100%;max-width:1140px}
#resultBody:has(>.pangramProof img:not([hidden])) .verdict{font-size:clamp(22px,2.2vw,28px);margin-top:0}  /* our verdict becomes the caption to Pangram's own */

/* OWNER 2026-10-04 (3): on phones the switch sits on the signature's row, in the right corner --
   the same compact pill as the Humanizer's pages. */
@media (max-width:639px){
  .brandword{font-size:14px}
  .brandhome{gap:7px}
  .prodswitch{padding:2px}
  .prodseg{height:28px;padding:0 6px;font-size:9px;letter-spacing:.04em}
}
@media (max-width:359px){.prodseg{padding:0 5px;letter-spacing:0}.brandhome{gap:6px}.topbar{column-gap:8px}}

/* PANGRAM ITSELF LEADS ON IMAGE AND PLAGIARISM TOO (Detector session, 2026-10-05: image 998x602,
   plagiarism 1040x720). Image: the result pane takes the full width and the input pane steps aside --
   Pangram's screenshot already shows the checked image. Plagiarism: the screenshot opens the sources
   pane, under its label. */
#imagePanel:has(#imageResult:not([hidden])>.pangramProof img:not([hidden])) .imageWorkspace{grid-template-columns:minmax(0,1fr);grid-auto-rows:auto}
#imagePanel:has(#imageResult:not([hidden])>.pangramProof img:not([hidden])) .imageInput{display:none}
#imagePanel:has(#imageResult:not([hidden])>.pangramProof img:not([hidden])) .imageOutput{grid-column:1;grid-row:1;min-height:0}
#imageResult>.pangramProof{margin:4px auto 22px;width:100%;max-width:1000px}
#imageResult:has(>.pangramProof img:not([hidden])) .verdict{font-size:clamp(22px,2.2vw,28px);margin-top:0}
#plagiarismResult>.pangramProof{margin:calc(var(--cap-h) + 14px) 18px 18px;max-width:1040px}
#plagiarismResult:has(>.pangramProof img:not([hidden]))>.pcap{position:absolute;top:0}

/* CREDITS (names-credits r1): one quiet line under the bar, in the allowance's own register; the
   plagiarism cost is labelled because, in this layout, it no longer sits beside its button. */
.intakeAllowance[hidden],#creditsInfo[hidden],#plagiarismCredits[hidden],#imageCredits[hidden]{display:none!important}
#creditsInfo,#plagiarismCredits,#imageCredits{margin:4px 0 0;font:400 12.5px/1.5 var(--sans);color:var(--muted);letter-spacing:0}
#plagiarismCredits::before{content:"Plagiarism · ";color:var(--faint)}
/* My checks: a named row leads with its name; the kind · verdict label follows, quieter. */
.historyHead strong+span:not(:last-child){margin-right:auto}

/* ONE HEADER ROW FROM 1000px (owner 2026-10-05: the links line sat on a row beneath the logo and the
   switch on a 1280px laptop). Signature and switch in the page's corners, the links centred on the
   page in the same row. Where the landing sentence would not fit beside them (under 1290px), it
   drops to a quiet line just below the links, still centred, so the links never leave the row. */
@media (min-width:1000px){
  .topbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;column-gap:24px;
    width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);padding-left:clamp(24px,2.5vw,40px);padding-right:clamp(24px,2.5vw,40px);box-sizing:border-box}
  .brandhome{grid-column:1;grid-row:1;justify-self:start;margin:0}
  .topline{grid-column:2;grid-row:1;justify-self:center;flex:0 0 auto;position:relative;margin:0}
  .prodswitch{grid-column:3;grid-row:1;justify-self:end;margin:0}
  html{overflow-x:clip}
}

/* ---------- print, for the redesigned page (owner 2026-10-05: the printed records were broken) ----
   The screen layout's panes, labels and fades have no place on paper. A record prints as: the header,
   Pangram's own screenshot (when the check kept one), our verdict and figures, the record line, and
   the submitted text -- dark ink on paper, one column, A4 width. */
@media print{
  html,body{background:#fbfaf6!important}
  .shell,main{max-width:174mm!important;margin:0!important}
  .resultDocument,#sectionView,.sectiontext,.recordActions,.resultNav,.empty,.empty-mark,.pcap,.legend,
  .checkmodes,.barnotes,#creditsInfo,#plagiarismCredits,#imageCredits,.intakeTabs,.paneFoot{display:none!important}
  #textWorkspace .workspace{display:block!important;grid-template-columns:none!important;margin:0!important}
  body[data-print-report="image"] .imageInput{min-height:0!important;border:0!important;background:none!important;box-shadow:none!important}
  .resultOverview{display:block!important;max-height:none!important;border:0!important;background:none!important;box-shadow:none!important}
  .box,.box *,.result,.result *,.imagepanel,.imagepanel *{color:#17241e!important;-webkit-text-fill-color:#17241e;text-shadow:none!important}
  .pangramProof{display:block!important;max-width:150mm!important;margin:8mm 0 4mm!important;border:1px solid #d6dbd2!important;border-radius:2px!important;break-inside:avoid;background:#fff!important}
  .pangramProof img{width:100%!important;height:auto!important}
  .verdict{font-size:36px!important;margin:6mm 0 4mm!important}
  .stats{max-width:120mm}
  #plagiarismHighlighted mark{background:#f1e2bf!important}
  #plagiarismMatches a{color:#17241e!important;text-decoration:underline}
  /* With Pangram's screenshot the record shows that (it contains the image); without one, the checked
     image prints beside the verdict as it always did. */
  body[data-print-report="image"] #imagePanel:has(.pangramProof img:not([hidden])) .imageWorkspace{display:block!important}
  body[data-print-report="image"] #imagePanel:has(.pangramProof img:not([hidden])) .imageInput{display:none!important}
  /* the screen's input pane and My checks never print, whatever screen rule raised them */
  body .shell main .inputPanel,body .shell main #historyPanel,body .shell main #localRecordView{display:none!important}
}
.hero h1{padding-bottom:.08em}  /* the "g" of Pangram and the "y" of My kept whole under the clip */
