@import url("assets/fonts/pretendard/pretendard.css");
@import url("assets/fonts/hahmlet/hahmlet.css");
:root{font-family:system-ui,'Malgun Gothic',sans-serif;color:#182842;background:#f3f6fb;font-size:16px;line-height:1.55}*{box-sizing:border-box}body{margin:0}.test-banner{text-align:center;background:#fce9ae;color:#61470b;padding:9px 16px;font-weight:650;font-size:.875rem}header{background:#fff;border-bottom:1px solid #dce3ee;padding:22px max(24px,calc((100vw - 1160px)/2));display:flex;justify-content:space-between;align-items:center;gap:20px}.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:#172e60}.brand b{font-size:2rem;letter-spacing:-2px}.brand span{font-weight:700;font-size:.875rem;letter-spacing:2px}.brand small{display:block;font-weight:400;letter-spacing:0}nav{display:flex;gap:8px}nav a{padding:10px 16px;border-radius:8px;color:#43536c;text-decoration:none;font-weight:600}nav a.active{background:#172e60;color:white}main{max-width:1160px;margin:24px auto;padding:0 24px}.notice{font-size:.875rem;padding:16px 18px;background:#e8eef9;border-left:4px solid #2d58a1;margin-bottom:28px}h1{font-size:1.8rem;margin:0 0 6px;letter-spacing:-.8px}h2{font-size:1.125rem;margin:0 0 18px}p{margin:8px 0;color:#52617a}.intro{margin-bottom:24px}.application-layout{display:grid;grid-template-columns:280px 1fr;gap:30px}.side{background:#172e60;color:#fff;padding:28px;border-radius:14px;align-self:start}.side p{color:#d7e2fa}.side .number{font-size:2rem;font-weight:700}.card{background:#fff;border:1px solid #dce3ee;border-radius:14px;padding:28px;margin-bottom:20px}label{display:block;font-weight:600;font-size:.9375rem;margin:0 0 7px}.field{margin-bottom:20px}input,select,textarea{width:100%;font:inherit;min-height:46px;border:1px solid #bbc7d8;border-radius:8px;padding:10px 12px;background:#fff;color:#182842}input:focus,select:focus,textarea:focus{outline:3px solid #b7cff6;border-color:#3568b6}textarea{resize:vertical;min-height:110px}.grid{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}.hint{font-size:.875rem;color:#66758d;margin:6px 0}.check{display:flex;align-items:flex-start;gap:10px;margin:16px 0;font-weight:400}.check input{width:20px;min-height:20px;margin-top:3px;flex-shrink:0}.error{color:#ab233b;font-size:.875rem;margin:5px 0}[aria-invalid=true]{border-color:#ab233b}.primary,button{font:inherit;font-weight:600;border:0;border-radius:8px;padding:12px 18px;cursor:pointer;background:#e8eef8;color:#172e60}.primary{background:#172e60;color:#fff}button:disabled{opacity:.5;cursor:wait}button:focus-visible,a:focus-visible{outline:3px solid #6391dc;outline-offset:3px}.actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:20px 0}.stat{background:#fff;border:1px solid #dce3ee;border-radius:12px;padding:18px}.stat strong{display:block;font-size:1.75rem}.stat span{font-size:.875rem;color:#52617a}.toolbar{display:grid;grid-template-columns:2fr 1fr 1fr auto;gap:12px;margin:22px 0}.list{display:grid;gap:10px}.row{display:grid;grid-template-columns:1.1fr 1.4fr 1fr auto;align-items:center;text-align:left;width:100%;background:#fff;border:1px solid #dce3ee;padding:18px 20px;gap:15px;font-weight:400}.row:hover{border-color:#567cb9;background:#f8fbff}.row strong{display:block}.row small{display:block;color:#63738a;font-size:.875rem}.badge{display:inline-block;width:fit-content;padding:5px 10px;border-radius:6px;font-size:.875rem;background:#e8eef8;color:#2b507a}.badge.selected{background:#d9f2e7;color:#19644a}.list-head{display:flex;justify-content:space-between;align-items:center;margin:18px 0}.empty{text-align:center;padding:48px 20px;background:#fff;border:1px dashed #bbc7d8;border-radius:12px}.success{max-width:680px;margin:35px auto}.success .ref{font-size:1.5rem;font-weight:750;color:#172e60;overflow-wrap:anywhere;background:#edf3fd;padding:18px;border-radius:8px;margin:20px 0}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:26px}.facts{display:grid;grid-template-columns:120px 1fr;gap:12px;font-size:.9375rem}.facts dt{color:#66758d}.facts dd{margin:0;overflow-wrap:anywhere}.history{list-style:none;padding:0}.history li{border-left:3px solid #c6d7ef;padding:0 0 22px 16px;margin-left:5px;font-size:.9375rem}.history small{display:block;color:#66758d;margin-bottom:6px}footer{max-width:1160px;margin:45px auto 25px;padding:0 24px;font-size:.875rem;color:#66758d;display:flex;justify-content:space-between;gap:12px}.alert{padding:14px;background:#fff0f0;border:1px solid #e8b7bd;border-radius:8px;color:#9c2536;margin:12px 0}a{color:#2d58a1}.small{font-size:.875rem}.section-tag{font-size:.875rem;font-weight:700;color:#2d58a1;margin-bottom:8px}@media(max-width:760px){header{padding:16px;align-items:flex-start;flex-direction:column;gap:12px}nav{width:100%}nav a{flex:1;text-align:center}main{padding:0 16px;margin-top:16px}.application-layout,.detail-grid{grid-template-columns:1fr}.side{padding:20px}.side .number{font-size:1.4rem}.card{padding:20px}.grid{grid-template-columns:1fr}.stats{grid-template-columns:1fr 1fr}.toolbar{grid-template-columns:1fr 1fr}.toolbar .search{grid-column:1/-1}.row{grid-template-columns:1fr auto;gap:10px}.row .program{grid-column:1/-1;grid-row:2}.row .time{display:none}.facts{grid-template-columns:95px 1fr}footer{flex-direction:column}h1{font-size:1.55rem}.notice{margin-bottom:20px}}

.profile-card{max-width:760px}.profile-card .hint{overflow-wrap:anywhere}@media(max-width:760px){nav a{padding:10px 8px}}

nav{flex-wrap:wrap}nav a{padding:9px 11px}.education{border-block:1px solid #e1e7f0;padding:18px 0;margin:14px 0}.education select[size]{min-height:120px}.catalog-only[hidden]{display:none}table{border-collapse:collapse;width:100%;font-size:.9rem}th,td{text-align:left;padding:10px;border-bottom:1px solid #e3e9f1;overflow-wrap:anywhere}meter{width:90px;vertical-align:middle}.card{overflow-wrap:anywhere}.stats{grid-template-columns:repeat(auto-fit,minmax(155px,1fr))}@media(max-width:760px){nav a{flex:1 1 30%;font-size:.82rem}.card{padding:16px}table{font-size:.8rem}th,td{padding:7px 4px}meter{display:block;width:65px}}

/* Shared contrast correction; application and profile layouts stay intact. */
footer,
.row small { color: #52617a; }

/* Admin layout follows existing DOM, data and actions; no added metrics. */
body:has(#app > #rows) { background: #f6f8fb; }
main:has(#app > #rows) > .notice {
  padding: 12px 16px;
  margin-bottom: 20px;
  border-left-width: 2px;
  background: #edf2fa;
  font-size: .8125rem;
}
main:has(#app > #rows) > .hint { margin-bottom: 18px; }
#app:has(> #rows) {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  grid-template-areas: "intro actions" "sync sync" "toolbar toolbar" "count count" "rows rows";
  column-gap: 24px;
}
#app:has(> #rows) > .intro { grid-area: intro; margin-bottom: 0; }
#app:has(> #rows) > .intro h1 { font-size: 2rem; letter-spacing: -.04em; font-weight: 750; }
#app:has(> #rows) > .intro p { margin-top: 6px; font-size: .875rem; }
#app:has(> #rows) > .actions { grid-area: actions; align-self: center; justify-content: flex-end; }
#app:has(> #rows) > .actions button {
  padding: 10px 14px;
  background: #fff;
  border: 1px solid #cad5e4;
  color: #253c5e;
  font-size: .875rem;
}
#sync-message {
  grid-area: sync;
  border-top: 1px solid #dce3ee;
  margin: 20px 0 0;
  padding-top: 12px;
  color: #52617a;
  font-size: .8125rem;
}
#app:has(> #rows) > .toolbar {
  grid-area: toolbar;
  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr) auto;
  align-items: end;
  gap: 16px;
  margin: 18px 0 0;
  padding: 18px 20px;
  background: #fff;
  border: 1px solid #dce3ee;
  border-radius: 10px;
}
#app:has(> #rows) > .toolbar > div { min-width: 0; }
#app:has(> #rows) > .toolbar label { font-size: .8125rem; color: #334866; margin-bottom: 6px; }
#app:has(> #rows) > .toolbar :is(input, select) { border-radius: 6px; min-height: 44px; padding: 9px 11px; }
#export { min-height: 44px; background: #172e60; color: #fff; font-size: .875rem; padding: 10px 16px; }
#app:has(> #rows) > .list-head { grid-area: count; margin: 18px 0 10px; font-size: .875rem; }
#clear { padding: 8px 10px; background: transparent; color: #334866; font-size: .8125rem; }
#clear:hover { background: #e8eef8; }
#rows {
  grid-area: rows;
  gap: 0;
  background: #fff;
  border: 1px solid #dce3ee;
  border-radius: 10px;
}
#rows .row {
  grid-template-columns: minmax(0, 1.1fr) minmax(0, 1.35fr) minmax(0, 1fr) minmax(120px, auto);
  gap: 20px;
  min-height: 82px;
  padding: 14px 20px;
  border: 0;
  border-bottom: 1px solid #e5eaf2;
  border-radius: 0;
  background: transparent;
  color: #253c5e;
  font-size: .875rem;
}
#rows .row:first-child { border-radius: 10px 10px 0 0; }
#rows .row:last-child { border-bottom: 0; border-radius: 0 0 10px 10px; }
#rows .row:only-child { border-radius: 10px; }
#rows .row:hover { background: #f3f6fb; }
#rows .row > span { min-width: 0; overflow-wrap: anywhere; }
#rows .row strong { font-size: .9375rem; font-weight: 700; color: #182e50; }
#rows .row small { margin-top: 3px; font-size: .75rem; line-height: 1.5; }
#rows .row > span:first-child small { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#rows .row .time { font-size: .8125rem; }
#rows .row .badge { padding: 6px 10px; background: #edf2f8; color: #253c5e; font-size: .8125rem; }
#rows .row .badge small { color: #52617a; font-size: .75rem; }
#rows:has(> .empty) { border: 0; background: transparent; }
#rows .empty { padding: 48px 24px; border-radius: 10px; }
#rows .empty h2 { margin-bottom: 8px; }
#app:has(> #rows) :is(button, a, input, select):focus-visible {
  outline: 3px solid #3568b6;
  outline-offset: 3px;
}
#rows .row:focus-visible { position: relative; z-index: 1; outline-offset: -3px; }
#app:has(> .detail-grid) .intro h1 { overflow-wrap: anywhere; }
#app:has(> .detail-grid) .card { border-radius: 10px; }
@media (max-width: 1000px) {
  #app:has(> #rows) > .toolbar { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto; }
  #app:has(> #rows) > .toolbar .search { grid-column: 1 / -1; }
  #rows .row { gap: 12px; padding-inline: 16px; }
}
@media (max-width: 760px) {
  #app:has(> #rows) { grid-template-columns: minmax(0, 1fr); grid-template-areas: "intro" "actions" "sync" "toolbar" "count" "rows"; }
  #app:has(> #rows) > .intro h1 { font-size: 1.65rem; }
  #app:has(> #rows) > .actions { justify-content: flex-start; margin-top: 16px; }
  #sync-message { margin-top: 16px; }
  #app:has(> #rows) > .toolbar { padding: 16px; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 14px 12px; }
  #export { grid-column: 1 / -1; }
  #rows .row { grid-template-columns: minmax(0, 1fr) auto; gap: 10px 12px; padding: 16px; }
  #rows .row .badge { grid-column: 2; grid-row: 1; max-width: 135px; }
  #rows .row .program { grid-column: 1 / -1; grid-row: 2; }
}
@media (prefers-reduced-motion: no-preference) {
  #rows .row { transition: background-color 120ms ease; }
}

/* ===== ISA 디자인 토큰 · DESIGN-MOCKUP-20261022 (테마 A). 값은 DESIGN.md 테마 A 표만 쓴다. =====
   예외: 오류색 #A02030(기존 폼 오류색 유지), 로고 대체 점 #1FABB3(§6). 별칭 --recruit-*·--forms-*는 공개 범위에서만 재정의한다. */
:root{
  --isa-font:'Pretendard Variable',Pretendard,system-ui,'Malgun Gothic',sans-serif;
  --isa-font-display:Hahmlet,'Noto Serif KR','Apple SD Gothic Neo',Batang,serif; /* 표제 전용(공개 화면). v5, OFL-1.1 자체 호스팅 */
  --isa-bg:#F4F4F4;--isa-surface:#FFFFFF;--isa-surface-2:#F4F4F4;
  --isa-ink:#000000;--isa-muted:#404040;--isa-heading:#0C5773;
  --isa-line:#D8E0E5;--isa-line-strong:#0C5773;--isa-field-border:#0C5773;
  --isa-primary:#0C5773;--isa-on-primary:#FFFFFF;--isa-secondary:#4CCCBE;--isa-accent:#FFC600;
  --isa-danger:#A02030;--isa-focus:#0C5773;
  --isa-radius-sm:8px;--isa-radius-lg:20px;
  font-family:var(--isa-font);color:var(--isa-ink);background:var(--isa-bg);
}
:root:lang(ko){word-break:keep-all}
:root:lang(ja){font-family:'Pretendard JP Variable','Pretendard Variable',Pretendard,'Yu Gothic UI','Yu Gothic',Meiryo,sans-serif;--isa-font-display:'Hiragino Mincho ProN','Yu Mincho','Noto Serif JP',Hahmlet,serif;word-break:normal;line-break:strict}
/* ===== 폼별 강조색 · 방향 C(2026-11-02, C_적용계획 §2). 900 글자용 / 700 버튼 / 500 장식 / 100·50 연한 면. 위 --isa-* 값은 그대로 둔다.
   applyFormTheme(forms/media-view.js)이 6색 hex를 키로 바꿔 data-form-accent를 붙인다(대응표 밖·색 없음은 custom → :root 값 = 틸). C-1에서는 이 토큰을 쓰는 화면 규칙이 없다(표시 변화 0).
   버튼 토큰(btn-bg·btn-fg): 계획은 :root·teal 규칙 안에서 700을 참조했지만 사용자 정의 속성은 계산값(틸)이 상속되어 다른 색에서도 틸이 되므로, data-form-accent가 붙은 요소마다 다시 계산하게 한 줄로 나눴다(값은 계획과 같음).
   이름 주의: 단일 --isa-accent(금색 #FFC600, 위 테마 A)는 사이트 강조색(마감 임박 점·새 버전 띠)이고, --isa-accent-900/700/500/100/50은 폼별 테마색이다. 서로 바꿔 쓰지 않는다. */
[data-form-accent=teal],:root{--isa-accent-900:#063A4D;--isa-accent-700:#0C5773;--isa-accent-500:#2A86A3;--isa-accent-100:#CFE6ED;--isa-accent-50:#EEF6F8}
/* C-4(2026-11-05, review_PR37 이월): 대응표 밖 hex·색 없음(custom)은 틸을 명시한다. 다른 폼 색이 붙은 요소 안에 중첩돼도(편집기 호스트 안의 질문 묶음 등) :root 상속이 아니라 이 값이 이긴다. */
[data-form-accent=custom]{--isa-accent-900:#063A4D;--isa-accent-700:#0C5773;--isa-accent-500:#2A86A3;--isa-accent-100:#CFE6ED;--isa-accent-50:#EEF6F8}
:root,[data-form-accent]{--isa-btn-bg:var(--isa-accent-700);--isa-btn-fg:#FFFFFF}
[data-form-accent=aqua]{--isa-accent-900:#0A4C50;--isa-accent-700:#0F6F75;--isa-accent-500:#1FABB3;--isa-accent-100:#CFF3F1;--isa-accent-50:#E8FBFA}
[data-form-accent=lavender]{--isa-accent-900:#2B1E6E;--isa-accent-700:#6B4FD8;--isa-accent-500:#8F77E6;--isa-accent-100:#E6E0FA;--isa-accent-50:#F5F2FD}
[data-form-accent=coral]{--isa-accent-900:#7A2113;--isa-accent-700:#B8321E;--isa-accent-500:#D83C25;--isa-accent-100:#FBE1DC;--isa-accent-50:#FDF1EE}
[data-form-accent=navy]{--isa-accent-900:#0B132B;--isa-accent-700:#0B132B;--isa-accent-500:#2E3A5C;--isa-accent-100:#D9DEEA;--isa-accent-50:#EEF1F7}
[data-form-accent=yellow]{--isa-accent-900:#4A3800;--isa-accent-700:#7A5C00;--isa-accent-500:#FFD83D;--isa-accent-100:#FFF2BF;--isa-accent-50:#FFF9E3;--isa-btn-bg:#FFD83D;--isa-btn-fg:#141A1F}
/* 상태·모서리 */
:root{--isa-ok:#0E6460;--isa-ok-bg:#D9F4F0;--isa-warn:#7A5C00;--isa-warn-bg:#FFF2BF;--isa-danger-bg:#FBE1DC;--isa-radius-md:10px;--isa-radius-pill:6px}
/* C-2 디자인 패널 강조 색상(2026-11-02): 6색 라디오 묶음(appearance-editor.js). 칠은 버튼마다 붙인 data-form-accent의 --isa-btn-bg·--isa-btn-fg라 새 색 정의가 없다(옐로는 검정 글자).
   선택 표시는 색만이 아니라 체크(✓)와 바깥 테두리 두 겹, 44px 이상. 잠김(편집 권한 없음·저장 중)은 같은 칠을 흐리게 둔다. 신청자 화면에는 이 묶음이 없다. */
#app .forms-appearance-theme > .forms-appearance-colors{grid-column:1/-1;margin:.8rem 0 0}
#app .forms-appearance-theme > label:has(> [data-appearance-font]){grid-column:1/-1} /* C-4(review_PR37 §3 #4): 글꼴 칸도 전폭, 색 → 글꼴 세로 쌓임 */
#app .forms-appearance-theme [data-appearance-font]{max-width:320px}
#app .forms-appearance-colors > [data-appearance-color-label]{display:block;font-weight:600;font-size:.9375rem;margin:0 0 7px}
#app .forms-appearance-colors > [role=radiogroup]{display:flex;flex-wrap:wrap;gap:10px}
/* C-4(2026-11-05, review_PR37 §3 이월 3건): ✓는 글자 흐름 밖 오른쪽 위 18px 배지(absolute)라 글자가 늘 가운데이고 고르면 이웃 버튼이 밀리지 않는다. 버튼은 84px 이상·padding 6px 14px, 테두리는 같은 색의 진한 단계(accent-900)라 검정 틀이 아니라 색 칩으로 보인다(옐로 칩 테두리 #4A3800, 흰 바탕 3:1 이상). */
#app .forms-appearance-colors button[role=radio]{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:84px;min-height:44px;margin:0;padding:6px 14px;border:1px solid var(--isa-accent-900);border-radius:var(--isa-radius-sm);background:var(--isa-btn-bg);color:var(--isa-btn-fg);font-weight:600}
#app .forms-appearance-colors button[role=radio]:hover:not(:disabled){background:var(--isa-btn-bg);color:var(--isa-btn-fg);text-decoration:underline;text-underline-offset:3px}
#app .forms-appearance-colors button[role=radio][aria-checked=true]{box-shadow:0 0 0 2px var(--isa-surface),0 0 0 4px var(--isa-ink);font-weight:700}
#app .forms-appearance-colors button[role=radio] > [data-appearance-check]{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;background:var(--isa-ink);color:var(--isa-surface);font-size:11px;line-height:18px;text-align:center}
#app .forms-appearance-colors button[role=radio][aria-checked=false] > [data-appearance-check]{visibility:hidden}
#app .forms-appearance-colors button[role=radio]:focus-visible{outline:3px solid var(--isa-focus);outline-offset:6px}
#app .forms-appearance-colors button[role=radio]:disabled{background:var(--isa-btn-bg);color:var(--isa-btn-fg);border-color:var(--isa-accent-900);opacity:.5}
@media (forced-colors: active){#app .forms-appearance-colors button[role=radio][aria-checked=true]{border-width:3px}} /* 고대비 모드는 그림자를 지우므로 테두리 두께로 */

/* 공통 기초: 헤더·안내·글자·입력·초점·버튼·배지·면. 앞의 축약 규칙과 같은 명시도로 뒤에서 덮는다. */
.test-banner{background:var(--isa-surface-2);color:var(--isa-muted);border-bottom:1px solid var(--isa-line);font-weight:600}
header{background:var(--isa-surface);border-bottom:1px solid var(--isa-line);padding-block:12px}
.brand{color:var(--isa-heading);gap:10px}
.brand::before{content:"";flex:0 0 auto;width:40px;height:36px;background:url("assets/img/isa-symbol-144.png") center/contain no-repeat}
.brand b{font-size:1.5rem;letter-spacing:-.04em}
.brand span{letter-spacing:.08em;white-space:nowrap}
.brand small{white-space:nowrap}
nav{gap:2px}
nav a{display:inline-flex;align-items:center;min-height:44px;padding:8px 12px;border-radius:0;color:var(--isa-muted);font-weight:600}
/* app.js hides tabs with the hidden attribute; an author display rule would otherwise override it (seen on /cloud/#programs: 운영진 탭이 비로그인 화면에 그대로 보임). */
nav a[hidden],nav button[hidden],nav details[hidden]{display:none}
nav a.active{background:transparent;color:var(--isa-ink);box-shadow:inset 0 -3px var(--isa-primary)}
nav #email-logout{order:9;min-height:44px;padding:8px 12px;background:transparent;border:0;color:var(--isa-muted);font-weight:600}
/* PR-B B2 (팀장 결정 3): 수집 사이트 운영진 화면의 '더 보기'([내 신청]). 로그아웃 바로 앞, 메뉴 항목과 같은 글자·44px 높이. 펼치면 줄 안에서 아래로 열린다(넘침 스크롤에 잘리지 않음) */
nav #nav-more{flex:0 0 auto}
nav #nav-more > summary{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:8px 12px;cursor:pointer;list-style:none;color:var(--isa-muted);font-weight:600;white-space:nowrap}
nav #nav-more > summary::-webkit-details-marker{display:none}
nav #nav-more > summary::before{content:"▸" / ""}
nav #nav-more[open] > summary::before{content:"▾" / ""}
nav #nav-more > a{display:flex}
nav #nav-more > summary.active{background:transparent;color:var(--isa-ink);box-shadow:inset 0 -3px var(--isa-primary)} /* 리뷰 B4: #mine-v1에서 닫힌 '더 보기'가 현재 위치(nav a.active와 같은 표시) */
nav #nav-more > summary > [data-nav-more-current]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0} /* .isa-form-sr-only와 같은 화면 밖 글자 */
header #forms-locale{width:auto;flex:0 0 auto;min-width:112px;max-width:160px;min-height:44px;border-color:var(--isa-line-strong)}
.notice{background:var(--isa-surface);border-left:3px solid var(--isa-secondary);color:var(--isa-muted)}
h1,h2{color:var(--isa-heading)}
p,.hint,.facts dt,.history small,.stat span,.row small,footer,.small{color:var(--isa-muted)}
a{color:var(--isa-primary)}
.section-tag{color:var(--isa-heading)}
input,select,textarea{border-color:var(--isa-field-border);border-radius:var(--isa-radius-sm);color:var(--isa-ink);background:var(--isa-surface)}
input:focus,select:focus,textarea:focus{outline:3px solid var(--isa-focus);outline-offset:2px;border-color:var(--isa-field-border)}
[aria-invalid=true]{border-color:var(--isa-danger);box-shadow:inset 0 0 0 1px var(--isa-danger)}
.error{color:var(--isa-danger)}
.alert{background:var(--isa-surface);border:1px solid var(--isa-danger);border-left-width:3px;border-radius:0;color:var(--isa-danger)}
.primary,button{min-height:44px;border:1px solid var(--isa-line-strong);border-radius:var(--isa-radius-sm);background:var(--isa-surface);color:var(--isa-ink);font-weight:700}
.primary{background:var(--isa-primary);border-color:var(--isa-primary);color:var(--isa-on-primary)}
.primary:not(:disabled):hover{text-decoration:underline;text-underline-offset:3px}
button:disabled{opacity:1;cursor:not-allowed;background:var(--isa-surface-2);color:var(--isa-muted);border-color:var(--isa-line)}
button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--isa-focus);outline-offset:3px}
.badge{border-radius:var(--isa-radius-sm);background:var(--isa-surface-2);color:var(--isa-muted);font-size:.8125rem;font-weight:700}
.badge.selected{background:var(--isa-secondary);color:var(--isa-ink)}
.card,.stat,.row,.empty,.success .ref{border-radius:0;border-color:var(--isa-line)}
.row:hover{border-color:var(--isa-line-strong);background:var(--isa-surface)}
.side{background:var(--isa-heading);color:var(--isa-on-primary);border-radius:0}
.side p{color:var(--isa-on-primary)}
.success .ref{color:var(--isa-heading);background:var(--isa-surface-2)}
.history li{border-left-color:var(--isa-secondary)}
.education{border-color:var(--isa-line)}
/* A11Y A-10: 학교 검색(입력 → 목록)과 캠퍼스 검색(입력 → 목록)을 두 열에 나누면 1280에서 Tab이 왼쪽 목록에서 오른쪽 위 입력으로 되돌아간다. 한 열로 두어 DOM 순서 = 화면 순서 */
.education .education-catalog{grid-template-columns:1fr}
th,td{border-bottom-color:var(--isa-line)}
.empty{border-color:var(--isa-line)}

/* 운영진 목록(SF-STYLE-01 구조 유지, 색만 토큰으로) */
body:has(#app > #rows){background:var(--isa-bg)}
main:has(#app > #rows) > .notice{background:var(--isa-surface)}
#app:has(> #rows) > .actions button{border-color:var(--isa-line-strong);color:var(--isa-ink)}
#sync-message{border-top-color:var(--isa-line);color:var(--isa-muted)}
#app:has(> #rows) > .toolbar{border-color:var(--isa-line);border-radius:0}
#app:has(> #rows) > .toolbar label{color:var(--isa-muted)}
#app:has(> #rows) > .toolbar :is(input, select){border-radius:var(--isa-radius-sm)}
#export{background:var(--isa-primary);border-color:var(--isa-primary);color:var(--isa-on-primary)}
#clear{border:0;color:var(--isa-muted)}
#clear:hover{background:var(--isa-surface-2)}
#rows{border-color:var(--isa-line);border-radius:0}
#rows .row,#rows .row:first-child,#rows .row:last-child,#rows .row:only-child,#rows .empty{border-radius:0}
#rows .row{border-bottom-color:var(--isa-line);color:var(--isa-ink)}
#rows .row:hover{background:var(--isa-surface-2)}
#rows .row strong{color:var(--isa-ink)}
#rows .row .badge{background:var(--isa-surface-2);color:var(--isa-ink)}
#rows .row .badge small{color:var(--isa-muted)}
#app:has(> #rows) :is(button, a, input, select):focus-visible{outline-color:var(--isa-focus)}
#app:has(> .detail-grid) .card{border-radius:0}

/* 공개 신청·완료·내 신청: 운영 화면과 같은 토큰, 편집용 글자 위계만 다르다(SF-STYLE-02 구조 유지).
   별칭은 이 범위에서만 정의한다(편집기 화면에서는 비어 있어야 한다). */
body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs){
  --recruit-ink:var(--isa-ink);
  --recruit-muted:var(--isa-muted);
  --recruit-line:var(--isa-line);
  --recruit-paper:var(--isa-bg);
  --recruit-accent:var(--isa-heading);
  background:var(--recruit-paper);
  color:var(--recruit-ink);
}
body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) header{gap:28px}
body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) .brand{flex:0 0 auto}
body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) nav{flex:1;justify-content:flex-end;gap:4px 6px}
body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) main{margin-block:24px 56px}
body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) main > .notice{padding:13px 16px;margin-bottom:38px}
body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) main > .hint:has(a[hidden]){display:none}
body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) footer{border-top:1px solid var(--recruit-line);padding-top:22px;line-height:1.7}
body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) :is(h1, h2, p, label, legend){overflow-wrap:anywhere} /* keep-all은 :root:lang(ko)에서 상속. 일본어는 띄어쓰기가 없어 keep-all+anywhere가 문장 끝 '。'만 다음 줄로 밀고 'ISA'를 홀로 남겼음(독립 검수 R2) */
:root:lang(ja) body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) :is(h1, h2, p, label, legend){word-break:normal;overflow-wrap:break-word}

/* 기존 신청 화면(#apply) */
#app:has(> .application-layout) > .intro{padding-bottom:26px;margin-bottom:28px;border-bottom:1px solid var(--recruit-line)}
#app:has(> .application-layout) > .intro h1{font-size:clamp(2rem, 4vw, 3.25rem);line-height:1.2;letter-spacing:-.04em}
#app:has(> .application-layout) > .intro p{margin-top:14px;max-width:720px}
#app > .application-layout{grid-template-columns:270px minmax(0, 1fr);gap:38px}
#app > .application-layout > .side{background:var(--isa-surface);color:var(--recruit-ink);border:1px solid var(--recruit-line);border-top:4px solid var(--recruit-accent);border-radius:0;padding:28px}
#app > .application-layout > .side p{color:var(--recruit-muted)}
#app > .application-layout > .side h2{font-size:1.25rem;margin-bottom:12px}
#application{padding:32px;border:1px solid var(--recruit-line);border-radius:0;box-shadow:none}
#application h2{font-size:1.2rem;padding-top:18px;margin-top:24px;border-top:1px solid var(--recruit-line)}
#application :is(input, select, textarea){min-height:48px}
#application .check input{min-height:20px;accent-color:var(--isa-primary)}
#application .primary{padding:14px 24px;min-height:48px}

/* 현행 공개 신청서(#respond): 편집 디자인 왼쪽 열 + 흰 답변 패널 */
#app .forms-respondent{
  --forms-ink:var(--isa-ink);
  --forms-accent:var(--isa-primary);
  display:grid;
  grid-template-columns:minmax(0, .82fr) minmax(0, 1.45fr);
  grid-template-rows:repeat(4, max-content) auto;
  column-gap:68px;
  align-items:start;
  color:var(--recruit-ink);
}
#app .forms-respondent > h1{grid-column:1;grid-row:1;color:var(--isa-heading);border-top:4px solid var(--recruit-accent);padding-top:24px;margin:0;font-size:clamp(2rem, 3.5vw, 3rem);font-weight:800;line-height:1.24;letter-spacing:-.04em;white-space:pre-line;overflow-wrap:anywhere}
#app .forms-respondent > p:first-of-type{grid-column:1;grid-row:2;margin:20px 0 0;font-size:.9375rem;line-height:1.85;white-space:pre-line}
#app .forms-respondent > .forms-period{grid-column:1;grid-row:3;background:var(--isa-surface);border:1px solid var(--recruit-line);border-left:3px solid var(--recruit-accent);border-radius:0;color:var(--recruit-ink);padding:16px;margin:24px 0 0;font-weight:600;line-height:1.75}
#app .forms-respondent > .forms-help{grid-column:1;grid-row:4;border-top:1px solid var(--recruit-line);padding-top:16px;margin:24px 0 32px;font-size:.8125rem;line-height:1.75;color:var(--recruit-muted)}
#app .forms-respondent > .forms-question-fields{--forms-ink:var(--isa-ink);--forms-accent:var(--isa-primary);grid-column:2;grid-row:1 / span 5;min-width:0;width:100%;margin:0;padding:28px 32px;background:var(--isa-surface);border:1px solid var(--recruit-line);border-radius:0;box-shadow:none}
#app .forms-respondent .forms-section > h2{font-size:1.25rem;margin:0 0 24px;letter-spacing:-.03em}
#app .forms-respondent .forms-section + .forms-section{margin-top:32px;padding-top:28px;border-top:2px solid var(--recruit-line)}
#app .forms-respondent .forms-question{border:0;border-radius:0;background:transparent;padding:0 0 24px;margin:0 0 24px;border-bottom:1px solid var(--recruit-line)}
#app .forms-respondent .forms-section > .forms-question:last-child{margin-bottom:0;padding-bottom:0;border-bottom:0}
#app .forms-respondent .forms-question legend{font-size:.9375rem;font-weight:700;margin-bottom:12px;padding:0}
#app .forms-respondent :is(input:not([type=checkbox]):not([type=radio]), select, textarea){border:1px solid var(--isa-field-border);border-radius:var(--isa-radius-sm);min-height:48px;padding:12px 14px;margin-top:0;background:var(--isa-surface)}
#app .forms-respondent textarea{min-height:128px}
#app .forms-respondent :is(input[type=checkbox], input[type=radio]){accent-color:var(--isa-primary)}
#app .forms-respondent .forms-choice{padding:10px 14px;min-height:48px;background:var(--isa-surface);border:1px solid var(--isa-line-strong);border-radius:var(--isa-radius-sm);margin:8px 0}
#app .forms-respondent .forms-choice:has(input:checked){background:var(--isa-surface-2);border-color:var(--isa-heading);box-shadow:inset 0 0 0 1px var(--isa-heading)}
#app .forms-respondent .forms-help{color:var(--recruit-muted);font-size:.875rem}
#app .forms-respondent .forms-field-error{color:var(--isa-danger);margin:8px 0 0}
#app .forms-respondent .forms-field-error:empty{margin:0}
#app .forms-respondent [aria-invalid=true]{border-color:var(--isa-danger);box-shadow:inset 0 0 0 1px var(--isa-danger)}
#app .forms-respondent > .forms-consents{grid-column:2;grid-row:6;padding:26px 0 0}
#app .forms-respondent .forms-consents legend{font-size:.9375rem}
#app .forms-respondent .forms-consents label{display:flex;align-items:center;gap:12px;min-height:44px;font-weight:400;font-size:.875rem}
#app .forms-respondent > .forms-message{grid-column:2;grid-row:7;color:var(--recruit-ink)}
#app .forms-respondent > .forms-primary{grid-column:2;min-height:52px;border-radius:var(--isa-radius-sm);border-color:var(--isa-primary);background:var(--isa-primary);color:var(--isa-on-primary);font-weight:700;padding:14px 24px}
#app .forms-respondent > .forms-primary:not(:disabled):hover{text-decoration:underline;text-underline-offset:3px}
#app .forms-respondent > .forms-primary:disabled{background:var(--isa-surface-2);color:var(--isa-muted);border-color:var(--isa-line);opacity:1}

/* 신청 완료·내 신청: 공개 테마를 유지하고 카드를 답변 패널과 같은 모양으로 */
#app .forms-receipt{background:var(--isa-surface);border:1px solid var(--recruit-line);border-radius:0}
#app .forms-mine-list > h2,#app .forms-legacy-list > h2{margin:28px 0 12px}

@media (max-width: 1000px){
  body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) header{flex-wrap:wrap;gap:12px}
  body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) nav{order:3;flex:1 0 100%;justify-content:flex-start}
  body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) #forms-locale{margin-left:auto}
  #app .forms-respondent{column-gap:32px;grid-template-columns:minmax(0, .85fr) minmax(0, 1.2fr)}
  #app .forms-respondent > .forms-question-fields{padding:24px}
}
@media (max-width: 760px){
  header{position:static;flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:10px 24px 0}
  /* A11Y A-4: 로그인 뒤 탭 9~10개가 스크롤바 없는 가로 띠로 잘려 있었다(390에서 5개가 화면 밖). 줄바꿈해 전부 보이게 한다 */
  nav{order:3;width:100%;flex-wrap:wrap;overflow:visible;gap:0}
  nav a,nav #email-logout{flex:0 0 auto;font-size:.875rem;padding:8px 10px;white-space:nowrap}
  header #forms-locale{margin-left:auto;min-width:104px;min-height:40px}
  main{padding:0 24px}
  footer{padding:0 24px}
  body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) header{flex-direction:row;align-items:center;gap:6px 12px;padding:10px 24px 0}
  body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) nav{width:100%;flex-wrap:nowrap;overflow-x:auto;gap:0}
  body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) nav a{flex:0 0 auto;font-size:.875rem;padding:8px 10px}
  body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) #forms-locale{min-width:104px;width:auto}
  body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) main{margin-top:16px}
  body:has(#application, #forms-respondent, .forms-receipt, .forms-mine-list, #programs) main > .notice{font-size:.8125rem;margin-bottom:28px}
  #app:has(> .application-layout) > .intro{padding-bottom:22px;margin-bottom:22px}
  #app > .application-layout{grid-template-columns:minmax(0, 1fr);gap:24px}
  #app > .application-layout > .side{padding:22px}
  #application{padding:24px 20px}
  #app .forms-respondent{display:block}
  #app .forms-respondent > h1{padding-top:20px;font-size:2rem}
  #app .forms-respondent > p:first-of-type{margin-top:16px}
  #app .forms-respondent > .forms-help{margin-block:20px 28px}
  #app .forms-respondent > .forms-question-fields{padding:24px 20px}
  #app .forms-respondent > .forms-consents{padding-top:24px}
  #app .forms-respondent > .forms-primary{display:block;width:100%}
  #app .forms-respondent > .forms-primary[hidden]{display:none}
}

/* ===== 로그인·가입 (/auth/) · v5 (2026-10-22). /auth/index.html은 /cloud/style.css → /auth/style.css 순으로 불러온다.
   이 블록이 v5 모양을 담당하고, /auth/style.css(usability)에는 남는 고정색·중복 규칙 정리만 요청한다(docs/design/AUTH_V5_20261022.md).
   선택자에 main#auth-root를 붙여 /auth/style.css의 같은 규칙보다 우선한다. ===== */
html:has(#auth-root){background:#fff}
body:has(#auth-root){background:#fff;color:var(--isa-ink)}
body:has(#auth-root) header{background:#fff;border-bottom:1px solid var(--isa-line);padding:0 max(24px, calc((100vw - 1200px) / 2));min-height:72px;flex-direction:row;flex-wrap:nowrap;align-items:center;gap:24px}
body:has(#auth-root) header .brand{color:var(--isa-ink);margin:0}
body:has(#auth-root) header label{display:flex;align-items:center;gap:10px;margin:0;font-size:.875rem;font-weight:500;color:var(--isa-muted);white-space:nowrap}
body:has(#auth-root) header #auth-language{width:auto;min-height:44px;border:0;border-radius:0;padding:0 20px 0 0;font-size:.875rem;font-weight:500;color:var(--isa-ink);background-color:transparent;background-position:right 0 center}
body:has(#auth-root) main#auth-root{max-width:560px;margin:56px auto 96px;padding:0 24px}
main#auth-root .card{background:transparent;border:0;border-top:1px solid var(--isa-ink);border-radius:0;padding:28px 0 0;margin:0}
main#auth-root h1{font-family:var(--isa-font-display);font-weight:500;font-size:2.25rem;line-height:1.15;letter-spacing:-.02em;color:var(--isa-ink);margin:0 0 12px}
main#auth-root h2{font-family:var(--isa-font-display);font-weight:500;font-size:1.375rem;line-height:1.3;letter-spacing:-.01em;color:var(--isa-ink);margin:36px 0 16px;padding-top:24px;border-top:1px solid var(--isa-line)}
main#auth-root .card > p:first-of-type{font-size:.9375rem;line-height:1.7;color:var(--isa-muted);margin:0 0 24px;max-width:36em}
main#auth-root .notice{background:transparent;border:0;border-left:2px solid var(--isa-secondary);padding:4px 0 4px 14px;margin:0 0 28px;font-size:.875rem;line-height:1.6;color:var(--isa-muted)}
main#auth-root label{font-size:.9375rem;font-weight:600;margin:0 0 8px}
main#auth-root .field{margin-bottom:22px}
main#auth-root :is(input:not([type=checkbox]):not([type=radio]), select, textarea){min-height:48px;border:1px solid #7A838A;border-radius:2px;padding:12px 14px;background:#fff;color:var(--isa-ink)}
main#auth-root textarea{min-height:96px}
main#auth-root :is(input:not([type=checkbox]):not([type=radio]), select, textarea):focus{outline:2px solid var(--isa-ink);outline-offset:1px;border-color:var(--isa-ink)}
main#auth-root [aria-invalid=true]{outline:0;border-color:var(--isa-danger);box-shadow:inset 0 0 0 1px var(--isa-danger)}
main#auth-root .auth-field-error{color:var(--isa-danger);font-size:.875rem;margin:6px 0 0}
main#auth-root .hint{font-size:.875rem;line-height:1.6;color:var(--isa-muted);margin:8px 0 0}
main#auth-root details{margin:0 0 22px;font-size:.875rem;color:var(--isa-muted)}
main#auth-root summary{cursor:pointer;color:var(--isa-ink);font-weight:500;min-height:44px;display:flex;align-items:center;gap:8px;list-style:none}
main#auth-root summary::-webkit-details-marker{display:none}
main#auth-root summary::before{content:"▸";font-size:.75rem;color:var(--isa-muted)}
main#auth-root details[open] summary::before{content:"▾"}
/* 동의 항목: 상자 대신 선으로 나눈 줄 */
main#auth-root .check{gap:12px;margin:0;padding:12px 2px;border-bottom:1px solid var(--isa-line);font-size:.9375rem;line-height:1.6;font-weight:400}
main#auth-root .check:not(.check + .check){border-top:1px solid var(--isa-line)}
main#auth-root .check input{width:18px;height:18px;min-height:18px;margin-top:4px;accent-color:var(--isa-ink)}
/* 행동. 실제 구조: form 안 끝에 button.primary → form 밖 div.actions(보조 버튼) → 소셜 → button#auth-restart */
main#auth-root .primary{display:block;width:100%;margin:8px 0 0;min-height:52px;border-radius:2px;border-color:var(--isa-primary);background:var(--isa-primary);color:var(--isa-on-primary);font-weight:600;font-size:1rem;text-decoration:none}
main#auth-root .primary:not(:disabled):hover{text-decoration:underline;text-underline-offset:3px}
main#auth-root .actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px 24px;margin:16px 0 0}
main#auth-root .actions button,main#auth-root .card > #auth-restart{margin:0;min-height:44px;padding:8px 0;border:0;border-radius:0;background:transparent;color:var(--isa-ink);font-weight:500;font-size:.9375rem;text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px;text-align:left}
main#auth-root .actions button:hover,main#auth-root .card > #auth-restart:hover{color:var(--isa-primary)}
main#auth-root .card > #auth-restart{display:block;margin-top:28px}
main#auth-root .actions:empty{display:none}
main#auth-root button:disabled{background:var(--isa-surface-2);color:var(--isa-muted);border-color:var(--isa-line);text-decoration:none}
main#auth-root button:focus-visible{outline:3px solid var(--isa-focus);outline-offset:3px}
main#auth-root #auth-status{min-height:2.4em;margin:18px 0 0;font-size:.9375rem;line-height:1.6;color:var(--isa-muted)}
main#auth-root #auth-status[role=alert],main#auth-root .error{color:var(--isa-danger)}
/* 소셜 로그인 묶음 */
main#auth-root .auth-social{margin-top:36px;padding-top:24px;border-top:1px solid var(--isa-ink)}
main#auth-root .auth-social h2{margin:0 0 14px;padding:0;border:0;font-size:1.125rem}
main#auth-root .auth-social-buttons{gap:8px;margin-top:12px}
main#auth-root .auth-social-provider{min-height:48px;border:1px solid var(--isa-ink);border-radius:2px;background:transparent;color:var(--isa-ink);font-weight:600}
main#auth-root .auth-social-provider:hover{background:var(--isa-ink);color:#fff}
@media (max-width: 760px){
  body:has(#auth-root) header{padding:10px 24px;min-height:0;flex-wrap:wrap;gap:8px 16px}
  body:has(#auth-root) header label{margin-left:auto}
  body:has(#auth-root) main#auth-root{margin:24px auto 64px;padding:0 24px}
  main#auth-root .card{padding-top:22px}
  main#auth-root h1{font-size:1.875rem}
  main#auth-root h2{margin-top:28px}
  main#auth-root .actions{gap:8px 20px;margin-top:24px}
}

/* ===== 운영진 편집기 상단 (#forms-v1 workspace) · D02 v2 (2026-10-22). 사양 docs/design/EDITOR_HEADER_UI_20261022.md
   1부: 지금 DOM(workspace.js drawEditor, root()가 section.isa-forms로 감쌈)에 바로 적용되는 정리.
   2부: system이 사양대로 DOM을 바꾸면 쓰이는 새 구조 클래스(.forms-editor-head). 접수 제어·위험 버튼은 운영 도구 내비가 계속 소유한다.
   forms.css보다 뒤에 이기도록 #app 접두사를 쓴다. 운영 화면 토큰은 테마 A 그대로(회색 바탕, 흰 면). ===== */
/* --- 공통: 저장 막대, 위험 버튼, 탭, 공동 작업 상자 --- */
#app .isa-forms > .isa-form-toolbar:first-child,#app .forms-editor-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 16px;padding:10px 14px;background:var(--isa-surface);border:1px solid var(--isa-line);border-radius:0}
#app .isa-forms > .isa-form-toolbar:first-child button,#app .forms-editor-bar button{flex:0 0 auto;min-height:44px;padding:6px 12px;font-size:.875rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app .isa-forms > .isa-form-toolbar:first-child [data-back],#app .forms-editor-bar [data-back]{border:0;background:transparent;color:var(--isa-muted);padding-left:0}
#app .isa-forms > .isa-form-toolbar:first-child [data-back]::before,#app .forms-editor-bar [data-back]::before{content:"← "}
#app .isa-forms > .isa-form-toolbar:first-child [data-save-status],#app .forms-editor-bar [data-save-status]{margin-left:auto;font-size:.8125rem;font-weight:600;color:var(--isa-muted)}
#app .isa-forms > .isa-form-toolbar:first-child [data-save],#app .forms-editor-bar [data-save]{background:var(--isa-primary);border-color:var(--isa-primary);color:var(--isa-on-primary)}
#app .isa-forms button:disabled{opacity:1;background:var(--isa-surface-2);border-color:var(--isa-line);color:var(--isa-muted)}
/* 위험 버튼(모집 마감·게시 취소·일괄 취소)은 어디에 그려지든 — 지금은 운영 도구 내비 "접수·참가자" 슬롯 — 빨간 테두리 */
#app .isa-forms button:is([data-danger],[data-control=close],[data-control=unpublish],[data-batch-cancellation-open]){border-color:var(--isa-danger);color:var(--isa-danger);background:transparent}
@media (hover:hover){#app .isa-forms button:is([data-danger],[data-control=close],[data-control=unpublish],[data-batch-cancellation-open]):not(:disabled):hover{background:var(--isa-danger);color:#fff}}
#app .isa-forms button:is([data-danger],[data-control=close],[data-control=unpublish],[data-batch-cancellation-open]):disabled{border-color:var(--isa-line);color:var(--isa-muted);background:var(--isa-surface-2)}
/* forms.css의 `.isa-forms button:hover{background:#eef2ff}`가 주 버튼(.forms-primary)의 바탕만 바꿔 흰 글자가 안 보이던 문제: 주 버튼은 hover에서 색을 유지하고 밑줄로만 반응 */
#app .isa-forms .forms-primary{background:var(--isa-primary);border-color:var(--isa-primary);color:var(--isa-on-primary)}
#app .isa-forms .forms-primary:not(:disabled):hover{background:var(--isa-primary);color:var(--isa-on-primary);text-decoration:underline;text-underline-offset:3px}
#app .isa-forms .forms-primary:disabled{background:var(--isa-surface-2);border-color:var(--isa-line);color:var(--isa-muted);opacity:1}
/* 소유자 "공개 프로그램 안내" 패널(DR-12 뒤 DOM): 섹션 저장은 정원 설정 저장과 같은 테두리 버튼, 언어별 안쪽 fieldset은 상자 속 상자 대신 윗선으로 구분 */
#app [data-public-program-settings] [data-program-save]{background:transparent;border-color:var(--isa-ink);color:var(--isa-ink)}
@media (hover:hover){#app [data-public-program-settings] [data-program-save]:not(:disabled):hover{background:var(--isa-ink);color:#fff;text-decoration:none}} /* 터치에서 :hover가 남아 검정 상자로 보이지 않게(독립 검수 R4) */
#app .isa-forms :is(input[type=checkbox],input[type=radio]){accent-color:var(--isa-primary)} /* 편집기 체크박스·라디오를 브라우저 기본 파랑 대신 주색으로(R3) */
#app [data-public-program-settings] fieldset fieldset{border:0;border-top:1px solid var(--isa-line);border-radius:0;background:transparent;padding:14px 0 0;margin:16px 0 0}
#app [data-public-program-settings] fieldset fieldset > legend{padding:0 8px 0 0;font-weight:600}
/* 사이트 헤더용 전역 header 규칙(바탕·아래선·좌우 여백 max(24px,(100vw-1160px)/2))이 앱 안의 component <header>(보관 자료 패널 등)에도 걸려
   패널 머리글이 1440에서 140px 들여써졌다. 앱 안 header는 상자 속성만 되돌린다(display·정렬은 각 component 규칙 그대로). */
#app header{padding:0;border:0;background:transparent;min-height:0}
/* ===== 운영진 보관 자료 패널(.isa-evidence, usability 작성 archive-evidence.css) 테마 A 정합 · DR-14 =====
   독자 팔레트(#176a6a·#165f64·#91a5b7·#cbd5e1·#1e65aa·11.2px 모서리)를 토큰으로: 검정 제목, 주색 테두리 버튼 + 주 버튼 하나(자료 사본 만들기),
   8px 모서리, 가는 선, 섹션 선택은 편집기 탭과 같은 밑줄 탭. 경고(노랑)·위험(빨강) 상태 상자는 의미색이라 유지하되 모서리만 맞춘다. */
#app .isa-evidence{--evidence-border:var(--isa-line);--evidence-muted:var(--isa-muted);color:var(--isa-ink)}
#app .isa-evidence-header{align-items:flex-start;gap:16px;margin:0 0 6px}
#app .isa-evidence-header h2{font-size:1.5rem;line-height:1.3;font-weight:700;color:var(--isa-ink);margin:0 0 8px}
#app .isa-evidence h3{font-size:1.125rem;color:var(--isa-ink)}
#app .isa-evidence h4{font-size:1rem;color:var(--isa-ink)}
#app .isa-evidence p{color:var(--isa-muted)}
#app .isa-evidence button{border:1px solid var(--isa-primary);border-radius:var(--isa-radius-sm);background:var(--isa-surface);color:var(--isa-primary);font-weight:600}
#app .isa-evidence button:hover:not(:disabled){background:var(--isa-primary);border-color:var(--isa-primary);color:var(--isa-on-primary)}
#app .isa-evidence button:disabled{background:var(--isa-surface-2);border-color:var(--isa-line);color:var(--isa-muted)}
#app .isa-evidence button[data-evidence-action=capture]{background:var(--isa-primary);border-color:var(--isa-primary);color:var(--isa-on-primary)}
#app .isa-evidence button[data-evidence-action=capture]:disabled{background:var(--isa-surface-2);border-color:var(--isa-line);color:var(--isa-muted)}
#app .isa-evidence :focus-visible{outline:3px solid var(--isa-focus);outline-offset:3px}
#app .isa-evidence input{border:1px solid var(--isa-field-border);border-radius:var(--isa-radius-sm);color:var(--isa-ink)}
#app .isa-evidence-status{border-left:3px solid var(--isa-line-strong);border-radius:0;background:var(--isa-surface-2);color:var(--isa-ink)}
#app .isa-evidence-status[data-state=uncertain],#app .isa-evidence-status[data-state=interrupted],#app .isa-evidence-status[data-state=committedUnreadable],#app .isa-evidence-status[data-state=sourceChanged],#app .isa-evidence-status[data-state=commitUnknown],#app .isa-evidence-status[data-state=downloadTooLarge]{border-left-color:var(--isa-accent);background:#FFF8E1;color:var(--isa-ink)}
#app .isa-evidence-status[data-state=denied],#app .isa-evidence-status[data-state=invalid],#app .isa-evidence-status[data-state=corrupt],#app .isa-evidence-status[data-state=failed]{border-left-color:var(--isa-danger);background:#FBEEF0;color:var(--isa-ink)}
#app .isa-evidence-boundary,#app .isa-evidence-warning,#app .isa-evidence-truncated{border-radius:var(--isa-radius-sm);color:var(--isa-ink)}
#app .isa-evidence-steps{color:var(--isa-muted)}
#app .isa-evidence-card,#app .isa-evidence-lookup{border:1px solid var(--isa-line);border-radius:var(--isa-radius-sm)}
#app .isa-evidence-lookup{background:var(--isa-surface-2)}
#app .isa-evidence-captured-state{background:var(--isa-surface-2);border-left:3px solid var(--isa-line-strong)}
#app .isa-evidence dt{color:var(--isa-muted);font-weight:600}
#app .isa-evidence dd{color:var(--isa-ink)}
#app .isa-evidence-section{border-top-color:var(--isa-line)}
#app .isa-evidence-section-picker{gap:0 22px;margin:18px 0;border-bottom:1px solid var(--isa-line)}
#app .isa-evidence-section-picker button{flex:0 0 auto;min-height:44px;padding:10px 0 8px;border:0;border-radius:0;background:transparent;color:var(--isa-muted);font-weight:600;font-size:.9375rem}
#app .isa-evidence-section-picker button:hover:not(:disabled){background:transparent;color:var(--isa-ink)}
#app .isa-evidence-section-picker button[aria-pressed=true]{background:transparent;border:0;color:var(--isa-ink);font-weight:600;box-shadow:inset 0 -2px var(--isa-primary)}
#app .isa-evidence-page-actions{border-radius:var(--isa-radius-sm);border-color:var(--isa-line);box-shadow:none}
#app .isa-evidence-answers>div,#app .isa-evidence-response [data-evidence-provenance]{border-top-color:var(--isa-line)}
#app .isa-evidence pre,#app .isa-evidence-hash{font-variant-numeric:tabular-nums}
/* 독립 검수 반영: forms.css의 `.isa-forms dl{grid 1fr/2fr}`이 패널의 dl에 새어 답변 목록이 두 열로 흩어지던 문제는 DR-14 뒤 usability가 archive-evidence.css에서 패널 dl 명시도로 해결(답변 한 줄·메타데이터 2열). 디자인은 답변 행 간격과 목록 카드 3열만 둔다 */
#app .isa-evidence-answers>div{padding:12px 0 4px}
@media(min-width:700px){#app .isa-evidence-items .isa-evidence-card>.isa-evidence-metadata{grid-template-columns:repeat(3,minmax(0,1fr))}}
/* 보조 버튼 hover는 채우지 않고 옅게(터치에서 hover가 남아 두 번째 주 버튼처럼 보이던 문제), 주 버튼만 더 진하게 */
#app .isa-evidence button:hover:not(:disabled){background:var(--isa-surface);border-color:var(--isa-primary);color:var(--isa-primary)}
@media(hover:hover){#app .isa-evidence button:hover:not(:disabled){background:rgba(12,87,115,.07)}#app .isa-evidence button[data-evidence-action=capture]:hover:not(:disabled){background:#0A4A62;border-color:#0A4A62;color:var(--isa-on-primary)}}
#app .isa-evidence-header>button{border-color:var(--isa-line);color:var(--isa-muted)} /* 닫기는 조용한 3차 버튼 */
/* 페이지 이동 막대: 데스크톱은 오른쪽 정렬·고정 폭, 비활성은 면 없이 */
@media(min-width:700px){#app .isa-evidence-page-actions{grid-template-columns:repeat(3,auto);justify-content:end;gap:8px;padding:6px 8px}#app .isa-evidence-page-actions>button{min-width:112px}#app .isa-evidence-page-actions>button:only-child,#app .isa-evidence-page-actions>[data-evidence-action=retry]{grid-column:1/-1;justify-self:end}#app .isa-evidence-page-actions:has(>button:only-child){justify-content:start}#app .isa-evidence-page-actions>button:only-child{justify-self:start}} /* 버튼이 하나뿐일 때(불러오기, 첫 페이지 전 다시 시도)는 그 아래 안내문과 같은 왼쪽 축(독립 검수 B6; 트랙이 auto라 컨테이너 justify-content도 start여야 함). 페이지 버튼과 함께 있는 다시 시도는 오른쪽 줄 유지 */
#app .isa-evidence-page-actions button:disabled{background:transparent;border-color:var(--isa-line);color:var(--isa-muted)}
/* 고정 페이지 막대·편집기 머리가 초점 요소를 가리지 않게 */
#app .isa-evidence [data-evidence-focus]{scroll-margin-top:calc(var(--evidence-editor-head-h,0px) + 4.5rem)}
/* DR-14 반영 뒤(d291c46): "선택됨"은 usability가 버튼 대신 span(aria-current)으로 바꿔 글자 규칙이 필요 없다. 같은 신청의 다음 답변 버전 카드는 앞 카드에 붙여 점선 한 줄로 나눈다. 점선은 답변 행 구분선(#D8E0E5)보다 진한 중간 회색(흰 바탕 3:1)으로 버전 경계를 구분(독립 검수 B1). 붙이기·모서리는 :has를 지원할 때만, 미지원 브라우저는 usability의 점선 윗선·살짝 당김만 남는다(B2) */
#app .isa-evidence [data-evidence-response-group=continuation]{border-top:1px dashed rgba(64,64,64,.6)}
@supports selector(:has(+ *)){#app .isa-evidence .isa-evidence-card:has(+ [data-evidence-response-group=continuation]){margin-bottom:0;border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}#app .isa-evidence [data-evidence-response-group=continuation]{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}}
#app .isa-evidence button{text-wrap:balance} /* 390에서 "받기" 한 단어만 둘째 줄로 떨어지지 않게(B5) */
@media(max-width:600px){#app .isa-evidence-header h2{font-size:1.25rem}#app .isa-evidence-section-picker{display:grid;grid-template-columns:1fr 1fr;gap:0 16px;overflow:visible;margin-right:0;padding-right:0}#app .isa-evidence-section-picker button{white-space:normal;text-align:left;line-height:1.35}#app .isa-evidence dl.isa-evidence-metadata{grid-template-columns:minmax(0,1fr)}}
#app .isa-form-tabs{gap:0 22px;margin:0 0 18px;border-bottom:1px solid var(--isa-line);overflow:visible}
#app .isa-form-tabs button{flex:0 0 auto;min-height:44px;padding:10px 0 8px;border:0;border-radius:0;background:transparent;color:var(--isa-muted);font-weight:600;font-size:.9375rem;box-shadow:none}
#app .isa-form-tabs button[aria-pressed=true]{background:transparent;color:var(--isa-ink);box-shadow:inset 0 -2px var(--isa-primary)}
#app .forms-watch{background:var(--isa-surface);border:1px solid var(--isa-line);border-radius:0;padding:10px 14px;margin:0 0 16px;font-size:.8125rem;color:var(--isa-muted);display:flex;flex-wrap:wrap;align-items:center;gap:4px 14px}
#app .forms-watch::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--isa-secondary);flex:0 0 auto}
#app .forms-watch:is([data-watch-state=changed],[data-watch-state=conflict],[data-watch-state=denied],[data-watch-state=offline])::before{background:var(--isa-danger)}
#app .forms-watch strong{color:var(--isa-ink);font-size:.8125rem}
#app .forms-watch p{margin:0;color:var(--isa-muted)}
#app .forms-watch [data-watch-help]{flex:1 0 100%;font-size:.75rem;color:var(--isa-muted)}
#app .forms-watch [data-watch-help]:empty,#app .forms-watch [data-watch-people]:empty{display:none}
#app .forms-watch button{margin:0;min-height:32px;padding:4px 10px;font-size:.8125rem;font-weight:600;border-radius:var(--isa-radius-sm)}
/* --- 1부. 현재 DOM --- */
#app .isa-forms:has(> [data-editor-body]) > h1{font-size:1.5rem;margin:0 0 4px}
#app .isa-forms:has(> [data-editor-body]) > h1 ~ p:not([data-publication]){font-size:.8125rem;color:var(--isa-muted);margin:0 0 4px}
#app .isa-forms:has(> [data-editor-body]) > p[data-form-archived]{color:var(--isa-ink);font-weight:600;border-left:2px solid var(--isa-line-strong);padding-left:10px}
#app .isa-forms > h1 ~ p + .isa-form-tabs{margin-top:14px}
#app [data-editor-body] + .isa-form-toolbar{margin:28px 0 8px;padding:14px;gap:8px;background:var(--isa-surface);border:1px solid var(--isa-line);border-radius:0}
#app [data-editor-body] + .isa-form-toolbar button{flex:0 0 auto;min-height:44px;padding:8px 14px;font-size:.875rem;border-radius:var(--isa-radius-sm)}
#app:has([data-share] > p) [data-editor-body] + .isa-form-toolbar [data-publish]:not(:disabled){background:var(--isa-primary);border-color:var(--isa-primary);color:var(--isa-on-primary)} /* 미게시 폼: 게시가 다음 할 일 */
#app p[data-publication]{margin:0 0 12px;font-size:.875rem;font-weight:600;color:var(--isa-ink)}
#app p[data-publication]::before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--isa-secondary);margin-right:8px;vertical-align:1px}
#app [data-share]{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:14px;background:var(--isa-surface);border:1px solid var(--isa-line);margin:0 0 16px}
#app [data-share] > p{flex:1 0 100%;margin:0;color:var(--isa-muted);font-size:.875rem}
#app [data-share] > button{min-height:44px;padding:6px 12px;font-size:.8125rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app [data-share]:not(:has(*)){display:contents} /* 비면 상자만 없앤다(display:none이면 운영 도구 내비가 권한 숨김으로 해석해 도구 그룹까지 숨김 — DR-09) */
/* --- 2부. 사양 DOM(.forms-editor-head) --- */
#app .forms-editor-head{display:contents} /* 전역 header{display:flex} 되돌림 + sticky 래퍼의 containing block을 section.isa-forms로(DR-09). 간격은 자식이 진다 */
#app .forms-editor-head > [data-comparison]{margin-bottom:18px}
#app .forms-editor-sticky{background:var(--isa-bg);padding-bottom:12px;border-bottom:1px solid var(--isa-line)}
@media (min-width:1000px) and (min-height:700px){
  #app .forms-editor-sticky{position:sticky;top:0;z-index:5}
  html:has(.forms-editor-sticky){scroll-padding-top:calc(var(--editor-head-h, 18rem) + 8px)} /* v7.2: 단계 표시가 들어온 뒤 실측 약 270px. --editor-head-h는 Codex가 아직 넣지 않아(DR-18) 기본값을 실측보다 크게 */
}
#app .forms-editor-bar{margin-bottom:0;padding:10px 0;background:transparent;border:0}
#app .forms-editor-title{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 16px;padding:4px 0 0}
#app .forms-editor-kicker{flex:1 0 100%;margin:0;font-size:.8125rem;font-weight:600;color:var(--isa-muted)}
#app .forms-editor-title h1{font-size:1.625rem;line-height:1.25;letter-spacing:-.02em;margin:0;color:var(--isa-ink);overflow-wrap:anywhere;max-width:40ch}
#app .forms-editor-status{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin:0;font-size:.875rem;color:var(--isa-muted)}
#app .forms-status-badge{display:inline-flex;align-items:center;gap:7px;margin:0;font-weight:600;color:var(--isa-ink)}
#app .forms-status-badge::before{content:"";width:8px;height:8px;border-radius:50%;margin:0;background:var(--isa-line-strong)}
#app .forms-status-badge[data-status=accepting]::before{background:var(--isa-secondary)}
#app .forms-status-badge[data-status=upcoming]::before{background:transparent;border:1.5px solid var(--isa-ink)}
#app .forms-status-badge:is([data-status=closing],[data-status=limit])::before{background:var(--isa-accent)}
#app .forms-status-badge:is([data-status=draft],[data-status=stopped],[data-status=paused],[data-status=closed],[data-status=archived],[data-status=pending]){color:var(--isa-muted)}
#app .forms-status-badge:is([data-status=draft],[data-status=stopped],[data-status=paused],[data-status=closed],[data-status=archived],[data-status=pending])::before{background:var(--isa-line)}
#app .forms-editor-head p[data-form-archived]{margin:8px 0 0;font-size:.875rem;font-weight:600;border-left:2px solid var(--isa-line-strong);padding-left:10px}
#app .forms-editor-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin-top:14px}
/* A11Y A-5: 편집기 머리 버튼(폼 목록·저장·되돌리기·다시 실행·확인하고 게시·미리보기·링크 복사)을 데스크톱에서도 팀 기준 44px로(760px 이하 규칙과 같은 값) */
#app .forms-editor-actions button,#app .forms-editor-actions a{min-height:44px;padding:8px 14px;font-size:.875rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app .forms-editor-actions [data-next-step]{background:var(--isa-primary);border-color:var(--isa-primary);color:var(--isa-on-primary);padding-inline:18px}
#app .forms-editor-actions [data-share-link]{display:block;flex:1 1 220px;min-width:0;max-width:440px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:1px solid var(--isa-line);background:var(--isa-surface);color:var(--isa-ink);text-decoration:none;font-weight:500;line-height:22px}
#app .forms-control-hint{display:block;margin-top:2px;font-size:.75rem;font-weight:400;color:var(--isa-muted)} /* V18: [접수 마감] 아래 "필요하면 다시 열 수 있습니다" */
#app .forms-editor-head [data-message]{margin:10px 0 0;font-size:.875rem}
#app .forms-editor-head [data-message]:empty{display:none}
#app .forms-editor-head .forms-watch{margin-top:12px}
#app .forms-editor-guide{margin:0 0 14px;font-size:.8125rem;color:var(--isa-muted);line-height:1.6}
@media (max-width:760px){
  #app .isa-forms > .isa-form-toolbar:first-child [data-save-status],#app .forms-editor-bar [data-save-status]{flex:1 0 100%;margin-left:0}
  #app .isa-forms > .isa-form-toolbar:first-child button,#app .forms-editor-bar button,#app .forms-watch button,#app [data-share] > button,#app [data-editor-body] + .isa-form-toolbar button,#app .forms-editor-actions button,#app .forms-editor-actions a{min-height:44px}
  #app .forms-editor-title h1{font-size:1.375rem}
  #app .forms-editor-actions [data-next-step]{flex:1 0 100%}
  #app .forms-editor-actions [data-share-link]{flex-basis:100%;max-width:none}
}

/* ===== 운영진 목록·상세·통계 (#admin, #detail, #stats/*) · 2026-10-22. 마크업은 app.js(system) 그대로, 편집기 상단(D02)과 같은 운영 화면 언어:
   검정 제목, 흰 면 + 1px 선, 알약 없는 상태 글자, 표 숫자는 tabular, 주 버튼은 화면당 하나. 테마 A 토큰. ===== */
/* 공통 머리(제목 + 행동 버튼): #admin·#stats·#detail */
#app:is(:has(> #rows), :has(> #stats-filters)) > .intro{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:8px 24px;margin:0 0 16px;padding-bottom:16px;border-bottom:1px solid var(--isa-line)}
#app:is(:has(> #rows), :has(> #stats-filters)) > .intro h1{font-size:1.5rem;line-height:1.25;letter-spacing:-.02em;color:var(--isa-ink);margin:0;flex:1 1 320px}
#app:is(:has(> #rows), :has(> #stats-filters)) > .intro p{flex:1 0 100%;margin:0;font-size:.875rem;color:var(--isa-muted)}
#app:is(:has(> #rows), :has(> #stats-filters)) > .intro + .actions,#app:has(> #rows) > .actions{gap:8px;margin:0 0 16px}
#app:is(:has(> #rows), :has(> #stats-filters), :has(> .detail-grid)) button:not(.primary){min-height:40px;padding:8px 14px;font-size:.875rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app:is(:has(> #rows), :has(> #stats-filters), :has(> .detail-grid)) .primary{min-height:44px;padding:10px 18px;font-size:.9375rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app:is(:has(> #rows), :has(> #stats-filters), :has(> .detail-grid)) button:disabled{opacity:1}
#app:is(:has(> #rows), :has(> #stats-filters), :has(> .detail-grid)) :is(input, select, textarea){min-height:40px;padding:8px 12px;border-radius:var(--isa-radius-sm);border-color:var(--isa-line-strong)}
#app:is(:has(> #rows), :has(> #stats-filters), :has(> .detail-grid)) label{font-size:.8125rem;font-weight:600;color:var(--isa-muted);margin-bottom:6px}
#app:is(:has(> #rows), :has(> #stats-filters), :has(> .detail-grid)) .hint{font-size:.8125rem;color:var(--isa-muted)}
/* 신청자 관리: 동기화 줄, 필터 면, 건수 줄, 행 */
#app:has(> #rows) > #sync-message{margin:0 0 12px;padding:0;border:0;font-size:.8125rem;color:var(--isa-muted)}
#app:has(> #rows) > .toolbar{margin:0 0 14px;padding:14px 16px;gap:10px 12px;background:var(--isa-surface);border:1px solid var(--isa-line);border-radius:0;align-items:end}
#app:has(> #rows) > .toolbar label{margin-bottom:6px}
#app:has(> #rows) > .toolbar #export{min-height:40px;padding:8px 16px;font-size:.875rem}
#app:has(> #rows) > p:has(#count){display:flex;align-items:center;gap:12px;margin:0 0 8px;font-size:.875rem;color:var(--isa-muted)}
#app:has(> #rows) #count{font-weight:600;color:var(--isa-ink)}
#app:has(> #rows) #clear{margin-left:auto;min-height:36px;padding:6px 10px;font-size:.8125rem}
#rows{border:1px solid var(--isa-line);background:var(--isa-surface)}
#rows .row{display:grid;grid-template-columns:1.1fr 1.4fr 1fr 160px;gap:16px;align-items:center;padding:14px 16px;border:0;border-bottom:1px solid var(--isa-line);background:transparent;color:var(--isa-ink);font-weight:400;text-align:left;width:100%;cursor:pointer}
#rows .row:last-child{border-bottom:0}
#rows .row:hover{background:var(--isa-surface-2)}
#rows .row:focus-visible{outline:3px solid var(--isa-focus);outline-offset:-3px}
#rows .row > span{min-width:0;overflow-wrap:anywhere}
#rows .row strong{display:block;font-size:.9375rem;font-weight:600;color:var(--isa-ink);line-height:1.4}
#rows .row small{display:block;font-size:.75rem;line-height:1.5;color:var(--isa-muted);margin-top:2px;font-variant-numeric:tabular-nums}
#rows .row .time{font-size:.875rem;font-variant-numeric:tabular-nums}
#rows .row .badge{display:block;width:auto;padding:0;border-radius:0;background:transparent;font-size:.875rem;font-weight:600;color:var(--isa-ink)}
#rows .row .badge::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--isa-line-strong);margin-right:8px;vertical-align:2px}
#rows .row .badge small{font-weight:400}
#rows .empty{padding:40px 20px;border:0;background:transparent;text-align:left}
#rows .empty h2{font-size:1rem;color:var(--isa-ink);margin:0 0 6px}
#rows .empty p{margin:0;font-size:.875rem;color:var(--isa-muted)}
/* 상세: 돌아가기 링크(머리 안 첫 요소), 정보 표, 검토 폼, 변경 이력 */
#app:has(> .detail-grid) > .intro{display:block}
#app:has(> .detail-grid) > .intro a:first-child,#app:has(> .detail-grid) > a:first-child{display:inline-block;margin:0 0 10px;font-size:.875rem;font-weight:600;color:var(--isa-muted);text-decoration:none}
#app:has(> .detail-grid) > .intro a:first-child::before,#app:has(> .detail-grid) > a:first-child::before{content:"← "}
#app:has(> .detail-grid) > .intro a:first-child:hover{color:var(--isa-primary);text-decoration:underline}
#app:has(> .detail-grid) > .intro h1,#app:has(> .detail-grid) > h1{font-size:1.5rem;line-height:1.25;letter-spacing:-.02em;color:var(--isa-ink);margin:0 0 6px}
#app:has(> .detail-grid) > .intro p{font-size:.875rem;color:var(--isa-muted);font-variant-numeric:tabular-nums;margin:0}
#app > .detail-grid{gap:20px}
#app:has(> .detail-grid) .card{padding:22px 24px;border:1px solid var(--isa-line);border-radius:0;background:var(--isa-surface);margin:0 0 20px}
#app:has(> .detail-grid) .card h2{font-size:1.0625rem;font-weight:700;color:var(--isa-ink);margin:0 0 14px;padding-bottom:10px;border-bottom:1px solid var(--isa-line)}
#app:has(> .detail-grid) .facts{grid-template-columns:132px minmax(0,1fr);gap:0 14px;font-size:.9375rem}
#app:has(> .detail-grid) .facts dt,#app:has(> .detail-grid) .facts dd{padding:8px 0;border-bottom:1px solid var(--isa-line);margin:0}
#app:has(> .detail-grid) .facts dt{font-size:.8125rem;color:var(--isa-muted);line-height:1.6}
#app:has(> .detail-grid) .facts dt:nth-last-of-type(1),#app:has(> .detail-grid) .facts dd:nth-last-of-type(1){border-bottom:0}
#app:has(> .detail-grid) .facts dd{color:var(--isa-ink);font-variant-numeric:tabular-nums}
#app:has(> .detail-grid) .field{margin-bottom:16px}
#app:has(> .detail-grid) textarea{min-height:112px}
#app:has(> .detail-grid) .history{margin:0;padding:0}
#app:has(> .detail-grid) .history li{position:relative;margin:0;padding:0 0 18px 18px;border-left:1px solid var(--isa-line);font-size:.9375rem;line-height:1.6}
#app:has(> .detail-grid) .history li::before{content:"";position:absolute;left:-4px;top:7px;width:7px;height:7px;border-radius:50%;background:var(--isa-secondary)}
#app:has(> .detail-grid) .history li:last-child{padding-bottom:0}
#app:has(> .detail-grid) .history small{font-size:.75rem;color:var(--isa-muted);margin-bottom:4px;font-variant-numeric:tabular-nums}
/* 통계: 필터 면, 기준 문구, 숫자 타일, 표 */
#app:has(> #stats-filters) > #stats-filters{padding:16px 18px;border:1px solid var(--isa-line);border-radius:0;background:var(--isa-surface);margin:0 0 14px}
#app:has(> #stats-filters) > #stats-filters .grid{gap:0 16px}
#app:has(> #stats-filters) > #stats-filters .check{margin:8px 0;font-size:.875rem;gap:8px}
#app:has(> #stats-filters) > #stats-filters .check input{width:16px;min-height:16px;margin-top:3px;accent-color:var(--isa-ink)}
#app:has(> #stats-filters) > #stats-filters .primary{margin-top:6px}
#app:has(> #stats-filters) > #stats-filters ~ p{margin:0 0 4px;font-size:.8125rem;color:var(--isa-muted);font-variant-numeric:tabular-nums}
#app:has(> #stats-filters) > .notice{margin:12px 0 16px;padding:10px 14px;font-size:.8125rem}
#app:has(> #stats-filters) > .stats{display:grid;grid-template-columns:repeat(auto-fill, minmax(156px, 1fr));gap:10px;margin:0 0 20px}
#app:has(> #stats-filters) .stat{padding:14px 16px;border:1px solid var(--isa-line);border-radius:0;background:var(--isa-surface)}
#app:has(> #stats-filters) .stat span{display:block;font-size:.75rem;font-weight:600;color:var(--isa-muted);letter-spacing:.01em}
#app:has(> #stats-filters) .stat strong{display:block;margin-top:4px;font-size:1.75rem;line-height:1.1;letter-spacing:-.02em;color:var(--isa-ink);font-variant-numeric:tabular-nums}
#app:has(> #stats-filters) > .card{padding:18px 20px;border:1px solid var(--isa-line);border-radius:0;background:var(--isa-surface);margin:0 0 14px}
#app:has(> #stats-filters) > .card h2{font-size:1rem;font-weight:700;color:var(--isa-ink);margin:0 0 10px}
#app:has(> #stats-filters) > .card > p{margin:0 0 10px;font-size:.8125rem;color:var(--isa-muted)}
#app:has(> #stats-filters) table{font-size:.875rem}
#app:has(> #stats-filters) th,#app:has(> #stats-filters) td{padding:8px 10px 8px 0;border-bottom:1px solid var(--isa-line);vertical-align:top}
#app:has(> #stats-filters) thead th{font-size:.75rem;font-weight:600;color:var(--isa-muted);border-bottom-color:var(--isa-ink)}
#app:has(> #stats-filters) tbody th{font-weight:500;color:var(--isa-ink)}
#app:has(> #stats-filters) td{color:var(--isa-ink);font-variant-numeric:tabular-nums}
#app:has(> #stats-filters) tbody tr:last-child :is(th, td){border-bottom:0}
@media (max-width:1000px){
  #rows .row{grid-template-columns:1.1fr 1.4fr 140px}
  #rows .row .time{display:none}
}
@media (max-width:760px){
  #app:is(:has(> #rows), :has(> #stats-filters)) > .intro h1{font-size:1.375rem}
  #app:is(:has(> #rows), :has(> #stats-filters), :has(> .detail-grid)) button:not(.primary){min-height:44px}
  #app:has(> #rows) > .toolbar{grid-template-columns:1fr 1fr;padding:12px}
  #app:has(> #rows) > .toolbar > :first-child{grid-column:1 / -1}
  #app:has(> #rows) > .toolbar #export{grid-column:1 / -1;min-height:44px}
  #rows .row{grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;padding:12px 14px}
  #rows .row .program{grid-column:1 / -1;order:3}
  #rows .row .badge{text-align:right}
  #rows .row .badge::before{display:none}
  #app:has(> .detail-grid) .card{padding:18px 16px}
  #app:has(> .detail-grid) .facts{grid-template-columns:104px minmax(0,1fr)}
  #app:has(> #stats-filters) > .stats{grid-template-columns:repeat(2, minmax(0,1fr))}
  #app:has(> #stats-filters) .stat strong{font-size:1.5rem}
  #app:has(> #stats-filters) th,#app:has(> #stats-filters) td{padding:7px 8px 7px 0}
}

/* ===== 내 프로필(#profile)·실운영 준비(#readiness)·모집폼 목록(#forms-v1 list) · 2026-10-22. 마크업 그대로(app.js·workspace.js·recruitment-list.js), 운영 화면 언어. ===== */
/* 내 프로필: 머리 + 흰 면 카드, 행동 줄, 계정 공유 코드 묶음 */
#app:has(> #profile-form) > .intro{display:block;margin:0 0 16px;padding-bottom:16px;border-bottom:1px solid var(--isa-line)}
#app:has(> #profile-form) > .intro h1{font-size:1.5rem;line-height:1.25;letter-spacing:-.02em;color:var(--isa-ink);margin:0 0 6px}
#app:has(> #profile-form) > .intro p{margin:0;font-size:.875rem;color:var(--isa-muted)}
#app > #profile-form{max-width:760px;padding:22px 24px;border:1px solid var(--isa-line);border-radius:0;background:var(--isa-surface);margin:0}
#app > #profile-form label{font-size:.8125rem;font-weight:600;color:var(--isa-muted);margin-bottom:6px}
#app > #profile-form .field{margin-bottom:16px}
#app > #profile-form :is(input, select, textarea){min-height:40px;padding:8px 12px;border-radius:var(--isa-radius-sm);border-color:var(--isa-line-strong)}
#app > #profile-form input[readonly]{background:var(--isa-surface-2);color:var(--isa-muted)}
#app > #profile-form .hint{font-size:.8125rem;color:var(--isa-muted);margin:6px 0}
#app > #profile-form .notice{margin:0 0 16px;padding:10px 14px;font-size:.8125rem}
#app > #profile-form details{margin:0 0 16px;font-size:.8125rem;color:var(--isa-muted)}
#app > #profile-form summary{cursor:pointer;min-height:40px;display:flex;align-items:center;gap:8px;color:var(--isa-ink);font-weight:500;list-style:none}
#app > #profile-form summary::-webkit-details-marker{display:none}
#app > #profile-form summary::before{content:"▸";font-size:.75rem;color:var(--isa-muted)}
#app > #profile-form details[open] summary::before{content:"▾"}
#app > #profile-form .actions{margin-top:20px;padding-top:16px;border-top:1px solid var(--isa-line);gap:8px 18px}
#app > #profile-form .actions .primary{min-height:44px;padding:10px 18px;font-size:.9375rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app > #profile-form .actions button:not(.primary){min-height:40px;padding:8px 14px;font-size:.875rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app > #profile-form .actions a{font-size:.875rem;font-weight:600;color:var(--isa-ink);text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px}
#app > #profile-form .actions a:hover{color:var(--isa-primary)}
#app > #profile-form .actions ~ div{margin-top:20px;padding-top:16px;border-top:1px solid var(--isa-line)}
#app > #profile-form .actions ~ div button{min-height:40px;padding:8px 14px;font-size:.875rem;font-weight:600;border-radius:var(--isa-radius-sm);margin-top:8px}
#app > #profile-form button:disabled{opacity:1}
/* 실운영 준비: 카드 안 h1 → 머리 모양, 항목은 선으로 나눈 점검 줄 */
#app > .card:has(> h1 + p + ul){padding:22px 24px;border:1px solid var(--isa-line);border-radius:0;background:var(--isa-surface);max-width:760px}
#app > .card:has(> h1 + p + ul) > h1{font-size:1.5rem;line-height:1.25;letter-spacing:-.02em;color:var(--isa-ink);margin:0 0 6px}
#app > .card:has(> h1 + p + ul) > p{margin:0 0 14px;font-size:.875rem;color:var(--isa-muted)}
#app > .card:has(> h1 + p + ul) > ul{list-style:none;margin:0;padding:0;border-top:1px solid var(--isa-ink)}
#app > .card:has(> h1 + p + ul) > ul > li{display:flex;align-items:flex-start;gap:12px;padding:12px 2px;border-bottom:1px solid var(--isa-line);font-size:.9375rem;line-height:1.6;color:var(--isa-ink)}
#app > .card:has(> h1 + p + ul) > ul > li::before{content:"";flex:0 0 auto;width:8px;height:8px;margin-top:9px;border:1.5px solid var(--isa-ink);box-sizing:border-box}
#app > .card:has(> h1 + p + ul) > ul ~ p{margin:14px 0 0;font-size:.8125rem;color:var(--isa-muted)}
/* 모집폼 목록: 제목, 한도, 필터 면, 줄 목록, 더 보기. 새 폼 만들기 면은 DR-17 뒤 section[data-create-host] 안 마법사가 되어 v7 블록이 맡는다 */
#app .isa-forms:has(> [data-forms-list]) > h1{font-size:1.5rem;line-height:1.25;letter-spacing:-.02em;color:var(--isa-ink);margin:0 0 16px;padding-bottom:16px;border-bottom:1px solid var(--isa-line)}
#app .isa-forms:has(> [data-forms-list]) > [data-message]{margin:0 0 8px;font-size:.8125rem}
#app .isa-forms:has(> [data-forms-list]) > [data-message]:empty{display:none}
#app .isa-forms:has(> [data-forms-list]) > [data-account-usage] details{margin:0 0 14px;font-size:.8125rem;color:var(--isa-muted)}
#app .isa-forms:has(> [data-forms-list]) > [data-account-usage] summary{cursor:pointer;min-height:36px;display:inline-flex;align-items:center;gap:6px;color:var(--isa-muted);font-weight:600;list-style:none}
#app .isa-forms:has(> [data-forms-list]) > [data-account-usage] summary::-webkit-details-marker{display:none}
#app .isa-forms:has(> [data-forms-list]) > [data-account-usage] summary::before{content:"▸"}
#app .isa-forms:has(> [data-forms-list]) > [data-account-usage] details[open] summary::before{content:"▾"}
#app .isa-forms:has(> [data-forms-list]) > [data-account-usage] button{min-height:36px;padding:6px 12px;font-size:.8125rem;font-weight:600;border-radius:var(--isa-radius-sm);margin:6px 0}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px 12px;align-items:end;margin:0 0 14px;padding:14px 16px;background:var(--isa-surface);border:1px solid var(--isa-line)}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] label{margin:0;font-size:.8125rem;font-weight:600;color:var(--isa-muted)}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] :is(input, select){margin-top:6px;min-height:40px;padding:8px 12px;border-radius:var(--isa-radius-sm);border-color:var(--isa-line-strong)}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] p{grid-column:1 / -1;margin:0;font-size:.75rem;color:var(--isa-muted)}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] [data-list-status]{font-size:.8125rem;color:var(--isa-ink)}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] [data-list-status][hidden]{display:none}
#app .isa-forms > [data-forms-list]{background:var(--isa-surface);border:1px solid var(--isa-line)}
#app .isa-forms > [data-forms-list] > .isa-form-card{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin:0;padding:14px 16px;border:0;border-bottom:1px solid var(--isa-line);border-radius:0;background:transparent}
#app .isa-forms > [data-forms-list] > .isa-form-card:last-child{border-bottom:0}
#app .isa-forms > [data-forms-list] > .isa-form-card > h3{flex:1 0 100%;margin:0;font-size:1rem;font-weight:600;line-height:1.4;color:var(--isa-ink);overflow-wrap:anywhere}
#app .isa-forms > [data-forms-list] > .isa-form-card > p{margin:0 auto 0 0;font-size:.8125rem;font-weight:600;color:var(--isa-ink)}
#app .isa-forms > [data-forms-list] > .isa-form-card > p::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--isa-line-strong);margin-right:8px;vertical-align:2px}
#app .isa-forms > [data-forms-list] > .isa-form-card > button{margin:0;min-height:36px;padding:6px 12px;font-size:.8125rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app .isa-forms > [data-forms-list] > .isa-form-card > [data-open]{border-color:var(--isa-ink);color:var(--isa-ink)}
#app .isa-forms > [data-forms-list] > .isa-form-card [data-form-lifecycle-action=delete]{border-color:var(--isa-danger);color:var(--isa-danger);background:transparent}
@media (hover:hover){#app .isa-forms > [data-forms-list] > .isa-form-card [data-form-lifecycle-action=delete]:not(:disabled):hover{background:var(--isa-danger);color:#fff}}
/* PR-B B2 (팀장 결정 1절 5): 행 '더 보기'(복제·보관하기·삭제함으로 이동). 계정 한도 접기와 같은 summary, 안의 버튼은 행 버튼과 같은 크기 */
#app .isa-forms > [data-forms-list] > .isa-form-card > [data-form-row-more]{margin:0;font-size:.8125rem}
#app .isa-forms > [data-forms-list] > .isa-form-card > [data-form-row-more][open]{flex-basis:100%}
#app .isa-forms > [data-forms-list] > .isa-form-card > [data-form-row-more] > summary{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 4px;cursor:pointer;list-style:none;color:var(--isa-muted);font-weight:600}
#app .isa-forms > [data-forms-list] > .isa-form-card > [data-form-row-more] > summary::-webkit-details-marker{display:none}
#app .isa-forms > [data-forms-list] > .isa-form-card > [data-form-row-more] > summary::before{content:"▸" / ""}
#app .isa-forms > [data-forms-list] > .isa-form-card > [data-form-row-more][open] > summary::before{content:"▾" / ""}
#app .isa-forms > [data-forms-list] > .isa-form-card > [data-form-row-more] > .forms-row-more{display:flex;flex-wrap:wrap;gap:8px 10px;padding:6px 0 0}
#app .isa-forms > [data-forms-list] > .isa-form-card > [data-form-row-more] > .forms-row-more > button{margin:0;min-height:36px;padding:6px 12px;font-size:.8125rem;font-weight:600;border-radius:var(--isa-radius-sm)}
/* PR-B B2: 목록 읽기 실패 때 상태 줄 바로 아래의 [다시 시도] 하나 */
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > [data-list-retry]{grid-column:1 / -1;justify-self:start;margin:0;min-height:36px;padding:6px 12px;font-size:.8125rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app .isa-forms > [data-forms-list] > p{margin:0;padding:28px 16px;font-size:.875rem;color:var(--isa-muted)}
#app .isa-forms:has(> [data-forms-list]) > [data-more]{margin-top:12px;min-height:40px;padding:8px 16px;font-size:.875rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app .isa-forms:has(> [data-forms-list]) > [data-form-lifecycle-recovery]{margin:0 0 12px;min-height:36px;font-size:.8125rem}
/* PR-B B4: 응답 상세 '더 보기'(정정·이력·숨기기·채점·인쇄). 폼 목록 행 '더 보기'와 같은 펼침 표시(▸/▾)를 쓰고, forms.css의 details 기본 여백을 덮어쓴다 */
#app .isa-forms [data-answer-detail] > [data-response-actions-more]{margin:12px 0 0}
#app .isa-forms [data-answer-detail] > [data-response-actions-more] > summary{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:0 4px;cursor:pointer;list-style:none;color:var(--isa-muted);font-weight:600}
#app .isa-forms [data-answer-detail] > [data-response-actions-more] > summary::-webkit-details-marker{display:none}
#app .isa-forms [data-answer-detail] > [data-response-actions-more] > summary::before{content:"▸" / ""}
#app .isa-forms [data-answer-detail] > [data-response-actions-more][open] > summary::before{content:"▾" / ""}
#app .isa-forms [data-answer-detail] > [data-response-actions-more][open] > button{margin:8px 8px 0 0}
@media (max-width:760px){
  #app > #profile-form{padding:18px 16px}
  #app > #profile-form .actions .primary{width:100%}
  #app > #profile-form .actions button:not(.primary),#app > #profile-form .actions ~ div button{min-height:44px}
  #app > .card:has(> h1 + p + ul){padding:18px 16px}
  #app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters]{grid-template-columns:1fr;padding:12px}
  #app .isa-forms > [data-forms-list] > .isa-form-card > p{flex:1 0 100%}
  #app .isa-forms > [data-forms-list] > .isa-form-card > button{min-height:44px} /* 행 '더 보기'·그 안 버튼·[다시 시도]는 아래 터치·좁은 화면 묶음(리뷰 B5) */
  #app .isa-forms:has(> [data-forms-list]) > [data-more]{width:100%;min-height:44px}
}
/* ===== v7 (2026-10-26) 운영진 편집기 간편화 · 질문 카드를 구글 폼처럼 =====
   사용자 요청: "편집기를 구글 폼처럼 더 쉽게". DOM은 Codex 소유(workspace.js questionCard·editor-header.js·collaboration-watch.js·create-*.js), 디자인은 CSS만.
   v7.1(독립 심사 반영): 시각 순서 = DOM(탭) 순서(order 없음), 바닥 줄 윗선 한 높이, 공통 포커스 링 유지, × 겹침 없음, 행·열 목록 글자 유지,
   설명 칸은 내용만큼, 잠긴 문항은 배지 + 누를 수 없는 버튼 숨김, 생성 문자는 대체 글 비움, 모바일·터치 44px.
   v7.2(2026-10-27, Codex 95897ced의 DR-17 반영 뒤): DOM 순서가 "질문 → 유형 → 설명 → 선택지 → 섹션 → 필수 → 동작"이 되어
   첫 줄 [질문 | 답변 유형], 바닥 한 줄 [섹션 | 필수 스위치 … 동작](섹션이 하나면 필수가 왼쪽부터), 필수는 알약 스위치(role=switch),
   '기타' 행은 선택지와 같은 줄 + "선택지 추가 · '기타' 추가" 한 줄, 4단계 표시는 상자 대신 가는 진행선, 공동 작업은 조용한 한 줄,
   보조 도구 3개는 질문 목록 뒤 왼쪽 글자 줄, 새 폼 마법사는 흰 면 하나(기간 2칸·언어 3칸).
   v7.3(2026-10-30, DR-18 반영 재검수): 바닥 줄 래퍼 [data-question-foot], 잠긴 문항 토글·마법사 제목/접기·협력 단체 묶음·'기타' span 규칙(DR18_DESIGN_REVIEW_20261030.md R2–R6). */
#app [data-question-cards] > article.isa-form-card[data-question]{position:relative;display:grid;grid-template-columns:auto minmax(7.5rem,1fr) minmax(0,max-content) 14rem;column-gap:0;row-gap:0;padding:18px 20px 12px;margin:0 0 12px;background:var(--isa-surface);border:1px solid var(--isa-line);border-radius:var(--isa-radius-sm)}
#app [data-question-cards] > article[data-question]::before{content:"⋮⋮" / "";position:absolute;left:50%;top:2px;transform:translateX(-50%);color:#6B7780;font-size:12px;letter-spacing:2px;line-height:1;cursor:grab} /* 카드를 끌어 순서를 바꿀 수 있다는 단서(위로·아래로 버튼도 그대로) */
#app [data-question-cards] > article[data-question]:focus-within{border-left:4px solid var(--isa-primary);padding-left:17px}
#app [data-question-cards] > article[data-question] > label{display:flex;flex-direction:column;gap:2px;margin:0;min-width:0;font-size:.75rem;font-weight:600;color:var(--isa-muted)}
/* 열: [섹션 | 필수(최소 7.5rem, en "Required"까지) | 동작 여분 | 유형 14rem]. 유형 칸은 고정 폭이라 질문 입력이 늘 "카드 폭 − 14rem"이고(동작 버튼 폭·언어·잠금과 무관, 독립 심사 O3),
   동작·잠금 표시는 셋째~넷째 칸에 걸친다(좁으면 동작이 줄바꿈). 걸친 항목(설명·선택지)이 열 폭을 키우지 않게 고정 최소값만 쓴다.
   첫 줄 [질문 입력 | 답변 유형]: 구글 폼처럼 유형이 질문 오른쪽. 두 칸 모두 바닥에 붙여 입력 밑선과 선택 상자 바닥이 한 높이 */
#app [data-question-cards] > article[data-question] > label:has(> [data-label]){grid-column:1/4;align-self:end}
#app [data-question-cards] > article[data-question] > label:has(> [data-type]){grid-column:4;align-self:end;padding-left:16px}
#app [data-question-cards] > article[data-question] > label:has(> [data-description]){grid-column:1/-1;margin-top:4px}
#app [data-question-cards] > article[data-question] > .isa-form-options{grid-column:1/-1;margin:10px 0 2px}
/* 바닥 한 줄 [섹션 | 필수 … | 동작]: v7.3(DR-18 편집기 9, 2026-10-30)부터 래퍼 div[data-question-foot] 하나가 윗선을 갖고 안을 flex로 놓는다.
   필수 label은 스위치 + 글자 폭만 누름 영역(v7.2까지는 격자 1–2열 전체를 덮어 빈 곳을 눌러도 토글됐다), 동작은 남은 폭의 오른쪽 끝에서 줄바꿈.
   섹션이 하나면 섹션 칸이 hidden이라 필수가 왼쪽부터 온다(따로 규칙 없음) */
#app [data-question-cards] > article[data-question] > [data-question-foot]{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:flex-end;gap:4px 0;min-width:0;margin:14px 0 0;padding:10px 0 0;border-top:1px solid var(--isa-line)}
#app [data-question-cards] > article[data-question] > [data-question-foot] > label{display:flex;flex-direction:column;gap:2px;margin:0;min-width:0;font-size:.75rem;font-weight:600;color:var(--isa-muted)}
#app [data-question-cards] > article[data-question] > [data-question-foot] > label[data-question-section]{flex:0 1 auto;padding-right:16px}
#app [data-question-cards] > article[data-question] > [data-question-foot] > label.isa-form-check{flex:0 0 auto;display:grid;grid-template-columns:auto auto;grid-auto-rows:40px;align-items:center;justify-content:start;column-gap:10px;min-height:0;padding-right:12px;white-space:nowrap;font-size:.875rem;color:var(--isa-ink)}
#app [data-question-cards] > article[data-question] > [data-question-foot] > .isa-form-toolbar{flex:1 1 0;min-width:0;display:flex;align-items:flex-end;justify-content:flex-end;flex-wrap:wrap;gap:6px;margin:0}
#app [data-question-cards] > article[data-question] > [data-question-foot] > p{flex:1 1 0;min-width:0;display:grid;grid-auto-rows:40px;align-items:center;justify-content:end;margin:0;text-align:right;font-size:.75rem;line-height:1.4;color:var(--isa-muted)} /* 잠긴 ISA 공통 문항 표시("ISA 공통 문항 · 수정할 수 없음"): v7.2부터 동작 버튼이 없는 바닥 줄 오른쪽에 조용한 글자로(DOM 순서대로 필수 다음). 카드 위 알약 배지는 첫 줄 유형 캡션을 덮어 뺐다(심사 E1·O1·A3) */
#app [data-question-cards] > article[data-question]:has(> [data-question-foot] > p) > label:has(> [data-description]:placeholder-shown){display:none} /* 잠긴 공통 문항의 빈 설명 칸(고칠 수 없음)은 숨겨 카드를 줄인다(E5). 범위를 잠긴 카드로 좁힌다: 패널이 열릴 때 모든 입력이 잠시 disabled가 되므로 :disabled로 고르면 화면이 출렁인다 */
#app [data-question-cards] > article[data-question] > details[data-rules-panel]{grid-column:1/-1;margin:6px 0 0;font-size:.8125rem}
/* PR-B B3 (V19): 최대 글자 수는 접힌 답변 조건 밖, 설명과 바닥 줄 사이 한 줄(바닥 줄 칸과 같은 작은 라벨). 기본값 안내와 오류 문구는 그 옆에 */
#app [data-question-cards] > article[data-question] > [data-question-length]{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:flex-end;gap:4px 12px;min-width:0;margin:8px 0 0}
#app [data-question-cards] > article[data-question] > [data-question-length] > label{display:flex;flex-direction:column;gap:2px;margin:0;min-width:0;font-size:.75rem;font-weight:600;color:var(--isa-muted)}
#app [data-question-cards] > article[data-question] > [data-question-length] > label > input{width:8rem;min-height:40px;margin:0;padding:4px 10px;font-size:.875rem}
#app [data-question-cards] > article[data-question] > [data-question-length] > p{margin:0;min-height:40px;display:flex;align-items:center;font-size:.75rem;line-height:1.4;color:var(--isa-muted)}
#app [data-question-cards] > article[data-question] > [data-question-length] > p[data-rule-error]{flex:1 1 100%;min-height:0;font-weight:600;color:var(--isa-danger)}
#app [data-question-cards] > article[data-question] > [data-question-length] > p[data-rule-error]:empty{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0} /* 리뷰 B3: 비어 있어도 알림 영역(role=status)은 접근성 트리에 남긴다. .isa-form-sr-only와 같은 화면 밖 처리라 flex 줄 간격도 차지하지 않는다 */
#app [data-question-cards] > article[data-question] > label > [data-label]{font-size:1.0625rem;font-weight:600;color:var(--isa-ink);border:0;border-bottom:1px solid var(--isa-field-border);border-radius:0;padding:6px 0 8px;background:transparent;min-height:40px}
#app [data-question-cards] > article[data-question] > label > [data-label]:focus{border-bottom:2px solid var(--isa-primary);padding-bottom:7px} /* 공통 포커스 링(input:focus)은 그대로 둔다 */
#app [data-question-cards] > article[data-question] > label > [data-description]{font-size:.875rem;color:var(--isa-muted);border:0;border-bottom:1px dashed var(--isa-line);border-radius:0;padding:6px 0;background:transparent;min-height:36px;height:auto;field-sizing:content;max-height:10lh;resize:vertical} /* 내용만큼 늘어나고(최대 10줄) 빈 칸은 한 줄 */
#app [data-question-cards] > article[data-question] > label > [data-description]:focus{border-bottom:1px solid var(--isa-primary)}
#app [data-question-cards] > article[data-question] > label > :is([data-label],[data-description])::placeholder{color:#6B7780}
#app [data-question-cards] > article[data-question] > label > select,#app [data-question-cards] > article[data-question] > [data-question-foot] > label > select{min-height:40px;margin:0;padding:4px 32px 4px 10px;font-size:.875rem;width:100%;max-width:320px;border:1px solid var(--isa-field-border);border-radius:var(--isa-radius-sm)}
#app [data-question-cards] > article[data-question] :is(input,textarea,select):disabled{color:var(--isa-muted)}
/* 필수 = 스위치(role=switch). 꺼짐은 흰 바탕 + 진회색 테두리·손잡이(흰 카드 위 4.6:1), 켜짐은 주색 + 흰 손잡이. 누름 영역은 "필수" 글자까지 감싼 label 전체 */
#app [data-question-cards] > article[data-question] > [data-question-foot] > label.isa-form-check > input[role=switch]{appearance:none;-webkit-appearance:none;flex:0 0 36px;width:36px;min-width:36px;height:20px;min-height:20px;margin:0;border:1.5px solid #6B7780;border-radius:10px;background:radial-gradient(circle at 8.5px 50%,#6B7780 5.5px,transparent 6px) var(--isa-surface);cursor:pointer}
#app [data-question-cards] > article[data-question] > [data-question-foot] > label.isa-form-check > input[role=switch]:checked{border-color:var(--isa-primary);background:radial-gradient(circle at 24.5px 50%,#fff 6.5px,transparent 7px) var(--isa-primary)}
#app [data-question-cards] > article[data-question] > [data-question-foot] > label.isa-form-check > input[role=switch]:disabled{border-color:#B9C4CB;background:radial-gradient(circle at 8.5px 50%,#B9C4CB 5.5px,transparent 6px) var(--isa-surface-2);cursor:not-allowed}
#app [data-question-cards] > article[data-question] > [data-question-foot] > label.isa-form-check > input[role=switch]:checked:disabled{border-color:#8A96A0;background:radial-gradient(circle at 24.5px 50%,#fff 6.5px,transparent 7px) #8A96A0}
#app [data-question-cards] > article[data-question] > [data-question-foot] > label.isa-form-check:has(> input:disabled){color:var(--isa-muted)}
@media (forced-colors: active){#app [data-question-cards] > article[data-question] > [data-question-foot] > label.isa-form-check > input[role=switch]{appearance:auto;-webkit-appearance:auto;width:20px;min-width:20px;flex-basis:20px}} /* 고대비 모드에서는 배경 그림이 지워지므로 기본 체크박스로 */
#app [data-question-cards] > article[data-question] > [data-question-foot] > .isa-form-toolbar button{flex:0 0 auto;min-height:40px;padding:4px 8px;border:0;background:transparent;color:var(--isa-muted);font-size:.8125rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app [data-question-cards] > article[data-question] > [data-question-foot] > .isa-form-toolbar button:hover:not(:disabled){color:var(--isa-ink);background:var(--isa-surface-2)}
#app [data-question-cards] > article[data-question] > [data-question-foot] > .isa-form-toolbar [data-action=delete]{color:var(--isa-danger);margin-left:6px}
#app [data-question-cards] > article[data-question] :is(.isa-form-toolbar button,[data-remove-item],[data-remove-other]):disabled{color:#8A96A0;background:transparent;cursor:not-allowed} /* 보기 전용 역할·협력 단체 폼(질문 fieldset disabled)에서 동작이 눌리는 것처럼 보이지 않게(O8). 위 버튼 규칙의 명시도가 공통 :disabled보다 높아 따로 둔다 */
/* 선택지 목록: 입력 줄(글리프 + 밑줄 입력) | 같은 줄 ×, '기타' 행도 같은 모양(래퍼는 display:contents), 끝에 "＋ 선택지 추가 · '기타' 추가" 한 줄 */
#app [data-question-cards] > article[data-question] .isa-form-options{display:flex;flex-wrap:wrap;align-items:center;gap:0 4px}
#app [data-question-cards] > article[data-question] .isa-form-options > label,#app [data-question-cards] > article[data-question] .isa-form-options > [data-other-row] > label{flex:1 1 calc(100% - 52px);display:flex;flex-direction:row;align-items:center;gap:10px;margin:0;min-width:0;font-size:.75rem;font-weight:600;color:var(--isa-muted)}
#app [data-question-cards] > article[data-question] .isa-form-options > [data-other-row]{display:contents}
#app [data-question-cards] > article[data-question] .isa-form-options:has(> [data-add-item=options]) > label,#app [data-question-cards] > article[data-question] .isa-form-options > [data-other-row] > label{font-size:0} /* 선택지 목록에서만 "선택지"·"기타" 글자를 숨긴다(스크린리더는 읽는다, 행·열 목록은 글자가 구분을 맡는다) */
#app [data-question-cards] > article[data-question] .isa-form-options:has(> [data-add-item=options]) > label::before,#app [data-question-cards] > article[data-question] .isa-form-options > [data-other-row] > label::before{content:"" / "";width:16px;height:16px;border:1.5px solid #8A96A0;border-radius:50%;flex:0 0 auto} /* 선택지 앞 동그라미(객관식 느낌) */
#app [data-question-cards] > article[data-question]:has([data-type] option[value=checkboxes]:checked) .isa-form-options label::before{border-radius:3px}
#app [data-question-cards] > article[data-question]:has([data-type] option[value=dropdown]:checked) .isa-form-options label::before{content:"▾" / "";border:0;height:auto;font-size:.875rem;line-height:1;text-align:center;color:#6B7780}
#app [data-question-cards] > article[data-question] .isa-form-options label input{flex:1 1 auto;min-width:0;margin:0;border:0;border-bottom:1px solid transparent;border-radius:0;padding:6px 0;min-height:36px;font-size:.9375rem;color:var(--isa-ink);background:transparent}
#app [data-question-cards] > article[data-question] .isa-form-options label input:focus{border-bottom-color:var(--isa-primary)}
#app [data-question-cards] > article[data-question] .isa-form-options label input::placeholder{color:#6B7780}
#app [data-question-cards] > article[data-question] .isa-form-options [data-other-option]{color:#6B7780;border-bottom:1px dotted #8A96A0;cursor:default} /* '기타…' 읽기 전용 행: 응답자가 직접 쓰는 칸이라는 흐린 글자 + 점선 */
#app [data-question-cards] > article[data-question] .isa-form-options > [data-other-row] > [data-other-option]{flex:1 1 calc(100% - 52px);display:flex;align-items:center;gap:20px;min-width:0;min-height:36px;padding:6px 0;border:0;font-size:.9375rem;background:repeating-linear-gradient(to right,#8A96A0 0 2px,transparent 2px 4px) 36px 100% / calc(100% - 36px) 1px no-repeat} /* v7.3 재검수 R6(글자 시작은 선택지 입력과 같은 36px: 선택지 label은 숨긴 캡션이 flex 간격을 한 번 더 만든다): DR-18 편집기 7로 '기타' 행이 label+input에서 글자 span이 되어 v7.2의 [data-other-row] > label 규칙(폭·글리프)이 빠졌다 → 선택지와 같은 줄 폭·글리프, 점선은 글리프를 뺀 글자 칸 아래만 */
#app [data-question-cards] > article[data-question] .isa-form-options > [data-other-row] > [data-other-option]::before{content:"" / "";width:16px;height:16px;border:1.5px solid #8A96A0;border-radius:50%;flex:0 0 auto}
#app [data-question-cards] > article[data-question]:has([data-type] option[value=checkboxes]:checked) .isa-form-options > [data-other-row] > [data-other-option]::before{border-radius:3px}
#app [data-question-cards] > article[data-question]:has([data-type] option[value=dropdown]:checked) .isa-form-options > [data-other-row] > [data-other-option]::before{content:"▾" / "";border:0;height:auto;font-size:.875rem;line-height:1;text-align:center;color:#6B7780}
#app [data-question-cards] > article[data-question] .isa-form-options :is([data-remove-item],[data-remove-other]){flex:0 0 auto;margin:0;min-width:40px;min-height:40px;padding:0 10px;border:0;background:transparent;color:var(--isa-muted);font-size:1.125rem;line-height:1;border-radius:var(--isa-radius-sm)}
#app [data-question-cards] > article[data-question] .isa-form-options :is([data-remove-item],[data-remove-other]):hover:not(:disabled){color:var(--isa-danger);background:var(--isa-surface-2)}
#app [data-question-cards] > article[data-question] .isa-form-options > :is([data-add-item],[data-add-other]){flex:0 0 auto;margin:6px 0 0;min-height:40px;padding:0 4px;border:0;background:transparent;color:var(--isa-primary);font-size:.875rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app [data-question-cards] > article[data-question] .isa-form-options > [data-add-item]{margin-left:22px}
#app [data-question-cards] > article[data-question] .isa-form-options > [data-add-item]::before{content:"＋ " / ""}
#app [data-question-cards] > article[data-question] .isa-form-options > [data-add-other]::before{content:"· " / "";color:var(--isa-muted);font-weight:400}
#app [data-question-cards] > article[data-question] .isa-form-options > :is([data-add-item],[data-add-other]):hover:not(:disabled){background:transparent;text-decoration:underline;text-underline-offset:3px}
#app [data-question-cards] > article[data-question] .isa-form-options > :is([data-add-item],[data-add-other]):disabled{display:none} /* 잠긴 ISA 문항: 누를 수 없는 추가 버튼은 보이지 않게 */
/* 편집 본문: 제목·설명 → 섹션 → 질문 목록 + "질문 추가" → 보조 도구 3개(DR-17 ④ 뒤 질문 목록 다음, 왼쪽 글자 줄) → 미디어 */
#app [data-editor-body]{display:flex;flex-wrap:wrap;align-items:center;column-gap:20px}
#app [data-editor-body] > :not([data-appearance-open],[data-quiz-open],[data-import-open]){flex:1 1 100%;min-width:0}
/* PR-B B3 (팀장 결정 1절 5·7): 디자인·퀴즈·가져오기와 이미지/영상 항목은 질문 아래 접기 하나 안으로. summary는 잠긴 문항 토글과 같은 글자 톤, 안의 세 버튼은 예전 조용한 글자 줄 그대로 */
#app [data-editor-body] > details[data-question-extras]{margin:4px 0 12px}
#app [data-editor-body] > details[data-question-extras] > summary{display:inline-flex;align-items:center;gap:8px;min-height:40px;cursor:pointer;list-style:none;font-size:.875rem;font-weight:600;color:var(--isa-ink)}
#app [data-editor-body] > details[data-question-extras] > summary::-webkit-details-marker{display:none}
#app [data-editor-body] > details[data-question-extras] > summary::before{content:"▸" / "";color:var(--isa-muted)}
#app [data-editor-body] > details[data-question-extras][open] > summary::before{content:"▾" / ""}
#app [data-editor-body] > details[data-question-extras] > .forms-question-extras-tools{display:flex;flex-wrap:wrap;align-items:center;column-gap:20px}
#app [data-editor-body] > details[data-question-extras] > .forms-question-extras-tools > :is([data-appearance-open],[data-quiz-open],[data-import-open]){flex:0 0 auto;min-height:40px;margin:0 0 6px;padding:4px 0;border:0;background:transparent;color:var(--isa-muted);font-size:.875rem;font-weight:600;text-decoration:underline;text-underline-offset:4px} /* 디자인·퀴즈·가져오기는 조용한 글자 줄 */
#app [data-editor-body] > [data-locked-toggle]{display:flex;align-items:center;gap:8px;min-height:40px;margin:0 0 12px;padding:8px 14px;border:1px solid var(--isa-line);border-radius:var(--isa-radius-sm);background:var(--isa-surface);color:var(--isa-ink);font-size:.875rem;font-weight:600;text-align:start} /* v7.3 재검수 R4: DR-18 편집기 5의 "ISA 공통 문항 n개 · 펼치기/접기"가 forms.css 기본 버튼(가운데 글자·파란 hover 면)으로 카드에 붙어 있었다. 질문 카드와 같은 흰 면 한 줄, 왼쪽 글자, 아래 카드와 12px */
#app [data-editor-body] > [data-locked-toggle]::before{content:"▸" / "";color:var(--isa-muted)}
#app [data-editor-body] > [data-locked-toggle][aria-expanded=true]::before{content:"▾" / ""}
#app [data-editor-body] > [data-locked-toggle]:hover{background:var(--isa-surface-2);color:var(--isa-ink)}
#app [data-editor-body] > details[data-question-extras] > .forms-question-extras-tools > :is([data-appearance-open],[data-quiz-open],[data-import-open]):hover:not(:disabled){color:var(--isa-ink);background:transparent}
#app [data-editor-body] > fieldset:has(> [data-add-question]){border:0;padding:0;margin:0}
/* PR-B B3 (팀장 결정 4): 기본 정보의 총 접수 상한은 접기(고급) 안. summary는 고급 설정 summary(forms.css)와 같은 굵기·여백 */
#app [data-form-settings] details[data-settings-limit]{margin:4px 0 0}
#app [data-form-settings] details[data-settings-limit] > summary{cursor:pointer;font-weight:600;padding:8px 0;min-height:40px}
#app [data-editor-body] [data-add-question]{display:flex;align-items:center;justify-content:center;width:100%;min-height:52px;margin:4px 0 16px;border:1px dashed var(--isa-line-strong);border-radius:var(--isa-radius-sm);background:transparent;color:var(--isa-primary);font-weight:600}
#app [data-editor-body] [data-add-question]::before{content:"＋ " / ""}
#app .forms-editor-guide{font-size:.75rem}
/* 4단계 표시(editor-header.js: ol.forms-editor-steps[data-editor-steps] > li[data-step-state=done|now|todo], 현재 aria-current=step, 2단계 안 button[data-editor-public-info]).
   v7.2: 상자 4개 대신 가는 진행선 위 번호 + 이름(편집기 머리가 sticky라 높이를 줄인다). 제목 다음 한 줄 전체, 상태 배지는 그 아래 */
#app ol.forms-editor-steps{flex:1 0 100%;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px 12px;margin:8px 0 4px;padding:0;list-style:none;counter-reset:editor-step}
#app ol.forms-editor-steps > li{position:relative;display:flex;align-items:center;gap:8px;min-width:0;min-height:44px;margin:0;padding:6px 0 0;border-top:3px solid var(--isa-line);font-size:.875rem;line-height:1.35;color:var(--isa-muted)} /* A11Y A-1: 단계 칸(=버튼 ::after 누름 영역)을 팀 기준 44px로 */
#app ol.forms-editor-steps > li::before{counter-increment:editor-step;content:counter(editor-step);flex:0 0 22px;width:22px;height:22px;box-sizing:border-box;border-radius:50%;border:1px solid #8A96A0;text-align:center;line-height:20px;font-size:.75rem;font-weight:600;color:var(--isa-muted);background:var(--isa-surface)}
#app ol.forms-editor-steps > li[data-step-state=done]{color:var(--isa-ink);border-top-color:var(--isa-secondary)}
#app ol.forms-editor-steps > li[data-step-state=done]::before{content:"✓" / "";background:var(--isa-secondary);border-color:var(--isa-secondary);color:var(--isa-ink)} /* 흰 ✓는 청록 위 1.96:1이라 검정(10.69:1, 심사 A1) */
#app ol.forms-editor-steps > li[data-step-state=now]{color:var(--isa-ink);border-top-color:var(--isa-primary);font-weight:600}
#app ol.forms-editor-steps > li[data-step-state=now]::before{background:var(--isa-primary);border-color:var(--isa-primary);color:#fff}
#app ol.forms-editor-steps [data-editor-public-info]{display:inline-flex;align-items:center;min-height:24px;margin:0;padding:0;border:0;border-radius:2px;background:transparent;color:var(--isa-primary);font:inherit;text-align:left;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
#app ol.forms-editor-steps [data-editor-public-info]::after{content:"";position:absolute;inset:0} /* 단계 칸 전체가 누름 영역(공개 정보·설정 탭의 공개 안내로 이동) */
#app ol.forms-editor-steps [data-editor-public-info]:hover:not(:disabled){background:transparent;color:var(--isa-ink)}
#app ol.forms-editor-steps [data-editor-public-info]:disabled{background:transparent;color:var(--isa-muted);text-decoration:none;cursor:default}
/* 공동 작업(collaboration-watch.js): 평소에는 상자 없는 조용한 한 줄(요약 · 상태 확인 · 안내 접기), 위험 상태(data-watch-critical=true)만 흰 면 + 빨간 왼쪽 선 */
#app .forms-watch[data-watch-critical=false]{background:transparent;border:0;padding:0;margin:10px 0 14px;gap:0 12px}
#app .forms-watch[data-watch-critical=true]{border-left:3px solid var(--isa-danger)}
#app .forms-watch[data-watch-critical=true]::before{background:var(--isa-danger)} /* 점과 왼쪽 선이 같은 신호(unresolved·advanced에서 점만 청록이던 것, O2) */
#app .forms-watch[data-watch-critical=true] > [data-watch-compare]{border-color:var(--isa-primary);color:var(--isa-primary);background:var(--isa-surface)}
#app .forms-watch[data-watch-critical=true] > [data-watch-check]{border:0;background:transparent;color:var(--isa-primary);text-decoration:underline;text-underline-offset:3px}
#app .forms-watch > details{flex:0 1 auto;margin:0;font-size:.75rem}
#app .forms-watch > details > summary{display:inline-flex;align-items:center;gap:6px;min-height:40px;cursor:pointer;color:var(--isa-muted);font-weight:600;list-style:none}
#app .forms-watch > details > summary::-webkit-details-marker{display:none}
#app .forms-watch > details > summary::before{content:"▸" / ""}
#app .forms-watch > details[open] > summary::before{content:"▾" / ""}
#app .forms-watch > details[open]{flex-basis:100%;padding:0 0 4px}
#app .forms-watch > details > p{margin:4px 0 0;font-size:.75rem}
#app .forms-watch[data-watch-critical=false] > button{min-height:40px;margin:0;padding:4px 2px;border:0;background:transparent;color:var(--isa-primary);font-size:.8125rem;font-weight:600;text-decoration:underline;text-underline-offset:3px}
#app .forms-watch[data-watch-critical=false] > button:hover:not(:disabled){background:transparent;color:var(--isa-ink)}
/* PR-B B1 (팀장 결정 1): a quiet box takes no space; only its summary stays, off screen, as the status live region (same as .isa-form-sr-only). */
#app .forms-watch[data-watch-quiet=true]{margin:0;padding:0;border:0;gap:0;background:transparent}
#app .forms-watch[data-watch-quiet=true]::before,#app .forms-watch[data-watch-quiet=true] > :not([data-watch-summary]){display:none}
#app .forms-watch[data-watch-quiet=true] > [data-watch-summary]{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
/* 새 폼 마법사(DR-17 ③: create-workflow-view.js + create-program-wizard.js, [data-create-host] > form[data-create]). 흰 면 하나, 한 열.
   제목 | 양식, 공개 정보 묶음 안에서 행사·접수 기간 4칸은 데스크톱 2열, 언어 묶음은 한국어 한 줄, 일본어·영어는 접기 안 2열(PR-B B2). 주 버튼은 "새 폼 만들기" 하나, 건너뛰기는 글자 버튼 */
#app [data-create-host] > form[data-create]{display:flex;flex-wrap:wrap;align-items:flex-end;gap:14px 16px;margin:0 0 10px;padding:20px 24px;background:var(--isa-surface);border:1px solid var(--isa-line);border-radius:var(--isa-radius-sm)}
#app [data-create-host] > form[data-create] > label{flex:1 1 360px;display:flex;flex-direction:column;gap:6px;margin:0;min-width:0;font-size:.8125rem;font-weight:600;color:var(--isa-muted)}
#app [data-create-host] > form[data-create] > label:has(> select[name=template]){flex:0 1 240px}
#app [data-create-host] form[data-create] :is(input:not([type=checkbox]),select,textarea){margin:0;min-height:40px;padding:8px 12px;border:1px solid var(--isa-field-border);border-radius:var(--isa-radius-sm);font-size:.9375rem;font-weight:400;color:var(--isa-ink);background:var(--isa-surface)}
#app [data-create-host] form[data-create] textarea{min-height:72px}
#app [data-create-host] form[data-create] [aria-invalid=true]{border-color:var(--isa-danger);box-shadow:inset 0 0 0 1px var(--isa-danger)}
#app [data-create-host] [data-create-program-fields]{flex:1 1 100%;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px 16px;min-width:0;margin:6px 0 0;padding:18px 0 0;border:0;border-top:1px solid var(--isa-line);border-radius:0}
#app [data-create-host] [data-create-program-fields] > *{grid-column:1/-1;min-width:0;margin:0}
#app [data-create-host] [data-create-program-fields] > legend{float:left;width:100%;padding:0;font-size:1rem;font-weight:600;color:var(--isa-ink)} /* float로 legend를 격자 칸에 넣는다 */
#app [data-create-host] [data-create-program-fields] > p{font-size:.8125rem;line-height:1.55;color:var(--isa-muted)}
#app [data-create-host] [data-create-program-fields] > legend + p{margin-top:-6px}
#app [data-create-host] [data-create-program-fields] label{display:flex;flex-direction:column;gap:6px;margin:0;min-width:0;font-size:.8125rem;font-weight:600;color:var(--isa-muted)}
#app [data-create-host] [data-create-program-fields] > label:has(> [data-create-program-date]){grid-column:span 3}
#app [data-create-host] [data-create-program-fields] > label:has(> :is([data-create-program="event.startsAt"],[data-create-program="settings.opensAt"])){grid-column:1/4} /* 시작이 늘 왼쪽 칸: [행사 시작 | 행사 종료], [접수 시작 | 접수 마감] */
#app [data-create-host] [data-create-program-fields] > label:has(> [data-create-program="event.category"]){grid-column:1/4}
#app [data-create-host] [data-create-program-fields] label.isa-form-check{flex-direction:row;align-items:center;gap:10px;min-height:40px;color:var(--isa-ink)}
#app [data-create-host] [data-create-program-fields] label.isa-form-check + p{margin-top:-10px;font-size:.75rem}
#app [data-create-host] [data-create-program-error]{font-size:.8125rem;font-weight:600;color:var(--isa-danger)}
#app [data-create-host] [data-create-program-language]{grid-column:span 2;display:grid;align-content:start;gap:10px;min-width:0;margin:0;padding:12px 0 0;border:0;border-top:1px solid var(--isa-line);border-radius:0}
#app [data-create-host] [data-create-program-language] > legend{float:left;width:100%;padding:0;margin:0;font-size:.875rem;font-weight:600;color:var(--isa-ink)}
/* PR-B B2 (팀장 결정 1절 5): 한국어 묶음은 한 줄 전체, 일본어·영어 묶음은 그 아래 접기 안에서 2열(좁은 화면 1열) */
#app [data-create-host] [data-create-program-fields] > [data-create-program-language]{grid-column:1/-1}
#app [data-create-host] [data-create-program-fields] > [data-create-program-other-languages]{grid-column:1/-1;min-width:0;margin:0}
#app [data-create-host] [data-create-program-other-languages] > summary{display:inline-flex;align-items:center;gap:6px;min-height:40px;cursor:pointer;list-style:none;font-size:.875rem;font-weight:600;color:var(--isa-ink)}
#app [data-create-host] [data-create-program-other-languages] > summary::-webkit-details-marker{display:none}
#app [data-create-host] [data-create-program-other-languages] > summary::before{content:"▸" / "";color:var(--isa-muted);font-weight:400}
#app [data-create-host] [data-create-program-other-languages][open] > summary::before{content:"▾" / ""}
#app [data-create-host] [data-create-program-other-languages] > .forms-create-other-languages{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px;min-width:0;padding:6px 0 0}
#app [data-create-host] [data-create-program-other-languages] [data-create-program-language]{grid-column:auto}
#app [data-create-host] [data-create-program-language] > p{margin:0;font-size:.8125rem;line-height:1.55;color:var(--isa-muted)} /* U2: 참가비 안내도 다른 안내와 같은 크기 */
#app [data-create-host] > form[data-create] > button[type=submit]{min-height:40px;margin:4px 0 0;padding:8px 20px;border:1px solid var(--isa-primary);border-radius:var(--isa-radius-sm);background:var(--isa-primary);color:var(--isa-on-primary);font-size:.9375rem;font-weight:600}
#app [data-create-host] > form[data-create] > button[type=submit]:hover:not(:disabled){background:var(--isa-primary);color:var(--isa-on-primary);text-decoration:underline;text-underline-offset:3px}
#app [data-create-host] form[data-create] [data-create-skip]{min-height:40px;margin:4px 0 0;padding:8px 4px;border:0;background:transparent;color:var(--isa-muted);font-size:.875rem;font-weight:600;text-decoration:underline;text-underline-offset:4px}
#app [data-create-host] form[data-create] [data-create-skip]:hover:not(:disabled){background:transparent;color:var(--isa-ink)}
/* PR-B B2 (팀장 결정 1절 5): [공개 정보 건너뛰고 만들기]는 주 버튼 아래 '고급' 접기 안에 한 줄 안내와 함께 */
#app [data-create-host] > form[data-create] > [data-create-skip-more]{flex:1 1 100%;margin:0;font-size:.8125rem;color:var(--isa-muted)}
#app [data-create-host] > form[data-create] > [data-create-skip-more] > summary{display:inline-flex;align-items:center;gap:6px;min-height:40px;cursor:pointer;list-style:none;font-weight:600}
#app [data-create-host] > form[data-create] > [data-create-skip-more] > summary::-webkit-details-marker{display:none}
#app [data-create-host] > form[data-create] > [data-create-skip-more] > summary::before{content:"▸" / ""}
#app [data-create-host] > form[data-create] > [data-create-skip-more][open] > summary::before{content:"▾" / ""}
#app [data-create-host] > form[data-create] > [data-create-skip-more] > [data-create-skip-hint]{margin:2px 0 0;font-size:.8125rem;line-height:1.55;color:var(--isa-muted)}
#app [data-create-host] > [data-create-status]{margin:0 0 10px;font-size:.875rem;color:var(--isa-ink)}
#app [data-create-host] > [data-create-status][role=alert]{color:var(--isa-danger);font-weight:600}
#app [data-create-host] > [data-create-status]:empty{display:none}
#app [data-create-host] > h2[data-create-title]{margin:0 0 10px;font-size:1.0625rem;font-weight:700;line-height:1.4;color:var(--isa-ink)} /* v7.3 재검수 R2: DR-18 편집기 6의 면 제목. 규칙이 없어 기본 h2가 면 밖 왼쪽 위에 붙어 있었다 */
#app [data-create-host] > h2[data-create-title] > button[data-create-toggle]{display:flex;align-items:center;gap:8px;width:100%;min-height:44px;margin:0;padding:8px 16px;border:1px solid var(--isa-line);border-radius:var(--isa-radius-sm);background:var(--isa-surface);color:var(--isa-ink);font:inherit;text-align:start} /* 760px 이하·폼 있음: 접힌 마법사는 흰 면 한 줄(기본 버튼 테두리·가운데 정렬 대신) */
#app [data-create-host] > h2[data-create-title] > button[data-create-toggle]::before{content:"▸" / "";color:var(--isa-muted);font-weight:400}
#app [data-create-host] > h2[data-create-title] > button[data-create-toggle][aria-expanded=true]::before{content:"▾" / ""}
#app [data-create-host] > h2[data-create-title] > button[data-create-toggle]:hover{background:var(--isa-surface-2);color:var(--isa-ink)}
#app [data-create-host] [data-create-partner-fields]{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px 16px;min-width:0;padding:12px 0 0;border:0;border-top:1px solid var(--isa-line);border-radius:0} /* v7.3 재검수 R3: DR-18 편집기 6의 협력 단체 묶음. 안쪽 legend·안내가 기본 글자(16px)였고 칸 사이 간격이 없었다 → 언어 묶음과 같은 윗선·legend, 주관 이름 3칸 한 줄, 링크 2칸 한 줄 */
#app [data-create-host] [data-create-partner-fields] > *{grid-column:1/-1;min-width:0;margin:0}
#app [data-create-host] [data-create-partner-fields] > legend{float:left;width:100%;padding:0;font-size:.875rem;font-weight:600;color:var(--isa-ink)}
#app [data-create-host] [data-create-partner-fields] > p{margin-top:-6px;font-size:.8125rem;line-height:1.55;color:var(--isa-muted)}
#app [data-create-host] [data-create-partner-fields] > label:has(> [data-create-program^="public.partner.organizer."]){grid-column:span 2}
#app [data-create-host] [data-create-partner-fields] > label:has(> :is([data-create-program="public.partner.externalApplyUrl"],[data-create-program="public.partner.organizerUrl"])){grid-column:span 3}
@media (forced-colors: active){ /* 고대비: 배경색이 시스템 색으로 바뀌므로 현재 단계 번호만 Highlight로, 할 일 선은 점선(심사 A5) */
  #app ol.forms-editor-steps > li[data-step-state=now]::before{forced-color-adjust:none;background:Highlight;border-color:Highlight;color:HighlightText}
  #app ol.forms-editor-steps > li[data-step-state=now]{border-top-color:Highlight}
  #app ol.forms-editor-steps > li[data-step-state=todo]{border-top-style:dashed}
}
#app .forms-editor-bar [data-save]{background:var(--isa-surface);border-color:var(--isa-primary);color:var(--isa-primary)} /* v7.2: 화면당 주 버튼 하나(모집 시작·링크 복사). 저장 안 된 변경이 있으면 모집 시작이 저장 버튼으로 초점을 보낸다(심사 E3·O5, D02 "저장 주색" 결정 변경) */
@media (max-width: 1024px){
  #app [data-question-cards] > article[data-question] > [data-question-foot] > label[data-question-section] > select{max-width:240px} /* 761–1024px·en/ja에서 바닥 줄의 필수 칸이 눌리지 않게 섹션 폭 상한 */
}
@media (max-width: 760px){
  #app [data-question-cards] > article.isa-form-card[data-question]{grid-template-columns:auto minmax(0,1fr);padding:16px 14px 10px} /* 바닥 줄: 필수는 제 폭, 동작은 남은 폭 안에서 줄바꿈(en "Duplicate question" 등) */
  #app [data-question-cards] > article[data-question]:focus-within{padding-left:11px}
  #app [data-question-cards] > article[data-question] > label:has(> [data-label]){grid-column:1/-1}
  #app [data-question-cards] > article[data-question] > label:has(> [data-type]){grid-column:1/-1;padding-left:0;margin-top:10px} /* 좁은 폭에서는 유형이 질문 아래 한 줄 */
  #app [data-question-cards] > article[data-question] > label > select,#app [data-question-cards] > article[data-question] > [data-question-foot] > label[data-question-section] > select{width:100%;max-width:100%}
  #app [data-question-cards] > article[data-question] > [data-question-foot] > label[data-question-section]{flex:1 1 100%;padding-right:0} /* 섹션은 바닥 첫 줄 전체, 필수 | 동작은 그 아래 한 줄 */
  #app [data-question-cards] > article[data-question] > [data-question-foot] > :is(label.isa-form-check,.isa-form-toolbar,p){align-self:flex-start}
  #app [data-question-cards] > article[data-question] > [data-question-foot] > label.isa-form-check{padding-right:8px}
  #app [data-question-cards] > article[data-question] > [data-question-foot] > .isa-form-toolbar{align-items:flex-start;align-content:flex-start} /* 동작이 두 줄이 되어도 필수와 첫 줄이 나란히(초점 순서가 위로 되돌아가지 않게) */
  html:lang(en) #app [data-question-cards] > article[data-question] > [data-question-foot] > :is(.isa-form-toolbar,p){flex-basis:100%;justify-content:start} /* en 동작 이름은 필수 옆에 들어가지 않아 필수 아래 전폭 줄로(ko·ja는 한 줄) */
  #app [data-question-cards] > article[data-question] > [data-question-foot] > .isa-form-toolbar{gap:4px} /* 326px 카드에서 네 버튼이 한 줄에 들어가게(각 버튼은 44px 높이·24px 이상 폭) */
  #app [data-question-cards] > article[data-question] > [data-question-foot] > .isa-form-toolbar button{padding:4px 5px}
  #app ol.forms-editor-steps{grid-template-columns:1fr 1fr;gap:4px 10px}
  #app ol.forms-editor-steps > li{font-size:.8125rem}
  #app .forms-watch[data-watch-critical=false]{gap:0 10px}
  #app [data-create-host] > form[data-create]{padding:16px}
  #app [data-create-host] > form[data-create] > :is(label,label:has(> select[name=template])){flex:1 1 100%}
  #app [data-create-host] [data-create-program-fields]{grid-template-columns:minmax(0,1fr)}
  #app [data-create-host] [data-create-program-fields] > :is(label:has(> [data-create-program-date]),label:has(> [data-create-program="event.category"]),[data-create-program-language]){grid-column:1/-1}
  #app [data-create-host] [data-create-partner-fields]{grid-template-columns:minmax(0,1fr)}
  #app [data-create-host] [data-create-program-other-languages] > .forms-create-other-languages{grid-template-columns:minmax(0,1fr)}
  #app [data-create-host] [data-create-partner-fields] > :is(label,label:has(> [data-create-program])){grid-column:1/-1} /* U2: 데스크톱 span 2·3 규칙(:has 특이도)이 이기면 한 칸 격자에 암묵 칸이 생겨 제목·안내가 좁은 칸으로 밀림 */
  #app [data-create-host] > form[data-create] > button[type=submit]{flex:1 1 100%}
}
@media (max-width: 760px), (pointer: coarse), (any-pointer: coarse){ /* 터치(터치 노트북 포함): 누름 영역 44px, 간격 8px(데스크톱 마우스는 운영 화면 관례 40px) */
  #app [data-question-cards] > article[data-question] > label > :is([data-label],[data-description]),#app [data-question-cards] > article[data-question] .isa-form-options label input{min-height:44px}
  #app [data-question-cards] > article[data-question] > label > select,#app [data-question-cards] > article[data-question] > [data-question-foot] > .isa-form-toolbar button,#app [data-question-cards] > article[data-question] .isa-form-options > :is([data-remove-item],[data-add-item],[data-add-other]),#app [data-question-cards] > article[data-question] .isa-form-options > [data-other-row] > [data-remove-other],#app [data-editor-body] > details[data-question-extras] > .forms-question-extras-tools > :is([data-appearance-open],[data-quiz-open],[data-import-open]),#app [data-editor-body] > details[data-question-extras] > summary,#app [data-question-cards] > article[data-question] > [data-question-length] > label > input{min-height:44px}
  #app [data-question-cards] > article[data-question] .isa-form-options :is([data-remove-item],[data-remove-other]){min-width:44px}
  #app [data-question-cards] > article[data-question] > [data-question-foot] > label.isa-form-check{grid-auto-rows:44px}
  #app [data-question-cards] > article[data-question] > [data-question-foot] > .isa-form-toolbar{gap:8px}
  #app [data-question-cards] > article[data-question] > [data-question-foot] > .isa-form-toolbar [data-action=delete]{margin-left:8px}
  #app ol.forms-editor-steps > li{min-height:44px}
  #app .forms-watch[data-watch-critical=false] > button,#app .forms-watch > details > summary{min-height:44px}
  #app [data-create-host] form[data-create] :is(input:not([type=checkbox]),select,textarea),#app [data-create-host] > form[data-create] > :is(button[type=submit],[data-create-skip]){min-height:44px}
  #app [data-create-host] [data-create-program-fields] label.isa-form-check{min-height:44px}
  #app [data-create-host] form[data-create] [data-create-skip],#app [data-create-host] > form[data-create] > [data-create-skip-more] > summary,#app [data-create-host] [data-create-program-other-languages] > summary{min-height:44px} /* PR-B B2: 접기 안으로 옮긴 건너뛰기와 두 접기 제목 */
  #app [data-editor-body] > [data-locked-toggle]{min-height:44px}
  #app [data-form-settings] details[data-settings-limit] > summary{min-height:44px} /* PR-B B3 */
  #app .isa-forms [data-answer-detail] > [data-response-actions-more] > summary{min-height:44px} /* PR-B B4 */
  #app .isa-forms > [data-forms-list] > .isa-form-card > [data-form-row-more] > summary,#app .isa-forms > [data-forms-list] > .isa-form-card > [data-form-row-more] > .forms-row-more > button,#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > [data-list-retry]{min-height:44px} /* 리뷰 B5: 넓은 터치 기기에서도 행 '더 보기'·그 안 버튼·[다시 시도] 44px */
}
/* PR-D (팀장 결정 2026-11-02 1): 되돌릴 수 있는 확인(접수 마감·신청받기 시작/재개·게시 취소·보관·복구·삭제함)은 누른 자리·스크롤과 상관없이 화면 가운데 모달 대화상자.
   showModal이 있으면 top layer·::backdrop, 없으면(대체 모드) 같은 자리에 fixed. 열린 동안 문서 스크롤은 잠그고, 원래 스크롤바가 있던 화면만 그 폭을 남긴다.
   색은 기존 토큰만(주 버튼은 .primary와 같은 색, 꺼진 주 버튼은 button:disabled 그대로), 버튼·접기는 44px, 좁은 화면(760px 이하)은 같은 순서로 세로 전체 폭. */
html.isa-dialog-open{overflow:hidden}
html.isa-dialog-gutter{scrollbar-gutter:stable}
#app .isa-confirm-dialog{box-sizing:border-box;width:min(32rem,calc(100% - 32px));max-width:calc(100% - 32px);max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);overflow:auto;margin:auto;padding:20px;border:1px solid var(--isa-line-strong);border-radius:var(--isa-radius-sm);background:var(--isa-surface);color:var(--isa-ink)}
#app .isa-confirm-dialog::backdrop{background:var(--isa-muted);opacity:.6}
#app .isa-confirm-dialog[data-fallback]{display:block;position:fixed;inset:0;height:fit-content;z-index:20}
#app .isa-confirm-dialog > h2{margin:0 0 8px;font-size:1.125rem;color:var(--isa-heading)}
#app .isa-confirm-dialog > p{margin:0 0 8px;color:var(--isa-ink)}
#app .isa-confirm-dialog > p:empty{margin:0}
/* PR-E (c) 리뷰 a11y-2: '이미 접수가 마감되어 있습니다' 상태에서는 제목·문장을 polite 상태 줄에도 한 번 써서 낭독되게 하고, 화면에는 제목·문장만 보이도록 상태 줄은 화면 밖 글자(.isa-form-sr-only와 같은 처리)로 둔다 */
#app .isa-confirm-dialog[data-reopen-already] > [data-reopen-status]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
#app .isa-confirm-dialog [data-confirm-body] > details{margin:8px 0}
#app .isa-confirm-dialog [data-confirm-body] summary{min-height:44px;padding:10px 0;cursor:pointer;font-weight:700}
#app .isa-confirm-dialog .isa-confirm-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;margin-top:16px}
#app .isa-confirm-dialog button{min-height:44px;padding:8px 16px}
#app .isa-confirm-dialog [data-confirm-primary]:not(:disabled){background:var(--isa-primary);border-color:var(--isa-primary);color:var(--isa-on-primary)}
@media (max-width:760px){#app .isa-confirm-dialog{padding:16px}#app .isa-confirm-dialog .isa-confirm-actions{flex-direction:column}#app .isa-confirm-dialog .isa-confirm-actions button{width:100%}}
/* PR-D 팀장 리뷰 5: 적용 결과 한 줄을 누른 자리 옆에도 둔다(낭독 없는 일반 문장, 상태 줄과 같은 크기·색 토큰). 운영 도구는 누른 버튼 바로 아래, 목록은 행 버튼 줄 아래 한 줄 전체. */
#app .forms-operator-tools [data-local-result]{margin:6px 0 0;font-size:.8125rem;color:var(--isa-ink);overflow-wrap:anywhere}
/* PR #38 2차 ②: 다시 시작할 수 없는 폼(스위치 꺼짐 + 기간 종료·응답 상한·접수 예정)은 [신청받기 시작] 대신 사유 한 줄과 [설정 확인]. 접수·참가자 묶음 첫 자리에서 한 줄 전체를 쓰고, 버튼은 44px */
#app .forms-operator-tools [data-operator-tools-slot="control-settings"]{flex:1 0 100%}
#app .forms-control-blocked{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;min-width:0}
#app .forms-control-blocked > p{margin:0;color:var(--isa-ink);overflow-wrap:anywhere}
#app .forms-control-blocked > button{min-height:44px}
#app .isa-forms > [data-forms-list] > .isa-form-card > [data-local-result]{flex:1 0 100%;margin:0;font-weight:400;overflow-wrap:anywhere}
#app .isa-forms > [data-forms-list] > .isa-form-card > [data-local-result]::before{content:none}
/* PR-E (b): 새 버전 띠(version-banner.js, 운영진 화면 맨 위). 비어 있는 동안에는 상자가 없고 라이브 영역 노드만 남는다. 문장과 [새 버전 불러오기] 한 줄, 버튼 44px. */
body > .isa-version-banner:not(:empty){display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 12px;padding:8px 16px;background:var(--isa-surface);color:var(--isa-ink);border-bottom:3px solid var(--isa-accent);font-weight:600}
body > .isa-version-banner > p{margin:0;overflow-wrap:anywhere}
body > .isa-version-banner > button{min-height:44px;margin:0;padding:8px 16px;border:1px solid var(--isa-primary);border-radius:var(--isa-radius-sm);background:var(--isa-primary);color:var(--isa-on-primary);font:inherit;font-weight:700;cursor:pointer}
body > .isa-version-banner > button:focus-visible{outline:3px solid var(--isa-focus);outline-offset:3px}
/* ===== C-4 운영 목록·편집기 (디자인 방향 C 4단계, 2026-11-05, docs/specs/design-c/C_plan_20261102.md §3 C-4 행·review_PR37_C1C2.md §3·review_PR41_C3.md) =====
   색은 폼별 테마 토큰(--isa-accent-900/700/500/100/50·--isa-btn-*)과 상태 토큰(--isa-ok·--isa-warn·--isa-danger-bg)만 쓰고 새 색은 없다. data-form-accent는 workspace.js가 붙인다:
   목록은 행(article[data-form-row])마다, 편집기는 호스트 section.isa-forms에(머리띠·단계·편집 중 선·오른쪽 패널이 상속). 대응표 밖 hex(custom)는 위 토큰 블록이 틸로 명시한다.
   PR #30~#38 사용성 결정은 DOM이 그대로이므로 유지된다: [신청 링크 복사] 항상 노출, '이 폼 관리' 접기, [보존·파기] 묶음, 모달 대화상자, 상태 맞는 운영 도구·'접수 받지 않음' 배지, 라벨 분리. */
/* 상태 칩(목록 행 p[data-status]·머리 배지 .forms-status-badge·오른쪽 패널 배지): 점 대신 색 면. 접수 중·게시됨 = ok, 접수 예정 = 폼 색 연한 면, 마감 처리 중·상한 = warn, 삭제함 = danger 면, 그 밖(초안·중지·받지 않음·종료·보관·확인 중) = 회색 면 */
#app :is(.forms-status-badge,.isa-forms > [data-forms-list] > .isa-form-card > p[data-status]){display:inline-flex;align-items:center;gap:0;min-height:26px;padding:2px 10px;border-radius:var(--isa-radius-pill);background:var(--isa-surface-2);color:var(--isa-muted);font-size:.8125rem;font-weight:600;line-height:1.4}
#app :is(.forms-status-badge,.isa-forms > [data-forms-list] > .isa-form-card > p[data-status])::before{content:none}
#app :is(.forms-status-badge,.isa-forms > [data-forms-list] > .isa-form-card > p[data-status]):is([data-status=accepting],[data-status=published]){background:var(--isa-ok-bg);color:var(--isa-ok)}
#app :is(.forms-status-badge,.isa-forms > [data-forms-list] > .isa-form-card > p[data-status])[data-status=upcoming]{background:var(--isa-accent-50);color:var(--isa-accent-900)}
#app :is(.forms-status-badge,.isa-forms > [data-forms-list] > .isa-form-card > p[data-status]):is([data-status=closing],[data-status=limit]){background:var(--isa-warn-bg);color:var(--isa-warn)}
#app :is(.forms-status-badge,.isa-forms > [data-forms-list] > .isa-form-card > p[data-status])[data-status=deleted]{background:var(--isa-danger-bg);color:var(--isa-danger)}
@media (forced-colors: active){#app :is(.forms-status-badge,.isa-forms > [data-forms-list] > .isa-form-card > p[data-status]){border:1px solid CanvasText}} /* 고대비: 면 색이 지워지므로 테두리로 칩 모양을 남긴다 */
/* 폼 목록 행: 왼쪽 6px 폼 색 띠(옐로는 500). 서버 목록(listMetadataOnly)에 theme가 없는 동안은 모든 행이 custom = 틸이다(알려진 한계, 목록 응답에 theme.color가 실리면 그대로 색이 붙는다) */
#app .isa-forms > [data-forms-list] > .isa-form-card{border-left:6px solid var(--isa-accent-700);padding-left:12px}
#app .isa-forms > [data-forms-list] > .isa-form-card[data-form-accent=yellow]{border-left-color:var(--isa-accent-500)}
/* 접수 상태 필터 칩(recruitment-list.js, fieldset[data-form-intake] > legend + button[role=radio][data-form-intake-chip]): 고른 칩은 검정 면·흰 글자(색 하나에 기대지 않고 글자 굵기·면으로 구분), 44px */
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-intake-chips{grid-column:1 / -1;display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0;padding:0;border:0;min-width:0}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-intake-chips > legend{float:left;width:100%;margin:0 0 2px;padding:0;font-size:.8125rem;font-weight:600;color:var(--isa-muted)}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-intake-chips > button[role=radio]{flex:0 0 auto;min-height:44px;margin:0;padding:8px 14px;border:1px solid var(--isa-line-strong);border-radius:var(--isa-radius-pill);background:var(--isa-surface);color:var(--isa-ink);font-size:.875rem;font-weight:600}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-intake-chips > button[role=radio][aria-checked=true]{background:var(--isa-ink);border-color:var(--isa-ink);color:var(--isa-surface)}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-intake-chips > button[role=radio]:hover:not(:disabled){background:var(--isa-surface-2);color:var(--isa-ink)}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-intake-chips > button[role=radio][aria-checked=true]:hover:not(:disabled){background:var(--isa-ink);color:var(--isa-surface);text-decoration:underline;text-underline-offset:3px}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-intake-chips > button[role=radio]:focus-visible{outline:3px solid var(--isa-focus);outline-offset:3px}
@media (forced-colors: active){#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-intake-chips > button[role=radio][aria-checked=true]{border-width:3px;font-weight:800}} /* 리뷰 반영(2026-11-05): 고대비 모드는 면 색을 지우므로 고른 칩을 두꺼운 테두리·굵은 글자로 구분 */
/* "새 폼 만들기" 접기(모든 폭, create-workflow-view.js): 접힌 마법사의 제목 버튼(h2[data-create-title] > button[data-create-toggle])을 폼 목록 제목 줄 오른쪽 주 버튼으로.
   목록 host(section.isa-forms)를 두 열 격자로 두고 [data-create-host]는 display:contents라 h2는 제목 줄 2열, 마법사 form·복제 원본·상태 줄은 전폭이다. 토글이 없을 때(폼이 없어 늘 펼침)는 격자를 쓰지 않는다. hidden은 아래 규칙이 지킨다. */
#app .isa-forms:has(> [data-forms-list]):has(> [data-create-host] > h2 > [data-create-toggle]){display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:0;align-items:start}
#app .isa-forms:has(> [data-forms-list]):has(> [data-create-host] > h2 > [data-create-toggle]) > *{grid-column:1 / -1;min-width:0}
#app .isa-forms:has(> [data-forms-list]):has(> [data-create-host] > h2 > [data-create-toggle]) > h1{grid-column:1;grid-row:1;align-self:stretch}
#app .isa-forms:has(> [data-forms-list]) > [data-create-host]:has(> h2 > [data-create-toggle]){display:contents}
#app .isa-forms:has(> [data-forms-list]) > [data-create-host][hidden]{display:none}
#app .isa-forms:has(> [data-forms-list]) > [data-create-host] > h2:has(> [data-create-toggle]){grid-column:2;grid-row:1;align-self:stretch;display:flex;align-items:flex-start;justify-content:flex-end;margin:0 0 16px;padding:0 0 16px 16px;border-bottom:1px solid var(--isa-line)}
#app .isa-forms:has(> [data-forms-list]) > [data-create-host] > :is(form[data-create],[data-create-source],[data-create-status]){grid-column:1 / -1}
#app .isa-forms:has(> [data-forms-list]) > [data-create-host] > h2 > button[data-create-toggle]{display:inline-flex;width:auto;min-height:40px;margin:0;padding:8px 18px;border:1px solid var(--isa-primary);border-radius:var(--isa-radius-sm);background:var(--isa-primary);color:var(--isa-on-primary);font-size:.9375rem;font-weight:600;white-space:nowrap}
#app .isa-forms:has(> [data-forms-list]) > [data-create-host] > h2 > button[data-create-toggle]::before{content:"＋" / "";color:inherit;font-weight:400}
#app .isa-forms:has(> [data-forms-list]) > [data-create-host] > h2 > button[data-create-toggle][aria-expanded=true]::before{content:"▾" / ""}
#app .isa-forms:has(> [data-forms-list]) > [data-create-host] > h2 > button[data-create-toggle]:hover{background:var(--isa-primary);color:var(--isa-on-primary);text-decoration:underline;text-underline-offset:3px}
/* 편집기: 제목 카드 머리띠(흰 카드 위 6px 폼 색, 옐로는 500), 단계 표시 색 면(현재 = 폼 색 연한 면 + 700 선·번호, 완료 = ok), 편집 중 질문 카드 왼쪽 선 = 폼 색 */
#app .forms-editor-title{padding:12px 18px 14px;background:var(--isa-surface);border:1px solid var(--isa-line);border-top:6px solid var(--isa-accent-700);border-radius:var(--isa-radius-md)}
#app .isa-forms[data-form-accent=yellow] .forms-editor-title{border-top-color:var(--isa-accent-500)}
#app ol.forms-editor-steps > li[data-step-state=done]{border-top-color:var(--isa-ok)}
#app ol.forms-editor-steps > li[data-step-state=done]::before{background:var(--isa-ok-bg);border-color:var(--isa-ok);color:var(--isa-ok)}
#app ol.forms-editor-steps > li[data-step-state=now]{padding:6px 8px 4px;border-top-color:var(--isa-accent-700);background:var(--isa-accent-50);border-radius:0 0 var(--isa-radius-pill) var(--isa-radius-pill)}
#app ol.forms-editor-steps > li[data-step-state=now]::before{background:var(--isa-accent-700);border-color:var(--isa-accent-700);color:var(--isa-on-primary)}
#app ol.forms-editor-steps [data-editor-public-info]{color:var(--isa-accent-900)}
#app [data-question-cards] > article[data-question]:focus-within{border-left-color:var(--isa-accent-700)}
/* 오른쪽 "이 폼의 색·접수 현황" 패널(editor-side.js): DOM은 질문 묶음 뒤(모바일처럼 아래, Tab 순서 = 화면 순서), 1000px 이상에서는 [data-editor-main] 격자의 오른쪽 열. 머리 sticky는 격자 밖이라 그대로. */
#app .forms-editor-main{display:block;min-width:0}
#app .forms-editor-side{margin:0 0 16px;padding:14px 16px 16px;background:var(--isa-surface);border:1px solid var(--isa-line);border-top:6px solid var(--isa-accent-700);border-radius:var(--isa-radius-md);font-size:.875rem;line-height:1.5}
#app .isa-forms[data-form-accent=yellow] .forms-editor-side{border-top-color:var(--isa-accent-500)}
#app .forms-editor-side > h2{margin:0 0 10px;font-size:1rem;font-weight:700;color:var(--isa-ink)}
#app .forms-editor-side-color{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin:0 0 12px;color:var(--isa-ink)}
#app .forms-editor-side-color > b{font-weight:700}
#app .forms-editor-side-swatch{display:inline-block;flex:0 0 auto;width:22px;height:22px;border:1px solid var(--isa-accent-900);border-radius:50%;background:var(--isa-btn-bg)}
/* 색 팔레트(editor-side.js, 2026-11-06): 6색 원형 버튼. 각 버튼이 data-form-accent를 달아 --isa-btn-bg가 그 색으로 다시 계산된다. 선택은 바깥 고리 + ✓. 선택자는 -color 뒤 공백으로 시작해 C-1 토큰 사용 허용 목록(form-accent-c12 시험)에 맞춘다. */
#app .forms-editor-side-color ~ [data-editor-side-palette]{display:grid;grid-template-columns:repeat(3,44px);gap:10px 14px;justify-content:start;margin:0 0 8px} /* 248px 열에 44px 6개는 한 줄에 안 들어가므로 3+3 두 줄이 의도된 배치 */
#app .forms-editor-side-color ~ [data-editor-side-palette] > button{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;min-height:44px;margin:0;padding:0;border:1px solid var(--isa-accent-900);border-radius:50%;background:var(--isa-btn-bg);color:var(--isa-btn-fg);font-size:1rem;font-weight:700;line-height:1;cursor:pointer;forced-color-adjust:none}
#app .forms-editor-side-color ~ [data-editor-side-palette] > button > span{visibility:hidden}
#app .forms-editor-side-color ~ [data-editor-side-palette] > button[aria-pressed=true]{box-shadow:0 0 0 2px var(--isa-surface),0 0 0 4px var(--isa-ink)}
#app .forms-editor-side-color ~ [data-editor-side-palette] > button[aria-pressed=true] > span{visibility:visible}
#app .forms-editor-side-color ~ [data-editor-side-palette] > button:focus-visible{outline:3px solid var(--isa-focus);outline-offset:7px}
#app .forms-editor-side-status{margin:0;color:var(--isa-ink);font-size:.8125rem}
#app .forms-editor-side-status:has(> [data-editor-side-color-message]:not(:empty)){margin:0 0 8px}
#app .forms-editor-side-status > button{min-height:44px;min-width:44px;margin:0 0 0 4px;padding:4px 10px;font-size:.8125rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app .forms-editor-side-more{margin:0 0 12px}
#app .forms-editor-side-more > button{min-height:44px;min-width:44px;margin:0;padding:2px 4px;border:0;background:none;color:var(--isa-ink);font-size:.8125rem;font-weight:500;text-decoration:underline;cursor:pointer;box-shadow:none}
@media (forced-colors: active){#app .forms-editor-side-color ~ [data-editor-side-palette] > button[aria-pressed=true]{border-width:4px}}
#app .forms-editor-side-facts{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px 12px;align-items:center;margin:0}
#app .forms-editor-side-facts > dt{margin:0;color:var(--isa-muted);font-weight:600}
#app .forms-editor-side-facts > dd{margin:0;color:var(--isa-ink);overflow-wrap:anywhere}
#app .forms-editor-side-facts > dd > [data-editor-side-period-draft]{display:inline-block;margin-left:4px;padding:0 8px;border-radius:var(--isa-radius-pill);background:var(--isa-warn-bg);color:var(--isa-warn);font-size:.75rem;font-weight:700} /* 리뷰 반영(2026-11-05): 초안 설정에서 읽은 기간이라는 표시('초안 기준') */
@media (min-width:1000px){
  #app .forms-editor-main{display:grid;grid-template-columns:minmax(0,1fr) 280px;column-gap:24px;align-items:start}
  #app .forms-editor-main > [data-editor-body]{grid-column:1;min-width:0}
  #app .forms-editor-main > [data-editor-side]{grid-column:2}
}
@media (max-width:760px), (pointer: coarse), (any-pointer: coarse){
  #app .forms-editor-side-color ~ [data-editor-side-palette] > button,#app .forms-editor-side-status > button,#app .forms-editor-side-more > button,#app .isa-forms:has(> [data-forms-list]) > [data-create-host] > h2 > button[data-create-toggle]{min-height:44px}
}

/* 2026-11-09 (사용자 3차 재검증): 폼 목록 묶음 제목·보관함, 접수 제어 버튼 */
#app .isa-forms > [data-forms-list] > .forms-group-title{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:0;padding:12px 16px;border-bottom:1px solid var(--isa-line);background:var(--isa-surface-2);font-size:.9375rem;font-weight:700;line-height:1.4;color:var(--isa-ink)}
#app .isa-forms > [data-forms-list] > .forms-group-title:not(:first-child){border-top:1px solid var(--isa-line)}
#app .isa-forms > [data-forms-list] > .forms-group-title > .forms-group-count{font-size:.8125rem;font-weight:600;color:var(--isa-muted)}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > [data-form-view-archive]{align-self:end;min-height:44px;margin:0;padding:8px 18px;border:2px solid var(--isa-ink);border-radius:var(--isa-radius-sm);background:var(--isa-surface);color:var(--isa-ink);font-size:.9375rem;font-weight:700}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-view-extra{margin:0}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] [data-form-view-trash]{min-height:44px;margin:0;padding:0 4px;border:0;background:transparent;color:var(--isa-muted);font-size:.8125rem;font-weight:600;text-decoration:underline;text-underline-offset:3px}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-view-head{grid-column:1 / -1;display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-view-head > h2{margin:0;font-size:1.125rem;font-weight:700;color:var(--isa-ink)}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-view-head > h2:focus-visible{outline:3px solid var(--isa-focus);outline-offset:3px}
#app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > .forms-view-head > button{min-height:44px;margin:0;padding:8px 16px;font-size:.875rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app .isa-forms > [data-notice-view]{min-height:44px;margin:0 0 10px;padding:8px 16px;font-size:.875rem;font-weight:600;border-radius:var(--isa-radius-sm)}
#app .forms-editor-side-facts > dd > .forms-editor-side-intake:not(:empty){margin:8px 0 4px}
#app .forms-quick-intake{min-height:44px;margin:0;padding:8px 18px;border:2px solid var(--isa-ink);border-radius:var(--isa-radius-sm);background:var(--isa-surface);color:var(--isa-ink);font-size:.9375rem;font-weight:700}
#app .forms-quick-intake[data-quick-control=start]{border-color:var(--isa-primary);background:var(--isa-primary);color:var(--isa-on-primary)}
#app .forms-quick-intake:focus-visible{outline:3px solid var(--isa-focus);outline-offset:3px}
#app .forms-quick-intake:disabled{opacity:.55}
#app .forms-quick-reason{display:block;font-size:.8125rem;color:var(--isa-muted)}
#app .forms-editor-status > .forms-quick-head:not(:empty){display:inline-flex;align-items:center} /* 머리말 상태 배지 옆, 모든 폭에서 보임(첫 화면 안) */
@media (max-width:760px){
 #app .isa-forms:has(> [data-forms-list]) > [data-recruitment-list-filters] > [data-form-view-archive]{justify-self:stretch}
 #app .isa-forms > [data-notice-view]{width:100%}
}
