{
  "version": "6.4.0",
  "date": "2026-09-26",
  "brand": {
    "blue": "#00BFFF",
    "graphic": "#006BFF",
    "deep": "#05396B",
    "accent": "#DA003C",
    "ink": "#231815"
  },
  "ui": {
    "light": {
      "background": "#FFFFFF",
      "surface": "#FFFFFF",
      "ink": "#111111",
      "secondary": "#4A4A4A",
      "muted": "#767676",
      "action": "#006BFF",
      "onAction": "#FFFFFF",
      "link": "#006BFF",
      "border": "#E5E5E5",
      "danger": "#DA003C",
      "onDanger": "#FFFFFF",
      "tint": "#E6F0FF",
      "tintSubtle": "#F2F7FF",
      "borderStrong": "#D4D4D4",
      "disabled": "#CCCCCC",
      "nonText": "#8A8A8A",
      "icon": "#006BFF"
    },
    "dark": {
      "background": "#0C1428",
      "surface": "#141F36",
      "ink": "#F5F5F5",
      "secondary": "#CBD5E1",
      "muted": "#A1ACBD",
      "action": "#1E8CFF",
      "onAction": "#08122B",
      "link": "#4DA3FF",
      "border": "#344157",
      "danger": "#FF4D6D",
      "onDanger": "#08122B",
      "tint": "#182D50",
      "tintSubtle": "#141F36",
      "borderStrong": "#52627C",
      "disabled": "#52627C",
      "nonText": "#74829A",
      "icon": "#4DA3FF"
    }
  },
  "typography": {
    "roman": "Poppins",
    "japanese": "Noto Sans JP",
    "bodyRem": 0.9375,
    "bodyLineHeight": 1.85,
    "captionRem": 0.6875,
    "minimumRem": 0.6875,
    "numeric": {
      "weight": 800,
      "feature": "tabular-nums",
      "sizeRem": [
        2.5,
        4
      ],
      "unitRatio": 0.35
    },
    "display": {
      "romanWeight": 800,
      "japaneseWeight": 900
    },
    "captionMinimumRem": 0.6875,
    "kickerMinimumRem": 0.6875,
    "scaling": {
      "web": "rem",
      "ios": "Dynamic Type / UIFontMetrics",
      "android": "sp"
    },
    "mixedRuns": "和文を含む行は同じ書体・ウェイト。数値軸と表は等幅数字。欠けた文字だけフォールバック。",
    "skyType": "ブランドの大きなタイトル専用。本文・UIラベルでは使わず、コントラストを検証。",
    "tabLabel": {
      "minimumRem": 0.59375,
      "requiresIcon": true,
      "scope": "icon-accompanied navigation tabs only; all other supporting text remains at least 11px",
      "scalesWithText": true
    },
    "minimumScope": "general supporting text; icon-accompanied tab labels follow tabLabel",
    "byMedium": {
      "ui": {
        "roman": "Poppins",
        "japanese": "Noto Sans JP",
        "fallbackRoman": "sans-serif",
        "fallbackJapanese": "sans-serif"
      },
      "article": {
        "roman": "Poppins",
        "japanese": "Noto Sans JP",
        "fallbackRoman": "sans-serif",
        "fallbackJapanese": "sans-serif"
      },
      "editorialCard": {
        "roman": "Poppins",
        "japanese": "Noto Sans JP",
        "fallbackRoman": "sans-serif",
        "fallbackJapanese": "sans-serif"
      },
      "video": {
        "roman": "Poppins",
        "japanese": "Noto Sans JP",
        "fallbackRoman": "sans-serif",
        "fallbackJapanese": "sans-serif"
      },
      "print": {
        "roman": "Poppins",
        "japanese": "Noto Sans JP",
        "fallbackRoman": "sans-serif",
        "fallbackJapanese": "sans-serif"
      }
    },
    "fontFiles": {
      "roman": {
        "400": "Poppins-Regular.ttf",
        "500": "Poppins-Medium.ttf",
        "600": "Poppins-SemiBold.ttf",
        "700": "Poppins-Bold.ttf",
        "800": "Poppins-ExtraBold.ttf"
      },
      "japanese": {
        "400": "NotoSansJP-Regular.otf",
        "500": "NotoSansJP-Medium.otf",
        "700": "NotoSansJP-Bold.otf",
        "900": "NotoSansJP-Black.otf"
      }
    },
    "editorial": {
      "bodyWeight": 500,
      "emphasisWeight": 700,
      "license": "SIL Open Font License; notices in font-sources/ and assets/",
      "logo": "original VI vectors unchanged",
      "weightPolicy": "use actual weight files; no synthetic 800/900 from static Bold"
    },
    "contentEditorial": {
      "scope": "content project articles and motion posters; preserve existing UI minima and immutable releases",
      "article": {
        "bodyRem": 1.0625,
        "bodyLineHeight": 1.95,
        "noteRem": 0.875,
        "noteLineHeight": 1.85,
        "creditRem": 0.875
      },
      "poster1080": {
        "headlinePx": 72,
        "datePx": 36,
        "metricPx": 88,
        "unitPx": 32,
        "legendPx": 36,
        "notePx": 32,
        "status": "starting values; inspect at actual phone size and recompose when needed"
      },
      "hierarchy": [
        "phenomenon",
        "headline",
        "observationPeriod",
        "metricWithUnitAndDenominator",
        "legend",
        "noteAndCredit"
      ],
      "datePolicy": "Observation period is distinct from publication date; keep a comparison-defining date beside the claim."
    }
  },
  "radius": [
    14,
    22,
    30
  ],
  "motion": {
    "pressMs": 120,
    "appearMs": 260,
    "expressionMs": 350,
    "reducedMotion": "stop",
    "autoplay": true,
    "chartGrowMs": 500,
    "springEasing": "cubic-bezier(.34,1.56,.64,1)",
    "splash": {
      "scope": "optional product example",
      "periodMs": 1700,
      "minimumShowMs": 1100,
      "fadeMs": 550
    },
    "loadingPulseMs": 1200,
    "scan": {
      "periodMs": 2600,
      "staggerMs": 850,
      "planes": 3,
      "stop": "when OS NFC sheet appears"
    },
    "tutorial": {
      "firstOpenOnly": true,
      "fadeMs": 300,
      "holdMs": 2000
    },
    "refresh": "pull-driven mark motion where adopted",
    "scene": "time-series autoplay on display; visible play/pause and time selector; stop when hidden or reduced motion is requested",
    "autoplayScope": "time-series Scene only; not automatic globe rotation or editorial example videos",
    "scenePlayback": {
      "autoplay": true,
      "playbackControls": true,
      "timeControl": true,
      "pauseWhenHidden": true,
      "reducedMotion": "stop",
      "loop": false,
      "pausePosition": "preserve",
      "afterHidden": "explicit resume"
    },
    "editorialPoster": {
      "scope": "exported content video, separate from time-series Scene autoplay",
      "camera": "Distinguish camera movement from a changing observation time.",
      "rotation": "When representing axial rotation: west to east; verify with a known longitude.",
      "loop": "Optional. Match pose, labels, data and audio across seam; inspect encoded playback.",
      "durationFps": "Choose for purpose; 18 seconds / 60 fps is freshwater precedent, not a universal default.",
      "reviewPlayback": "Explicit play; poster first; preload none; pause hidden video."
    }
  },
  "accessibility": {
    "bodyContrast": 4.5,
    "largeTextContrast": 3,
    "targetPx": 44,
    "textZoomPercent": 200,
    "largeTextDefinition": "24px regular or 18.66px bold",
    "inlineLinkSpacingPx": 24,
    "focusRing": {
      "widthPx": 3,
      "offsetPx": 2
    },
    "decorativeSVG": {
      "ariaHidden": true,
      "focusable": false
    },
    "form": "persistent labels; text errors; live feedback",
    "nonText": "do not use #8A8A8A for text; meaningful controls must remain distinguishable",
    "zoom": "reflow or wrap; do not shrink or truncate essential labels"
  },
  "roles": [
    {
      "id": "brand",
      "name": "ブランド",
      "owner": "Foundations",
      "description": "ロゴ、VI、署名。VI Blueはブランドのための色。"
    },
    {
      "id": "interface",
      "name": "操作",
      "owner": "Foundations",
      "description": "読む、選ぶ、戻る、再生する。操作色と現象色を別のトークンにする。"
    },
    {
      "id": "ground",
      "name": "地",
      "owner": "Earth Language",
      "description": "現象を受け止める地。題材と昼夜に従い、単なるUI背景とは分ける。"
    },
    {
      "id": "geography",
      "name": "地理",
      "owner": "Earth Language",
      "description": "陸、海岸線、国境、起伏。現象が読める範囲まで退く。"
    },
    {
      "id": "phenomenon",
      "name": "現象",
      "owner": "Earth Language",
      "description": "値、分布、動き。題材の意味に従って色を割り当てる。"
    }
  ],
  "usage": {
    "priority": [
      "VI原版のロゴ形状・ブランド色",
      "現行FoundationsのUIトークン・可読性",
      "現行Earth Language / Scene規範",
      "媒体別カード・動画の規範",
      "製品別の構成例"
    ],
    "productExamples": [
      "BODY I-O：分離ピル、AIピル、栄養表記",
      "SORAH App 2024：NFC、認証、製品登録、設定"
    ],
    "archivedExamples": "既存の図版は当時の制作例。現在値や現行Scene配色の見本とは扱わない。"
  },
  "logo": {
    "source": "assets/sorah-lockup.svg",
    "variants": [
      "primary-lockup",
      "symbol-filled",
      "symbol-outline",
      "wordmark"
    ],
    "clearSpaceSymbolDiameter": 0.5,
    "minimumPx": {
      "symbol": 16,
      "lockupHeight": 20
    },
    "dark": "wordmark only reversed white; symbol VI Blue and white",
    "blueGround": "symbol or white wordmark only; no lockup",
    "forbidden": [
      "redraw or trace",
      "distort or rotate",
      "add shadow gradient or outline",
      "change wordmark font spacing or ratio"
    ],
    "productMark": "Define separately; do not reuse SORAH symbol as a product icon"
  },
  "layout": {
    "gridPx": 4,
    "spacingPx": [
      8,
      12,
      16,
      24,
      40,
      64
    ],
    "maxContentPx": 760,
    "maxDocumentPx": 1060,
    "mobileMarginPx": 14,
    "mobileAppColumnPx": 460,
    "mobileAppColumnScope": "スマートフォンを主対象とするアプリを広い画面で表示するとき。地理SceneやWeb文書の最大幅には適用しない。",
    "floatingBarInsetPx": [
      8,
      12
    ],
    "safeArea": true,
    "glassNestingMax": 1,
    "scenePortrait": "visual and readout stacked",
    "sceneLandscape": "visual left, readout right",
    "modal": "one per screen; photo/name/description; equal-width actions stacked"
  },
  "materials": {
    "paper": {
      "surface": "ui.<mode>.surface",
      "borderPx": 1,
      "shadow": "none; selected state may lift"
    },
    "glass": {
      "scope": "floating controls and reading/content cards; one glass layer maximum",
      "light": "rgba(255,255,255,.55)",
      "dark": "rgba(8,16,38,.42)",
      "blurPx": 18,
      "saturate": 1.6,
      "highlight": "inset 0 1px 0 rgba(255,255,255,.7)",
      "shadow": "0 6px 18px rgba(5,57,107,.14)",
      "fallback": "opaque ui.<mode>.surface; verify contrast over actual content",
      "opacityPolicy": "reference values are starting points, not universal opacity requirements; verify text contrast after compositing"
    },
    "brandExpression": {
      "maximumPerScreen": 1,
      "gradient": "linear-gradient(130deg,#05396B,#006BFF,#00BFFF)",
      "text": "white over a sufficiently dark area or scrim; verify contrast at every label"
    },
    "sky": {
      "scope": "artwork and large title treatments only; never UI background",
      "variants": [
        "morning",
        "day",
        "twilight",
        "night"
      ]
    }
  },
  "iconography": {
    "scope": "brand expressive icons; standard control glyphs may use simpler forms",
    "gridPx": 48,
    "tabExamplePx": 23,
    "planes": {
      "frost": "#CBD9F9 at 82%",
      "core": "#006BFF; one meaningful group"
    },
    "overlapBlurPx": 2.4,
    "count": 21,
    "forbidden": [
      "meaningless decorative circles",
      "more than two colour planes"
    ],
    "accessibility": "Decorative SVG aria-hidden and focusable=false; controls have accessible names"
  },
  "components": {
    "button": {
      "shape": "capsule",
      "minimumTargetPx": 44,
      "primaryPerView": 1,
      "label": "verb",
      "fill": "ui.<mode>.action",
      "text": "ui.<mode>.onAction",
      "danger": "ui.<mode>.danger + onDanger; confirm destructive action",
      "lightContrastOnWhite": 4.62
    },
    "card": {
      "material": "paper or glass; validate contrast over actual background",
      "radiusPx": 22,
      "shadow": "none"
    },
    "heroMetric": {
      "font": "Poppins 800 tabular",
      "unit": "small",
      "maximumPerView": 1,
      "missing": "dash; never zero fill"
    },
    "progress": {
      "ring": "achievement only; one per screen",
      "barHeightPx": [
        14,
        20
      ],
      "value": "numeric label required"
    },
    "list": {
      "radiusPx": 22,
      "separatorInsetPx": 16,
      "row": "whole row is target; title and metadata left, value right"
    },
    "sheet": {
      "topRadiusPx": 30,
      "grabber": true,
      "dismiss": [
        "close button",
        "outside tap when appropriate",
        "down swipe on touch"
      ],
      "material": "paper or glass; long content requires verified composited contrast and an opaque fallback"
    },
    "conversation": {
      "user": "right, action blue with matching onAction text",
      "assistant": "left, subtle surface",
      "radiusPx": 22,
      "tailRadiusPx": 6,
      "composer": "floating glass capsule; explicit send button"
    },
    "form": {
      "radiusPx": 14,
      "label": "always visible",
      "focus": "visible ring",
      "error": "reason + example + recovery; text and colour",
      "success": "brief feedback; announce accessibly"
    },
    "emptyState": {
      "parts": [
        "what is missing",
        "what happens next",
        "one action"
      ],
      "decoration": "no mascot"
    },
    "modalConfirm": {
      "parts": [
        "title",
        "photo",
        "name",
        "description",
        "primary",
        "secondary"
      ],
      "actions": "equal-width vertical stack",
      "maxPerView": 1
    },
    "readoutPair": {
      "parts": [
        "axis value",
        "measured value",
        "unit",
        "sparkline",
        "time selector"
      ],
      "labelMinimumPx": 11,
      "valuePx": [
        28,
        32
      ],
      "unitRatio": 0.3333333333333333,
      "alwaysVisible": true
    },
    "articleHeader": {
      "order": [
        "hero image",
        "date",
        "headline",
        "byline",
        "tags",
        "rule",
        "lede",
        "body"
      ],
      "accent": [
        "date",
        "byline"
      ],
      "headlineLines": [
        2,
        3
      ]
    },
    "splitPillNavigation": {
      "scope": "BODY I-O example",
      "mainTabsMax": 4,
      "aiPillDiameterPx": 66,
      "header": "product wordmark centred",
      "keyboard": "hide tab bar; composer follows keyboard"
    },
    "scan": {
      "scope": "SORAH product registration example",
      "reader": "OS NFC sheet",
      "waiting": "pulse only before OS sheet",
      "result": [
        "state",
        "action and place",
        "recovery"
      ],
      "errorActions": [
        "retry",
        "help"
      ]
    },
    "auth": {
      "scope": "SORAH account flow example; provider availability depends on product",
      "order": [
        "Apple",
        "Google",
        "email signup",
        "login"
      ],
      "socialStyle": "provider original",
      "verification": "one sentence and status",
      "crossLink": "signup and login"
    },
    "settings": {
      "scope": "SORAH App example",
      "order": [
        "user",
        "language",
        "help",
        "about",
        "legal",
        "license"
      ],
      "logout": "last text row",
      "deleteAccount": "within account settings; confirmation"
    },
    "dataState": {
      "presentation": "quiet value plus explicit state text; no mandatory status badges or patterns",
      "states": {
        "zero": {
          "value": 0,
          "label": "観測値がゼロ"
        },
        "missing": {
          "value": null,
          "label": "欠測"
        },
        "outside": {
          "value": null,
          "label": "対象範囲外"
        },
        "loading": {
          "value": null,
          "label": "読み込み中"
        },
        "error": {
          "value": null,
          "label": "取得失敗",
          "action": "再試行"
        }
      },
      "quality": "provisional or estimated is metadata on a valid value, not a missing state",
      "retryPreserves": [
        "location",
        "time"
      ]
    },
    "interpolatedReadout": {
      "alwaysVisible": [
        "displayValue",
        "unit",
        "location",
        "displayTime",
        "interpolationLabel",
        "missingOrInfillStatus"
      ],
      "details": [
        "sourceValues",
        "sourceLocations",
        "sourceTimes",
        "sourceResolution",
        "method",
        "fraction",
        "baseline",
        "saturation"
      ],
      "trigger": "visible native details/summary; keyboard and touch; not hover-only",
      "precision": "source precision; interpolation does not add measurement precision"
    },
    "asyncAction": {
      "busyScope": "updating action only",
      "oldValue": "keep visible with original timestamp; distinguish pending selection",
      "disable": "duplicate submission of same action",
      "allow": "independent exploration",
      "response": "only apply if request identity and selected location/time still match",
      "error": "state text plus retry; preserve selection",
      "announcements": "polite status for loading/success, alert for failure; keep live region outside busy container",
      "focus": "preserve focus on action; native modal traps focus, Escape closes, restore opener"
    },
    "editorialNote": {
      "scope": "article supplemental conditions, not a place to hide claim-changing qualifiers",
      "label": {
        "ja": "※ 数字の読み方 / 図の読み方",
        "en": "Note · Reading the figure / map"
      },
      "light": {
        "ink": "#4B606B",
        "surface": "#F4F7F8",
        "border": "#B9C9D0"
      },
      "dark": {
        "ink": "#CBD5E1",
        "surface": "#141F36",
        "border": "#52627C"
      },
      "paddingPx": [
        14,
        18
      ],
      "borderLeftPx": 2,
      "role": "note",
      "alwaysVisible": true,
      "sourceExport": "Preserve label, text, source references in Markdown."
    },
    "contentProjectState": {
      "axes": {
        "stage": [
          "angle",
          "outline",
          "full"
        ],
        "review": [
          "in-review",
          "approved"
        ],
        "distribution": [
          "not-handed-off",
          "handed-off",
          "scheduled",
          "published"
        ]
      },
      "approval": "Record approved revision; do not infer a new revision is approved.",
      "distribution": "Per destination; handed-off is not published.",
      "alwaysVisible": [
        "revision",
        "updatedAt",
        "changeSummary"
      ],
      "exampleStatus": "reference pattern; not an automatic migration of existing projects"
    }
  },
  "copy": {
    "registers": {
      "ui": "敬体。短く、責めず、次にできることを書く。",
      "editorial": "常体。観察を名指し、比較基準を示す。"
    },
    "headline": {
      "editorialJaMaxCharacters": 17,
      "scope": "G1 editorial card; not an absolute limit on article headlines",
      "needs": [
        "subject",
        "comparison"
      ],
      "avoid": [
        "conclusive number",
        "jargon"
      ]
    },
    "statePattern": [
      "state name",
      "action and place",
      "recovery"
    ],
    "mixedScript": {
      "quantityRun": "tight",
      "latinWordRun": "quarter-space by run; idempotent",
      "punctuation": "no extra space beside brackets and punctuation"
    },
    "banned": [
      "革新的",
      "革命的",
      "イノベーション",
      "世界をより良くする（単独）",
      "届ける・提供するの濫用",
      "絵文字を操作の合図に使う",
      "説明のない専門略号",
      "Creative Platform"
    ],
    "checks": [
      "読者が自分の言葉で説明できるか",
      "図だけで発見の手がかりがあるか",
      "比較の基準が書かれているか"
    ]
  },
  "ios": {
    "scope": "SORAH native implementation conventions; verify current platform requirements at release",
    "standardControls": "prefer native navigation, sheets and haptics",
    "targetPt": 44,
    "safeArea": true,
    "textScaling": "Dynamic Type",
    "nfc": "Core NFC standard sheet; no competing custom reader overlay",
    "socialLogin": "provider original styling",
    "accountDeletion": "discoverable in account settings with confirmation"
  }
}
