/* 303 클라이언트와 서버 사이 API의 응답, 재시도, 인증 = API 문서와 요청 화면(2026-10-16 글마다 다른 레이아웃).
   요청과 응답은 두 줄 시퀀스(화면 ↔ 서버 메시지), 용어는 사전 항목, 역할은 두 층, 상태는 단추 세 모양, 지연은 요청 폭포 막대,
   외부 장애 대응은 대체 사슬, 진행 방식은 연동 단자판, 병행 작업은 두 줄 합류, 인증 등은 요청 머리글, 버전은 세 칸, 검수는 표 */
.v-artd .sp-303 .prose{font-size:17px}
.v-artd .sp-303 :where(.prose) .ap{--code:ui-monospace,"SF Mono",Menlo,monospace}
.v-artd .sp-303 .prose h2{margin:0 0 18px;padding:0;border:0;font-size:27px;letter-spacing:-.8px;display:block;min-height:0}
.v-artd .sp-303 .prose h2::before,.v-artd .sp-303 .prose h2::after{content:none}
.v-artd .sp-303 :where(.prose) .ap-s{padding:58px 0 6px}
.v-artd .sp-303 :where(.prose) .ap-s>p{margin:0 0 16px}
.v-artd .sp-303 :where(.prose) .ap-lead{font-size:20px;line-height:1.7;color:var(--ink);margin:0 0 28px}
.v-artd .sp-303 :where(.prose) .ap-lead b{color:var(--blue)}

/* 시퀀스 */
.v-artd .sp-303 :where(.prose) .ap-seq{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:0 0;margin:0 0 22px;padding:0 0 10px}
.v-artd .sp-303 :where(.prose) .ap-seq::before,.v-artd .sp-303 :where(.prose) .ap-seq::after{content:"";position:absolute;top:44px;bottom:0;width:2px;background:repeating-linear-gradient(var(--line) 0 6px,transparent 6px 12px)}
.v-artd .sp-303 :where(.prose) .ap-seq::before{left:60px}
.v-artd .sp-303 :where(.prose) .ap-seq::after{right:60px}
.v-artd .sp-303 :where(.prose) .aq-lane{margin:0 0 14px;padding:10px 0;border-radius:10px;background:var(--ink);color:#fff;font-size:15px;font-weight:800;text-align:center;width:120px}
.v-artd .sp-303 :where(.prose) .aq-r{justify-self:end;background:var(--blue)}
.v-artd .sp-303 :where(.prose) .aq-msg{grid-column:1/-1;position:relative;width:72%;margin:8px 0 14px;padding:16px 18px;border-radius:14px;background:#fff;border:1px solid var(--line);box-shadow:0 14px 30px -24px rgba(27,31,58,.5);z-index:1}
.v-artd .sp-303 :where(.prose) .aq-req{margin-left:70px}
.v-artd .sp-303 :where(.prose) .aq-res{justify-self:end;margin-right:70px;background:var(--soft)}
.v-artd .sp-303 :where(.prose) .aq-msg::after{content:"";position:absolute;top:24px;width:58px;height:2px;background:var(--blue)}
.v-artd .sp-303 :where(.prose) .aq-req::after{right:-60px}
.v-artd .sp-303 :where(.prose) .aq-res::after{left:-60px;background:var(--ink)}
.v-artd .sp-303 :where(.prose) .aq-req::before,.v-artd .sp-303 :where(.prose) .aq-res::before{content:"";position:absolute;top:19px;border:6px solid transparent;z-index:2}
.v-artd .sp-303 :where(.prose) .aq-req::before{right:-60px;border-left:9px solid var(--blue);border-right:0}
.v-artd .sp-303 :where(.prose) .aq-res::before{left:-60px;border-right:9px solid var(--ink);border-left:0}
.v-artd .sp-303 :where(.prose) .aq-k{margin:0 0 8px;font-size:15px;font-weight:800;color:var(--ink)}
.v-artd .sp-303 :where(.prose) .aq-msg pre{margin:0 0 10px;padding:10px 12px;border-radius:8px;background:#0f1320;color:#e4e8fb;font:500 14px/1.7 "Pretendard Variable",Pretendard,sans-serif;white-space:pre-wrap}
.v-artd .sp-303 :where(.prose) .aq-msg pre span{display:inline-block;min-width:88px;color:#8fb0ff;font-family:Pretendard Variable,Pretendard,sans-serif;font-weight:700}
.v-artd .sp-303 :where(.prose) .aq-d{margin:0;font-size:15px;line-height:1.6;color:var(--sub)}

/* 사전 항목 */
.v-artd .sp-303 :where(.prose) .ap-dict{display:grid;grid-template-columns:repeat(3,1fr);gap:0;margin:22px 0 0;border-top:2px solid var(--ink)}
.v-artd .sp-303 :where(.prose) .ap-dict div{padding:14px 14px 12px}
.v-artd .sp-303 :where(.prose) .ap-dict div+div{border-left:1px solid var(--line)}
.v-artd .sp-303 :where(.prose) .ap-dict dt{font-size:13.5px;color:var(--sub)}
.v-artd .sp-303 :where(.prose) .ap-dict dt::after{content:" ="}
.v-artd .sp-303 :where(.prose) .ap-dict dd{margin:2px 0 0;font-size:17px;font-weight:800;color:var(--ink)}

/* 두 층 */
.v-artd .sp-303 :where(.prose) .ap-layer{margin:6px 0 22px;perspective:800px}
.v-artd .sp-303 :where(.prose) .al{margin:0;padding:16px 20px;font-size:15.5px;color:var(--sub);border-radius:12px}
.v-artd .sp-303 :where(.prose) .al b{display:inline-block;width:62px;color:var(--ink);font-size:17px}
.v-artd .sp-303 :where(.prose) .al-ui{background:#fff;border:2px solid var(--blue);position:relative;z-index:1;margin:0 24px -8px}
.v-artd .sp-303 :where(.prose) .al-sv{background:var(--navy);color:#cfd6f2;padding-top:24px}
.v-artd .sp-303 :where(.prose) .al-sv b{color:#fff}

/* 단추 세 모양 */
.v-artd .sp-303 :where(.prose) .ap-btns{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:6px 0 22px}
.v-artd .sp-303 :where(.prose) .ab{padding:20px 16px 16px;border-radius:16px;background:var(--soft);text-align:center}
.v-artd .sp-303 :where(.prose) .ab p{margin:14px 0 0;font-size:14.5px;line-height:1.55;color:var(--sub);text-align:left}
.v-artd .sp-303 :where(.prose) .ab b{display:block;margin-bottom:4px;font-size:16px;color:var(--ink)}
.v-artd .sp-303 :where(.prose) .ab-ui{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:140px;padding:12px 18px;border-radius:12px;font-size:15px;font-weight:800}
.v-artd .sp-303 :where(.prose) .ab-wait{background:#c9d4ff;color:#1d3fc4}
.v-artd .sp-303 :where(.prose) .ab-wait i{width:14px;height:14px;border-radius:50%;border:2.5px solid #1d3fc4;border-right-color:transparent;animation:sp303-spin 1s linear infinite}
@keyframes sp303-spin{to{transform:rotate(360deg)}}
.v-artd .sp-303 :where(.prose) .ab-fail{background:#fff;color:#b3261e;box-shadow:inset 0 0 0 2px #e5484d}
.v-artd .sp-303 :where(.prose) .ab-fail::before{content:"!";display:grid;place-items:center;width:18px;height:18px;border-radius:50%;background:#e5484d;color:#fff;font-size:12px}
.v-artd .sp-303 :where(.prose) .ab-dup{position:relative;background:var(--ink);color:#fff}
.v-artd .sp-303 :where(.prose) .ab-dup::after{content:"× 2";position:absolute;right:-10px;top:-10px;padding:2px 7px;border-radius:999px;background:#e5484d;color:#fff;font-size:12px}
@media (prefers-reduced-motion:reduce){.v-artd .sp-303 :where(.prose) .ab-wait i{animation:none}}

/* 요청 폭포 */
.v-artd .sp-303 :where(.prose) .ap-fall{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:6px 0 22px}
.v-artd .sp-303 :where(.prose) .af{padding:18px;border:1px solid var(--line);border-radius:14px}
.v-artd .sp-303 :where(.prose) .af-k{margin:0 0 12px;font-size:16px;font-weight:800;color:var(--ink)}
.v-artd .sp-303 :where(.prose) .af-bars{position:relative;height:96px;margin-bottom:14px;border-radius:8px;background:repeating-linear-gradient(90deg,#fff 0 calc(25% - 1px),#eceef5 calc(25% - 1px) 25%);border:1px solid var(--line)}
.v-artd .sp-303 :where(.prose) .af-bars i{position:absolute;left:var(--s);width:var(--w);height:14px;border-radius:4px;background:var(--blue)}
.v-artd .sp-303 :where(.prose) .af-bars i:nth-child(1){top:12px}.v-artd .sp-303 :where(.prose) .af-bars i:nth-child(2){top:32px}.v-artd .sp-303 :where(.prose) .af-bars i:nth-child(3){top:52px}.v-artd .sp-303 :where(.prose) .af-bars i:nth-child(4){top:72px}
.v-artd .sp-303 :where(.prose) .af-one i{top:30px!important;height:36px;display:flex;overflow:hidden;background:none}
.v-artd .sp-303 :where(.prose) .af-one b{flex:1;font-style:normal;display:grid;place-items:center;font-size:12px;font-weight:800;color:#fff;background:var(--blue)}
.v-artd .sp-303 :where(.prose) .af-one b:nth-child(2){background:#1d3fc4}.v-artd .sp-303 :where(.prose) .af-one b:nth-child(3){background:var(--navy)}
.v-artd .sp-303 :where(.prose) .af-d{margin:0;font-size:14.5px;line-height:1.6;color:var(--sub)}

/* 대체 사슬 */
.v-artd .sp-303 :where(.prose) .ap-fallback{margin:6px 0 20px;padding:18px 20px;border-radius:14px;background:#fff6f6}
.v-artd .sp-303 :where(.prose) .fb-k{margin:0 0 12px;font-size:15px;font-weight:800;color:#b3261e}
.v-artd .sp-303 :where(.prose) .ap-fallback ol{display:flex;gap:0;margin:0 0 12px;padding:0;list-style:none;counter-reset:f}
.v-artd .sp-303 :where(.prose) .ap-fallback li{counter-increment:f;flex:1;margin:0;position:relative;padding:10px 6px;border-radius:999px;background:#fff;border:1.5px solid #f0b4b1;font-size:14.5px;font-weight:700;text-align:center;color:var(--ink)}
.v-artd .sp-303 :where(.prose) .ap-fallback li+li{margin-left:22px}
.v-artd .sp-303 :where(.prose) .ap-fallback li+li::before{content:"";position:absolute;left:-23px;top:50%;width:22px;height:2px;background:#e5484d}
.v-artd .sp-303 :where(.prose) .fb-d{margin:0;font-size:14.5px;line-height:1.65;color:#5b3a3a}

/* 진행 방식 = 연동 단자판 */
.v-artd .sp-303 :where(.prose) .ap-we{margin:30px 0 10px;padding:26px 28px;border-radius:20px;background:var(--navy);color:#fff}
.v-artd .sp-303 :where(.prose) .aw-k{margin:0 0 6px;font-size:13px;font-weight:800;color:#9fb3ff}
.v-artd .sp-303 :where(.prose) .aw-t{margin:0 0 18px;font-size:21px;font-weight:800}
.v-artd .sp-303 :where(.prose) .aw-ports{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:22px}
.v-artd .sp-303 :where(.prose) .pt{position:relative;padding:14px 16px 14px 40px;border-radius:12px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.16)}
.v-artd .sp-303 :where(.prose) .pt::before{content:"";position:absolute;left:14px;top:17px;width:14px;height:14px;border-radius:4px;border:2px solid #9fb3ff;box-shadow:inset 0 0 0 3px var(--navy),inset 0 0 0 7px #9fb3ff}
.v-artd .sp-303 :where(.prose) .pt-k{display:block;margin-bottom:4px;font-size:14px;font-weight:800;color:#fff}
.v-artd .sp-303 :where(.prose) .pt p{margin:0;font-size:14px;line-height:1.55;color:#cfd6f2}
.v-artd .sp-303 :where(.prose) .aw-btn{display:inline-flex;padding:13px 24px;border-radius:999px;background:#fff;color:var(--navy)!important;font-weight:800;text-decoration:none!important}
.v-artd .sp-303 :where(.prose) .aw-btn:hover{background:var(--blue2)}

/* 두 줄 합류 */
.v-artd .sp-303 :where(.prose) .ap-par{display:grid;grid-template-columns:1fr 1.1fr 1fr;align-items:center;gap:10px;margin:6px 0 22px}
.v-artd .sp-303 :where(.prose) .ap-lane,.v-artd .sp-303 :where(.prose) .ap-spec,.v-artd .sp-303 :where(.prose) .ap-join{margin:0}
.v-artd .sp-303 :where(.prose) .ap-lane{padding:14px;border-radius:12px;background:var(--soft);text-align:center;font-size:14px;color:var(--sub)}
.v-artd .sp-303 :where(.prose) .ap-lane b{display:block;font-size:16px;color:var(--ink)}
.v-artd .sp-303 :where(.prose) .ap-spec{position:relative;padding:14px 10px;border-radius:12px;border:2px dashed var(--blue);text-align:center;font-size:14.5px;font-weight:800;color:#1d3fc4;background:#fff}
.v-artd .sp-303 :where(.prose) .ap-join{grid-column:1/-1;padding:12px;border-radius:12px;background:var(--ink);color:#fff;text-align:center;font-size:15px;font-weight:800;position:relative;margin-top:16px}
.v-artd .sp-303 :where(.prose) .ap-join::before{content:"";position:absolute;left:16%;right:16%;top:-17px;height:16px;border:2px solid #9aa1b5;border-top:0;border-radius:0 0 12px 12px}

/* 요청 머리글 */
.v-artd .sp-303 :where(.prose) .ap-head{margin:6px 0 18px;border-radius:12px;overflow:hidden;border:1px solid #2b3150;background:#0f1320}
.v-artd .sp-303 :where(.prose) .ah-t{margin:0;padding:10px 16px;background:#1f2438;color:#aab1cc;font-size:13px;font-weight:700}
.v-artd .sp-303 :where(.prose) .ap-head dl{margin:0;padding:6px 0}
.v-artd .sp-303 :where(.prose) .ap-head dl div{display:grid;grid-template-columns:130px 1fr;gap:12px;padding:9px 16px}
.v-artd .sp-303 :where(.prose) .ap-head dt{font-weight:800;color:#8fb0ff;font-size:14.5px}
.v-artd .sp-303 :where(.prose) .ap-head dt::after{content:":";margin-left:2px;color:#69718f}
.v-artd .sp-303 :where(.prose) .ap-head dd{margin:0;color:#e4e8fb;font-size:14.5px;line-height:1.6}

/* 버전 세 칸 */
.v-artd .sp-303 :where(.prose) .ap-vers{display:flex;margin:0 0 18px;border-radius:999px;overflow:hidden;font-size:14px;font-weight:800;text-align:center}
.v-artd .sp-303 :where(.prose) .ap-vers span{flex:1;padding:10px 6px;line-height:1.3}
.v-artd .sp-303 :where(.prose) .ap-vers small{display:block;font-size:12px;font-weight:600;opacity:.9}
.v-artd .sp-303 :where(.prose) .v-old{background:#e6e8ef;color:#4a5163}
.v-artd .sp-303 :where(.prose) .v-mid{background:var(--blue2);color:#1d3fc4}
.v-artd .sp-303 :where(.prose) .v-new{background:var(--blue);color:#fff}

/* 검수 표 */
.v-artd .sp-303 :where(.prose) .ap-qa{margin:6px 0 10px;overflow-x:auto;border:1px solid var(--line);border-radius:12px}
.v-artd .sp-303 :where(.prose) .ap-qa table{margin:0;border-radius:0;font-size:15px}
.v-artd .sp-303 :where(.prose) .ap-qa th{font-size:13.5px}
.v-artd .sp-303 :where(.prose) .ap-qa td{padding:14px 16px;line-height:1.6;vertical-align:top}
.v-artd .sp-303 :where(.prose) .ap-qa td:first-child{width:150px;white-space:nowrap}
.v-artd .sp-303 :where(.prose) .ap-qa tr:nth-child(1) td:first-child{color:#1d3fc4}.v-artd .sp-303 :where(.prose) .ap-qa tr:nth-child(2) td:first-child{color:#b3261e}.v-artd .sp-303 :where(.prose) .ap-qa tr:nth-child(3) td:first-child{color:var(--navy)}
.v-artd .sp-303 :where(.prose) .ap-sum{margin:20px 0 0;padding:20px 22px;border-radius:14px;border:2px solid var(--ink)}
.v-artd .sp-303 :where(.prose) .ap-sum p{margin:0;font-size:15.5px;line-height:1.7}
.v-artd .sp-303 :where(.prose) .as-k{margin-bottom:6px!important;font-weight:800;color:var(--ink)}

.v-artd .sp-303 :where(.prose) .ap-rel{margin:40px 0 18px;padding:18px 0 0;border-top:1px solid var(--line);list-style:none}
.v-artd .sp-303 :where(.prose) .ap-rel li{margin:0;padding:6px 0}
.v-artd .sp-303 :where(.prose) .ap-rel li::before{content:none}
.v-artd .sp-303 :where(.prose) .ap-rel a{font-weight:700;text-decoration:none}
.v-artd .sp-303 :where(.prose) .ap-rel a::before{content:"→ ";color:var(--sub)}

@media (max-width:720px){
  .v-artd .sp-303 :where(.prose) .ap-lead{font-size:18px}
  .v-artd .sp-303 .prose h2{font-size:23px}
  .v-artd .sp-303 :where(.prose) .ap-s{padding-top:46px}
  .v-artd .sp-303 :where(.prose) .ap-seq::before{left:40px}.v-artd .sp-303 :where(.prose) .ap-seq::after{right:40px}
  .v-artd .sp-303 :where(.prose) .aq-lane{width:80px;font-size:13.5px}
  .v-artd .sp-303 :where(.prose) .aq-msg{width:auto;margin-left:0!important;margin-right:0!important}
  .v-artd .sp-303 :where(.prose) .aq-msg::after,.v-artd .sp-303 :where(.prose) .aq-msg::before{display:none}
  .v-artd .sp-303 :where(.prose) .aq-req{border-left:4px solid var(--blue);border-radius:0 14px 14px 0}
  .v-artd .sp-303 :where(.prose) .aq-res{border-right:4px solid var(--ink)}
  .v-artd .sp-303 :where(.prose) .ap-dict{grid-template-columns:1fr}
  .v-artd .sp-303 :where(.prose) .ap-dict div+div{border-left:0;border-top:1px solid var(--line)}
  .v-artd .sp-303 :where(.prose) .al-ui{margin:0 12px -8px}
  .v-artd .sp-303 :where(.prose) .ap-btns{grid-template-columns:1fr}
  .v-artd .sp-303 :where(.prose) .ap-fall{grid-template-columns:1fr}
  .v-artd .sp-303 :where(.prose) .ap-fallback ol{flex-direction:column;gap:14px}
  .v-artd .sp-303 :where(.prose) .ap-fallback li+li{margin-left:0}
  .v-artd .sp-303 :where(.prose) .ap-fallback li+li::before{left:50%;top:-15px;width:2px;height:14px}
  .v-artd .sp-303 :where(.prose) .ap-we{padding:24px 22px}
  .v-artd .sp-303 :where(.prose) .aw-ports{grid-template-columns:1fr}
  .v-artd .sp-303 :where(.prose) .ap-par{grid-template-columns:1fr}
  .v-artd .sp-303 :where(.prose) .ap-join::before{display:none}
  .v-artd .sp-303 :where(.prose) .ap-head dl div{grid-template-columns:1fr;gap:2px}
  .v-artd .sp-303 :where(.prose) .ap-qa td:first-child{width:auto;white-space:normal}
}
