Design Vault Search use case, structure, colour, notes /
Index Categories Tags 日本語
Back to index

Settings Panel — No Extra Colour for State

Stack
Settings Panel — No Extra Colour for State
28 28

480 × 640 Seen as a design

Take it with you

Copy and paste, or save a file and hand it over. For a machine with no network, one “Everything” file is enough.

Everything

settings-panel-single-accent-everything.md

Everything in this panel, including the contents behind each URL, in one Markdown file

Prompt

1.4 KB
Produce one interface component to the following specification.

- Canvas 480 × 640
- Margin top 28 right 28 bottom 28 left 28

## Emphasis
row 1 only, by fill and nothing else

## Type (px against a 480px canvas)
title  20px / 700 / tracking 0.01em
note  12px / 400 / leading 1.7
legend  11px / 500 / tracking 0.12em / uppercase
label  13px / 500
state  13px / 500
value  14px / 400
help  12px / 400 / leading 1.7
action  14px / 500

## Colour
Ground #FFFDFB / Surface #F6F2ED / Ink #1C1815 / Muted #6F675E / Accent #B4432A / Rule #E4DCD2

## Constraints — dropping these breaks it
- Never add a colour for state: on, off and invalid ride on one accent, rule weight and words. A red breaks the meaning as soon as the palette changes
- Show an error by thickening the rule and saying so — 1px hairline becomes a 2px ink rule, and the note below rises from muted to ink
- Draw fields as panels, not outlines: a hairline is only promised 1.10 against the page, so an outline can vanish under some palettes
- Put the label above the field — at 480 wide, a left-hand label starves the value of room
- One primary action. The second gets no fill and no border — just its words

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/settings-panel-single-accent/pattern.html.

Spec

1.7 KB

/ai/designs/settings-panel-single-accent.json

format: component
density: medium
layout:
  kind: stack
  canvas:
    w: 480
    h: 640
  margin:
    top: 28
    right: 28
    bottom: 28
    left: 28
  emphasis:
    row: 1
    via:
      - fill
type:
  title:
    size: 20
    weight: 700
    tracking: 0.01em
  note:
    size: 12
    weight: 400
    leading: 1.7
  legend:
    size: 11
    weight: 500
    tracking: 0.12em
    transform: upper
  label:
    size: 13
    weight: 500
  state:
    size: 13
    weight: 500
  value:
    size: 14
    weight: 400
  help:
    size: 12
    weight: 400
    leading: 1.7
  action:
    size: 14
    weight: 500
colors:
  ground: "#FFFDFB"
  surface: "#F6F2ED"
  ink: "#1C1815"
  muted: "#6F675E"
  accent: "#B4432A"
  rule: "#E4DCD2"
rules:
  - "Never add a colour for state: on, off and invalid ride on one accent, rule weight and words. A red breaks the meaning as soon as the palette changes"
  - Show an error by thickening the rule and saying so — 1px hairline becomes a 2px ink rule, and the note below rises from muted to ink
  - "Draw fields as panels, not outlines: a hairline is only promised 1.10 against the page, so an outline can vanish under some palettes"
  - Put the label above the field — at 480 wide, a left-hand label starves the value of room
  - One primary action. The second gets no fill and no border — just its words

Files

pattern.html

5.1 KB

/designs/settings-panel-single-accent/pattern.html — The artboard itself, font subset included — open it and this picture draws.

Show contents
<!doctype html>
<meta charset="utf-8">
<title>設定パネル — 状態に色を足さない</title>
<meta name="dv-font" content="M PLUS 2:400;500;700">
<link rel="stylesheet" href="./font.css">
<style>
  /* この版そのもの。index.md の layout / type / colors は、この HTML を
     scripts/render-pattern.mjs で実測した結果であって、別に書いた説明ではない。 */
  :root {
    --ground: #FFFDFB;
    --surface: #F6F2ED;
    --ink: #1C1815;
    --muted: #6F675E;
    --accent: #B4432A;
    --rule: #E4DCD2;
  }
  * { box-sizing: border-box; margin: 0; }
  html, body { width: 480px; height: 640px; }
  body { font-family: "M PLUS 2", "IPAGothic", sans-serif; }

  .artboard {
    width: 480px; height: 640px;
    background: var(--ground); color: var(--ink);
    padding: 28px;                        /* → layout.margin */
  }
  /* [data-content] は版面そのもの。height:100% で余白と一対一に対応させる。 */
  .panel { height: 100%; display: flex; flex-direction: column; }

  .head { padding-bottom: 20px; border-bottom: 1px solid var(--rule); }
  .note { color: var(--muted); margin-top: 6px; }

  .group { padding-top: 22px; }
  .legend { color: var(--muted); padding-bottom: 12px; }

  /* 欄は罫で囲まず面で示す。罫の床は 1.10 しかないので、配色を差し替えると
     輪郭だけが消える。面なら地との差が残る。 */
  .field { background: var(--surface); padding: 11px 14px; border-bottom: 1px solid var(--rule); }
  .label { display: block; color: var(--muted); }
  .value { display: block; margin-top: 3px; }

  /* 誤りは赤ではなく、罫を太らせて文言で言う。状態のために色を増やすと、
     配色を差し替えたときに意味と色の対応が崩れる。 */
  .field[data-invalid] { border-bottom: 2px solid var(--ink); padding-bottom: 10px; }
  .help { color: var(--muted); margin-top: 7px; padding-left: 14px; }
  .help[data-invalid] { color: var(--ink); }

  .switch { display: flex; align-items: center; justify-content: space-between; padding: 13px 14px; border-bottom: 1px solid var(--rule); }
  .switch:first-of-type { border-top: 1px solid var(--rule); }
  /* 入切は accent 1 色と、つまみの位置と、文言。3 つとも同じことを言う。 */
  .track { width: 40px; height: 22px; border-radius: 11px; background: var(--rule); position: relative; flex: none; }
  .track[data-on] { background: var(--accent); }
  .knob { position: absolute; top: 3px; left: 3px; width: 16px; height: 16px; border-radius: 50%; background: var(--ground); }
  .track[data-on] .knob { left: 21px; }
  .state { color: var(--muted); margin-left: auto; margin-right: 12px; }

  .acts { margin-top: auto; display: flex; gap: 10px; align-items: center; }
  .btn { padding: 11px 20px; border: 1px solid var(--rule); background: var(--ground); }
  /* 主操作は 1 つ。2 つ目は塗らず、文字だけにする。 */
  .btn[data-emphasis] { background: var(--accent); border-color: var(--accent); color: var(--ground); }
  .btn[data-plain] { border-color: transparent; color: var(--muted); }

  .title  { font-size: 20px; font-weight: 700; letter-spacing: .01em; }
  .note,
  .help   { font-size: 12px; font-weight: 400; line-height: 1.7; }
  .legend { font-size: 11px; font-weight: 500; letter-spacing: .12em; text-transform: uppercase; }
  .label,
  .state  { font-size: 13px; font-weight: 500; }
  .value  { font-size: 14px; font-weight: 400; }
  .btn    { font-size: 14px; font-weight: 500; }
</style>

<div class="artboard" data-artboard>
  <div class="panel" data-content>
    <div class="head">
      <h1 class="title" data-type="title">通知</h1>
      <p class="note" data-type="note">変更は保存したときに反映されます。</p>
    </div>

    <div class="group">
      <p class="legend" data-type="legend">配信</p>
      <div class="switch">
        <span class="label" data-type="label">請求書の発行</span>
        <span class="state" data-type="state">送る</span>
        <span class="track" data-on><span class="knob"></span></span>
      </div>
      <div class="switch">
        <span class="label">週次のまとめ</span>
        <span class="state">送らない</span>
        <span class="track"><span class="knob"></span></span>
      </div>
    </div>

    <div class="group">
      <p class="legend">宛先</p>
      <div class="field">
        <span class="label">既定の宛先</span>
        <span class="value" data-type="value">keiri@example.co.jp</span>
      </div>
      <p class="help" data-type="help">請求に関する通知はここへ届きます。</p>
    </div>

    <div class="group">
      <p class="legend">追加の宛先</p>
      <div class="field" data-invalid>
        <span class="label">メールアドレス</span>
        <span class="value">keiri@example</span>
      </div>
      <p class="help" data-invalid>この形式では送れません。@ のうしろにドメインが要ります。</p>
    </div>

    <div class="acts">
      <span class="btn" data-row="1" data-emphasis="fill" data-type="action">保存する</span>
      <span class="btn" data-row="2" data-plain>取り消す</span>
    </div>
  </div>
</div>

font.css

2.7 KB

/designs/settings-panel-single-accent/font.css — Not in Everything

Show contents
/* dv-subset v2 — generated by scripts/subset-font.mjs. Do not edit.
 * font    M PLUS 2 400;500;700
 * chars   89 (8fd2460d616e1eed)
 *
 * pattern.html の文字だけを含む部分集合。描画時に外部へ取りに行かないよう同梱する。
 * 版の文字を変えたら取り直すこと — 忘れると足りない字が豆腐になる。
 * その取り忘れは pattern-entries.test.ts が上の指紋で検出する。
 */

@font-face {
  font-family: 'M PLUS 2';
  font-style: normal;
  font-weight: 400;
  font-display: block;
  src: url(./font-0.woff2) format('woff2');
  unicode-range: U+2e, U+40, U+61, U+63, U+65, U+69-6d, U+6f-70, U+72, U+78, U+2014, U+3002, U+3044, U+3046, U+304b-304e, U+3053-305c, U+305f-3060, U+3066-306b, U+306e-3071, U+3078-307a, U+307e, U+3081, U+3089-308d, U+3092-3094, U+3099-309a, U+30a2, U+30a4, U+30b9-30ba, U+30c8-30c9, U+30cd, U+30cf-30d1, U+30e1, U+30eb-30ec, U+30f3, U+30fc, U+4fdd, U+4fe1, U+5148, U+52a0, U+53cd, U+53d6, U+5909, U+5b58, U+5b9a-5b9b, U+5c4a, U+5f0f, U+5f62, U+614b, U+65e2, U+6620, U+66f4, U+66f8, U+6b21, U+6c42, U+6d88, U+72b6, U+767a, U+77e5, U+8272, U+884c, U+8981, U+8a2d, U+8acb, U+8db3, U+8ffd, U+9001, U+901a, U+9031, U+914d, U+95a2;
}
@font-face {
  font-family: 'M PLUS 2';
  font-style: normal;
  font-weight: 500;
  font-display: block;
  src: url(./font-0.woff2) format('woff2');
  unicode-range: U+2e, U+40, U+61, U+63, U+65, U+69-6d, U+6f-70, U+72, U+78, U+2014, U+3002, U+3044, U+3046, U+304b-304e, U+3053-305c, U+305f-3060, U+3066-306b, U+306e-3071, U+3078-307a, U+307e, U+3081, U+3089-308d, U+3092-3094, U+3099-309a, U+30a2, U+30a4, U+30b9-30ba, U+30c8-30c9, U+30cd, U+30cf-30d1, U+30e1, U+30eb-30ec, U+30f3, U+30fc, U+4fdd, U+4fe1, U+5148, U+52a0, U+53cd, U+53d6, U+5909, U+5b58, U+5b9a-5b9b, U+5c4a, U+5f0f, U+5f62, U+614b, U+65e2, U+6620, U+66f4, U+66f8, U+6b21, U+6c42, U+6d88, U+72b6, U+767a, U+77e5, U+8272, U+884c, U+8981, U+8a2d, U+8acb, U+8db3, U+8ffd, U+9001, U+901a, U+9031, U+914d, U+95a2;
}
@font-face {
  font-family: 'M PLUS 2';
  font-style: normal;
  font-weight: 700;
  font-display: block;
  src: url(./font-0.woff2) format('woff2');
  unicode-range: U+2e, U+40, U+61, U+63, U+65, U+69-6d, U+6f-70, U+72, U+78, U+2014, U+3002, U+3044, U+3046, U+304b-304e, U+3053-305c, U+305f-3060, U+3066-306b, U+306e-3071, U+3078-307a, U+307e, U+3081, U+3089-308d, U+3092-3094, U+3099-309a, U+30a2, U+30a4, U+30b9-30ba, U+30c8-30c9, U+30cd, U+30cf-30d1, U+30e1, U+30eb-30ec, U+30f3, U+30fc, U+4fdd, U+4fe1, U+5148, U+52a0, U+53cd, U+53d6, U+5909, U+5b58, U+5b9a-5b9b, U+5c4a, U+5f0f, U+5f62, U+614b, U+65e2, U+6620, U+66f4, U+66f8, U+6b21, U+6c42, U+6d88, U+72b6, U+767a, U+77e5, U+8272, U+884c, U+8981, U+8a2d, U+8acb, U+8db3, U+8ffd, U+9001, U+901a, U+9031, U+914d, U+95a2;
}

Notes

この構成について / About this pattern

出典を持たない自作パターン。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.

Techniques

Apply to