{
  "id": "app-shell-single-tone",
  "schemaVersion": 2,
  "title": {
    "ja": "アプリの外殻 — 1 トーンで組む",
    "en": "Application Shell in One Tone"
  },
  "summary": {
    "ja": "案内と作業領域を面と罫 1 本だけで分ける。現在地は罫で示し、文字の色も太さも変えない",
    "en": "Navigation and work area separated by one panel and one hairline; the current page marked by a rule alone"
  },
  "capturedAt": "2026-09-05",
  "categories": [
    "web-app"
  ],
  "tags": [
    "minimal",
    "typography"
  ],
  "useCases": [
    "app-shell"
  ],
  "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",
    "series": []
  },
  "rules": [
    {
      "ja": "側柱の幅は 248px で固定し、作業領域だけを伸ばす。等分の 2 段にすると、案内が作業領域と同じ重さになる",
      "en": "Fix the rail at 248px and let only the work area stretch — two equal columns give navigation the same weight as the work"
    },
    {
      "ja": "側柱を ink で塗らない。面（surface）と罫 1 本で分ける。濃く塗った瞬間、外殻が中身より前に出る",
      "en": "Never fill the rail with ink — one panel and one hairline. A dark rail puts the shell in front of its contents"
    },
    {
      "ja": "現在地は罫 1 本だけ。文字の色も太さも変えない。全項目に同じ幅の透明な罫を持たせ、選択で字がずれないようにする",
      "en": "Mark the current item with a rule and nothing else; give every item the same transparent rule so selection does not shift the text"
    },
    {
      "ja": "密度は行送りではなく行数で作る。行は 48px と詰めていないまま 16 行入るよう、上下の領域の高さを版面から逆算する（92 + 40 + 48×16 = 900）",
      "en": "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"
    },
    {
      "ja": "表に縦罫を引かない。列で視線が止まると、1 件を横に読めなくなる",
      "en": "No vertical rules in the table — they stop the eye at each column and the row stops reading as one record"
    },
    {
      "ja": "外殻に版面の余白を持たせない。余白は内側の各領域が持つ。外周に余白を敷くと画面がカードに見える",
      "en": "The shell carries no page margin; each region carries its own. An outer margin makes the screen read as a card"
    }
  ],
  "cover": "https://design-vault.pages.dev/_astro/cover.BCArv9eu.png",
  "assets": [],
  "shortlist": false,
  "status": "published",
  "relations": {
    "similar": [
      "comparison-table-single-fill"
    ]
  },
  "license": "Original",
  "publishedAt": null,
  "reproduction": {
    "spec": {
      "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"
      ]
    },
    "prompt": {
      "ja": "以下の仕様でページを 1 枚作ってください。\n\n- 版面 1440 × 900\n- 余白 上 0 右 0 下 0 左 0\n\n## 強調\n2 行目のみ。手段は 罫 だけ。ほかは変えない\n\n## 文字（版面 1440px に対する px）\nproduct  17px / 700 / 字間 0.01em\nsection  11px / 500 / 字間 0.14em / 大文字\nitem  14px / 500\nmeta  13px / 400\nheading  22px / 700 / 字間 0.01em\ncolumn  12px / 500 / 字間 0.08em / 大文字\nnum  14px / 500 / 等幅数字\n\n## 配色\n地 #FCFCFD / 面 #F1F2F6 / 文字 #15161C / 補助 #6B6E7B / 強調 #5B4BE8 / 罫 #DEE0E7\n\n## 外すと崩れる点\n- 側柱の幅は 248px で固定し、作業領域だけを伸ばす。等分の 2 段にすると、案内が作業領域と同じ重さになる\n- 側柱を ink で塗らない。面（surface）と罫 1 本で分ける。濃く塗った瞬間、外殻が中身より前に出る\n- 現在地は罫 1 本だけ。文字の色も太さも変えない。全項目に同じ幅の透明な罫を持たせ、選択で字がずれないようにする\n- 密度は行送りではなく行数で作る。行は 48px と詰めていないまま 16 行入るよう、上下の領域の高さを版面から逆算する（92 + 40 + 48×16 = 900）\n- 表に縦罫を引かない。列で視線が止まると、1 件を横に読めなくなる\n- 外殻に版面の余白を持たせない。余白は内側の各領域が持つ。外周に余白を敷くと画面がカードに見える\n\n内容は［ここに自分の内容を書く］に置き換えてください。寸法と配色はそのまま守ってください。\n正確に再現する場合は、この HTML をそのまま使ってください: https://design-vault.pages.dev/designs/app-shell-single-tone/pattern.html",
      "en": "Produce one page to the following specification.\n\n- Canvas 1440 × 900\n- Margin top 0 right 0 bottom 0 left 0\n\n## Emphasis\nrow 2 only, by rule and nothing else\n\n## Type (px against a 1440px canvas)\nproduct  17px / 700 / tracking 0.01em\nsection  11px / 500 / tracking 0.14em / uppercase\nitem  14px / 500\nmeta  13px / 400\nheading  22px / 700 / tracking 0.01em\ncolumn  12px / 500 / tracking 0.08em / uppercase\nnum  14px / 500 / tabular numerals\n\n## Colour\nGround #FCFCFD / Surface #F1F2F6 / Ink #15161C / Muted #6B6E7B / Accent #5B4BE8 / Rule #DEE0E7\n\n## Constraints — dropping these breaks it\n- Fix the rail at 248px and let only the work area stretch — two equal columns give navigation the same weight as the work\n- Never fill the rail with ink — one panel and one hairline. A dark rail puts the shell in front of its contents\n- Mark the current item with a rule and nothing else; give every item the same transparent rule so selection does not shift the text\n- 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\n- No vertical rules in the table — they stop the eye at each column and the row stops reading as one record\n- The shell carries no page margin; each region carries its own. An outer margin makes the screen read as a card\n\nReplace the content with [your content]. Keep the measurements and colours as given.\nFor an exact reproduction, use the verbatim HTML at https://design-vault.pages.dev/designs/app-shell-single-tone/pattern.html."
    },
    "code": {
      "html": "<!doctype html>\n<meta charset=\"utf-8\">\n<title>アプリの外殻 — 1 トーンで組む</title>\n<meta name=\"dv-font\" content=\"IBM Plex Sans JP:400;500;700\">\n<link rel=\"stylesheet\" href=\"./font.css\">\n<style>\n  /* この版そのもの。index.md の layout / type / colors は、この HTML を\n     scripts/render-pattern.mjs で実測した結果であって、別に書いた説明ではない。 */\n  :root {\n    --ground: #FCFCFD;\n    --surface: #F1F2F6;\n    --ink: #15161C;\n    --muted: #6B6E7B;\n    --accent: #5B4BE8;\n    --rule: #DEE0E7;\n  }\n  * { box-sizing: border-box; margin: 0; }\n  html, body { width: 1440px; height: 900px; }\n  body { font-family: \"IBM Plex Sans JP\", \"IPAGothic\", sans-serif; }\n\n  .artboard {\n    width: 1440px; height: 900px;\n    background: var(--ground); color: var(--ink);\n    padding: 0;                           /* → layout.margin。外殻に版面の余白は無い */\n  }\n  /* [data-content] は版面そのもの。外殻では画面いっぱいがそれで、余白は\n     内側の各領域が持つ。height:100% で余白と一対一に対応させる。 */\n  .shell {\n    height: 100%;\n    /* 不等幅なので data-col は付けない。layout.columns は本数と間隔しか持たず、\n       等分の列を意味する契約なので、248px + 1fr はそこに載らない。側柱の幅は\n       仕様に書けないぶん rules で言う。 */\n    display: grid; grid-template-columns: 248px 1fr; gap: 0;\n  }\n\n  /* 外殻は 1 トーン。案内と作業領域を分けるのは面（surface）と罫 1 本だけで、\n     ink で塗り分けない。塗り分けた瞬間に、外殻が中身より前に出る。 */\n  .rail {\n    background: var(--surface); border-right: 1px solid var(--rule);\n    padding: 28px 0 24px;\n    display: flex; flex-direction: column; gap: 32px;\n  }\n  .product { padding: 0 24px; }\n  .group { display: grid; gap: 2px; }\n  .section { padding: 0 24px 8px; color: var(--muted); }\n\n  /* 現在地は罫 1 本。文字の色も太さも変えない — 色を足すと手段が 2 つになる。\n     全項目が同じ幅の透明な罫を持つので、選択で字がずれない。 */\n  .item {\n    padding: 9px 24px; border-left: 3px solid transparent;\n    display: flex; justify-content: space-between; align-items: center;\n  }\n  .item[data-emphasis] { border-left-color: var(--accent); }\n  .count { color: var(--muted); font-variant-numeric: tabular-nums; }\n\n  .foot { margin-top: auto; padding: 16px 24px 0; color: var(--muted); border-top: 1px solid var(--rule); }\n\n  .work { display: grid; grid-template-rows: auto auto 1fr; min-width: 0; }\n  .bar {\n    height: 92px; padding: 0 32px; border-bottom: 1px solid var(--rule);\n    display: flex; align-items: baseline; gap: 16px;\n  }\n  .bar > * { align-self: center; }\n  .meta { color: var(--muted); }\n  .bar .meta:last-child { margin-left: auto; }\n\n  /* 密度は行送りではなく行数で作る。1 行 44px は詰めた値ではない —\n     詰めずに 16 行入るように上下の領域を決めている。92 + 40 + 48x16 = 900。 */\n  .grid { display: grid; grid-template-columns: 132px 1fr 148px 132px 116px 104px; align-content: start; }\n  .grid > * { padding: 0 16px; display: flex; align-items: center; min-width: 0; }\n  /* 端の余白は行ごとに付ける。本体は 96 セルが 1 つの格子なので、:first-child だと\n     1 行目の 1 セットにしか当たらず、2 行目以降が 16px 左へずれる。 */\n  .grid > *:nth-child(6n + 1) { padding-left: 32px; }\n  .grid > *:nth-child(6n) { padding-right: 32px; }\n\n  .head > * { height: 40px; background: var(--surface); color: var(--muted); border-bottom: 1px solid var(--rule); }\n  .body > * { height: 48px; border-bottom: 1px solid var(--rule); }\n  /* 縦罫は引かない。列で視線が止まると行が読めなくなる。 */\n  .num { justify-content: flex-end; font-variant-numeric: tabular-nums; }\n  .name { width: 100%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; display: block; }\n  .sub { color: var(--muted); }\n\n  .product   { font-size: 17px; font-weight: 700; letter-spacing: .01em; }\n  .section   { font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; }\n  .item      { font-size: 14px; font-weight: 500; }\n  .heading   { font-size: 22px; font-weight: 700; letter-spacing: .01em; }\n  .meta,\n  .foot      { font-size: 13px; font-weight: 400; }\n  .head > *  { font-size: 12px; font-weight: 500; letter-spacing: .08em; text-transform: uppercase; }\n  .body > *  { font-size: 14px; font-weight: 400; }\n  .num       { font-size: 14px; font-weight: 500; }\n</style>\n\n<div class=\"artboard\" data-artboard>\n  <div class=\"shell\" data-content>\n    <aside class=\"rail\">\n      <p class=\"product\" data-type=\"product\">請求管理</p>\n      <nav class=\"group\">\n        <p class=\"section\" data-type=\"section\">業務</p>\n        <div class=\"item\" data-row=\"1\"><span data-type=\"item\">契約一覧</span><span class=\"count\">1284</span></div>\n        <div class=\"item\" data-row=\"2\" data-emphasis=\"rule\"><span>請求書</span><span class=\"count\">96</span></div>\n        <div class=\"item\" data-row=\"3\"><span>入金消込</span><span class=\"count\">12</span></div>\n        <div class=\"item\" data-row=\"4\"><span>与信審査</span><span class=\"count\">3</span></div>\n      </nav>\n      <nav class=\"group\">\n        <p class=\"section\">設定</p>\n        <div class=\"item\" data-row=\"5\"><span>メンバー</span><span class=\"count\">28</span></div>\n        <div class=\"item\" data-row=\"6\"><span>外部連携</span><span class=\"count\">4</span></div>\n      </nav>\n      <p class=\"foot\" data-type=\"meta\">同期 9:41</p>\n    </aside>\n\n    <main class=\"work\">\n      <div class=\"bar\">\n        <h1 class=\"heading\" data-type=\"heading\">請求書</h1>\n        <p class=\"meta\">未確定 96 件</p>\n        <p class=\"meta\">2026 年 8 月度</p>\n      </div>\n      <div class=\"grid head\">\n        <div data-type=\"column\">請求番号</div><div>取引先</div><div class=\"num\">請求額</div>\n        <div>発行日</div><div>支払期日</div><div>状態</div>\n      </div>\n      <div class=\"grid body\">\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n        <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>\n      </div>\n    </main>\n  </div>\n</div>\n",
      "url": "https://design-vault.pages.dev/designs/app-shell-single-tone/pattern.html",
      "fonts": [
        "https://design-vault.pages.dev/designs/app-shell-single-tone/font.css",
        "https://design-vault.pages.dev/designs/app-shell-single-tone/font-0.woff2",
        "https://design-vault.pages.dev/designs/app-shell-single-tone/font-1.woff2",
        "https://design-vault.pages.dev/designs/app-shell-single-tone/font-2.woff2"
      ]
    }
  },
  "urls": {
    "ja": "https://design-vault.pages.dev/designs/app-shell-single-tone",
    "en": "https://design-vault.pages.dev/en/designs/app-shell-single-tone"
  },
  "notesMarkdown": "## この構成について / About this pattern\n\n出典を持たない自作パターン。**`pattern.html` が版そのもの**で、`cover.png` と\nfrontmatter の寸法はどちらもそこから機械的に出している。編集するのは `pattern.html` だけ。\n\nA self-authored pattern. `pattern.html` is the artboard itself; both `cover.png` and the\nmeasurements in the frontmatter are derived from it, so the three cannot drift apart.\nEdit the artboard, never the numbers.\n\n### Techniques\n\n- 側柱の幅 248px は `layout` に記録できない。`layout.columns` は本数と間隔しか持たず、\n  等分の列を意味する契約なので、この版は `columns` を名乗らない（`data-col` を付けない）。\n  代わりに幅を `rules` の 1 行目に置いてある —— そちらは生成プロンプトにも JSON にも載る\n- 「現在地を罫だけで示す」は、選択項目の文字を濃くする一般的なやり方より弱く見える。\n  弱いままで足りるのは、項目が 6 つしかなく、罫が版面の左端に立つため\n- 金額の列だけ 500 に上げ、等幅数字にする。桁が縦に揃うと、行数が増えても表が崩れない\n\n### Apply to\n\n- 一覧と詳細を往復する管理画面、社内向けコンソール\n- 案内の項目数が 10 以下で、作業領域に表が入る画面"
}