/* ============================================================
   원소당 · 공용 디자인 시스템
   14개 상품 페이지가 이 파일 하나를 공유합니다.
   클래스명은 기존 JS가 참조하므로 변경하지 않았습니다.
   ============================================================ */

:root{
  /* 바탕과 먹 */
  --hanji:#F0EEE4;         /* 한지 — 기본 바탕 */
  --hanji-2:#F8F6F0;       /* 올라온 면 */
  --hanji-3:#E5E2D6;       /* 가라앉은 면 */
  --muk:#1C1E1B;           /* 먹 — 본문 */
  --muk-2:#5B6055;         /* 먹 옅게 */
  --muk-3:#656A5E;         /* 캡션·라벨 */
  --line:#D8D5C6;
  --line-2:#C6C3B2;

  /* 브랜드 */
  --noerok:#4A6355;        /* 뇌록 — 단청 초벌 안료. 프라이머리 */
  --noerok-soft:#DFE7E0;
  --injoo:#C4472C;         /* 인주 — 낙관. 면으로 쓸 때 */
  --injoo-ink:#A8381D;     /* 인주 — 글자로 쓸 때(대비 확보) */
  --injoo-soft:#F4E2DC;
  --cta-fg:#FFF7F2;

  /* 오행 — 밝은 한지 위에서 4.5:1 이상 확보한 값 */
  --wood:#2F6B45;
  --fire:#B23A2A;
  --earth:#7E5D12;
  --metal:#565F6B;
  --water:#2E4A6B;

  /* 형태 */
  --r-sm:6px; --r:12px; --r-lg:18px; --r-pill:999px;
  --shadow:0 1px 2px rgba(28,30,27,.04), 0 8px 24px -18px rgba(28,30,27,.28);

  /* 서체 */
  --f-display:'Hahmlet','Noto Serif KR','Nanum Myeongjo',ui-serif,serif;
  --f-hanja:'Noto Serif KR','Nanum Myeongjo',serif;
  --f-body:'Pretendard Variable',Pretendard,-apple-system,'Apple SD Gothic Neo','Malgun Gothic',sans-serif;
  --f-mono:'IBM Plex Mono',ui-monospace,monospace;
}

@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --hanji:#15170F; --hanji-2:#1D2017; --hanji-3:#252921;
    --muk:#E8E7DB; --muk-2:#A2A697; --muk-3:#8B9080;
    --line:#2D3128; --line-2:#3C4136;
    --noerok:#8FB69C; --noerok-soft:#232E26;
    --injoo:#E38263; --injoo-ink:#E38263; --injoo-soft:#33211A;
    --cta-fg:#1A120E;
    --wood:#7FC79A; --fire:#F0928A; --earth:#DDB863; --metal:#B4BCC9; --water:#8FB0E0;
    --shadow:0 1px 2px rgba(0,0,0,.3), 0 8px 24px -18px rgba(0,0,0,.7);
  }
}
:root[data-theme="dark"]{
  --hanji:#15170F; --hanji-2:#1D2017; --hanji-3:#252921;
  --muk:#E8E7DB; --muk-2:#A2A697; --muk-3:#8B9080;
  --line:#2D3128; --line-2:#3C4136;
  --noerok:#8FB69C; --noerok-soft:#232E26;
  --injoo:#E38263; --injoo-ink:#E38263; --injoo-soft:#33211A;
  --cta-fg:#1A120E;
  --wood:#7FC79A; --fire:#F0928A; --earth:#DDB863; --metal:#B4BCC9; --water:#8FB0E0;
  --shadow:0 1px 2px rgba(0,0,0,.3), 0 8px 24px -18px rgba(0,0,0,.7);
}

/* ---------- 바탕 ---------- */
body{margin:0;background:var(--hanji)}

.saju-app{
  background:var(--hanji);
  /* 별가루 대신 한지 결 — 미세한 가로 섬유 */
  background-image:
    repeating-linear-gradient(0deg, transparent 0 3px, rgba(28,30,27,.014) 3px 4px),
    repeating-linear-gradient(90deg, transparent 0 7px, rgba(28,30,27,.010) 7px 8px);
  color:var(--muk);
  font-family:var(--f-body);
  font-weight:400;
  min-height:100vh;
  padding:0 16px 72px;
  box-sizing:border-box;
}
.saju-app *{box-sizing:border-box}
.wrap{max-width:760px;margin:0 auto}
.saju-app a{color:var(--noerok)}
.saju-app :focus-visible{outline:2px solid var(--noerok);outline-offset:2px;border-radius:3px}

/* ---------- 상단 바 ---------- */
.topbar{
  display:flex;align-items:center;justify-content:space-between;
  max-width:760px;margin:0 auto;padding:14px 0;border-bottom:1px solid var(--line)
}
.topbar .home{
  display:inline-flex;align-items:center;gap:.45rem;text-decoration:none;color:var(--muk)
}
.topbar .home img{width:26px;height:26px;border-radius:50%}
.topbar .home .bn{font-family:var(--f-display);font-weight:800;font-size:1rem;letter-spacing:.06em}
.topbar .back{
  font-family:var(--f-body);font-size:12.5px;letter-spacing:0;
  color:var(--muk-3);text-decoration:none
}
.topbar .back:hover{color:var(--noerok)}

/* ---------- 마스트헤드 ---------- */
.masthead{text-align:center;padding:44px 0 34px}
.masthead .seal-mark{
  display:inline-flex;align-items:center;justify-content:center;
  width:46px;height:46px;border-radius:var(--r-sm);
  background:var(--injoo);color:var(--cta-fg);
  font-family:var(--f-hanja);font-size:24px;font-weight:900;line-height:1;
  letter-spacing:0;margin-bottom:16px;
  transform:rotate(-3deg);          /* 눌러 찍은 낙관 */
  box-shadow:0 2px 10px -4px rgba(196,71,44,.5)
}
.masthead .brand{
  font-family:var(--f-mono);font-size:11px;letter-spacing:.1em;
  color:var(--muk-3);margin:0 0 10px
}
.masthead h1{
  font-family:var(--f-display);font-size:clamp(1.6rem,6vw,2.1rem);font-weight:800;
  margin:0 0 8px;letter-spacing:.02em;line-height:1.25;color:var(--muk);text-wrap:balance
}
.masthead p{
  color:var(--muk-2);font-size:13.5px;margin:0 auto;max-width:32rem;
  letter-spacing:0;line-height:1.7;word-break:keep-all
}

/* ---------- 카드 3종 ---------- *
   입력 = 파인 면 / 명식 = 종이 / 리포트 = 면 없음
   전부 같은 카드에 담으면 리포트가 무료 위젯처럼 읽힙니다.        */
.card{
  background:var(--hanji-3);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:24px;margin-bottom:18px
}
.card h2{
  font-family:var(--f-display);font-size:15px;font-weight:600;letter-spacing:0;
  margin:0 0 18px;color:var(--muk);display:flex;align-items:center;gap:9px
}
.card h2::before{
  content:'';width:5px;height:5px;border-radius:50%;
  background:var(--injoo);flex:none
}
/* 명식 카드 — 한지 한 장 */
#resultCard{background:var(--hanji-2);box-shadow:var(--shadow)}
/* 리포트 카드 — 면을 없애고 글만 남긴다 */
#aiCard{background:transparent;border:none;border-top:1px solid var(--line-2);border-radius:0;padding:34px 0 0}
#aiCard > h2{margin-bottom:26px}

/* ---------- 폼 ---------- */
.form-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:11px}
.form-grid .full{grid-column:1/-1}
label.f{
  display:block;font-family:var(--f-body);font-size:11.5px;font-weight:500;letter-spacing:0;
  color:var(--muk-2);margin-bottom:6px
}
.saju-app input,.saju-app select{
  width:100%;background:var(--hanji-2);border:1px solid var(--line-2);color:var(--muk);
  padding:11px 13px;border-radius:var(--r);font-size:15.5px;font-family:inherit;
  font-variant-numeric:tabular-nums
}
.saju-app input:focus,.saju-app select:focus{outline:2px solid var(--noerok);outline-offset:-1px;border-color:transparent}
.check-row{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--muk-2);margin-top:6px}
.check-row input{width:auto;accent-color:var(--noerok)}
.check-row label{cursor:pointer}

/* ---------- 버튼 ---------- */
.btn{
  width:100%;padding:16px;background:var(--injoo);color:var(--cta-fg);
  border:none;border-radius:var(--r-pill);font-size:15px;font-weight:600;cursor:pointer;
  letter-spacing:.02em;font-family:var(--f-body);margin-top:18px;
  transition:transform .15s ease,filter .15s ease
}
.btn:hover{filter:brightness(1.06);transform:translateY(-1px)}
.btn:active{transform:translateY(0)}
.btn:disabled{background:var(--hanji-3);color:var(--muk-3);cursor:default;transform:none;filter:none;border:1px solid var(--line-2)}
.btn.secondary{background:transparent;border:1px solid var(--noerok);color:var(--noerok)}

/* ---------- 명식 (시그니처 컴포넌트) ---------- */
.myeongsik{
  display:grid;grid-template-columns:repeat(4,1fr);gap:9px;
  align-items:end;padding-top:26px
}
.pillar{
  background:var(--hanji);border:1px solid var(--line-2);
  border-radius:var(--r);padding:14px 6px 12px;text-align:center;
  position:relative;
  /* fill-mode 를 쓰지 않는다 — 애니메이션이 어떤 이유로든 실행되지 않아도
     기둥은 항상 보인다. 명식은 이 제품의 시그니처라 연출에 표시를 걸지 않는다.
     상단 -40px 여유는 일주 낙관이 기둥 밖으로 나오기 때문. */
  animation:unfold .55s cubic-bezier(.22,.61,.36,1)
}
@keyframes unfold{
  from{opacity:0;clip-path:inset(-40px 100% 0 0)}
  to{opacity:1;clip-path:inset(-40px 0 0 0)}
}
/* 일주 = 나. 한 칸만 올려 세우고 낙관을 찍는다 */
.pillar.is-day{
  transform:translateY(-10px);
  border-color:var(--injoo);
  box-shadow:0 6px 18px -12px rgba(196,71,44,.55)
}
.pillar.is-day::after{
  content:'나';position:absolute;top:-9px;left:50%;transform:translateX(-50%);
  background:var(--injoo);color:var(--cta-fg);
  font-family:var(--f-hanja);font-size:10px;font-weight:700;line-height:1;
  padding:3px 7px;border-radius:3px;letter-spacing:0
}
.pillar .pos{
  font-family:var(--f-body);font-size:11px;font-weight:500;letter-spacing:0;
  color:var(--muk-3);margin-bottom:9px
}
.pillar .hanja{font-family:var(--f-hanja);font-size:36px;line-height:1.12;font-weight:900}
.pillar .hanja div{padding:2px 0}
.pillar .kr{font-size:11px;color:var(--muk-2);margin-top:7px}
.pillar .tg{font-size:9.5px;margin-top:7px;line-height:1.55;color:var(--muk-3)}

.el-목{color:var(--wood)} .el-화{color:var(--fire)} .el-토{color:var(--earth)}
.el-금{color:var(--metal)} .el-수{color:var(--water)}

/* ---------- 칩 ---------- */
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:20px}
.chip{
  font-size:11.5px;padding:5px 11px;border:1px solid var(--line-2);
  border-radius:var(--r-pill);color:var(--muk-2);background:var(--hanji)
}
.chip b{color:var(--muk);font-weight:600}

/* ---------- 오행 저울 — 브랜드의 핵심 장치 ---------- */
.elhead{font-family:var(--f-display);font-size:12.5px;font-weight:600;color:var(--muk-2);
  margin:24px 0 8px;letter-spacing:0}
.ebar{display:flex;gap:3px;margin-top:0;height:10px;border-radius:var(--r-pill);overflow:hidden;background:var(--hanji-3)}
.ebar div{height:100%}
.elegend{
  display:flex;gap:14px;margin-top:10px;font-size:11.5px;color:var(--muk-2);flex-wrap:wrap;
  font-variant-numeric:tabular-nums
}

/* ---------- 해석 파트 ---------- */
.part{border-left:2px solid var(--line-2);padding:0 0 0 20px;margin:30px 0}
/* 아직 안 온 파트 — 제목만 흐리게 보여 무엇이 오는지는 알 수 있게 */
.part.pending{opacity:.5}
.part.pending .ptitle .num{color:var(--muk-3)}
/* 본문이 도착하는 순간 먹이 스미듯 */
.part:not(.pending) .pbody{animation:seep .5s ease both}
.pwait{
  display:flex;align-items:center;gap:9px;font-size:13px;color:var(--muk-3);
  padding:2px 0 4px
}
.pwait .st{
  width:7px;height:7px;border-radius:50%;background:var(--injoo);flex:none;
  animation:pulse .9s infinite alternate
}
/* 대기 안내 — 마지막 파트가 오면 통째로 사라진다 */
.waitfoot{text-align:center;padding:26px 0 4px;border-top:1px solid var(--line);margin-top:26px}
@keyframes seep{from{opacity:0;filter:blur(5px);letter-spacing:.02em}to{opacity:1;filter:none;letter-spacing:0}}
.part.active{border-left-color:var(--injoo)}
.part .ptitle{
  font-family:var(--f-display);font-size:15px;font-weight:600;letter-spacing:.03em;
  margin-bottom:13px;display:flex;gap:11px;align-items:baseline
}
.part .ptitle .num{font-family:var(--f-mono);color:var(--injoo-ink);font-size:11px;letter-spacing:.1em;flex:none}
.part .pbody{
  font-size:15.5px;line-height:1.95;color:var(--muk);
  white-space:pre-wrap;word-break:keep-all
}
.part .pbody strong{color:var(--muk);font-weight:600;background:linear-gradient(transparent 62%,var(--noerok-soft) 62%)}

/* ---------- 대기 화면 ---------- */
.loading-line{display:flex;gap:9px;align-items:center;color:var(--muk-2);font-size:13px;padding:9px 0}
.dot{width:6px;height:6px;background:var(--injoo);border-radius:50%;animation:pulse 1s infinite alternate}
@keyframes pulse{from{opacity:.25}to{opacity:1}}

.progress-list{padding:6px 0}
.prog-item{
  display:flex;align-items:center;gap:13px;padding:13px 4px;
  border-bottom:1px solid var(--line);font-size:14px;color:var(--muk-3)
}
.prog-item:last-child{border-bottom:none}
.prog-item .st{
  width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  flex:none;font-size:12px;border:1px solid var(--line-2)
}
.prog-item.working{color:var(--muk)}
.prog-item.working .st{border-color:var(--injoo)}
.prog-item.working .st::after{content:'';width:8px;height:8px;background:var(--injoo);border-radius:50%;animation:pulse .9s infinite alternate}
.prog-item.done{color:var(--muk)}
.prog-item.done .st{background:var(--noerok);border-color:var(--noerok);color:var(--hanji)}
.prog-item.done .st::after{content:'✓'}
.prog-hint{text-align:center;font-size:12.5px;color:var(--muk-2);margin-top:20px;line-height:1.75}

/* 대기 화면의 춘이 */
.waiting-chuni{display:block;width:104px;height:104px;margin:8px auto 0;opacity:.92}

/* ---------- 기타 ---------- */
.hidden{display:none}
.err{
  color:var(--injoo-ink);font-size:13.5px;padding:14px;background:var(--injoo-soft);
  border:1px solid var(--injoo);border-radius:var(--r);margin-top:12px;line-height:1.7
}
.notice{
  font-size:11.5px;color:var(--muk-3);line-height:1.75;margin-top:26px;
  padding-top:16px;border-top:1px solid var(--line);word-break:keep-all
}

/* ---------- 하단 ---------- */
.pagefoot{
  max-width:760px;margin:44px auto 0;padding-top:20px;border-top:1px solid var(--line);
  display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap
}
.pagefoot a{
  font-family:var(--f-body);font-size:12.5px;letter-spacing:0;
  color:var(--muk-3);text-decoration:none
}
.pagefoot a:hover{color:var(--noerok)}

@media (max-width:480px){
  .form-grid{grid-template-columns:repeat(2,1fr)}
  .pillar .hanja{font-size:28px}
  .pillar{padding:11px 4px 10px}
  .masthead{padding:34px 0 28px}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  .pillar{clip-path:none!important;opacity:1!important}
  .pillar.is-day{transform:translateY(-10px)!important}
}

/* ---------- 공유 카드 — 캡처되라고 만든 조각 ---------- */
.sharecard{background:var(--hanji-2);border:1px solid var(--line-2);box-shadow:var(--shadow);padding:0}
.sc-inner{padding:30px 26px 26px;text-align:center;position:relative}
.sc-brand{
  font-family:var(--f-display);font-size:13px;font-weight:800;letter-spacing:.1em;
  color:var(--muk-2);margin-bottom:22px
}
.sc-brand span{font-family:var(--f-hanja);color:var(--injoo-ink);margin-left:.25em;font-weight:700}
.sc-line{
  font-family:var(--f-display);font-size:clamp(1.25rem,5.4vw,1.7rem);font-weight:800;
  line-height:1.4;margin:0 0 26px;color:var(--muk);word-break:keep-all;text-wrap:balance
}
.sc-els{display:flex;flex-direction:column;gap:8px;width:max-content;margin:0 auto 22px}
.sc-row{display:grid;grid-template-columns:1.4rem 4.6rem 1rem;gap:11px;align-items:center}
.sc-h{font-family:var(--f-hanja);font-size:17px;font-weight:900;line-height:1}
.sc-dots{display:flex;gap:4px;align-items:center}
.sc-dots i{width:9px;height:9px;border-radius:50%;background:currentColor;display:block}
.sc-dots i.z{background:transparent;border:1px dashed var(--line-2);width:8px;height:8px}
.sc-row .sc-h.el-목~.sc-dots{color:var(--wood)} .sc-row .sc-h.el-화~.sc-dots{color:var(--fire)}
.sc-row .sc-h.el-토~.sc-dots{color:var(--earth)} .sc-row .sc-h.el-금~.sc-dots{color:var(--metal)}
.sc-row .sc-h.el-수~.sc-dots{color:var(--water)}
.sc-n{font-family:var(--f-mono);font-size:12.5px;color:var(--muk-2);text-align:left;font-variant-numeric:tabular-nums}
.sc-need{
  font-size:14px;color:var(--muk-2);margin:0 0 18px;padding-top:18px;
  border-top:1px solid var(--line);line-height:1.75
}
.sc-need b{font-family:var(--f-hanja);font-weight:900;font-size:15px}
.sc-need span{display:block;font-size:12.5px;color:var(--muk-3);margin-top:3px}
.sc-foot{font-family:var(--f-mono);font-size:11px;color:var(--muk-3);margin:0;letter-spacing:.04em}
.sharecard .btn{margin:0;border-radius:0 0 var(--r-lg) var(--r-lg);border-top:1px solid var(--line)}

/* ---------- 본문 강조 ---------- */
/* 【소제목】 — 문단 안의 작은 표제 */
.part .pbody .psub{
  display:block;font-family:var(--f-display);font-weight:700;font-size:15px;
  color:var(--muk);margin:26px 0 10px;letter-spacing:0
}
.part .pbody .psub:first-child{margin-top:0}
/* **강조** — 인주색 밑줄 형광. 배경을 채우지 않아 본문 흐름을 끊지 않는다 */
.part .pbody .pmark{
  background:linear-gradient(transparent 58%, var(--injoo-soft) 58%);
  color:var(--muk);font-weight:600;padding:0 1px;border-radius:2px
}

/* ---------- 리포트 핵심 이미지 저장 ---------- */
/* 리포트 전체는 캡처가 안 된다. 그래서 핵심만 한 장으로 뽑아 내려받게 한다.
   모든 파트가 도착한 뒤에만 나타난다(JS 가 .hidden 을 뗀다). */
.savewrap{margin-top:34px;padding-top:26px;border-top:1px solid var(--line);text-align:center}
.savewrap .btn{margin-top:0;max-width:22rem}
.savewrap .btn:disabled{border-color:var(--line-2)}
.save-hint{
  font-size:12px;color:var(--muk-3);line-height:1.7;margin:11px 0 0;
  word-break:keep-all
}

/* 스트리밍으로 글이 들어오는 중인 파트 */
.part.writing{border-left-color:var(--injoo)}
.part.writing .pbody::after{
  content:'';display:inline-block;width:2px;height:1em;margin-left:2px;
  background:var(--injoo);vertical-align:-2px;animation:caret .9s steps(2) infinite
}
@keyframes caret{0%,49%{opacity:1}50%,100%{opacity:0}}

/* ---------- 구매 안내 (초기 수동 판매) ---------- */
.buycard{background:var(--hanji-2);border-color:var(--line-2);box-shadow:var(--shadow)}
.buy-lead{font-size:.95rem;color:var(--muk-2);margin:0 0 18px}
.buy-price{font-family:var(--f-display);font-size:1.9rem;font-weight:800;color:var(--muk);margin:0 0 22px}
.buy-steps{margin:0 0 18px;padding-left:1.3em;font-size:.95rem;line-height:1.9}
.buy-steps li{margin-bottom:14px}
.buy-steps li::marker{color:var(--injoo-ink);font-weight:700}
.buy-acc{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:7px;padding:11px 13px;
  background:var(--hanji);border:1px solid var(--line-2);border-radius:var(--r);
  font-family:var(--f-mono);font-size:.86rem
}
.buy-copy{
  background:none;border:1px solid var(--line-2);color:var(--muk-2);border-radius:var(--r-pill);
  padding:.28rem .8rem;font-size:.78rem;cursor:pointer;font-family:var(--f-body);white-space:nowrap
}
.buy-copy:hover{border-color:var(--noerok);color:var(--noerok)}
.buy-ch{
  display:inline-block;margin-top:7px;font-size:.9rem;font-weight:600;
  color:var(--injoo-ink);text-decoration:none;border-bottom:1px solid currentColor
}
.buy-note{font-size:.85rem;color:var(--muk-3);margin:0;padding-top:14px;border-top:1px solid var(--line)}

/* 모바일: 카드 제목 옆 라벨이 제목을 밀어 두 줄로 깨지지 않게 */
@media (max-width:560px){
  .card h2{flex-wrap:wrap;row-gap:4px}
  .card h2 > span{margin-left:0 !important;width:100%;font-size:11.5px !important;line-height:1.5}
}
