/* The upload journey is one open book on a desk. The landing's hero book flies
   here and opens: its cover turns into the left page, where the reader writes —
   attach a project, say what to focus on, generate — and the right page is the
   title page of the book being made, whose contents fill in as it happens.
   Pages keep the hero book's proportions, so the flight is a plain scale. */
.upload-workspace {
  --leaf-h: clamp(480px, min(100svh - 184px, (100vw - 120px) / 1.512), 700px);
  --leaf-w: calc(var(--leaf-h) * .756);
  --leaf: var(--paper);
  --desk: var(--paper-soft);
  --field: var(--paper-strong);
  --fold: rgba(21, 27, 30, .07);
  --lift: rgba(21, 27, 30, .36);
  --glass: rgba(255, 255, 255, .44);
  --glass-edge: rgba(255, 255, 255, .85);
  --glow-clay: rgba(206, 123, 81, .36);
  --glow-mist: rgba(150, 190, 176, .46);
  --pad: clamp(30px, calc(var(--leaf-w) * .11), 60px);
  position: relative;
  z-index: 2;
  display: grid;
  place-items: center;
  min-height: calc(100svh - 88px);
  padding: 44px 24px 52px;
  border-top: 1px solid var(--line);
  isolation: isolate;
}
html[data-theme="dark"] .upload-workspace { --leaf: var(--paper-strong); --desk: var(--paper); --field: var(--paper); --fold: rgba(0, 0, 0, .3); --lift: rgba(0, 0, 0, .62); --glass: rgba(38, 37, 33, .55); --glass-edge: rgba(255, 255, 255, .07); --glow-clay: rgba(230, 164, 124, .16); --glow-mist: rgba(120, 160, 146, .16); }
.upload-desk-surface {
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    radial-gradient(34% 44% at 14% 22%, rgba(206, 123, 81, .12), transparent 70%),
    radial-gradient(40% 48% at 88% 84%, rgba(150, 190, 176, .22), transparent 72%),
    radial-gradient(110% 85% at 50% 42%, transparent 50%, rgba(21, 27, 30, .04)),
    var(--desk);
  pointer-events: none;
}
html[data-theme="dark"] .upload-desk-surface {
  background:
    radial-gradient(34% 44% at 14% 22%, rgba(230, 164, 124, .07), transparent 70%),
    radial-gradient(40% 48% at 88% 84%, rgba(120, 160, 146, .07), transparent 72%),
    radial-gradient(110% 85% at 50% 42%, transparent 50%, rgba(0, 0, 0, .28)),
    var(--desk);
}
/* The bar stays above every moving layer and paints edge to edge. */
body:is([data-page-view="upload"], [data-page-view="generate"], [data-workspace-motion]) .shelf-topbar {
  position: relative;
  z-index: 30;
  background: var(--paper);
  box-shadow: 0 0 0 100vmax var(--paper);
  clip-path: inset(0 -100vmax);
}
body:is([data-page-view="upload"], [data-page-view="generate"]) :is(.landing-nav, .landing-nav-import, .shelf-footer) { display: none; }
.upload-back {
  display: inline-flex;
  gap: 7px;
  align-items: center;
  min-height: 44px;
  margin-left: 29px;
  padding: 8px 10px;
  border: 0;
  background: none;
  color: var(--muted);
  font-size: 12px;
}
.upload-back svg { width: 20px; height: 20px; transition: transform 180ms var(--ease); }
.upload-back:hover { color: var(--ink); }
.upload-back:hover svg { transform: translateX(-3px); }
body[data-workspace-motion="enter"] .upload-back { animation: upload-back-arrive 220ms var(--ease) 300ms both; }

/* Motion layers stay under the topbar (z 30). Entering, the old page copy lies
   beneath the workspace, whose desk fades in over it while the book flies. */
:is(.upload-motion-copy, .upload-motion-book, .upload-motion-note) { position: fixed; margin: 0; pointer-events: none; }
.upload-motion-copy { z-index: 1; }
/* Clones are still pictures: only the motion script moves them. */
.upload-motion-copy, .upload-motion-copy *, .upload-motion-book *, .upload-motion-note * { animation: none !important; transition: none !important; }
.upload-motion-book { z-index: 4; transform-origin: 50% 50%; }
.upload-motion-cover { position: absolute; inset: 0; transform-origin: 0 50%; backface-visibility: hidden; }
.upload-motion-cover > .landing-hero-book { top: 0; left: 0; transform-origin: 0 0; }
.upload-motion-shade { position: absolute; inset: 0; border-radius: 3px 7px 7px 3px; background: #151b1e; opacity: 0; }
.upload-motion-note { z-index: 5; transform-origin: 50% 50%; }
.upload-motion-note > .landing-margin-note { top: 0; left: 0; transform: none; }

/* The open book. Each page darkens toward the spine; one more sheet shows at the fore-edge. */
.upload-book { position: relative; display: grid; grid-template-columns: repeat(2, var(--leaf-w)); }
.upload-verso, .upload-recto {
  position: relative;
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: var(--leaf-h);
  padding: var(--pad);
  background: var(--leaf);
  backface-visibility: hidden;
  container-type: inline-size;
}
.upload-verso {
  justify-content: center;
  transform-origin: 100% 50%;
  border-radius: 7px 2px 2px 7px;
  background: linear-gradient(to left, var(--fold), transparent 14%), var(--leaf);
  box-shadow: 0 0 0 1px var(--line), -3px 2px 0 -1px var(--leaf), -3px 2px 0 0 var(--line), 0 30px 48px -34px var(--lift);
}
.upload-recto {
  border-radius: 2px 7px 7px 2px;
  background: linear-gradient(to right, var(--fold), transparent 12%), var(--leaf);
  box-shadow: 0 0 0 1px var(--line), 3px 2px 0 -1px var(--leaf), 3px 2px 0 0 var(--line), 0 30px 48px -34px var(--lift);
}
/* Light falling off a turning leaf; only the opening motion raises it. */
.upload-leaf-shade { position: absolute; inset: 0; z-index: 3; border-radius: inherit; opacity: 0; pointer-events: none; }
.upload-verso > .upload-leaf-shade { background: linear-gradient(to left, rgba(21, 27, 30, .42), rgba(21, 27, 30, .12)); }
.upload-recto > .upload-leaf-shade { background: linear-gradient(to right, rgba(21, 27, 30, .4), transparent 75%); }

/* Frosted glass: a translucent pane over a soft glow, so the colour behind it
   shows through blurred. The pages turn in 3D while opening, so the blur waits
   until the book lies still; over smooth glows the swap cannot be seen. */
.upload-composer, .upload-contents-body {
  position: relative;
  border: 1px solid var(--glass-edge);
  border-radius: 14px;
  background: linear-gradient(140deg, rgba(255, 255, 255, .5), rgba(255, 255, 255, .08) 46%, transparent), var(--glass);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--line-strong) 45%, transparent), 0 1px 2px rgba(21, 27, 30, .03), 0 22px 44px -30px rgba(21, 27, 30, .34);
  -webkit-backdrop-filter: blur(20px);
  backdrop-filter: blur(20px);
}
html[data-theme="dark"] :is(.upload-composer, .upload-contents-body) { background: linear-gradient(140deg, rgba(255, 255, 255, .06), transparent 46%), var(--glass); }
body[data-workspace-motion] :is(.upload-composer, .upload-contents-body) { -webkit-backdrop-filter: none; backdrop-filter: none; }

/* Left page: where the reader writes. */
.upload-heading { margin-bottom: clamp(24px, 8cqi, 40px); }
.upload-kicker { margin-bottom: 12px; color: var(--clay-deep); font-size: 12px; letter-spacing: .08em; }
.upload-heading h1 { font: 500 clamp(28px, 8cqi, 40px)/1.26 var(--font-display); letter-spacing: -.045em; }
.upload-heading h1:focus { outline: none; }
.upload-lede { margin-top: 10px; color: var(--muted); font-size: 13px; line-height: 1.8; }
.upload-lede:empty { display: none; }
.upload-form, .upload-access { width: 100%; min-width: 0; }
.upload-form { position: relative; isolation: isolate; }
.upload-form::before, .upload-form::after { content: ""; position: absolute; z-index: -1; border-radius: 50%; pointer-events: none; }
.upload-form::before { top: -34px; right: -26px; width: 58%; height: 150px; background: radial-gradient(closest-side, var(--glow-clay), transparent); }
.upload-form::after { top: 96px; left: -34px; width: 50%; height: 140px; background: radial-gradient(closest-side, var(--glow-mist), transparent); }

/* One composer, read top to bottom in the order of the contents opposite:
   first the project — a dashed slot that its tag replaces in place — then the
   focus written below it. */
.upload-composer { display: flex; flex-direction: column; container-type: inline-size; transition: border-color 160ms ease-out, box-shadow 200ms var(--ease); }
.upload-composer:focus-within { border-color: color-mix(in srgb, var(--clay) 70%, transparent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--clay) 14%, transparent), 0 22px 44px -30px rgba(21, 27, 30, .34); }
.upload-attachment {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  margin: 12px 12px 0;
  padding: 7px 6px 7px 12px;
  border: 1px solid color-mix(in srgb, var(--line-strong) 55%, transparent);
  border-radius: 9px;
  background: color-mix(in srgb, var(--paper-strong) 72%, transparent);
}
.upload-attachment[data-empty="true"] { display: none; }
.upload-attachment > svg { flex: none; width: 20px; height: 20px; color: var(--clay-deep); }
.upload-attachment-copy { display: flex; flex: 1; align-items: baseline; gap: 10px; min-width: 0; }
.upload-attachment-copy strong { overflow: hidden; color: var(--ink); font-size: 13px; font-weight: 600; white-space: nowrap; text-overflow: ellipsis; }
.upload-attachment-copy small { overflow: hidden; color: var(--muted); font-size: 11px; white-space: nowrap; text-overflow: ellipsis; }
.upload-attachment-copy small:empty { display: none; }
.upload-repo-input { flex: 1; min-width: 0; height: 30px; padding: 0; border: 0; outline: none; background: none; color: var(--ink); font: 13px/1 ui-monospace, SFMono-Regular, Menlo, monospace; }
.upload-repo-input::placeholder { color: var(--faint); font-family: var(--font-body); }
.upload-attachment-clear { display: grid; flex: none; place-items: center; width: 30px; height: 30px; padding: 0; border: 0; border-radius: 6px; background: none; color: var(--muted); }
.upload-attachment-clear svg { width: 18px; height: 18px; }
.upload-focus {
  display: block;
  width: 100%;
  min-height: calc(1.8em * 3 + 36px);
  max-height: calc(1.8em * 8 + 36px);
  padding: 18px 20px;
  border: 0;
  outline: none;
  resize: none;
  background: transparent;
  color: var(--ink);
  font: 14px/1.8 var(--font-body);
  field-sizing: content;
}
.upload-focus::placeholder { color: var(--faint); }
.upload-focus:disabled { opacity: 1; color: var(--ink-soft); -webkit-text-fill-color: var(--ink-soft); cursor: default; }
.upload-focus:disabled:placeholder-shown { display: none; }
.upload-source-slot { display: flex; align-items: center; gap: 4px; min-width: 0; margin: 12px 12px 0; padding: 4px 6px; border: 1px dashed color-mix(in srgb, var(--line-strong) 85%, transparent); border-radius: 9px; }
/* A folder only becomes the tag once its files are read; a draft restored after a
   reload keeps just the name, so the slot stays to pick it again. Submitted, the
   tag stays as the record. */
.upload-form[data-launcher-state="idle"] [data-local-source]:has([data-import-summary]:empty) { display: none; }
.upload-composer:has([data-local-source]:not([hidden]) [data-import-summary]:not(:empty), [data-github-source]:not([hidden])) .upload-source-slot { display: none; }
.upload-tool {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 36px;
  padding: 0 10px;
  border: 0;
  border-radius: 8px;
  background: none;
  color: var(--muted);
  font-size: 12px;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color 160ms ease-out, color 160ms ease-out;
}
.upload-tool svg { width: 18px; height: 18px; }
.upload-tool input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; }
.upload-tool:focus-within { outline: 2px solid var(--clay); outline-offset: 2px; }
.upload-tool[aria-pressed="true"] { background: color-mix(in srgb, var(--clay-pale) 80%, transparent); color: var(--clay-deep); }
.upload-tool:disabled, .upload-tool:has(input:disabled) { opacity: .45; cursor: default; }
.upload-drop-hint { margin-left: auto; padding-right: 6px; color: var(--faint); font-size: 11px; white-space: nowrap; }
@container (max-width: 360px) { .upload-drop-hint { display: none; } }
.upload-drop-veil { position: absolute; inset: -1px; z-index: 2; display: grid; place-items: center; border: 1.5px dashed var(--clay); border-radius: inherit; background: color-mix(in srgb, var(--clay-pale) 92%, transparent); color: var(--clay-deep); font-size: 13px; opacity: 0; pointer-events: none; transition: opacity 160ms ease-out; }
.upload-composer.is-dragging .upload-drop-veil { opacity: 1; }
/* Generating is the same outlined clay action as the landing's: the decision
   is still the reader's, it just does not need a filled slab to be found. */
.upload-workspace .upload-send { display: flex; width: 100%; min-height: 54px; margin-top: 18px; font-size: 14px; }
.upload-send:disabled { opacity: .5; cursor: default; }
.upload-send:disabled::before { transform: scaleX(0); }
/* Once submitted, the composer is the record of what was asked: sources and removal leave. */
.upload-form:not([data-launcher-state="idle"]) :is(.upload-tool, .upload-drop-hint, .upload-attachment-clear) { display: none; }
.upload-form:not([data-launcher-state="idle"]) .upload-source-slot { display: none; }
.upload-attachment-clear:disabled { opacity: .45; cursor: default; }
.upload-workspace[data-phase="generating"] .upload-send { display: none; }
.upload-workspace .shelf-import-status { margin-top: 14px; font-size: 12px; }
.upload-workspace .shelf-import-secondary { justify-content: flex-start; gap: 22px; margin-top: 10px; }
.upload-workspace .shelf-import-secondary button { min-height: 36px; padding: 6px 0; font-size: 12px; text-decoration: underline; text-underline-offset: 4px; }
.upload-workspace .shelf-local-note { margin-top: 14px; color: var(--faint); font-size: 11px; line-height: 1.7; text-align: left; }
.upload-access-actions { margin-top: 4px; }
.upload-signin { display: flex; align-items: center; justify-content: center; gap: 12px; width: 100%; min-height: 52px; padding: 12px 18px; border: 0; border-radius: 8px; background: var(--ink); color: var(--paper); font-size: 13px; font-weight: 550; transition: transform 180ms var(--ease), opacity 180ms ease-out; }
.upload-signin svg { width: 21px; height: 21px; }
.upload-signin:active { transform: scale(.98); }
.upload-reconnect { min-height: 44px; padding: 8px 0; border: 0; border-bottom: 1px solid var(--clay); background: none; color: var(--clay-deep); font-size: 13px; }
.upload-access-status { margin-top: 15px; color: var(--muted); font-size: 12px; line-height: 1.8; }
.upload-access-status:empty { display: none; }

/* Right page: the title page of the book being made, set like the hero book's
   cover, and its contents — three steps that fill in from what really happened. */
.upload-recto::before { content: ""; position: absolute; right: 12%; bottom: 13%; width: 56%; height: 34%; border-radius: 50%; background: radial-gradient(closest-side, var(--glow-mist), transparent); pointer-events: none; }
.upload-recto > * { position: relative; }
.upload-recto > .upload-leaf-shade { position: absolute; }
.upload-titlepage-top { display: flex; justify-content: space-between; gap: 16px; color: var(--muted); font: 10px/1.2 ui-monospace, SFMono-Regular, monospace; letter-spacing: .14em; }
.upload-titlepage-top > span:last-child { color: var(--clay-deep); font-family: var(--font-body); letter-spacing: .08em; }
.upload-titlepage-title { margin-top: 10cqi; font: 500 clamp(32px, 10cqi, 48px)/1.18 var(--font-display); letter-spacing: -.05em; overflow-wrap: anywhere; }
.upload-titlepage-title > span { display: block; }
.upload-titlepage-title > span[data-empty="true"] { color: var(--faint); }
.upload-titlepage-title > span[data-length="long"] { font-size: .8em; letter-spacing: -.04em; }
.upload-titlepage-title > span[data-length="xlong"] { font-size: .64em; letter-spacing: -.03em; line-height: 1.26; }
/* The reader's own focus is the subtitle; longer words set smaller. */
.upload-titlepage-title > em { display: -webkit-box; margin-top: .45em; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 3; color: var(--clay-deep); font-size: .56em; font-style: normal; line-height: 1.36; letter-spacing: -.03em; white-space: pre-line; }
.upload-titlepage-title > em[data-length="long"] { -webkit-line-clamp: 4; font-size: .42em; line-height: 1.55; letter-spacing: -.01em; }
.upload-titlepage-title > em[data-length="xlong"] { -webkit-line-clamp: 5; font-size: .34em; line-height: 1.65; letter-spacing: 0; }
.upload-titlepage-title > em[data-empty="true"] { color: color-mix(in srgb, var(--clay-deep) 55%, var(--leaf)); }
.upload-contents-body { margin-top: auto; padding: 18px 22px 8px; }
.upload-contents-label { color: var(--muted); font-size: 11px; letter-spacing: .2em; }
.upload-contents-list { margin: 6px 0 0; padding: 0; list-style: none; }
.upload-contents-list > li { display: grid; grid-template-columns: 26px minmax(0, 1fr) 20px; align-items: center; column-gap: 12px; padding: 13px 0; border-top: 1px solid color-mix(in srgb, var(--line-strong) 45%, transparent); }
.upload-contents-list > li:first-child { border-top: 0; }
.upload-contents-no { color: var(--faint); font: 11px/1 ui-monospace, SFMono-Regular, monospace; letter-spacing: .04em; transition: color 200ms ease-out; }
.upload-contents-copy { min-width: 0; }
.upload-contents-copy strong { display: block; color: var(--ink-soft); font-size: 14px; font-weight: 550; }
.upload-contents-copy small:empty { display: none; }
.upload-contents-copy small { display: block; margin-top: 4px; overflow: hidden; color: var(--muted); font-size: 12px; white-space: nowrap; text-overflow: ellipsis; }
.upload-contents-mark { position: relative; width: 18px; height: 18px; border: 1.5px solid var(--line-strong); border-radius: 50%; transition: background-color 200ms ease-out, border-color 200ms ease-out; }
li[data-done="true"] .upload-contents-no { color: var(--clay-deep); }
li[data-done="true"] .upload-contents-copy strong { color: var(--ink); }
li[data-done="true"] .upload-contents-mark { border-color: var(--clay); background: var(--clay) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fffdf7' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4 8.5 2.6 2.5L12 5.5'/%3E%3C/svg%3E") center / 12px no-repeat; }
/* A long write stays visibly alive: the current step breathes, nothing guesses a percentage. */
.upload-workspace[data-phase="generating"] [data-contents-row="book"] .upload-contents-mark { border-color: var(--clay); }
.upload-workspace[data-phase="generating"] [data-contents-row="book"] .upload-contents-mark::after { content: ""; position: absolute; inset: -4px; border: 1px solid var(--clay); border-radius: 50%; opacity: 0; animation: upload-step-breathe 2400ms ease-out infinite; }
/* The stages are one slim bar in four segments under the third line; the current one pulses. */
.upload-progress { grid-column: 2 / -1; margin-top: 12px; }
.upload-progress .landing-generation-steps { gap: 6px; margin: 0 0 10px; }
.upload-progress .landing-generation-steps li { align-items: stretch; gap: 7px; font-size: 11px; text-align: left; }
.upload-progress .landing-generation-steps li > span { width: 100%; height: 3px; border: 0; border-radius: 3px; background: color-mix(in srgb, var(--line-strong) 70%, transparent); font-size: 0; }
.upload-progress .landing-generation-steps li.is-complete > span { background: var(--clay); }
.upload-progress .landing-generation-steps li[aria-current="step"] > span { background: var(--clay); }
.upload-workspace[data-phase="generating"] .upload-progress li[aria-current="step"] > span { animation: upload-step-pulse 1400ms ease-in-out infinite alternate; }
.upload-progress .shelf-generating-stage { margin-top: 0; color: var(--muted); font-size: 12px; text-align: left; }
.upload-colophon { align-self: flex-end; margin-top: 18px; color: var(--clay-deep); font: 16px/1 var(--font-display); }

@keyframes upload-back-arrive { from { opacity: 0; transform: translateX(6px); } to { opacity: 1; transform: translateX(0); } }
@keyframes upload-step-breathe { 0% { opacity: .55; transform: scale(.82); } 70%, 100% { opacity: 0; transform: scale(1.35); } }
@keyframes upload-step-pulse { from { opacity: .35; } to { opacity: 1; } }
/* The generate arrow points ahead, so its loop runs out to the right and back in. */
@keyframes upload-arrow-loop {
  0% { transform: translateX(0); animation-timing-function: cubic-bezier(.5, 0, .75, 0); }
  45% { transform: translateX(16px); }
  45.1% { transform: translateX(-16px); animation-timing-function: cubic-bezier(.22, 1, .36, 1); }
  100% { transform: translateX(0); }
}
@media (hover: hover) and (pointer: fine) {
  .upload-tool:not(:disabled):not(:has(input:disabled)):hover { background: color-mix(in srgb, var(--paper-strong) 70%, transparent); color: var(--ink); }
  .upload-tool[aria-pressed="true"]:hover { background: color-mix(in srgb, var(--clay-pale) 80%, transparent); color: var(--clay-deep); }
  .upload-attachment-clear:not(:disabled):hover { background: rgba(21, 27, 30, .06); color: var(--ink); }
  html[data-theme="dark"] .upload-attachment-clear:not(:disabled):hover { background: rgba(255, 255, 255, .06); }
  .upload-send:not(:disabled):hover .landing-primary-arrow svg { animation-name: upload-arrow-loop; }
  .upload-send:disabled:hover::before { transform: scaleX(0); }
  .upload-send:disabled .landing-primary-arrow svg { animation: none; }
  .upload-signin:hover { opacity: .9; }
}
/* Too narrow for a spread: the writing page is laid on the desk and the title
   page follows below it. */
@media (max-width: 860px) {
  .upload-workspace { place-items: start center; padding: 22px 16px 36px; }
  .upload-book { grid-template-columns: minmax(0, 560px); row-gap: 14px; width: 100%; justify-content: center; }
  /* Still the hero book's proportions, so the cover flies in unstretched; content may lengthen it. */
  .upload-verso { min-height: auto; aspect-ratio: .756; padding: 28px 22px 24px; border-radius: 8px; justify-content: flex-start; }
  .upload-recto { min-height: auto; padding: 24px 22px 20px; border-radius: 8px; }
  /* Stacked, there is no spine for the pages to darken toward. */
  .upload-verso, .upload-recto { background: var(--leaf); }
  .upload-titlepage-title { margin-top: 18px; font-size: 30px; }
  .upload-contents-body { margin-top: 22px; }
  .upload-colophon { display: none; }
}
@media (max-width: 760px) {
  .upload-workspace { min-height: calc(100svh - 73px); }
  body:is([data-page-view="upload"], [data-page-view="generate"]) .shelf-topbar { gap: 4px; }
  .upload-back { margin-left: 10px; padding-inline: 5px; gap: 3px; }
  .upload-heading h1 { font-size: 26px; }
}
@media (max-width: 380px) {
  .upload-back { margin-left: 3px; }
  body:is([data-page-view="upload"], [data-page-view="generate"]) .landing-account-open { padding-inline: 9px; font-size: 10px; }
  .upload-verso, .upload-recto { padding-inline: 18px; }
  .upload-heading h1 { font-size: 24px; }
}
@media (prefers-reduced-motion: reduce) {
  .upload-workspace *, .upload-back svg { transition-duration: 100ms !important; }
  body[data-workspace-motion] .upload-back { animation: none; }
  .upload-back:hover svg { transform: none; }
  .upload-workspace[data-phase="generating"] [data-contents-row="book"] .upload-contents-mark::after { animation: none; opacity: .5; }
  .upload-workspace[data-phase="generating"] .upload-progress li[aria-current="step"] > span { animation: none; }
}
