1440 × 900 Seen as a design The artboard itself, drawn live — sharp at any zoom Structure, margins and columns overlaid
1440 × 900 Seen as a design The artboard itself, drawn live — sharp at any zoom Structure, margins and columns overlaid
Copy and paste, or save a file and hand it over. For a machine with no network, one “Everything” file is enough.
Everything in this panel, including the contents behind each URL, in one Markdown file — Large, so it goes as a file (copy is for 32 KB and under)
Produce one page to the following specification. - Canvas 1440 × 900 - Margin top 0 right 0 bottom 0 left 0 ## Emphasis row 2 only, by rule and nothing else ## Type (px against a 1440px canvas) product 17px / 700 / tracking 0.01em section 11px / 500 / tracking 0.14em / uppercase item 14px / 500 meta 13px / 400 heading 22px / 700 / tracking 0.01em column 12px / 500 / tracking 0.08em / uppercase num 14px / 500 / tabular numerals ## Colour Ground #FCFCFD / Surface #F1F2F6 / Ink #15161C / Muted #6B6E7B / Accent #5B4BE8 / Rule #DEE0E7 ## Constraints — dropping these breaks it - Fix the rail at 248px and let only the work area stretch — two equal columns give navigation the same weight as the work - Never fill the rail with ink — one panel and one hairline. A dark rail puts the shell in front of its contents - Mark the current item with a rule and nothing else; give every item the same transparent rule so selection does not shift the text - Get density from row count, not tight leading: 48px rows are roomy, and sixteen fit because the bands above are sized back from the canvas - No vertical rules in the table — they stop the eye at each column and the row stops reading as one record - The shell carries no page margin; each region carries its own. An outer margin makes the screen read as a card Replace the content with [your content]. Keep the measurements and colours as given. For an exact reproduction, use the verbatim HTML at https://design-vault.pages.dev/designs/app-shell-single-tone/pattern.html.
/ai/designs/app-shell-single-tone.json
format: web
density: high
layout:
kind: 2-column
canvas:
w: 1440
h: 900
margin:
top: 0
right: 0
bottom: 0
left: 0
emphasis:
row: 2
via:
- rule
type:
product:
size: 17
weight: 700
tracking: 0.01em
section:
size: 11
weight: 500
tracking: 0.14em
transform: upper
item:
size: 14
weight: 500
meta:
size: 13
weight: 400
heading:
size: 22
weight: 700
tracking: 0.01em
column:
size: 12
weight: 500
tracking: 0.08em
transform: upper
num:
size: 14
weight: 500
numeric: tabular
colors:
ground: "#FCFCFD"
surface: "#F1F2F6"
ink: "#15161C"
muted: "#6B6E7B"
accent: "#5B4BE8"
rule: "#DEE0E7"
rules:
- Fix the rail at 248px and let only the work area stretch — two equal columns give navigation the same weight as the work
- Never fill the rail with ink — one panel and one hairline. A dark rail puts the shell in front of its contents
- Mark the current item with a rule and nothing else; give every item the same transparent rule so selection does not shift the text
- "Get density from row count, not tight leading: 48px rows are roomy, and sixteen fit because the bands above are sized back from the canvas"
- No vertical rules in the table — they stop the eye at each column and the row stops reading as one record
- The shell carries no page margin; each region carries its own. An outer margin makes the screen read as a card{
"format": "web",
"density": "high",
"layout": {
"kind": "2-column",
"canvas": {
"w": 1440,
"h": 900
},
"margin": {
"top": 0,
"right": 0,
"bottom": 0,
"left": 0
},
"emphasis": {
"row": 2,
"via": [
"rule"
]
}
},
"type": {
"product": {
"size": 17,
"weight": 700,
"tracking": "0.01em"
},
"section": {
"size": 11,
"weight": 500,
"tracking": "0.14em",
"transform": "upper"
},
"item": {
"size": 14,
"weight": 500
},
"meta": {
"size": 13,
"weight": 400
},
"heading": {
"size": 22,
"weight": 700,
"tracking": "0.01em"
},
"column": {
"size": 12,
"weight": 500,
"tracking": "0.08em",
"transform": "upper"
},
"num": {
"size": 14,
"weight": 500,
"numeric": "tabular"
}
},
"colors": {
"ground": "#FCFCFD",
"surface": "#F1F2F6",
"ink": "#15161C",
"muted": "#6B6E7B",
"accent": "#5B4BE8",
"rule": "#DEE0E7"
},
"rules": [
"Fix the rail at 248px and let only the work area stretch — two equal columns give navigation the same weight as the work",
"Never fill the rail with ink — one panel and one hairline. A dark rail puts the shell in front of its contents",
"Mark the current item with a rule and nothing else; give every item the same transparent rule so selection does not shift the text",
"Get density from row count, not tight leading: 48px rows are roomy, and sixteen fit because the bands above are sized back from the canvas",
"No vertical rules in the table — they stop the eye at each column and the row stops reading as one record",
"The shell carries no page margin; each region carries its own. An outer margin makes the screen read as a card"
]
} /designs/app-shell-single-tone/pattern.html — The artboard itself, font subset included — open it and this picture draws.
<!doctype html>
<meta charset="utf-8">
<title>アプリの外殻 — 1 トーンで組む</title>
<meta name="dv-font" content="IBM Plex Sans JP:400;500;700">
<link rel="stylesheet" href="./font.css">
<style>
/* この版そのもの。index.md の layout / type / colors は、この HTML を
scripts/render-pattern.mjs で実測した結果であって、別に書いた説明ではない。 */
:root {
--ground: #FCFCFD;
--surface: #F1F2F6;
--ink: #15161C;
--muted: #6B6E7B;
--accent: #5B4BE8;
--rule: #DEE0E7;
}
* { box-sizing: border-box; margin: 0; }
html, body { width: 1440px; height: 900px; }
body { font-family: "IBM Plex Sans JP", "IPAGothic", sans-serif; }
.artboard {
width: 1440px; height: 900px;
background: var(--ground); color: var(--ink);
padding: 0; /* → layout.margin。外殻に版面の余白は無い */
}
/* [data-content] は版面そのもの。外殻では画面いっぱいがそれで、余白は
内側の各領域が持つ。height:100% で余白と一対一に対応させる。 */
.shell {
height: 100%;
/* 不等幅なので data-col は付けない。layout.columns は本数と間隔しか持たず、
等分の列を意味する契約なので、248px + 1fr はそこに載らない。側柱の幅は
仕様に書けないぶん rules で言う。 */
display: grid; grid-template-columns: 248px 1fr; gap: 0;
}
/* 外殻は 1 トーン。案内と作業領域を分けるのは面(surface)と罫 1 本だけで、
ink で塗り分けない。塗り分けた瞬間に、外殻が中身より前に出る。 */
.rail {
background: var(--surface); border-right: 1px solid var(--rule);
padding: 28px 0 24px;
display: flex; flex-direction: column; gap: 32px;
}
.product { padding: 0 24px; }
.group { display: grid; gap: 2px; }
.section { padding: 0 24px 8px; color: var(--muted); }
/* 現在地は罫 1 本。文字の色も太さも変えない — 色を足すと手段が 2 つになる。
全項目が同じ幅の透明な罫を持つので、選択で字がずれない。 */
.item {
padding: 9px 24px; border-left: 3px solid transparent;
display: flex; justify-content: space-between; align-items: center;
}
.item[data-emphasis] { border-left-color: var(--accent); }
.count { color: var(--muted); font-variant-numeric: tabular-nums; }
.foot { margin-top: auto; padding: 16px 24px 0; color: var(--muted); border-top: 1px solid var(--rule); }
.work { display: grid; grid-template-rows: auto auto 1fr; min-width: 0; }
.bar {
height: 92px; padding: 0 32px; border-bottom: 1px solid var(--rule);
display: flex; align-items: baseline; gap: 16px;
}
.bar > * { align-self: center; }
.meta { color: var(--muted); }
.bar .meta:last-child { margin-left: auto; }
/* 密度は行送りではなく行数で作る。1 行 44px は詰めた値ではない —
詰めずに 16 行入るように上下の領域を決めている。92 + 40 + 48x16 = 900。 */
.grid { display: grid; grid-template-columns: 132px 1fr 148px 132px 116px 104px; align-content: start; }
.grid > * { padding: 0 16px; display: flex; align-items: center; min-width: 0; }
/* 端の余白は行ごとに付ける。本体は 96 セルが 1 つの格子なので、:first-child だと
1 行目の 1 セットにしか当たらず、2 行目以降が 16px 左へずれる。 */
.grid > *:nth-child(6n + 1) { padding-left: 32px; }
.grid > *:nth-child(6n) { padding-right: 32px; }
.head > * { height: 40px; background: var(--surface); color: var(--muted); border-bottom: 1px solid var(--rule); }
.body > * { height: 48px; border-bottom: 1px solid var(--rule); }
/* 縦罫は引かない。列で視線が止まると行が読めなくなる。 */
.num { justify-content: flex-end; font-variant-numeric: tabular-nums; }
.name { width: 100%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; display: block; }
.sub { color: var(--muted); }
.product { font-size: 17px; font-weight: 700; letter-spacing: .01em; }
.section { font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; }
.item { font-size: 14px; font-weight: 500; }
.heading { font-size: 22px; font-weight: 700; letter-spacing: .01em; }
.meta,
.foot { font-size: 13px; font-weight: 400; }
.head > * { font-size: 12px; font-weight: 500; letter-spacing: .08em; text-transform: uppercase; }
.body > * { font-size: 14px; font-weight: 400; }
.num { font-size: 14px; font-weight: 500; }
</style>
<div class="artboard" data-artboard>
<div class="shell" data-content>
<aside class="rail">
<p class="product" data-type="product">請求管理</p>
<nav class="group">
<p class="section" data-type="section">業務</p>
<div class="item" data-row="1"><span data-type="item">契約一覧</span><span class="count">1284</span></div>
<div class="item" data-row="2" data-emphasis="rule"><span>請求書</span><span class="count">96</span></div>
<div class="item" data-row="3"><span>入金消込</span><span class="count">12</span></div>
<div class="item" data-row="4"><span>与信審査</span><span class="count">3</span></div>
</nav>
<nav class="group">
<p class="section">設定</p>
<div class="item" data-row="5"><span>メンバー</span><span class="count">28</span></div>
<div class="item" data-row="6"><span>外部連携</span><span class="count">4</span></div>
</nav>
<p class="foot" data-type="meta">同期 9:41</p>
</aside>
<main class="work">
<div class="bar">
<h1 class="heading" data-type="heading">請求書</h1>
<p class="meta">未確定 96 件</p>
<p class="meta">2026 年 8 月度</p>
</div>
<div class="grid head">
<div data-type="column">請求番号</div><div>取引先</div><div class="num">請求額</div>
<div>発行日</div><div>支払期日</div><div>状態</div>
</div>
<div class="grid body">
<div>INV-4821</div><div><span class="name">株式会社アオヤマ商会</span></div><div class="num" data-type="num">1,284,000</div><div class="sub">08-01</div><div class="sub">08-31</div><div class="sub">確定</div>
<div>INV-4822</div><div><span class="name">ミナト製作所</span></div><div class="num">318,500</div><div class="sub">08-01</div><div class="sub">08-31</div><div class="sub">確定</div>
<div>INV-4823</div><div><span class="name">合同会社ヒカリ設計事務所</span></div><div class="num">96,000</div><div class="sub">08-02</div><div class="sub">09-01</div><div class="sub">送付済</div>
<div>INV-4824</div><div><span class="name">株式会社トウカイ物流</span></div><div class="num">2,470,800</div><div class="sub">08-02</div><div class="sub">09-01</div><div class="sub">送付済</div>
<div>INV-4825</div><div><span class="name">サクラダ工業株式会社</span></div><div class="num">744,200</div><div class="sub">08-03</div><div class="sub">09-02</div><div class="sub">確定</div>
<div>INV-4826</div><div><span class="name">ノガミ電機</span></div><div class="num">58,300</div><div class="sub">08-05</div><div class="sub">09-04</div><div class="sub">下書き</div>
<div>INV-4827</div><div><span class="name">株式会社シラハマ食品</span></div><div class="num">1,006,400</div><div class="sub">08-05</div><div class="sub">09-04</div><div class="sub">確定</div>
<div>INV-4828</div><div><span class="name">イズミ商事株式会社</span></div><div class="num">432,000</div><div class="sub">08-06</div><div class="sub">09-05</div><div class="sub">送付済</div>
<div>INV-4829</div><div><span class="name">株式会社カワベ精密</span></div><div class="num">3,912,600</div><div class="sub">08-08</div><div class="sub">09-07</div><div class="sub">確定</div>
<div>INV-4830</div><div><span class="name">オオモリ印刷</span></div><div class="num">127,900</div><div class="sub">08-09</div><div class="sub">09-08</div><div class="sub">下書き</div>
<div>INV-4831</div><div><span class="name">株式会社フジシロ建設</span></div><div class="num">5,680,000</div><div class="sub">08-12</div><div class="sub">09-11</div><div class="sub">送付済</div>
<div>INV-4832</div><div><span class="name">タチバナ運輸株式会社</span></div><div class="num">889,700</div><div class="sub">08-13</div><div class="sub">09-12</div><div class="sub">確定</div>
<div>INV-4833</div><div><span class="name">株式会社ウメザワ薬品</span></div><div class="num">241,350</div><div class="sub">08-15</div><div class="sub">09-14</div><div class="sub">下書き</div>
<div>INV-4834</div><div><span class="name">ホシノ機材リース</span></div><div class="num">1,573,000</div><div class="sub">08-16</div><div class="sub">09-15</div><div class="sub">確定</div>
<div>INV-4835</div><div><span class="name">株式会社ナルセ化成</span></div><div class="num">672,400</div><div class="sub">08-17</div><div class="sub">09-16</div><div class="sub">送付済</div>
<div>INV-4836</div><div><span class="name">クラモト精機株式会社</span></div><div class="num">2,058,900</div><div class="sub">08-19</div><div class="sub">09-18</div><div class="sub">確定</div>
</div>
</main>
</div>
</div>
/designs/app-shell-single-tone/font.css — Not in Everything
/* dv-subset v2 — generated by scripts/subset-font.mjs. Do not edit.
* font IBM Plex Sans JP 400;500;700
* chars 141 (bb724a4c8f1df7a8)
*
* pattern.html の文字だけを含む部分集合。描画時に外部へ取りに行かないよう同梱する。
* 版の文字を変えたら取り直すこと — 忘れると足りない字が豆腐になる。
* その取り忘れは pattern-entries.test.ts が上の指紋で検出する。
*/
@font-face {
font-family: 'IBM Plex Sans JP';
font-style: normal;
font-weight: 400;
font-display: block;
src: url(./font-0.woff2) format('woff2');
unicode-range: U+2c-2d, U+30-3a, U+49, U+4e, U+56, U+2014, U+304d-304e, U+3066-3067, U+306e, U+3080, U+3099-309a, U+30a2, U+30a4, U+30a6, U+30aa-30ac, U+30af-30b0, U+30b5-30bc, U+30bf-30c2, U+30c8-30ca, U+30ce-30df, U+30e1-30e2, U+30e4, U+30e9-30eb, U+30ed, U+30ef, U+30f3-30f4, U+30f7, U+30fc, U+4e00, U+4e0b, U+4e0e, U+4e8b, U+4ed8, U+4ef6, U+4f1a, U+4f5c, U+4fe1, U+5148, U+5165, U+5237, U+52d9, U+5316, U+5370, U+53d6, U+53f7, U+5408, U+540c, U+54c1, U+5546, U+5916, U+5951, U+5b9a, U+5bc6, U+5be9, U+5de5, U+5e74, U+5ea6, U+5efa, U+5f0f, U+5f15, U+614b, U+6210, U+6240, U+6255, U+643a, U+652f, U+65e5, U+66f8, U+6708, U+671f, U+672a, U+6750, U+67fb, U+682a, U+696d, U+6a5f, U+6bbb, U+6c42, U+6d41, U+6d88, U+6e08, U+7269, U+72b6, U+7406, U+756a, U+767a, U+78ba, U+793e, U+7ba1, U+7cbe, U+7d04, U+7d44, U+85ac, U+884c, U+88fd, U+89a7, U+8a08, U+8a2d, U+8acb, U+8f38, U+8fbc, U+9001, U+9023, U+904b, U+90e8, U+91d1, U+96fb, U+984d, U+98df;
}
@font-face {
font-family: 'IBM Plex Sans JP';
font-style: normal;
font-weight: 500;
font-display: block;
src: url(./font-1.woff2) format('woff2');
unicode-range: U+2c-2d, U+30-3a, U+49, U+4e, U+56, U+2014, U+304d-304e, U+3066-3067, U+306e, U+3080, U+3099-309a, U+30a2, U+30a4, U+30a6, U+30aa-30ac, U+30af-30b0, U+30b5-30bc, U+30bf-30c2, U+30c8-30ca, U+30ce-30df, U+30e1-30e2, U+30e4, U+30e9-30eb, U+30ed, U+30ef, U+30f3-30f4, U+30f7, U+30fc, U+4e00, U+4e0b, U+4e0e, U+4e8b, U+4ed8, U+4ef6, U+4f1a, U+4f5c, U+4fe1, U+5148, U+5165, U+5237, U+52d9, U+5316, U+5370, U+53d6, U+53f7, U+5408, U+540c, U+54c1, U+5546, U+5916, U+5951, U+5b9a, U+5bc6, U+5be9, U+5de5, U+5e74, U+5ea6, U+5efa, U+5f0f, U+5f15, U+614b, U+6210, U+6240, U+6255, U+643a, U+652f, U+65e5, U+66f8, U+6708, U+671f, U+672a, U+6750, U+67fb, U+682a, U+696d, U+6a5f, U+6bbb, U+6c42, U+6d41, U+6d88, U+6e08, U+7269, U+72b6, U+7406, U+756a, U+767a, U+78ba, U+793e, U+7ba1, U+7cbe, U+7d04, U+7d44, U+85ac, U+884c, U+88fd, U+89a7, U+8a08, U+8a2d, U+8acb, U+8f38, U+8fbc, U+9001, U+9023, U+904b, U+90e8, U+91d1, U+96fb, U+984d, U+98df;
}
@font-face {
font-family: 'IBM Plex Sans JP';
font-style: normal;
font-weight: 700;
font-display: block;
src: url(./font-2.woff2) format('woff2');
unicode-range: U+2c-2d, U+30-3a, U+49, U+4e, U+56, U+2014, U+304d-304e, U+3066-3067, U+306e, U+3080, U+3099-309a, U+30a2, U+30a4, U+30a6, U+30aa-30ac, U+30af-30b0, U+30b5-30bc, U+30bf-30c2, U+30c8-30ca, U+30ce-30df, U+30e1-30e2, U+30e4, U+30e9-30eb, U+30ed, U+30ef, U+30f3-30f4, U+30f7, U+30fc, U+4e00, U+4e0b, U+4e0e, U+4e8b, U+4ed8, U+4ef6, U+4f1a, U+4f5c, U+4fe1, U+5148, U+5165, U+5237, U+52d9, U+5316, U+5370, U+53d6, U+53f7, U+5408, U+540c, U+54c1, U+5546, U+5916, U+5951, U+5b9a, U+5bc6, U+5be9, U+5de5, U+5e74, U+5ea6, U+5efa, U+5f0f, U+5f15, U+614b, U+6210, U+6240, U+6255, U+643a, U+652f, U+65e5, U+66f8, U+6708, U+671f, U+672a, U+6750, U+67fb, U+682a, U+696d, U+6a5f, U+6bbb, U+6c42, U+6d41, U+6d88, U+6e08, U+7269, U+72b6, U+7406, U+756a, U+767a, U+78ba, U+793e, U+7ba1, U+7cbe, U+7d04, U+7d44, U+85ac, U+884c, U+88fd, U+89a7, U+8a08, U+8a2d, U+8acb, U+8f38, U+8fbc, U+9001, U+9023, U+904b, U+90e8, U+91d1, U+96fb, U+984d, U+98df;
}
出典を持たない自作パターン。pattern.html が版そのもので、cover.png と
frontmatter の寸法はどちらもそこから機械的に出している。編集するのは 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.
layout に記録できない。layout.columns は本数と間隔しか持たず、
等分の列を意味する契約なので、この版は columns を名乗らない(data-col を付けない)。
代わりに幅を rules の 1 行目に置いてある —— そちらは生成プロンプトにも JSON にも載る