<!DOCTYPE html>
<!-- ==================================================================
     ONE-PAGER TEMPLATE (KO) · parchment design system
     단일 A4 제안서/리포트/요약서
     변경 후 실행: python3 -c "from weasyprint import HTML; HTML('one-pager-ko.html').write_pdf('out.pdf')"
     목표: 페이지 수 == 1
     ================================================================== -->
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>{{문서 제목}}</title>
<meta name="author" content="{{작성자}}">
<meta name="description" content="{{요약}}">
<meta name="keywords" content="{{키워드}}">
<meta name="generator" content="Kami">
<style>
  /* Regular weight */
  @font-face {
    font-family: "Source Han Serif K";
    src: url("../fonts/SourceHanSerifKR-Regular.otf") format("opentype"),
       url("https://cdn.jsdelivr.net/gh/tw93/Kami@main/assets/fonts/SourceHanSerifKR-Regular.otf") format("opentype");
    font-weight: 400;
    font-style: normal;
  }

  /* Medium weight */
  @font-face {
    font-family: "Source Han Serif K";
    src: url("../fonts/SourceHanSerifKR-Medium.otf") format("opentype"),
       url("https://cdn.jsdelivr.net/gh/tw93/Kami@main/assets/fonts/SourceHanSerifKR-Medium.otf") format("opentype");
    font-weight: 500;
    font-style: normal;
  }

  @page {
    size: A4;
    margin: 15mm 18mm 15mm 18mm;
    background: #f5f4ed;
  }
  * { box-sizing: border-box; margin: 0; padding: 0; }

  :root {
    --parchment: #f5f4ed;
    --ivory:     #faf9f5;
    --near-black:#141413;
    --dark-warm: #3d3d3a;
    --olive:     #504e49;
    --stone:     #6b6a64;
    --brand:     #1B365D;
    --border:    #e8e6dc;
    --border-soft:#e5e3d8;
    --tag-bg:    #E4ECF5;
    --serif: "Source Han Serif K", "Source Han Serif KR", "Noto Serif KR", "Apple SD Gothic Neo", "AppleMyungjo", Charter, Georgia, serif;
    --sans: var(--serif);
  }

  html, body { background: var(--parchment); }

  @media screen {
    body { max-width: 210mm; margin: 0 auto; padding: 15mm 18mm; }
  }

  body {
    color: var(--near-black);
    font-family: var(--serif);
    font-size: 10pt;
    line-height: 1.45;
    letter-spacing: 0.3pt;
    font-synthesis: none;
  }

  .serif {
    font-family: var(--serif);
  }

  /* ========== HEADER ========== */
  .header {
    margin-bottom: 16pt;
    padding-bottom: 12pt;
    border-bottom: 0.5pt solid var(--border);
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 20pt;
  }
  .title-block {
    flex: 1;
  }
  .eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 7pt;
    font-size: 9pt;
    color: var(--brand);
    letter-spacing: 1.5pt;
    text-transform: uppercase;
    margin-bottom: 7pt;
    font-weight: 500;
  }
  .eyebrow::before {
    content: "";
    width: 8pt;
    height: 1.5pt;
    border-radius: 0.75pt;
    background: var(--brand);
    flex-shrink: 0;
  }
  /* KO locale tuning: Source Han Serif K hangul glyphs have a smaller optical body
     than TsangerJinKai. H1 starts at the CN baseline (24pt / line-height 1.15);
     adjust during pilot if hangul reads too tight or too loose, then lock into
     references/design.md and propagate to remaining KO templates. */
  h1 {
    font-family: var(--serif);
    font-size: 24pt;
    font-weight: 500;
    color: var(--near-black);
    line-height: 1.15;
    margin-bottom: 5pt;
  }
  .subtitle {
    font-size: 11pt;
    color: var(--olive);
    line-height: 1.4;
  }
  .meta {
    font-size: 9pt;
    color: var(--stone);
    text-align: right;
    line-height: 1.45;
    white-space: nowrap;
  }

  /* ========== METRICS ========== */
  /* Horizontal baseline layout, same kami-native posture as resume.html.
     Transparent background, no border; typography itself carries the hierarchy. */
  .metrics {
    display: flex;
    gap: 14pt;
    margin-bottom: 18pt;
    padding: 4pt 0 6pt 0;
    border-bottom: 0.3pt dotted var(--border);
  }
  .metric {
    flex: 1;
    background: transparent;
    padding: 0;
    display: flex;
    align-items: baseline;
    gap: 4pt;
    break-inside: avoid;
  }
  .metric-value {
    font-family: var(--serif);
    font-size: 20pt;
    font-weight: 500;
    color: var(--brand);
    line-height: 1;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
    letter-spacing: -0.2pt;
  }
  .metric-label {
    font-size: 7pt;
    color: var(--olive);
    line-height: 1.3;
    white-space: nowrap;
  }

  /* ========== SECTIONS ========== */
  /* PRODUCT SHOT (optional) - one real screenshot as the page's visual anchor.
     Uncomment the <figure> in the body, point src at a local image, and tune
     .frame height to fill the page. object-fit trims dead margin, not the window. */
  .product-shot { margin-bottom: 16pt; break-inside: avoid; }
  .product-shot .frame {
    height: 110mm;
    overflow: hidden;
    border-radius: 5pt;
    box-shadow: 0 1.5pt 6pt rgba(20, 20, 19, 0.16);
  }
  .product-shot .frame img {
    width: 100%; height: 100%;
    object-fit: cover; object-position: center; display: block;
  }
  .product-shot figcaption {
    margin-top: 7pt; font-size: 8.5pt;
    color: var(--stone); line-height: 1.45; text-align: center;
  }
  .product-shot figcaption .hl { color: var(--brand); font-weight: 500; }

  section { margin-bottom: 18pt; break-inside: avoid; }
  section:last-of-type { margin-bottom: 0; }

  h2 {
    font-family: var(--serif);
    font-size: 16pt;
    font-weight: 500;
    color: var(--near-black);
    margin-bottom: 6pt;
  }
  h2 .sub {
    font-size: 9pt;
    color: var(--stone);
    font-weight: 400;
    margin-left: 6pt;
  }

  p { margin-bottom: 6pt; line-height: 1.45; }
  p:last-child { margin-bottom: 0; }

  .lead {
    font-size: 12pt;
    line-height: 1.5;
    color: var(--dark-warm);
    margin-bottom: 14pt;
  }

  .hl { color: var(--brand); font-weight: 500; }

  /* ========== 2-column grid ========== */
  .two-col {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 18pt;
  }

  /* ========== Dash list (replaces default bullet) ========== */
  ul.dash {
    margin: 0;
    padding-left: 16pt;
  }
  ul.dash li {
    margin-bottom: 5pt;
    line-height: 1.45;
  }
  ul.dash li:last-child { margin-bottom: 0; }
  ul.dash li::marker { color: var(--brand); }

  /* ========== Timeline (horizontal progress points) ========== */
  .timeline {
    display: flex;
    gap: 12pt;
    margin-top: 6pt;
  }
  .tl-step {
    flex: 1;
    break-inside: avoid;
  }
  .tl-year {
    font-family: var(--serif);
    font-size: 11pt;
    font-weight: 500;
    color: var(--brand);
    margin-bottom: 2pt;
  }
  .tl-head {
    font-size: 10pt;
    font-weight: 500;
    color: var(--near-black);
    margin-bottom: 2pt;
  }
  .tl-body {
    font-size: 9pt;
    color: var(--olive);
    line-height: 1.4;
  }

  /* ========== Tag ========== */
  .tag {
    display: inline-block;
    background: var(--tag-bg);    /* solid color, never rgba */
    color: var(--brand);
    font-size: 9pt;
    font-weight: 500;
    padding: 1pt 5pt;
    border-radius: 3pt;
    letter-spacing: 0.3pt;
    margin-right: 3pt;
  }

  /* ========== Callout / highlight block ========== */
  /* Modeled on resume.html .team-culture: transparent ground + a single left brand bar.
     No container, no radius; feels like a marginal note rather than a card. */
  .callout {
    background: transparent;
    border-left: 1.8pt solid var(--brand);
    padding: 4pt 0 4pt 14pt;
    margin: 10pt 0;
    font-size: 10pt;
    line-height: 1.5;
    color: var(--olive);
    break-inside: avoid;
  }
  .callout .hl, .callout .em-brand { color: var(--brand); }

  /* ========== TABLE (kami-table) ========== */
  table, .kami-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 9pt;
    margin: 8pt 0;
    break-inside: avoid;
  }
  table th, .kami-table th {
    text-align: left;
    font-weight: 500;
    color: var(--dark-warm);
    padding: 4pt 6pt;
    border-bottom: 1pt solid var(--border);
    background: transparent;
  }
  table td, .kami-table td {
    padding: 3pt 6pt;
    border-bottom: 0.3pt solid var(--border-soft);
    vertical-align: top;
  }
  table.compact th, .kami-table.compact th { padding: 2pt 5pt; font-size: 8pt; }
  table.compact td, .kami-table.compact td { padding: 1pt 5pt; font-size: 8pt; line-height: 1.4; }
  table.financial td:not(:first-child), .kami-table.financial td:not(:first-child) {
    text-align: right; font-variant-numeric: tabular-nums;
  }
  table.financial th:not(:first-child), .kami-table.financial th:not(:first-child) { text-align: right; }
  table.striped tbody tr:nth-child(even) td, .kami-table.striped tbody tr:nth-child(even) td {
    background: var(--ivory);
  }
  table .total td, .kami-table .total td {
    font-weight: 500; border-top: 1pt solid var(--brand); border-bottom: none; color: var(--near-black);
  }

  /* ========== FOOTER ========== */
  .footer {
    margin-top: 18pt;
    padding-top: 6pt;
    border-top: 0.3pt dotted var(--border);
    font-size: 9pt;
    color: var(--stone);
    display: flex;
    justify-content: space-between;
    letter-spacing: 0.3pt;
  }
</style>
</head>
<body>

<!-- ========== HEADER ========== -->
<div class="header">
  <div class="title-block">
    <div class="eyebrow">{{EYEBROW · 예: "제품 제안서" / "프로젝트 제안" / "요약 보고"}}</div>
    <h1>{{문서 주제목 (serif, 2줄 이내, 동사+명사 구조 권장)}}</h1>
    <div class="subtitle">{{한 줄 부제목 / 핵심 주장 한 문장}}</div>
  </div>
  <div class="meta">
    {{작성자명}}<br>
    {{날짜 YYYY.MM.DD}}<br>
    {{버전 / 상태}}
  </div>
</div>

<!-- ========== METRICS (선택, 3~4 카드 권장) ========== -->
<div class="metrics">
  <div class="metric">
    <div class="metric-value">{{수치}}</div>
    <div class="metric-label">{{라벨 설명}}</div>
  </div>
  <div class="metric">
    <div class="metric-value">{{수치}}</div>
    <div class="metric-label">{{라벨 설명}}</div>
  </div>
  <div class="metric">
    <div class="metric-value">{{수치}}</div>
    <div class="metric-label">{{라벨 설명}}</div>
  </div>
  <div class="metric">
    <div class="metric-value">{{수치}}</div>
    <div class="metric-label">{{라벨 설명}}</div>
  </div>
</div>

<!-- ========== LEAD (도입부, 1단락) ========== -->
<p class="lead">
  {{40~60자 분량의 핵심 주장 도입부. <span class="hl">키워드</span>로 핵심을 강조. 이 단락이 전체 문서의 톤을 결정.}}
</p>

<!-- ========== 본문 (2단) ========== -->
<!-- Optional hero product shot. Uncomment, point src at a local screenshot, and
     tune .frame height (in the CSS) so the page fills without overflowing.
<figure class="product-shot">
  <div class="frame"><img src="{{SCREENSHOT_PATH}}" alt="{{ALT_TEXT}}"></div>
  <figcaption>{{One-line caption that adds a fact, not a restatement.}}</figcaption>
</figure>
-->

<div class="two-col">
  <section>
    <h2>{{섹션 제목 1}}</h2>
    <p>{{여기에 1~2문장의 단락을 작성해 주장을 전개.}}</p>
    <ul class="dash">
      <li>{{짧은 bullet: 데이터 / 관찰 / 판단}}</li>
      <li>{{짧은 bullet: <span class="hl">핵심 수치</span>를 포함한 근거}}</li>
      <li>{{짧은 bullet}}</li>
    </ul>
  </section>

  <section>
    <h2>{{섹션 제목 2}}</h2>
    <p>{{1~2문장 단락.}}</p>
    <ul class="dash">
      <li>{{짧은 bullet}}</li>
      <li>{{짧은 bullet}}</li>
      <li>{{짧은 bullet}}</li>
    </ul>
  </section>
</div>

<!-- ========== Timeline / Roadmap (선택) ========== -->
<section>
  <h2>타임라인 / 로드맵<span class="sub">(제안 문서에 적합)</span></h2>
  <div class="timeline">
    <div class="tl-step">
      <div class="tl-year">단계 1</div>
      <div class="tl-head">{{단계 제목}}</div>
      <div class="tl-body">{{한 문장 설명}}</div>
    </div>
    <div class="tl-step">
      <div class="tl-year">단계 2</div>
      <div class="tl-head">{{단계 제목}}</div>
      <div class="tl-body">{{한 문장 설명}}</div>
    </div>
    <div class="tl-step">
      <div class="tl-year">단계 3</div>
      <div class="tl-head">{{단계 제목}}</div>
      <div class="tl-body">{{한 문장 설명}}</div>
    </div>
  </div>
</section>

<!-- ========== CALLOUT (선택) ========== -->
<div class="callout">
  {{핵심 인용 / 중요 알림 / 주요 takeaway. 본문보다 더 주목을 끌어야 하는 내용을 여기에.}}
</div>

<!-- ========== FOOTER ========== -->
<div class="footer">
  <span>{{기밀 등급 / 내부용 / 공개 등}}</span>
  <span>{{페이지 번호 / 연락처}}</span>
</div>

</body>
</html>
