/* dm-collect — built on the site's shared CSS (fonts/tokens/base/components/layout/test-home). Only volunteer-flow specifics live here. */
.page-dm{--dm-ok:#1a8a5f;--dm-ok-bg:#e8f5ef;--dm-warn:#8a5a00;--dm-warn-bg:#fff6df;--dm-err:#b42318;--dm-err-bg:#fdecea;--dm-blue-soft:#f2f7fd;--dm-line:#dce6f2;--vh:100dvh}
.page-dm [hidden]{display:none!important}
.dm-main{min-height:calc(100vh - var(--th-header-h,68px));min-height:calc(var(--vh) - var(--th-header-h,68px))}
.dm-screen{padding-block:clamp(1.75rem,5vw,3.5rem) clamp(2.5rem,7vw,5rem)}
.dm-rail{width:min(100% - 2rem,720px);margin-inline:auto}
.dm-narrow{width:min(100% - 2rem,560px)}
.dm-center{text-align:center}.dm-left{text-align:start}
.dm-eyebrow{margin:0 0 .6rem;font-size:.8125rem;font-weight:600;color:var(--th-muted)}
.dm-h1{margin:0 0 .9rem;font-size:clamp(1.75rem,1.2rem + 2vw,2.6rem);font-weight:650;line-height:1.22;color:var(--th-navy);text-wrap:balance}
.dm-h2{margin:0;font-size:clamp(1.25rem,4.5vw,1.6rem);font-weight:700;line-height:1.25;color:var(--th-navy)}
.dm-h3{margin:0 0 .5rem;font-size:1.125rem;font-weight:650;color:var(--th-navy)}
.dm-lead{margin:0 0 1.4rem;font-size:1.0625rem;line-height:1.7;color:var(--th-ink-soft)}
.dm-sub{margin:.15rem 0 0;font-size:.875rem;color:var(--th-muted);line-height:1.45}
.dm-note{margin:0 0 .9rem;font-size:.875rem;line-height:1.55;color:var(--th-muted)}
.dm-facts{list-style:none;margin:0 0 1.6rem;padding:0;display:grid;gap:.85rem}
.dm-facts li{display:flex;gap:.85rem;align-items:flex-start;font-size:.975rem;line-height:1.55;color:var(--th-ink-soft)}
.dm-facts b{color:var(--th-navy);font-weight:600}
.dm-facts a{color:var(--th-accent);text-decoration:underline;text-underline-offset:3px}
.dm-fi{flex:0 0 38px;height:38px;border-radius:10px;background:var(--th-navy-soft);color:var(--th-navy);display:grid;place-items:center}
.dm-fi svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.dm-card{background:#fff;border:1px solid var(--th-line);border-radius:16px;padding:clamp(1rem,3vw,1.5rem);margin-bottom:1rem}
.dm-card.soft{background:var(--dm-blue-soft);border-color:#d5e5fa}
.dm-q{margin:0 0 1.15rem}.dm-q:last-child{margin-bottom:0}
.dm-ql{display:block;font-size:.9375rem;font-weight:600;color:var(--th-ink);margin-bottom:.55rem}.dm-ql small{font-weight:400;color:var(--th-muted);font-size:.8125rem}
.dm-chips{display:flex;flex-wrap:wrap;gap:8px}
.dm-chip{min-height:44px;padding:8px 16px;border-radius:999px;border:1px solid var(--th-line-strong);background:#fff;color:var(--th-navy);font-size:.9375rem;font-weight:500;line-height:1.2;transition:background 180ms var(--th-ease),border-color 180ms var(--th-ease),color 180ms}
.dm-chip:hover{border-color:var(--th-navy)}
.dm-chip.on{background:var(--th-navy);border-color:var(--th-navy);color:#fff}
.dm-chip[data-v=na]{color:var(--th-muted);font-size:.8125rem;border-style:dashed}.dm-chip[data-v=na].on{color:#fff;border-style:solid}
.dm-tone{width:44px;padding:0;background:var(--c);border:2px solid #fff;box-shadow:0 0 0 1px var(--th-line-strong)}
.dm-tone:hover{box-shadow:0 0 0 1px var(--th-navy)}.dm-tone.on{background:var(--c);box-shadow:0 0 0 2.5px var(--th-accent);border-color:#fff}
.dm-opt{margin-top:1.2rem;border-top:1px solid var(--th-line);padding-top:.35rem}
.dm-opt summary{cursor:pointer;list-style:none;display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:.75rem 0;font-weight:600;color:var(--th-navy);min-height:44px}
.dm-opt summary::-webkit-details-marker{display:none}
.dm-opt summary em{font-style:normal;font-weight:400;color:var(--th-muted);font-size:.8125rem}
.dm-opt summary::after{content:"";width:9px;height:9px;border-inline-end:2px solid var(--th-muted);border-bottom:2px solid var(--th-muted);transform:rotate(45deg);margin-inline-start:auto;transition:transform 200ms}
.dm-opt[open] summary::after{transform:rotate(-135deg)}
.dm-consent{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border:1px solid var(--th-line-strong);border-radius:14px;margin:0 0 1rem;font-size:.9375rem;line-height:1.55;color:var(--th-ink-soft);cursor:pointer;background:#fff}
.dm-consent input{flex:0 0 22px;width:22px;height:22px;margin:2px 0 0;accent-color:var(--th-navy)}
.dm-consent:has(input:checked){border-color:var(--th-navy);background:var(--dm-blue-soft)}
.dm-block{width:100%}.dm-grow{flex:1 1 0}
.dm-block[disabled],.th-btn[disabled]{opacity:.45;cursor:not-allowed;transform:none}
.dm-links{display:flex;flex-wrap:wrap;gap:6px 22px;margin-top:1.1rem}.dm-links--c{justify-content:center}
.dm-link{color:var(--th-accent);font-size:.9375rem;font-weight:500;padding:10px 0;text-decoration:underline;text-underline-offset:4px;background:none;min-height:44px;display:inline-flex;align-items:center}
.dm-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:1rem}.dm-actions .th-btn{flex:1 1 160px}
.dm-stack{display:grid;gap:10px;margin:1rem 0}
.dm-field{display:block;font-size:.9375rem;font-weight:600;color:var(--th-ink);margin-bottom:.9rem}
.dm-field input{display:block;width:100%;margin-top:8px;min-height:48px;padding:0 14px;font:inherit;font-size:1rem;color:var(--th-ink);background:#fff;border:1px solid var(--th-line-strong);border-radius:8px}
.dm-field input:focus{outline:none;border-color:var(--th-accent);box-shadow:0 0 0 3px rgba(24,104,201,.16)}
.dm-msg{border-radius:12px;padding:10px 14px;font-size:.9375rem;font-weight:500;margin:.75rem 0}
.dm-msg.err{background:var(--dm-err-bg);color:var(--dm-err)}.dm-msg.ok{background:var(--dm-ok-bg);color:var(--dm-ok)}.dm-msg.warn{background:var(--dm-warn-bg);color:var(--dm-warn)}
.dm-danger{color:var(--dm-err)!important;border-color:#f0c4bf!important}.dm-danger:hover{background:var(--dm-err-bg)!important}
.dm-danger-solid{background:var(--dm-err)!important;border-color:var(--dm-err)!important}
.dm-spinner{width:32px;height:32px;margin:4rem auto;border:3px solid var(--th-line);border-top-color:var(--th-accent);border-radius:50%;animation:dmspin 1s linear infinite}
@keyframes dmspin{to{transform:rotate(360deg)}}
.dm-dcode{direction:ltr;font-size:1.6rem;font-weight:700;letter-spacing:.08em;background:var(--dm-blue-soft);border-radius:12px;padding:12px;text-align:center;user-select:all;color:var(--th-navy)}
.dm-sumnum{font-size:clamp(2.6rem,9vw,3.6rem);font-weight:650;color:var(--th-accent);line-height:1}
.dm-bigcheck{width:88px;height:88px;border-radius:50%;background:var(--th-navy-soft);color:var(--dm-ok);display:grid;place-items:center;margin:0 auto 1rem}
.dm-bigcheck svg{width:56px;height:56px}
.dm-missing{text-align:start;margin-top:.9rem;font-size:.9375rem}.dm-missing ul{padding-inline-start:1.2rem;margin:.4rem 0 0}
/* icons */
.ico{width:100%;height:100%;fill:none;stroke:var(--th-navy);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.ico .acc,.ico .arr{stroke:var(--th-accent)}
.ico .pupil{fill:var(--th-navy);stroke:none}
.ico .ok{stroke:var(--dm-ok)}
@keyframes k-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
@keyframes k-blink{0%,42%,100%{transform:scaleY(1)}50%,58%{transform:scaleY(.1)}}
@keyframes k-swapA{0%,40%{opacity:1}50%,90%{opacity:0}100%{opacity:1}}@keyframes k-swapB{0%,40%{opacity:0}50%,90%{opacity:1}100%{opacity:0}}
@keyframes k-nudge{0%,100%{transform:translate(0,0)}50%{transform:translate(var(--dx,0),var(--dy,0))}}
@keyframes k-z{0%{opacity:0;transform:translateY(6px)}50%{opacity:1}100%{opacity:0;transform:translateY(-6px)}}
@keyframes k-yawn{0%,100%{transform:scale(.55)}45%,70%{transform:scale(1.15)}}
@keyframes k-talk{0%,100%{opacity:.35}50%{opacity:1}}
.ico .eye,.ico .yawnm{transform-box:fill-box;transform-origin:center}
.ico .pulse{animation:k-pulse 2.6s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
.ico .blink{animation:k-blink 1.4s infinite}
.ico.swap .lids{animation:k-swapA 3s infinite}.ico.swap .opens{animation:k-swapB 3s infinite}
.ico.goleft .arr{--dx:-4px;animation:k-nudge 1.8s ease-in-out infinite}.ico.goright .arr{--dx:4px;animation:k-nudge 1.8s ease-in-out infinite}
.ico.goup .arr{--dy:-4px;animation:k-nudge 1.8s ease-in-out infinite}.ico.godown .arr{--dy:4px;animation:k-nudge 1.8s ease-in-out infinite}
.ico .z{animation:k-z 2.4s infinite}.ico .z2{animation-delay:.8s}
.ico .yawnm{animation:k-yawn 3.2s ease-in-out infinite}.ico .talk{animation:k-talk 1s infinite}
.ico .glance{animation:k-nudge 2.4s infinite;--dx:-3px}
@media (prefers-reduced-motion:reduce){.ico *{animation:none!important}}
/* camera stage */
.dm-stage{position:relative;width:100%;background:#0a1a3d;border-radius:16px;overflow:hidden;border:2px solid transparent;transition:border-color 220ms ease}
.dm-stage video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scaleX(-1);background:#0a1a3d}
body>#vid{position:fixed;left:-9999px;top:0;width:2px;height:2px}
.dm-ov{position:absolute;inset:0;width:100%;height:100%;transform:scaleX(-1);pointer-events:none}
.dm-stage.ok{border-color:var(--dm-ok)}.dm-stage.retry{border-color:#d98c00}
.dm-pill{position:absolute;inset-inline:10px;bottom:10px;margin-inline:auto;width:fit-content;max-width:calc(100% - 20px);padding:6px 14px;border-radius:999px;font-size:.8125rem;font-weight:600;line-height:1.35;text-align:center;background:rgba(255,255,255,.96);color:var(--th-navy);box-shadow:0 2px 10px rgba(0,0,0,.22)}
.dm-pill.ok{background:var(--dm-ok-bg);color:var(--dm-ok)}.dm-pill.warn{background:var(--dm-warn-bg);color:var(--dm-warn)}.dm-pill.err{background:var(--dm-err-bg);color:var(--dm-err)}
.dm-pill .d{display:inline-block;width:8px;height:8px;border-radius:50%;background:currentColor;margin-inline-end:7px}
.dm-rec{position:absolute;top:10px;inset-inline-start:10px;display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:rgba(255,255,255,.94);color:var(--dm-err);font-size:.75rem;font-weight:600}
.dm-rec i{width:8px;height:8px;border-radius:50%;background:var(--dm-err);animation:k-talk 1.2s infinite}
.dm-resultov{position:absolute;inset:0;display:grid;place-content:center;justify-items:center;gap:8px;text-align:center;padding:16px;background:rgba(255,255,255,.9);animation:dmin 220ms ease-out}
.dm-resultov .rc{width:58px;height:58px;animation:dmpop 300ms ease-out}.dm-resultov .rc svg{width:100%;height:100%}
.dm-resultov b{font-size:1.15rem;color:var(--th-navy)}.dm-resultov span{font-size:.9375rem;color:var(--th-ink-soft);max-width:26ch}
.dm-resultov.retry b{color:var(--dm-warn)}
@keyframes dmpop{from{transform:scale(.85);opacity:0}to{transform:scale(1);opacity:1}}@keyframes dmin{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
/* flow layout (camera check + steps): one viewport, no scroll */
.dm-flow{width:min(100% - 1.5rem,560px);margin-inline:auto;display:flex;flex-direction:column;gap:8px}
.dm-flowhead{padding-top:4px}
.dm-flow .dm-stage{flex:1 1 0;min-height:0}
.dm-bar{display:flex;gap:8px;align-items:stretch;position:relative}
.dm-bar .th-btn{min-height:48px;padding:10px 14px}
.dm-more{flex:0 0 48px;padding:0!important}.dm-more svg{width:20px;height:20px}
.dm-sheet{position:absolute;inset-inline:0;bottom:calc(100% + 8px);display:grid;gap:8px;padding:12px;background:#fff;border:1px solid var(--th-line);border-radius:14px;box-shadow:var(--th-shadow);z-index:5}
.dm-prog .dm-progrow{display:flex;justify-content:space-between;align-items:baseline;font-size:.8125rem;font-weight:600;color:var(--th-navy);margin-bottom:5px}
.dm-progrow span+span{color:var(--th-muted);font-weight:500}
.dm-bar4{height:4px;border-radius:2px;background:var(--th-line);overflow:hidden}
.dm-bar4>i{display:block;height:100%;width:0;background:var(--th-accent);border-radius:2px;transition:width .4s ease-out}
.dm-panel{display:flex;align-items:center;gap:12px;padding:10px 12px;margin:0;border-radius:14px}
.dm-picon{flex:0 0 44px;height:44px}
.dm-ptext{flex:1 1 auto;min-width:0}
.dm-ptitle{font-size:1rem;font-weight:700;color:var(--th-navy);line-height:1.25}
.dm-pnow{font-size:.875rem;color:var(--th-ink-soft);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.dm-pcycle{font-size:.75rem;color:var(--th-accent);font-weight:600}.dm-pcycle:empty{display:none}
.dm-ring{position:relative;flex:0 0 46px;width:46px;height:46px}
.dm-ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.dm-ring circle{fill:none;stroke-width:3.4}.dm-ring .bg{stroke:var(--th-line)}
.dm-ring .fg{stroke:var(--th-accent);stroke-linecap:round;transition:stroke-dashoffset .12s linear}
.dm-ring.rest .fg{stroke:var(--th-muted)}.dm-ring.prep .fg{stroke:var(--th-navy)}
.dm-ring .num{position:absolute;inset:0;display:grid;place-items:center;font-size:1rem;font-weight:700;color:var(--th-navy)}
.dm-net{margin:0;padding:6px 12px;font-size:.8125rem}
/* mobile / small heights */
@media (max-width:1100px){body.dm-flow-on .th-header__inner{min-height:46px;padding-block:4px}body.dm-flow-on .th-nav-toggle,body.dm-flow-on .th-nav{display:none}body.dm-flow-on .th-brand__logo{height:26px}}
body.dm-flow-on{overflow:hidden}
body.dm-flow-on .dm-footer{display:none}
body.dm-flow-on .dm-screen.dm-flowscreen{padding:0}
body.dm-flow-on .dm-flow{height:calc(var(--vh) - 46px);padding:6px 0 max(10px,env(safe-area-inset-bottom));box-sizing:border-box}
body.dm-flow-on .dm-main{min-height:0}
@media (max-width:380px){.dm-panel{padding:8px 10px;gap:9px}.dm-picon{flex-basis:38px;height:38px}.dm-ring{flex-basis:40px;width:40px;height:40px}.dm-bar .th-btn{font-size:.875rem;padding:8px 8px}}
/* desktop + landscape phones: stage left, info right */
@media (min-width:900px),(orientation:landscape) and (max-height:520px){
  body.dm-flow-on .th-header__inner{min-height:56px}
  #s-session .dm-flow{width:min(100% - 2rem,1040px);display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);grid-template-rows:auto auto auto 1fr auto;column-gap:16px;row-gap:10px;align-content:start}
  #s-session .dm-stage{grid-column:1;grid-row:1/-1;height:100%}
  #s-session .dm-prog,#s-session .dm-panel,#s-session .dm-net,#s-session .dm-bar{grid-column:2}
  #s-session .dm-bar{grid-row:5;align-self:end;flex-wrap:wrap}
  #s-cam .dm-flow{width:min(100% - 2rem,900px)}
}
@media (min-width:900px){body.dm-flow-on .dm-flow{height:calc(var(--vh) - 56px)}}
@media (orientation:landscape) and (max-height:520px){body.dm-flow-on .th-header__inner{min-height:40px}body.dm-flow-on .th-brand__logo{height:22px}body.dm-flow-on .dm-flow{height:calc(var(--vh) - 40px);padding-block:4px}.dm-flowhead .dm-sub{display:none}}
@media (min-width:900px){.dm-panel{flex-direction:column;text-align:center;padding:18px}.dm-picon{flex-basis:auto;width:96px;height:96px}.dm-ptitle{font-size:1.25rem}.dm-pnow{font-size:1rem;-webkit-line-clamp:3}.dm-ring{flex-basis:auto;width:64px;height:64px}.dm-ring .num{font-size:1.4rem}}
@media (min-width:900px) and (max-height:700px){.dm-picon{width:64px;height:64px}.dm-panel{padding:12px}}
body.dm-flow-on .th-nav-toggle,body.dm-flow-on .th-nav{display:none}

.dm-req{font-weight:400;color:var(--th-muted);font-size:.8125rem}.dm-fnote{display:block;margin:6px 0 0;font-weight:400}
.dm-field.dm-q{margin-bottom:1.15rem}
/* no accidental text selection on taps / double-clicks (inputs stay selectable) */
.page-dm .dm-consent,.page-dm .dm-consent span,.page-dm .th-btn,.page-dm .dm-chip,.page-dm .dm-tone,.page-dm .dm-link,.page-dm .dm-opt summary,.page-dm .dm-pill,.page-dm .dm-rec,.page-dm .dm-panel,.page-dm .dm-prog,.page-dm .dm-ring,.page-dm .dm-resultov,.page-dm .dm-more,.page-dm .dm-sheet,.page-dm label,.page-dm button{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.page-dm *{-webkit-tap-highlight-color:transparent}
.page-dm input,.page-dm textarea,.page-dm .dm-dcode{-webkit-user-select:text;user-select:text}
