/* 색상 팔레트 도구 전용 CSS (2026-10-20). '색상환 작업대': 핵심 색 띠 → [색상환 | 조작] → 밝기 단계 표 → [선택한 색 | 색각별로 보기] → 내보내기. 공용 부품은 assets/v2.css */
.cpt{container:cpt / inline-size}
.cpt-top{padding:16px 18px 12px;border-bottom:1px solid var(--soft)}
.cpt-keys{display:grid;grid-template-columns:repeat(var(--n,3),minmax(0,1fr));gap:8px}
.cpt-key{display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-start;gap:2px;min-width:0;height:104px;padding:10px 12px;border:1px solid color-mix(in srgb, var(--ink) 12%, transparent);border-radius:var(--radius);cursor:pointer;text-align:left;font-family:var(--sans);transition:background-color .35s ease,color .35s ease,box-shadow .15s ease}
.cpt-key[hidden]{display:none}
.cpt-key:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.cpt-key[aria-pressed="true"]{box-shadow:inset 0 0 0 3px currentColor}
.cpt-kr{font-size:11.5px;font-weight:700;opacity:.9}
.cpt-kh{font-size:17px;font-weight:800;letter-spacing:.01em;font-variant-numeric:tabular-nums}
.cpt-kn{font-size:11.5px;font-weight:600;opacity:.85;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.cpt-line{margin:10px 0 0;font-family:var(--sans);font-size:12.5px;line-height:1.55;font-weight:600;color:var(--ink)}
.cpt-line:empty{display:none}
/* 색상환 | 조작 */
.cpt-mid{display:grid;grid-template-columns:minmax(0,270px) minmax(0,1fr);gap:22px;padding:16px 18px 18px;border-bottom:1px solid var(--soft)}
.cpt-wbox{min-width:0}
.cpt-wbox > .v2-label{display:block;margin-bottom:8px}
.cpt-disk{position:relative;width:100%;max-width:270px;aspect-ratio:1;margin:0 auto;border-radius:50%;background:repeating-linear-gradient(45deg,transparent 0 5px,color-mix(in srgb, var(--ink) 9%, transparent) 5px 6px)}
.cpt-disk canvas,.cpt-wheel{position:absolute;inset:0;width:100%;height:100%}
.cpt-wheel{overflow:visible;touch-action:none;cursor:crosshair;border-radius:50%}
.cpt-wheel:focus-visible{outline:2px solid var(--accent);outline-offset:4px}
.cpt-ring{fill:none;stroke:color-mix(in srgb, var(--ink) 18%, transparent);stroke-width:1}
.cpt-pt{transform-box:view-box;transform-origin:120px 120px;transition:transform .5s cubic-bezier(.2,.7,.2,1)}
.cpt-pt line{stroke:var(--paper);stroke-width:1.6;opacity:.9}
.cpt-pt circle{stroke:var(--paper);stroke-width:2.5;transition:fill .35s ease}
.cpt-pt.is-base circle{stroke-width:3.5;filter:drop-shadow(0 1px 2px rgba(0,0,0,.35))}
.cpt-pt.is-off{opacity:0}
.cpt-pt.is-off line{display:none}
.cpt.is-drag .cpt-pt,.cpt.is-drag .cpt-pt circle,.cpt.is-drag .cpt-key{transition:none}
.cpt-lrow{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-top:12px}
.cpt-lrow output{font-family:var(--sans);font-size:12.5px;font-weight:700;font-variant-numeric:tabular-nums}
.cpt-range{display:block;width:100%;margin:6px 0 0;accent-color:var(--ink)}
.cpt-note{margin:8px 0 0;font-family:var(--sans);font-size:12px;line-height:1.55;color:var(--muted)}
.cpt-ctl{min-width:0;display:flex;flex-direction:column} /* 폼을 품은 칸이라 테마가 v2in 컨테이너로 잡는다 */
.cpt-form{display:grid;grid-template-columns:minmax(0,1fr);gap:14px}
.cpt-form .v2-f{min-width:0}
.cpt-form .v2-f > .v2-label{display:block}
.cpt-inrow{display:flex;gap:6px;margin-top:6px;align-items:stretch}
.cpt-pick{flex:0 0 auto;width:var(--v2-ctl,42px);height:var(--v2-ctl,42px);padding:3px;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);cursor:pointer}
.cpt-pick::-webkit-color-swatch-wrapper{padding:0}
.cpt-pick::-webkit-color-swatch{border:0;border-radius:calc(var(--radius) - 2px)}
.cpt-pick::-moz-color-swatch{border:0;border-radius:calc(var(--radius) - 2px)}
.cpt-in{flex:1 1 auto;min-width:0;width:100%;height:var(--v2-ctl,42px);padding:0 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}
.cpt-in:focus-visible,.cpt-pick:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.v2-f.is-invalid .cpt-in{border-color:var(--accent)}
.cpt-rand{flex:0 0 auto;white-space:nowrap}
.cpt-help{margin:6px 0 0;font-family:var(--sans);font-size:11.5px;line-height:1.5;color:var(--muted)}
.cpt-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.cpt-chip{width:28px;height:28px;padding:0;border:1px solid color-mix(in srgb, var(--ink) 15%, transparent);border-radius:50%;cursor:pointer;transition:transform .15s ease}
.cpt-chip:hover{transform:scale(1.12)}
.cpt-chip:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.cpt-seg{margin-top:6px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
.cpt-seg button{min-width:0;height:var(--v2-ctl,42px);padding:0 6px;font-family:var(--sans);font-size:13px;font-weight:700;white-space:normal;line-height:1.15;overflow:hidden}
.cpt-seg--rule{grid-template-columns:repeat(3,minmax(0,1fr))}
@container v2in (max-width:440px){.cpt-seg--rule{grid-template-columns:repeat(2,minmax(0,1fr))}}
.cpt-acts{display:flex;gap:6px;flex-wrap:wrap;margin-top:auto;padding-top:14px}
/* 밝기 단계 표 */
.cpt-tones{padding:14px 18px 16px;border-bottom:1px solid var(--soft)}
.cpt-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.cpt-hint{font-family:var(--sans);font-size:11.5px;color:var(--muted)}
.cpt-tg{display:grid;gap:3px}
.cpt-th,.cpt-tr{display:grid;grid-template-columns:76px repeat(10,minmax(0,1fr));gap:3px;align-items:stretch}
.cpt-tr[hidden]{display:none}
.cpt-th span{font-family:var(--sans);font-size:10.5px;font-weight:700;color:var(--muted);text-align:center;font-variant-numeric:tabular-nums}
.cpt-tl{display:flex;align-items:center;gap:6px;min-width:0;font-family:var(--sans);font-size:11.5px;font-weight:700;color:var(--ink)}
.cpt-tl i{flex:0 0 auto;width:12px;height:12px;border-radius:50%;box-shadow:0 0 0 1px color-mix(in srgb, var(--ink) 15%, transparent)}
.cpt-tl span{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cpt-tc{position:relative;display:grid;place-items:center;min-width:0;height:44px;padding:0;border:0;border-radius:4px;cursor:pointer;font-family:var(--sans);font-size:10.5px;font-weight:700;letter-spacing:.01em;font-variant-numeric:tabular-nums;transition:background-color .35s ease,color .35s ease}
.cpt-tc span{white-space:nowrap;overflow:hidden}
.cpt-tc.is-key::after{content:"";position:absolute;top:4px;right:4px;width:6px;height:6px;border-radius:50%;background:currentColor}
.cpt-tc[aria-pressed="true"]{box-shadow:0 0 0 2px var(--paper),0 0 0 4px var(--ink);z-index:1}
.cpt-tc:focus-visible{outline:2px solid var(--accent);outline-offset:3px;z-index:2}
/* 선택한 색 | 색각별로 보기 */
.cpt-low{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr)}
.cpt-info{padding:16px 18px 18px;min-width:0}
.cpt-info > .v2-label,.cpt-cvdbox > .v2-label{display:block;margin-bottom:8px}
.cpt-ib{display:grid;grid-template-columns:minmax(0,168px) minmax(0,1fr);gap:16px;align-items:stretch}
.cpt-sw{display:flex;flex-direction:column;justify-content:center;gap:14px;min-height:150px;padding:12px;border-radius:var(--radius);border:1px solid color-mix(in srgb, var(--ink) 12%, transparent);font-family:var(--sans);transition:background-color .35s ease}
.cpt-sw p{margin:0;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;column-gap:8px;min-width:0}
.cpt-sw b{font-size:26px;font-weight:800;line-height:1}
.cpt-sw span{font-size:11px;font-weight:700;line-height:1.35;font-variant-numeric:tabular-nums;min-width:0}
.cpt-sw span i{display:block;font-style:normal;font-size:12.5px;font-weight:800}
.cpt-rows{margin:0}
.cpt-rows li{gap:8px}
.cpt-rows li > span{flex:0 0 auto;color:var(--muted)}
.cpt-rows li > b{min-width:0;text-align:right;white-space:normal;font-weight:600}
.cpt-code{min-width:0;padding:2px 4px;margin:-2px -4px;border:0;border-radius:4px;background:none;color:var(--ink);cursor:pointer;font-family:var(--sans);font-size:13px;font-weight:700;text-align:right;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.cpt-code:hover{background:var(--soft)}
.cpt-code:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.cpt-mini{display:inline-block;width:11px;height:11px;margin-right:5px;border-radius:3px;vertical-align:-1px;box-shadow:0 0 0 1px color-mix(in srgb, var(--ink) 15%, transparent)}
#cptSetBase{margin-top:12px}
.cpt-cvdbox{padding:16px 18px 18px;min-width:0;border-left:1px solid var(--soft)}
.cpt-cvlist{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.cpt-cv{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"l d" "s s" "b b";gap:5px 8px;padding:9px 10px;border-radius:var(--radius);background:color-mix(in srgb, var(--soft) 55%, transparent)}
.cpt-cvn{grid-area:l;font-family:var(--sans);font-size:12px;font-weight:700;color:var(--ink);min-width:0}
.cpt-cvs{grid-area:s;display:flex;gap:4px}
.cpt-cvs i{flex:1 1 0;height:22px;border-radius:4px;box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--ink) 10%, transparent);transition:background-color .35s ease}
.cpt-cvs i[hidden]{display:none}
.cpt-cvd{grid-area:d;display:flex;align-items:baseline;gap:6px;font-family:var(--sans);font-size:11.5px;font-variant-numeric:tabular-nums;justify-self:end;min-width:0}
.cpt-cvd b{font-weight:800}
.cpt-cvd em{font-style:normal;color:var(--muted);font-weight:600}
.cpt-cv[data-f="close"] .cpt-cvd em,.cpt-cv[data-f="same"] .cpt-cvd em{color:var(--accent);font-weight:800}
.cpt-cvb{grid-area:b;position:relative;height:4px;border-radius:2px;background:color-mix(in srgb, var(--ink) 10%, transparent)}
.cpt-cvb::after{content:"";position:absolute;left:50%;top:-2px;width:1px;height:8px;background:var(--muted)}
.cpt-cvb i{position:absolute;left:0;top:0;bottom:0;border-radius:2px;background:var(--ink);transition:width .5s ease}
.cpt-cv[data-f="close"] .cpt-cvb i,.cpt-cv[data-f="same"] .cpt-cvb i{background:var(--accent)}
/* 내보내기 */
.cpt-exp{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:12px 18px 14px;border-top:1px solid var(--soft)}
.cpt-status{flex:1 1 180px;min-height:18px}
.cpt.is-still *,.cpt.is-still .cpt-pt{transition:none !important}
@media (prefers-reduced-motion:reduce){.cpt-pt,.cpt-pt circle,.cpt-key,.cpt-tc,.cpt-sw,.cpt-cvs i,.cpt-cvb i,.cpt-chip{transition:none}}
@container cpt (max-width:720px){
  .cpt-low{grid-template-columns:minmax(0,1fr)}
  .cpt-cvdbox{border-left:0;border-top:1px solid var(--soft)}
  .cpt-tc span{font-size:9.5px}
}
@container cpt (max-width:640px){
  .cpt-tc span{display:none}
}
@container cpt (max-width:600px){
  .cpt-top,.cpt-mid,.cpt-tones,.cpt-info,.cpt-cvdbox,.cpt-exp{padding-left:12px;padding-right:12px}
  .cpt-mid{grid-template-columns:minmax(0,1fr);gap:18px}
  .cpt-disk{max-width:250px}
  .cpt-key{height:84px;padding:8px}
  .cpt-kh{font-size:14px}
  .cpt-th,.cpt-tr{grid-template-columns:40px repeat(10,minmax(0,1fr));gap:2px}
  .cpt-tg{gap:2px}
  .cpt-tl{font-size:10px;gap:4px}
  .cpt-tl i{width:9px;height:9px}
  .cpt-tc{height:38px}
}
@container cpt (max-width:420px){
  .cpt-ib{grid-template-columns:minmax(0,1fr)}
  .cpt-sw{min-height:0}
  .cpt-keys{gap:5px}
  .cpt-kn{display:none}
  .cpt-kh{font-size:12.5px}
  .cpt-th,.cpt-tr{grid-template-columns:30px repeat(10,minmax(0,1fr))}
  .cpt-tl span{display:none}
  .cpt-tl i{width:12px;height:12px}
}
