/* CSS Flexbox 실험판 전용 CSS (2026-10-21). 정렬 실험대: [무대(넓은 화면에서 위에 붙음) → 부모 | 고른 항목 → 크기 풀이] → 코드 → 예시 배치 12개. 공용 부품은 assets/v2.css */
.flx{container:flx / inline-size}
.flx svg{flex:0 0 auto}
.flx-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* 무대 묶음 */
.flx-top{padding:14px 18px 12px;background:var(--card);border-bottom:1px solid var(--soft);border-radius:var(--radius) var(--radius) 0 0}
.flx-top.is-stick{position:sticky;top:var(--hd-h,52px);z-index:6;box-shadow:0 8px 14px -12px rgba(0,0,0,.35)}
.flx-bar{display:flex;align-items:center;gap:8px 14px;flex-wrap:wrap;margin-bottom:10px}
.flx-count{display:inline-flex;align-items:center;gap:6px}
.flx-ib{width:32px;padding:0;justify-content:center}
.flx-ib svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
.flx-n{min-width:22px;text-align:center;font-family:var(--sans);font-size:15px;font-weight:800;font-variant-numeric:tabular-nums lining-nums}
.flx-size{margin-right:auto;font-family:var(--mono);font-size:12px;color:var(--muted);white-space:nowrap}

.flx-stage{position:relative;padding:28px 18px 20px 32px;border-radius:var(--radius);background:radial-gradient(var(--dot) 1px,transparent 1.3px) 0 0 / 14px 14px,var(--wash);overflow:auto;overscroll-behavior:contain}
.flx-box{position:relative;box-sizing:border-box;display:flex;max-width:100%;padding:12px;border:1px dashed var(--line);background:var(--paper)}
.flx-item{position:relative;box-sizing:border-box;padding:10px 14px;border:1px solid var(--line);background:var(--btn);color:var(--ink);font-family:var(--sans);font-size:16px;font-weight:600;line-height:1.3;cursor:pointer;outline:0;transition:background var(--ease)}
.flx-item[data-z="s"],.flx-mi[data-z="s"]{font-size:13px}
.flx-item[data-z="l"],.flx-mi[data-z="l"]{font-size:26px}
.flx-item > i{position:absolute;top:-7px;left:5px;padding:0 3px;font-family:var(--mono);font-size:9.5px;font-style:normal;font-weight:700;line-height:12px;color:var(--muted);background:var(--paper);pointer-events:none}
.flx-item:hover{background:color-mix(in srgb, var(--ink) 7%, var(--btn))}
.flx-item.is-cur{background:color-mix(in srgb, var(--ink) 13%, var(--btn));box-shadow:inset 0 0 0 1px var(--ink)}
.flx-item.is-cur > i{background:var(--ink);color:var(--paper)}
.flx-item:focus-visible,.flx-grip:focus-visible,.flx-tile:focus-visible,.flx-pre:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* 안내선 */
.flx-over{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible;pointer-events:none;z-index:1}
.flx-over .hb{fill:transparent}
.flx-over .hl{stroke:color-mix(in srgb, var(--muted) 60%, transparent);stroke-width:1.2}
.flx-over .hx{stroke:var(--accent);stroke-width:1.6}
.flx-free{fill:url(#flxHatch)}
.flx-gapb{fill:color-mix(in srgb, var(--ink) 18%, transparent)}
.flx-overb{fill:url(#flxHatchX);stroke:var(--accent);stroke-width:1;stroke-dasharray:3 2}
.flx-gt{font-family:var(--mono);font-size:11px;font-weight:700;fill:var(--ink);paint-order:stroke;stroke:var(--paper);stroke-width:3px;stroke-linejoin:round}
.flx-gt.flx-ovt{fill:var(--accent)}
.flx-ax{fill:none;stroke:var(--muted);stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
.flx-axt{font-family:var(--sans);font-size:11px;font-weight:650;fill:var(--muted)}

/* 크기 손잡이 */
.flx-grip{position:absolute;z-index:2;display:grid;place-items:center;width:26px;height:26px;margin:-13px 0 0 -13px;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--paper);color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.2);cursor:nwse-resize;touch-action:none}
.flx-grip svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round}
.flx.is-drag,.flx.is-drag *{cursor:nwse-resize!important;user-select:none}
.flx-say{min-height:calc(1.55em * 2);margin:10px 0 0;font-size:13.5px;line-height:1.55;color:var(--ink)}

/* 조작판: 부모 | 고른 항목 */
.flx-panels{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.flx-panels *{scroll-margin-top:calc(var(--hd-h,52px) + var(--flx-th,0px) + 12px)}
.flx-parent,.flx-child{padding:16px 18px 6px;min-width:0}
.flx-child{container:flxch / inline-size}
.flx-parent{border-right:1px solid var(--soft)}
.flx-ph{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin:0 0 12px}
.flx-ph b{font-family:var(--serif);font-size:15px;font-weight:800;letter-spacing:-.01em}
.flx-ph code{font-family:var(--mono);font-size:12px;color:var(--muted)}
.flx-g{margin:0 0 13px}
.flx-gh{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:2px 8px;margin:0 0 5px}
.flx-cv{min-width:0;font-family:var(--mono);font-size:11px;color:var(--ink);overflow-wrap:anywhere}
.flx-seg{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:4px;width:100%}
.flx-seg button{display:grid;place-items:center;height:34px;padding:0 3px;min-width:0}
.flx-seg svg{width:24px;height:16px;fill:currentColor;transition:transform .28s cubic-bezier(.2,.7,.2,1)}
.flx-seg svg .fr{fill:none;stroke:currentColor;stroke-width:1;opacity:.5}
.flx-seg svg .lt{opacity:.38}
.flx-seg svg .bl{fill:none;stroke:currentColor;stroke-width:1;stroke-dasharray:2 1.5}
.flx-seg svg .ar{fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
.flx-tx{font-family:var(--mono);font-size:11.5px;font-weight:700}
/* 정렬 아이콘은 지금 방향을 따라 돈다: 주축(justify) = 주축 방향, 교차축(align) = 교차축 방향 */
.flx[data-dir="row-reverse"] .flx-ico-m svg{transform:scaleX(-1)}
.flx[data-dir="column"] .flx-ico-m svg{transform:rotate(90deg)}
.flx[data-dir="column-reverse"] .flx-ico-m svg{transform:rotate(-90deg)}
.flx[data-dir^="row"][data-wrap="wrap-reverse"] .flx-ico-c svg{transform:scaleY(-1)}
.flx[data-dir^="column"] .flx-ico-c svg{transform:rotate(-90deg)}
.flx[data-dir^="column"][data-wrap="wrap-reverse"] .flx-ico-c svg{transform:rotate(-90deg) scaleY(-1)}
.flx-ico-x button[data-v^="column"] svg{transform:rotate(90deg)}
.flx-seg.is-off button[aria-pressed="false"]{opacity:.55}
.flx-note{margin:6px 0 0;font-size:12px;line-height:1.5;color:var(--muted)}
.flx-note:empty{display:none}
.flx-note.is-error{color:var(--accent)}
.flx-gap{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px;margin:0 0 12px}
.flx-f .v2-label code{font-family:var(--mono);font-size:10.5px;font-weight:400;color:var(--muted);white-space:nowrap}
.flx-nums .v2-label code{display:block;margin-top:1px}
.flx-rs svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.flx-pick{margin:0 0 12px}
.flx-pick button{height:30px;padding:0;font-family:var(--mono);font-size:12px}
.flx-tf{margin:0 0 12px}
.flx-tl{display:flex!important;align-items:center;justify-content:space-between;gap:8px;margin:0 0 5px}
.flx-tl label{color:inherit}
.flx-fs{display:inline-flex;gap:3px}
.flx-fs button{display:grid;place-items:center;width:26px;height:24px;padding:0;border:1px solid var(--soft);border-radius:var(--radius);background:var(--paper);font-family:var(--sans);font-weight:700;line-height:1;color:var(--muted)}
.flx-fs button[data-v="s"]{font-size:10.5px}.flx-fs button[data-v="m"]{font-size:13px}.flx-fs button[data-v="l"]{font-size:16.5px}
.flx-fs button[aria-pressed="true"]{background:var(--fill);border-color:var(--fill);color:var(--on-fill)}
.flx-tf .v2-input input{text-align:left}
.flx-qk button{height:40px;align-content:center;gap:1px}
.flx-qk b{font-family:var(--mono);font-size:12.5px;font-weight:700}
.flx-qk small{font-family:var(--mono);font-size:10px;font-weight:400;opacity:.78}
.flx-nums{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1.3fr);gap:8px}
/* 순서 칸 | 주축 auto 여백: 같은 줄이라 단추 높이를 입력 상자(42px)에 맞춤 */
.flx-om{display:grid;grid-template-columns:64px minmax(0,1fr);gap:8px;margin:0 0 13px}
.flx-om .v2-label{display:block}
.flx-mf .flx-gh{display:flex;margin:0 0 5px}
.flx-mf .flx-cv{font-weight:400}
.flx-om .flx-ma button{height:var(--v2-ctl)}
.flx-nums + .flx-note{margin:6px 0 10px}
.flx-nums + .flx-note:empty{display:block;height:0;margin:0 0 12px}
.flx-ma button{font-size:12px}
.flx-z0{margin:0 0 14px;flex-wrap:wrap}
.flx-z0 span{font-family:var(--mono);font-size:12px}

/* 크기 풀이 */
.flx-math{padding:14px 18px 16px;border-top:1px solid var(--soft)}
.flx-mh{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:4px 12px;margin:0 0 9px}
.flx-line + .flx-line{margin-top:14px;padding-top:12px;border-top:1px solid var(--soft)}
.flx-lh{margin:0 0 6px;font-family:var(--sans);font-size:12px;font-weight:700;color:var(--muted)}
.flx-eq{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.flx-eq span{display:grid;gap:1px;padding:5px 9px;background:var(--paper);border:1px solid var(--soft);border-radius:var(--radius)}
.flx-eq em{font-family:var(--sans);font-size:11px;font-style:normal;color:var(--muted);white-space:nowrap}
.flx-eq b{font-family:var(--sans);font-size:15px;font-weight:800;font-variant-numeric:tabular-nums lining-nums;white-space:nowrap}
.flx-eq i{font-style:normal;font-weight:700;color:var(--muted)}
.flx-eq .is-neg b{color:var(--accent)}
.flx-how{margin:8px 0 10px;font-size:13px;line-height:1.55}
.flx-warn{color:var(--accent)}
.flx-cards{display:flex;flex-wrap:wrap;gap:8px}
.flx-card{flex:1 1 calc((100% - (var(--cols,3) - 1) * 8px) / var(--cols,3));box-sizing:border-box;min-width:0;padding:9px 10px;background:var(--paper);border:1px solid var(--soft);border-radius:var(--radius)}
.flx-card.is-cur{border-color:var(--ink)}
.flx-ch{display:flex;align-items:baseline;gap:6px;min-width:0}
.flx-ch b{font-family:var(--mono);font-size:11px}
.flx-ch span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:650}
.flx-ch small{margin-left:auto;flex:none;font-family:var(--mono);font-size:10.5px;color:var(--muted)}
.flx-bar2{display:flex;height:8px;margin:7px 0 6px;background:color-mix(in srgb, var(--ink) 6%, transparent)}
.flx-bar2 i{display:block;height:100%}
.flx-bar2 .b{background:color-mix(in srgb, var(--ink) 72%, transparent)}
.flx-bar2 .g{background:color-mix(in srgb, var(--ink) 30%, transparent)}
.flx-bar2 .s{background:repeating-linear-gradient(-45deg,var(--accent) 0 2px,transparent 2px 5px)}
.flx-cv2{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 6px;font-size:12px;color:var(--muted)}
.flx-cv2 b{font-weight:800;color:var(--ink);font-variant-numeric:tabular-nums lining-nums}
.flx-cv2 i{font-style:normal}
.flx-card p{margin:4px 0 0;font-size:12px;line-height:1.45;color:var(--muted)}

/* 코드 */
.flx-code{padding:14px 18px 16px;border-top:1px solid var(--soft)}
.flx-chead{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px;margin:0 0 10px}
.flx-tabs button{min-width:56px}
.flx-acts{display:flex;flex-wrap:wrap;gap:6px;margin-left:auto}
.flx-pre{margin:0;padding:12px 14px;background:var(--wash);border:1px solid var(--soft);border-radius:var(--radius);font-family:var(--mono);font-size:12.5px;line-height:1.6;color:var(--ink);white-space:pre;overflow-x:auto;tab-size:2}

/* 예시 배치 */
.flx-exw{padding:14px 18px 18px;border-top:1px solid var(--soft)}
.flx-exh{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:4px 12px;margin:0 0 10px}
.flx-ex{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.flx-tile{display:grid;align-content:start;gap:4px;min-width:0;padding:6px 6px 8px;border:1px solid var(--soft);border-radius:var(--radius);background:var(--paper);color:var(--ink);text-align:left;cursor:pointer;transition:border-color var(--ease)}
.flx-tile:hover{border-color:var(--line)}
.flx-tv{position:relative;display:block;height:84px;overflow:hidden;background:var(--wash);border-radius:var(--radius)}
.flx-mini{position:absolute;left:0;top:0;display:flex;box-sizing:border-box;padding:12px;border:1px dashed var(--line);background:var(--paper);transform-origin:0 0;pointer-events:none}
.flx-mi{box-sizing:border-box;padding:10px 14px;border:1px solid var(--line);background:var(--btn);color:var(--ink);font-family:var(--sans);font-size:16px;font-weight:600;line-height:1.3}
.flx-tile b{padding:2px 2px 0;font-family:var(--sans);font-size:12.5px;font-weight:700;line-height:1.35}
.flx-tile code{padding:0 2px;font-family:var(--mono);font-size:10px;line-height:1.35;color:var(--muted);overflow-wrap:anywhere}

@container flxch (max-width: 250px){
  .flx-nums{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
}
@container flx (max-width: 759px){
  .flx-ex{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@container flx (max-width: 639px){
  .flx-panels{grid-template-columns:minmax(0,1fr)}
  .flx-parent{border-right:0;border-bottom:1px solid var(--soft)}
}
@container flx (max-width: 479px){
  .flx-top,.flx-parent,.flx-child,.flx-math,.flx-code,.flx-exw{padding-left:12px;padding-right:12px}
  .flx-stage{padding:26px 12px 18px 28px}
  .flx-ex{grid-template-columns:repeat(2,minmax(0,1fr))}
  .flx-acts{margin-left:0}
  .flx-rs{width:32px;padding:0;justify-content:center}
  .flx-rs span{display:none}
  .flx-size{font-size:11px}
}
@media (prefers-reduced-motion: reduce){
  .flx-seg svg,.flx-item,.flx-tile{transition:none}
}
