版の配色
1920 × 1080 作品として見る 版そのものを描画 — どの倍率でも字は潰れません 骨格・余白・カラムを重ねた状態
1920 × 1080 作品として見る 版そのものを描画 — どの倍率でも字は潰れません 骨格・余白・カラムを重ねた状態
コピーして貼るか、ファイルに保存して渡す。ネットにつながらない環境には「全部入り」を 1 つ渡せば足りる。
このパネルの中身を、URL の先にあるファイルの中身まで含めて 1 つにまとめた Markdown — 大きいのでファイルで渡す(コピーは 32KB まで)
以下の仕様でスライドを 1 枚作ってください。 - 版面 1920 × 1080 - 余白 上 96 右 140 下 96 左 140 ## 文字(版面 1920px に対する px) title 42px / 700 / 字間 0.02em basis 17px / 400 th 16px / 500 / 字間 0.1em no 17px / 400 / 等幅数字 item 21px / 500 itemNote 15px / 400 / 行送り 1.6 qty 18px / 400 rate 18px / 400 amount 24px / 500 / 等幅数字 totalLabel 22px / 500 totalValue 44px / 700 / 字間 -0.01em / 等幅数字 subLabel 16px / 400 subValue 16px / 400 / 等幅数字 note 17px / 400 / 行送り 1.8 valid 15px / 500 / 等幅数字 ## 配色 地 #FFFFFF / 面 #F2F4F7 / 文字 #121519 / 補助 #6F767F / 強調 #14425E / 罫 #D5DAE1 ## 外すと崩れる点 - 金額列は右揃えの等幅。桁が揃っていないと、内訳を出した意味が消える - 行の罫は tr に引く。td ごとに引くと column-gap のぶん罫が切れる - 強調は合計行 1 つ。項目に色を置くと「推したい項目」に読まれる 内容は[ここに自分の内容を書く]に置き換えてください。寸法と配色はそのまま守ってください。 正確に再現する場合は、この HTML をそのまま使ってください: https://design-vault.pages.dev/designs/estimate-breakdown-table/pattern.html
/ai/designs/estimate-breakdown-table.json
format: slide-16x9
density: high
layout:
kind: table
canvas:
w: 1920
h: 1080
margin:
top: 96
right: 140
bottom: 96
left: 140
type:
title:
size: 42
weight: 700
tracking: 0.02em
basis:
size: 17
weight: 400
th:
size: 16
weight: 500
tracking: 0.1em
no:
size: 17
weight: 400
numeric: tabular
item:
size: 21
weight: 500
itemNote:
size: 15
weight: 400
leading: 1.6
qty:
size: 18
weight: 400
rate:
size: 18
weight: 400
amount:
size: 24
weight: 500
numeric: tabular
totalLabel:
size: 22
weight: 500
totalValue:
size: 44
weight: 700
tracking: -0.01em
numeric: tabular
subLabel:
size: 16
weight: 400
subValue:
size: 16
weight: 400
numeric: tabular
note:
size: 17
weight: 400
leading: 1.8
valid:
size: 15
weight: 500
numeric: tabular
colors:
ground: "#FFFFFF"
surface: "#F2F4F7"
ink: "#121519"
muted: "#6F767F"
accent: "#14425E"
rule: "#D5DAE1"
rules:
- 金額列は右揃えの等幅。桁が揃っていないと、内訳を出した意味が消える
- 行の罫は tr に引く。td ごとに引くと column-gap のぶん罫が切れる
- 強調は合計行 1 つ。項目に色を置くと「推したい項目」に読まれる{
"format": "slide-16x9",
"density": "high",
"layout": {
"kind": "table",
"canvas": {
"w": 1920,
"h": 1080
},
"margin": {
"top": 96,
"right": 140,
"bottom": 96,
"left": 140
}
},
"type": {
"title": {
"size": 42,
"weight": 700,
"tracking": "0.02em"
},
"basis": {
"size": 17,
"weight": 400
},
"th": {
"size": 16,
"weight": 500,
"tracking": "0.1em"
},
"no": {
"size": 17,
"weight": 400,
"numeric": "tabular"
},
"item": {
"size": 21,
"weight": 500
},
"itemNote": {
"size": 15,
"weight": 400,
"leading": 1.6
},
"qty": {
"size": 18,
"weight": 400
},
"rate": {
"size": 18,
"weight": 400
},
"amount": {
"size": 24,
"weight": 500,
"numeric": "tabular"
},
"totalLabel": {
"size": 22,
"weight": 500
},
"totalValue": {
"size": 44,
"weight": 700,
"tracking": "-0.01em",
"numeric": "tabular"
},
"subLabel": {
"size": 16,
"weight": 400
},
"subValue": {
"size": 16,
"weight": 400,
"numeric": "tabular"
},
"note": {
"size": 17,
"weight": 400,
"leading": 1.8
},
"valid": {
"size": 15,
"weight": 500,
"numeric": "tabular"
}
},
"colors": {
"ground": "#FFFFFF",
"surface": "#F2F4F7",
"ink": "#121519",
"muted": "#6F767F",
"accent": "#14425E",
"rule": "#D5DAE1"
},
"rules": [
"金額列は右揃えの等幅。桁が揃っていないと、内訳を出した意味が消える",
"行の罫は tr に引く。td ごとに引くと column-gap のぶん罫が切れる",
"強調は合計行 1 つ。項目に色を置くと「推したい項目」に読まれる"
]
} /designs/estimate-breakdown-table/pattern.html — 版そのものの HTML。書体の部分集合ごと同梱で、開けばこの絵がそのまま出ます。
<!doctype html>
<meta charset="utf-8">
<title>見積の内訳 — 合計行だけを立てる</title>
<meta name="dv-font" content="Zen Kaku Gothic New:400;500;700">
<link rel="stylesheet" href="./font.css">
<style>
:root {
--ground: #FFFFFF;
--surface: #F2F4F7;
--ink: #121519;
--muted: #6F767F;
--accent: #14425E;
--rule: #D5DAE1;
}
* { box-sizing: border-box; margin: 0; }
html, body { width: 1920px; height: 1080px; }
body { font-family: "Zen Kaku Gothic New", "IPAGothic", sans-serif; }
.artboard {
width: 1920px; height: 1080px;
background: var(--ground); color: var(--ink);
padding: 96px 140px;
}
.content { height: 100%; display: grid; grid-template-rows: auto 1fr auto; gap: 32px; }
.head { display: flex; align-items: baseline; justify-content: space-between; gap: 64px; }
.title { font-size: 42px; font-weight: 700; letter-spacing: .02em; }
.basis { font-size: 17px; font-weight: 400; color: var(--muted); }
.table { display: grid; grid-template-rows: auto repeat(6, 1fr) auto; }
/* 金額列は右揃えの等幅。桁が揃っていないと、合計が正しいかを
読み手が確かめられず、内訳を出した意味が消える。 */
.tr { display: grid; grid-template-columns: 90px 1fr 200px 130px 260px; align-items: center; column-gap: 32px; }
/* 行の罫は tr に引く。td ごとに引くと column-gap のぶん罫が切れ、
揃っているはずの表が破線で組まれたように見える。 */
.tr { border-bottom: 1px solid var(--rule); }
.tr:first-child { border-bottom-width: 2px; }
.th { padding-bottom: 14px; font-size: 16px; font-weight: 500; letter-spacing: .1em; color: var(--muted); }
.th[data-num], .num { text-align: right; font-variant-numeric: tabular-nums; }
.td { padding: 14px 0; }
.no { font-size: 17px; font-weight: 400; color: var(--muted); font-variant-numeric: tabular-nums; }
.item { font-size: 21px; font-weight: 500; }
.itemNote { margin-top: 5px; font-size: 15px; font-weight: 400; color: var(--muted); line-height: 1.6; }
.qty { font-size: 18px; font-weight: 400; color: var(--muted); }
.rate { font-size: 18px; font-weight: 400; color: var(--muted); }
.amount { font-size: 24px; font-weight: 500; }
.total { display: grid; grid-template-columns: 1fr 260px; column-gap: 32px; align-items: baseline;
background: var(--surface); padding: 24px 32px; margin-top: 6px; }
.totalLabel { font-size: 22px; font-weight: 500; text-align: right; }
.totalValue { font-size: 44px; font-weight: 700; text-align: right; color: var(--accent);
font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
.sub { display: grid; grid-template-columns: 1fr 260px; column-gap: 32px; padding: 14px 32px 0; }
.subLabel { font-size: 16px; font-weight: 400; color: var(--muted); text-align: right; }
.subValue { font-size: 16px; font-weight: 400; color: var(--muted); text-align: right; font-variant-numeric: tabular-nums; }
.foot { border-top: 1px solid var(--rule); padding-top: 22px; display: flex; justify-content: space-between; gap: 48px; }
.note { font-size: 17px; font-weight: 400; line-height: 1.8; color: var(--muted); max-width: 1240px; }
.valid { font-size: 15px; font-weight: 500; color: var(--muted); font-variant-numeric: tabular-nums; }
</style>
<div class="artboard" data-artboard>
<div class="content" data-content>
<div class="head">
<h1 class="title" data-type="title">お見積の内訳(初年度)</h1>
<p class="basis" data-type="basis">単位: 万円 / 消費税は別</p>
</div>
<div class="table">
<div class="tr">
<p class="th" data-type="th">No.</p>
<p class="th">項目</p>
<p class="th">数量</p>
<p class="th">単価</p>
<p class="th" data-num>金額</p>
</div>
<div class="tr">
<p class="td no" data-type="no">01</p>
<div class="td"><p class="item" data-type="item">現状調査</p><p class="itemNote" data-type="itemNote">連携・帳票・権限の棚卸し</p></div>
<p class="td qty" data-type="qty">2.0 人月</p>
<p class="td rate" data-type="rate">160</p>
<p class="td amount num" data-type="amount">320</p>
</div>
<div class="tr">
<p class="td no">02</p>
<div class="td"><p class="item">業務設計</p><p class="itemNote">移行後の手順と受入基準の文書化</p></div>
<p class="td qty">6.0 人月</p>
<p class="td rate">160</p>
<p class="td amount num">960</p>
</div>
<div class="tr">
<p class="td no">03</p>
<div class="td"><p class="item">データ移行</p><p class="itemNote">連携 23 本の切替と得意先コード統合</p></div>
<p class="td qty">14.0 人月</p>
<p class="td rate">150</p>
<p class="td amount num">2,100</p>
</div>
<div class="tr">
<p class="td no">04</p>
<div class="td"><p class="item">拠点展開</p><p class="itemNote">並行稼働 2 拠点 + 展開 7 拠点</p></div>
<p class="td qty">9.0 人月</p>
<p class="td rate">140</p>
<p class="td amount num">1,260</p>
</div>
<div class="tr">
<p class="td no">05</p>
<div class="td"><p class="item">ライセンス</p><p class="itemNote">年額。2 年目以降も同額</p></div>
<p class="td qty">340 名</p>
<p class="td rate">2.4</p>
<p class="td amount num">816</p>
</div>
<div class="tr">
<p class="td no">06</p>
<div class="td"><p class="item">移行期間中の並行保守</p><p class="itemNote">旧環境の監視を 4 か月延長</p></div>
<p class="td qty">4.0 か月</p>
<p class="td rate">36</p>
<p class="td amount num">144</p>
</div>
<div>
<div class="total">
<p class="totalLabel" data-type="totalLabel">初年度 合計</p>
<p class="totalValue" data-type="totalValue">5,600</p>
</div>
<div class="sub">
<p class="subLabel" data-type="subLabel">うち今期の支出(2026 年度内)</p>
<p class="subValue" data-type="subValue">2,380</p>
</div>
</div>
</div>
<div class="foot">
<p class="note" data-type="note">2 年目以降は 05 のライセンスのみ(年額 816 万円)に戻ります。現行の保守費 4,100 万円と比べるのはこの額です。</p>
<p class="valid" data-type="valid">見積有効期限 2026 年 12 月 31 日</p>
</div>
</div>
</div>
/designs/estimate-breakdown-table/font.css — 全部入りには入れていない
/* dv-subset v2 — generated by scripts/subset-font.mjs. Do not edit.
* font Zen Kaku Gothic New 400;500;700
* chars 146 (fca06512f861dfdc)
*
* pattern.html の文字だけを含む部分集合。描画時に外部へ取りに行かないよう同梱する。
* 版の文字を変えたら取り直すこと — 忘れると足りない字が豆腐になる。
* その取り忘れは pattern-entries.test.ts が上の指紋で検出する。
*/
@font-face {
font-family: 'Zen Kaku Gothic New';
font-style: normal;
font-weight: 400;
font-display: block;
src: url(./font-0.woff2) format('woff2');
unicode-range: U+2b-2c, U+2e-3a, U+4e, U+6f, U+2014, U+3002, U+3046, U+304a-304c, U+3051-3054, U+3057-305a, U+305f-3062, U+3066-3069, U+306b, U+306e-3070, U+3078-3079, U+307e-307f, U+3082, U+308a-308b, U+3092, U+3094, U+3099, U+30a4, U+30b3-30b4, U+30b9-30bc, U+30bf-30c0, U+30c6-30c9, U+30e9, U+30f3, U+30fb-30fc, U+4e07, U+4e26, U+4e2d, U+4eba, U+4eca, U+4ee5, U+4f4d, U+4fa1, U+4fdd, U+50cd, U+5148, U+5165, U+5185-5186, U+51fa, U+5207, U+521d, U+5225, U+52b9, U+52d9, U+5316, U+5358, U+5378, U+53d7, U+5408, U+540c-540d, U+57fa, U+5883, U+5b88, U+5c55, U+5e33, U+5e74, U+5ea6, U+5ef6, U+5f8c, U+5f97, U+610f, U+623b, U+624b, U+62e0, U+643a, U+652f, U+6570, U+6587, U+65e5, U+65e7, U+66f8, U+66ff, U+6708-6709, U+671f, U+672c, U+67fb, U+68da, U+696d, U+6a29, U+6bd4, U+6d88, U+6e96, U+70b9, U+72b6, U+73fe, U+74b0, U+76e3, U+76ee, U+7968, U+79fb, U+7a0e, U+7a3c, U+7a4d, U+7acb, U+7d71, U+884c, U+898b, U+8996, U+8a08, U+8a2d, U+8a33, U+8abf, U+8cbb, U+9023, U+91cf, U+91d1, U+9577, U+958b, U+9593, U+964d, U+9650, U+9805-9806, U+984d, U+ff08-ff09;
}
@font-face {
font-family: 'Zen Kaku Gothic New';
font-style: normal;
font-weight: 500;
font-display: block;
src: url(./font-1.woff2) format('woff2');
unicode-range: U+2b-2c, U+2e-3a, U+4e, U+6f, U+2014, U+3002, U+3046, U+304a-304c, U+3051-3054, U+3057-305a, U+305f-3062, U+3066-3069, U+306b, U+306e-3070, U+3078-3079, U+307e-307f, U+3082, U+308a-308b, U+3092, U+3094, U+3099, U+30a4, U+30b3-30b4, U+30b9-30bc, U+30bf-30c0, U+30c6-30c9, U+30e9, U+30f3, U+30fb-30fc, U+4e07, U+4e26, U+4e2d, U+4eba, U+4eca, U+4ee5, U+4f4d, U+4fa1, U+4fdd, U+50cd, U+5148, U+5165, U+5185-5186, U+51fa, U+5207, U+521d, U+5225, U+52b9, U+52d9, U+5316, U+5358, U+5378, U+53d7, U+5408, U+540c-540d, U+57fa, U+5883, U+5b88, U+5c55, U+5e33, U+5e74, U+5ea6, U+5ef6, U+5f8c, U+5f97, U+610f, U+623b, U+624b, U+62e0, U+643a, U+652f, U+6570, U+6587, U+65e5, U+65e7, U+66f8, U+66ff, U+6708-6709, U+671f, U+672c, U+67fb, U+68da, U+696d, U+6a29, U+6bd4, U+6d88, U+6e96, U+70b9, U+72b6, U+73fe, U+74b0, U+76e3, U+76ee, U+7968, U+79fb, U+7a0e, U+7a3c, U+7a4d, U+7acb, U+7d71, U+884c, U+898b, U+8996, U+8a08, U+8a2d, U+8a33, U+8abf, U+8cbb, U+9023, U+91cf, U+91d1, U+9577, U+958b, U+9593, U+964d, U+9650, U+9805-9806, U+984d, U+ff08-ff09;
}
@font-face {
font-family: 'Zen Kaku Gothic New';
font-style: normal;
font-weight: 700;
font-display: block;
src: url(./font-2.woff2) format('woff2');
unicode-range: U+2b-2c, U+2e-3a, U+4e, U+6f, U+2014, U+3002, U+3046, U+304a-304c, U+3051-3054, U+3057-305a, U+305f-3062, U+3066-3069, U+306b, U+306e-3070, U+3078-3079, U+307e-307f, U+3082, U+308a-308b, U+3092, U+3094, U+3099, U+30a4, U+30b3-30b4, U+30b9-30bc, U+30bf-30c0, U+30c6-30c9, U+30e9, U+30f3, U+30fb-30fc, U+4e07, U+4e26, U+4e2d, U+4eba, U+4eca, U+4ee5, U+4f4d, U+4fa1, U+4fdd, U+50cd, U+5148, U+5165, U+5185-5186, U+51fa, U+5207, U+521d, U+5225, U+52b9, U+52d9, U+5316, U+5358, U+5378, U+53d7, U+5408, U+540c-540d, U+57fa, U+5883, U+5b88, U+5c55, U+5e33, U+5e74, U+5ea6, U+5ef6, U+5f8c, U+5f97, U+610f, U+623b, U+624b, U+62e0, U+643a, U+652f, U+6570, U+6587, U+65e5, U+65e7, U+66f8, U+66ff, U+6708-6709, U+671f, U+672c, U+67fb, U+68da, U+696d, U+6a29, U+6bd4, U+6d88, U+6e96, U+70b9, U+72b6, U+73fe, U+74b0, U+76e3, U+76ee, U+7968, U+79fb, U+7a0e, U+7a3c, U+7a4d, U+7acb, U+7d71, U+884c, U+898b, U+8996, U+8a08, U+8a2d, U+8a33, U+8abf, U+8cbb, U+9023, U+91cf, U+91d1, U+9577, U+958b, U+9593, U+964d, U+9650, U+9805-9806, U+984d, U+ff08-ff09;
}
出典を持たない自作パターン。pattern.html が版そのもので、cover.png と frontmatter の
layout / type / colors はどちらもそこから機械的に測った結果。編集するのは pattern.html
だけで、寸法を手で書き直すことはない。
A self-authored pattern. pattern.html is the artboard itself; both cover.png and the
measurements in the frontmatter are derived from it, so the three cannot drift apart.
Edit the artboard, never the numbers.