/* /cv and the 404, 21 Oct 2026 (the owner: «есть пустые места в светлой теме, дырки, сильно много воздуха; нужно вытягивать
   уровень до профессионального»; «слабые или повторяющиеся [секции] заменяй»). Linked last on cv.html and 404.html; every
   rule is scoped to body[data-page=cv] or body[data-page=not-found]. Findings with their screenshots, and the lead's
   checks: work/_claude-qa/inner-20261021/cv-cases-report.md */

/* ================================ /cv on screens ================================ */
@media screen{
 /* the opener sizes to its copy: it was held a screen tall with its copy at the top (inner-2026.css «the lower part of
    the frame is the world's»), and by day that lower part is paper with a pale ring in it: 340 px of nothing under the
    summary (light-cv-0) and 416 px before «Core practice.» (light-cv-1). The name and the summary share their bottom line,
    as grid-2026.css meant, and the practice comes up into the first screen */
 /* the summary is the lead, not a second display voice (it was 36 px, off the roles, beside the 144 px name); its
    actions read at body size, the place at small, as the footer's own line */
 html body[data-page=cv] .cv-summary>p:first-child:not(#_f){font-size:var(--t-lead,24px);line-height:1.3;letter-spacing:0;max-width:32em}
 html body[data-page=cv] .cv-actions:not(#_f){margin-top:32px}
 html body[data-page=cv] .cv-actions>:is(a,button):not(#_f){font-size:var(--t-body,17px)}
 html body[data-page=cv] .cv-location:not(#_f){font-size:var(--t-small,14px);margin-top:16px}
 html body[data-page=cv] .cv-profession:not(#_f){margin-top:24px}
 html body[data-page=cv] section[aria-labelledby=cv-workflow] .cv-recognition>p:not(#_f){margin-bottom:16px}
 /* (22 Oct, jury F18) no dividers in the recognition list (inner-2026.css drew a hairline over every row but the first):
    the rows are told apart by their space, 32 px between paragraphs of 18 px type */
 html[data-room=cv] body[data-page=cv] section[aria-labelledby=cv-recognition] .cv-recognition>p:not(#_u):not(#_f)+p{border-top:0}
 html body[data-page=cv] main.cv-document:not(#_f){padding-bottom:0}
 html body[data-page=cv] footer#footer:not(#_f){padding-top:clamp(64px,6.7vw,96px)}
}
@media screen and (min-width:801px){
 html[data-room=cv] body[data-page=cv] .cv-opening:not(#_u):not(#_f){min-height:0;align-content:end;padding-block:24px 96px}
 /* one measure between chapters, 96 px (it was 112, and 154 before the footer); phones keep cv-v54.css's 64 */
 html body[data-page=cv] .cv-section:not(#_f){padding-block:48px}
}
@media screen and (min-width:1101px){
 /* a running head: each chapter's title stands beside its list while the list is read, so the left third is not an empty
    column for the length of «Experience.» and «Selected work.» (light-cv-3, -4, -6: x 12-500, the whole frame) */
 html body[data-page=cv] .cv-section:not(#_g)>h2:not(#_f){position:sticky;top:calc(var(--frame,12px) + 96px);z-index:1}
 /* «Selected work.» stood on the first card's caption line, half a screen down beside the covers (light-cv-5): it meets
    the covers' top edge */
 html body[data-page=cv] section[aria-labelledby=cv-selected]:not(#_g)>h2:not(#_f){align-self:start}
 /* the practice: six short lines in one narrow column left two thirds of the row empty; two columns of three */
 html body[data-page=cv] .cv-practice:not(#_f){display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--g-gap,2vw)}
 /* the selected work is an index of six, not a second /work: three across, the covers at the size of the roles' column
    (it was two across, 1,200 px of the page) */
 html[data-room=cv] body[data-page=cv] .cv-selected:not(#_u):not(#_f){grid-template-columns:repeat(3,minmax(0,1fr));gap:40px 24px}
}
@media screen and (max-width:700px){
 /* phones: the six covers two across (they were one after another, six screens of covers on the way to the recognition) */
 html[data-room=cv] body[data-page=cv] .cv-selected:not(#_u):not(#_f){grid-template-columns:repeat(2,minmax(0,1fr));gap:32px 16px}
 html[data-room=cv] body[data-page=cv] .cv-selected:not(#_u):not(#_f)>a>img{margin-bottom:12px}
 html body[data-page=cv] .cv-selected>a:not(#_s):not(#_t):not(#_p):not(#_e):not(#_f){font-size:var(--t-body,16px)!important;line-height:1.3!important}
 html body[data-page=cv] .cv-selected>a>span:not(#_s):not(#_t):not(#_p):not(#_e):not(#_f){font-size:13px!important;margin-top:4px}
 /* the back link's copy in the frame's notch (transitions-2026.css shows it over its own phone rule): on a phone it stood
    white over the covers as they passed under it (phone/light-cv-5 to 7); the link in the opener stays */
 html.has-frame body[data-page=cv] .site-header a.frame-back.case-back:not(#_u):not(#_v):not(#_f){display:none!important}
}
/* the finale holds a screen, not a screen and a third: by day the CV's dawn prints the drop and paper, so the extra third
   was an empty field (light-cv-10, -11, y 450-880); the line and «Let's talk» still hold under the tab */
@media screen and (min-width:701px){
 html:is(.space-on,.airy,.room-live) body[data-page=cv] #footer .footer-top:not(#_u):not(#_f){min-height:max(100svh,720px)!important;padding-bottom:max(24svh,192px,calc(100svh - var(--fin-rest,100svh) + 24px))!important}
}

/* ================================ /cv printed (Print / Save PDF) ================================ */
/* An A4 page is 673 CSS px wide inside its 16 mm margins, so every phone rule (max-width 700 px) applied to the PDF too:
   the opener was held most of a page tall and the summary was a phone sheet pulled 170 px left over the name
   (inner-2026.css, the CV's sheet). The world, its stills, the frame and the wipes printed on every page as fixed layers;
   the type roles' vw sizes beat cv-v54.css's points; the text below the first screen was still waiting for its reveal
   (lines under their masks, words at opacity 0); by night the opener printed white on white. One clean document now */
@media print{
 html body[data-page=cv]>:not(main){display:none!important}
 html body[data-page=cv]>main{opacity:1!important;transform:none!important;filter:none!important}
 html[data-room=cv],html[data-room=cv] body[data-page=cv]{background:#ffffff!important}
 html body[data-page=cv] main :is(*,*::before,*::after){animation:none!important;transition:none!important}
 html body[data-page=cv] main *{opacity:1!important;transform:none!important;translate:none!important;scale:none!important;filter:none!important;clip-path:none!important;text-shadow:none!important;box-shadow:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}
 html body[data-page=cv] main :is(.tm-l,.tm-line,.text-mask,.letter-mask,.rv-line,[data-rv]){overflow:visible!important}
 html body[data-page=cv] main :is([data-rg]::before,[data-rg]::after){display:none!important}
 html body[data-page=cv] main :is(h1,h2,h3,p,li,a,span,small):not(#_f){color:#000000!important;-webkit-text-fill-color:#000000!important}
 html body[data-page=cv] main :is(.cv-role p:not(.career-role),.cv-location,.cv-selected span):not(#_f):not(#_g){color:#4e5157!important;-webkit-text-fill-color:#4e5157!important}
 html body[data-page=cv] main :is(.text-button,.case-back,[data-print-cv]){display:none!important}
 html[data-room=cv] body[data-page=cv] .cv-opening:not(#_u):not(#_f){min-height:0!important;padding:0 0 8mm!important;grid-template-rows:auto!important;grid-template-columns:1fr 1fr!important;column-gap:10mm!important;align-items:end!important}
 html[data-room=cv] body[data-page=cv] .cv-opening>.cv-summary:not(#_u):not(#_f){width:auto!important;max-width:none!important;margin:0!important;padding:0!important;border-radius:0!important;background:none!important;position:static!important;align-self:end!important}
 html body[data-page=cv] .cv-section>h2:not(#_f){position:static!important}
 html body[data-page=cv] h1#cv-title:not(#_a):not(#_b):not(#_c):not(#_d):not(#_e){font-size:40pt!important;line-height:.95!important}
 html body[data-page=cv] #cv-title~.cv-profession:not(#_a):not(#_b):not(#_c):not(#_d):not(#_e){font-size:14pt!important;line-height:1.3!important;margin-top:4mm!important}
 html body[data-page=cv] .cv-section>h2:not(#_a):not(#_b):not(#_c):not(#_d):not(#_e){font-size:16pt!important;line-height:1.1!important;letter-spacing:-.03em!important}
 html body[data-page=cv] .cv-summary>p:first-child:not(#_f){font-size:11pt!important;line-height:1.4!important}
}

/* ================================ 404 ================================ */
/* Once the world is drawn, the 404's own folds scene stands down, as the other inner pages' scenes do (space-room.css
   «the page's own decorative WebGL scenes stand down»): its glass orb sat still on its seat over the title («the mark
   sits on «apologise!»», review-20261021c/critique.md), its satin sheets drifted on a sine (the idle the motion grammar
   removed), and it was a second WebGL context over the orbit. The world's own glass (avoids the copy, arrives into its
   seat: js/room-glass.js) is the page's one figure. Hidden on its host, so the scene's observer stops its frames too */
/* -73 (24 Oct; the m1 motion report p05: «a 3.4 s chrome intro in the opposite theme»): the folds scene stands down as soon as the gate has chosen the live world (html.room-live, set in the head), not once the world has taken over; it is never built then */
html:is(.room-live,.room-world-live) body[data-page=not-found] .hero-frame>.hero-art:not(#_f){display:none!important}
/* ...and its card goes with them (tester, 21 Oct). The folds sat inside the hero's old card (redesign.css «.hero-frame»
   #080b11, by night portfolio-craft.css #e2e5eb, under `isolation`), so standing them down left that card as a flat
   slab over the world, in the copy's own colour: «Page not found.», the role and the note printed black on #080b11 by
   day and white on #e2e5eb by night, and the world's planet and glass never showed. The hero is transparent once the
   world is drawn, as the case opener is (space-room.css «continues the ring scene instead of standing on its own flat
   ground»), so the copy stands on the world's print with the lanes of every other page */
/* -73 (m3 p05: «a black frame in the day theme» at 4.28 s, the card's #080b11 until the world was drawn): transparent from
   the gate's choice (html.room-live, in the head), so the page stands on its own ground until the world prints in */
html:is(.room-live,.room-world-live) body[data-page=not-found] .hero-frame:not(#_f){background:transparent!important}
/* -73 (24 Oct; the m2 motion report p05: «a 4 s splash», light frames by night): the 404 with the live world shows no room
   stills (they were the splash, printed in glyphs, then handed over): the page stands on its ground and the world prints in */
html.room-live[data-room=lost] .room-world{display:none!important}

/* -73 (24 Oct; S14, Olya on /cv: «там криво сделаны проекты»; hold13 printed it to A4, live and -73): the screen's line masks
   (js/motion/text-reveal.js) were printed as they were cut at the screen's width, so a paragraph broke into ragged short lines
   on paper («...technology / into clear / product journeys...»); in print the lines flow as text again. The web's buttons stay
   off the paper (the «Explore the approach» pill printed alone on a third page) and the margins tighten to hold two pages */
@media print{
 @page{size:A4;margin:12mm 14mm}
 html body[data-page=cv] main :is(.rv-line-mask,.rv-line):not(#_p):not(#_q):not(#_r){display:inline!important;overflow:visible!important;transform:none!important;padding:0!important;margin:0!important}
 html body[data-page=cv] main .rv-line:not(#_p)::after{content:' '}
 html body[data-page=cv] main :is(.text-button,[data-print-cv]):not(#_p):not(#_q):not(#_r):not(#_s){display:none!important}
}
/* (-73, S14; Olya ~06:30Z: «там криво сделаны проекты») the selected work as rows of the experience's table: six covers in
   mixed formats over captions that broke at different lines (two lines beside one; 13 px at 390, under the type floor) left
   the cards' rows ragged. Each project is a row like the roles above it: the name in the roles' names column at their size,
   its line in their copy column, the cover a small picture at the row's end, the same hairline between rows; in print the
   names and lines alone */
html[data-room=cv] body[data-page=cv] .cv-selected:not(#_u):not(#_f):not(#_r){display:block}
html body[data-page=cv] .cv-selected>a.cv-case-cta:not(#_s):not(#_t):not(#_p):not(#_e):not(#_f):not(#_r){display:grid;grid-template-columns:repeat(8,minmax(0,1fr));column-gap:var(--g-gap,28.8px);align-items:center;padding:24px 0;min-height:0;text-decoration:none}
html[data-room=cv] body[data-page=cv] .cv-selected>a.cv-case-cta+a.cv-case-cta:not(#_r){border-top:1px solid var(--cool-line,#dfe2e8)}
html body[data-page=cv] .cv-selected>a.cv-case-cta:first-child:not(#_s):not(#_t):not(#_p):not(#_e):not(#_f):not(#_r){padding-top:0}
html body[data-page=cv] .cv-selected>a>.cv-case-name:not(#_s):not(#_t):not(#_p):not(#_e):not(#_f):not(#_r){grid-column:1/span 3;grid-row:1;font-size:24px!important;line-height:1.3!important;margin:0!important;color:var(--ink)!important;-webkit-text-fill-color:var(--ink)!important}
html body[data-page=cv] .cv-selected>a>span:not(.cv-case-name):not(#_s):not(#_t):not(#_p):not(#_e):not(#_f):not(#_r){grid-column:4/span 4;grid-row:1;font-size:17px!important;line-height:1.5!important;margin:0!important}
html body[data-page=cv] .cv-selected>a>img:not(#_s):not(#_t):not(#_p):not(#_e):not(#_f):not(#_r){grid-column:8;grid-row:1;width:100%;height:auto;aspect-ratio:16/10;object-fit:cover;margin:0!important;border-radius:var(--r-image,10px)}
@media (hover:hover){html body[data-page=cv] .cv-selected>a.cv-case-cta:hover>.cv-case-name:not(#_r){text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em}}
@media screen and (max-width:700px){
 html body[data-page=cv] .cv-selected>a.cv-case-cta:not(#_s):not(#_t):not(#_p):not(#_e):not(#_f):not(#_r){grid-template-columns:minmax(0,1fr) 72px;column-gap:16px;row-gap:4px;align-items:start}
 html body[data-page=cv] .cv-selected>a>.cv-case-name:not(#_s):not(#_t):not(#_p):not(#_e):not(#_f):not(#_r){grid-column:1;grid-row:1;font-size:19px!important}
 html body[data-page=cv] .cv-selected>a>span:not(.cv-case-name):not(#_s):not(#_t):not(#_p):not(#_e):not(#_f):not(#_r){grid-column:1;grid-row:2;font-size:16px!important}
 html body[data-page=cv] .cv-selected>a>img:not(#_s):not(#_t):not(#_p):not(#_e):not(#_f):not(#_r){grid-column:2;grid-row:1/span 2;align-self:center}}
@media print{html body[data-page=cv] .cv-selected>a>img:not(#_s):not(#_t):not(#_p):not(#_e):not(#_f):not(#_r){display:none!important}}
