(01) Foundations tokens

Tokens — the atoms.

3層アーキテクチャ: Primitive(生の値)→ Semantic(用途別名)→ Legacy alias(後方互換)。新規コードは Semantic トークンを推奨。

Color · Primitive palette12 neutrals / mode-independent
50#F4F4F2
100#E5E5E5
200#D4D4D4
300#A3A3A3
400#9A9A9A
500#737373
550#6B6B6B
600#525252
700#404040
800#262626
900#1A1A1A
950#0A0A0A
Color · Semantic (alias)mode-aware · use these in new code
--color-surface-pageneutral-50 / 950
Page background
--color-surface-insetneutral-100 / 900
Code, subtle fill
--color-surface-inverseneutral-950 / 50
Inverse panels
--color-text-primaryneutral-950 / 50
Primary text, icons
--color-text-mutedneutral-500 / 300
Body, meta labels
--color-text-dimneutral-400 / 600
Dimmed / decorative
--color-border-hairneutral-200 / 800
Hairlines, dividers
--color-action-primary-bgneutral-950 / 50
Button, CTA fill
Color · Pattern tiers3 tones for tile system
--pat-softneutral-100 / 800
Lightest tier
--pat-midneutral-300 / 550
Middle tier
--pat-hardneutral-950 / 50
Strong tier
Typography · RolesLatin display / JP body
Displayclamp(72, 15vw, 220)
900 / -0.055em / 0.9
Rondo.
Headlineclamp(64, 12vw, 180)
900 / -0.04em / 0.95
Leave a trace.
Titleclamp(32, 4vw, 48)
800 / -0.02em
Version 1.2.1
Body · JP16 / 700 / 1.7
その場所に、記録を重ねる。
Body · Text14 / 300 / 1.85
情報を検索するのではなく、記憶を場所に置いていく。自分だけの地図をつくるジャーナリングアプリ。
Meta · Caps11 / 500 / tracking 0.1em
(01) — 01 / Record · fig. 01
Mono · Code12 / 400 / stack-mono
var(--color-text-primary)
Spacing · Scale4px base rhythm
08micro
16tight
24gutter
32comfy
48block
64chapter
96section
120feature
RadiusApple-style corner scale
--radius-xs8px · Code
--radius-sm12px · Cards
--radius-md16px · Frames
--radius-lg24px · Containers
--radius-xl32px · Phones
--radius-full9999px · Pills
Elevation · Shadow4 tiers · dark variant auto
--shadow-smsubtle card lift
--shadow-mdphone, small hover
--shadow-lgphone mockup rest
--shadow-xlmodal, major element
Motion · Tokenseasing + duration
TokenValueUsage
--ease-primarycubic-bezier(0.22, 1, 0.36, 1)Reveal / scroll-in decel
--ease-uieaseHover, toggles
--ease-linearlinearProgress, continuous motion
--dur-instant0.15sInstant UI response
--dur-fast0.3sHover, micro
--dur-base0.9sContent reveal
--dur-slow1.2sDisplay reveal
Breakpointsmobile-first thresholds
NameValueScope
sm520pxTypography letter-spacing adjust
md768pxStory / feature grid stack
lg960pxHero / feature main layout switch
xl1280px--wrap-max content clamp
Z-index · Opacity · Borderlayering & hairline system
TokenValueUsage
--z-base1Watermark, hero bg
--z-docked10Sticky elements
--z-masthead40Logo mark
--z-controls50Theme/lang toggle
--z-modal100Modal, overlay
--opacity-disabled0.4Disabled controls
--opacity-watermark0.08Bg watermark
--border-hair1pxAll hairlines
Layoutcontainer system
TokenValueUsage
--wrap-max1280px.wrap max-width
--gutter24pxmain horizontal padding
--tap-size44pxa11y min touch target
(02) Components primitives

Components — the vocabulary.

画面上で見える基本部品。各コンポーネントは Anatomy → 使用例 → コードの順で掲載しています。

Button.btn / .btn-ghost

Primary · accent fill, hover reverses to outline, arrow translates on hover

Download All Updates →
Controls.controls / .ctrl-btn · fixed top-right

Lang + Theme · 36×36 outlined buttons, invert on hover. Real instance is position: fixed top-right (see this page's corner).

Section head.feature-head · num / dash / label
(03) — 01 / Record fig. 01
<div class="feature-head">
  <span><span class="num">(03)</span> — 01 / Record</span>
  <span class="dash"></span>
  <span>fig. 01</span>
</div>
Block labelscale-in hairline after label
New Features
Plain listbold title + inline description
  • 日付表示の改善ログ画面の日付ヘッダーを2行表示に。
  • データタブの改善期間セレクタをロケール対応+幅可変に。
Meta chips.hero-meta · mk icon + label
iOS 17+ Free No Ads
Index item.index-item · padding shifts on hover
Feature card.f-card · top rule + num + image + title + copy
(01) Map Filter

マップフィルタ機能

カテゴリ・タグ・評価・訪問回数・期間などでスポットを絞り込み。

(02) Data Share

データシェア機能

統計をカード画像としてシェア可能。3サイズ、ダーク/ライトテーマに対応。

Phone mockup.phone · 3D tilt + translateZ depth + parallax
.phone {
  transform: rotateX(5deg) rotateY(-10deg) translate3d(0, var(--py), 0);
  transform-style: preserve-3d;
}
.phone::before {                /* back plane for depth */
  transform: translateZ(-20px);
}
Motif9 marks · the visual vocabulary

タイル1枚ずつを独立したデザインモチーフとして使える。名前は形から。LPではこの9枚から1枚ずつを章の印として配置している。

01 Cross交差pat-mid
02 Pairpat-soft
03 Compasspat-hard
04 Curlpat-soft
05 Portalpat-hard
06 Bridgepat-mid
07 Clover三つ葉pat-hard
08 Pillarspat-mid
09 Gridpat-soft
Hairline / Dividerborder variants
Strong · var(--fg)
Hair · var(--rule)
Focus ringkeyboard-only outline
button:focus-visible {
  outline: 2px solid var(--fg);
  outline-offset: 3px;
}
(03) Patterns systems

Patterns — the grammar.

複数の component を組み合わせた繰り返し構造と、仕組みとしてのルール群。

Tile system · 3×39 marks / 3 tiers / scroll stagger
Dark mode strategyclass + CSS vars

.dark class on root toggles all semantic tokens. OS follow when no user override.

// rondo.js
var darkMq = window.matchMedia('(prefers-color-scheme: dark)');
function applyStoredOrOsTheme() {
  var stored = localStorage.getItem('theme');
  var dark = stored === 'dark' || (stored === null && darkMq.matches);
  document.documentElement.classList.toggle('dark', dark);
}
// OS live-follow when no user override
darkMq.addEventListener('change', () => {
  if (localStorage.getItem('theme') === null) applyStoredOrOsTheme();
});
i18n patterndata-i18n + window.T

6 languages · ja / en / ko / ru / zh-CN / zh-TW · HTML-safe fallback

<p data-i18n="hero-catch">その場所に、記録を重ねる。</p>

window.T = {
  'ja': { 'hero-catch': 'その場所に、記録を重ねる。' },
  'en': { 'hero-catch': 'Layer memories onto places.' }
};
// runtime: innerHTML when value contains <br|<strong, else textContent
Reveal staggerIntersectionObserver + nth-child delays

AOS · .aos becomes .aos.visible, then children reveal with per-index delay

.aos .feature-head { opacity: 0; transform: translateY(28px);
  transition: opacity var(--dur-base) var(--ease-primary),
              transform var(--dur-base) var(--ease-primary); }
.aos.visible .feature-head { opacity: 1; transform: translateY(0); }

/* stagger */
.aos.visible .feature-text > *:nth-child(1) { transition-delay: 0.15s; }
.aos.visible .feature-text > *:nth-child(2) { transition-delay: 0.26s; }
.aos.visible .feature-text > *:nth-child(3) { transition-delay: 0.36s; }
Section composition recipehead → title → jp → desc → figure
<section class="feature aos">
  <div class="section-glyph">...</div>       <!-- chapter mark -->
  <div class="feature-head">(03) — 01</div>   <!-- meta row -->
  <div class="feature-body">
    <div class="feature-text">
      <h2 class="feature-title">...</h2>      <!-- big display -->
      <p class="feature-jp">...</p>          <!-- JP catch -->
      <p class="feature-desc">...</p>        <!-- body -->
      <div class="feature-fig">...</div>     <!-- caption -->
    </div>
    <div class="feature-visual">...</div>    <!-- phones -->
  </div>
</section>
Reverse layout.feature-body.reverse flips text/visual + mirrors tilt
.feature-body.reverse .feature-text  { order: 2; }
.feature-body.reverse .feature-visual { order: 1; }
.feature-body.reverse .phone { --tilt-y: 10deg; }  /* mirrored */
Editorial numbering(NN) section · (NN) — NN / name
(01) Contentsindex
(02) — 01 / Recordfig. 01
(02) — 02 / Revisitfig. 02
(03) What's Newchangelog
(04) Storynote.com ↗
(04) Motion timing

Motion — the grace.

すべての動きは --ease-primary 基準。hover 系は ease、長尺は --dur-slow。

Ease · primarylive demo

cubic-bezier(0.22, 1, 0.36, 1) · fast start, gentle landing

Duration × Usagetoken matrix
Content reveal

Body content, card reveal, list stagger.

--ease-primary · --dur-base
Display titles

Large titles — slower, more cinematic.

--ease-primary · --dur-slow
Hover / UI

Buttons, menu toggles, theme switch.

--ease-ui · --dur-fast
Dash draw-in

Hairlines that complete the head row.

scaleX 0 → 1 · 1.1s delay 0.15s
Fade-in cascade

Hero — d1 / d2 / d3 delays stagger introduction.

0.2s / 0.4s / 0.6s
3D tilt + parallax

Feature phone mockups drift at different rates.

rotateX(5) rotateY(-10) + --py scroll
Reveal on scrollIntersectionObserver → .aos.visible
// rondo.js bootAos()
var io = new IntersectionObserver(entries => {
  entries.forEach(e => e.isIntersecting && e.target.classList.add('visible'));
}, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' });
document.querySelectorAll('.aos').forEach(el => io.observe(el));
Scroll parallaxfeature phone mockups
// bootParallax() — rAF-throttled
var p = (sectionMid - vh/2) / ((vh + rect.height) / 2);
phone1.style.setProperty('--py', (p * -28) + 'px');
phone2.style.setProperty('--py', (p *  36) + 'px');
prefers-reduced-motiona11y opt-out
@media (prefers-reduced-motion: reduce) {
  .phone     { --tilt-y: 0deg; --tilt-x: 0deg; --py: 0 !important; }
  .tile      { opacity: 1; transform: none; transition: none; }
}
// rondo.js bootParallax() short-circuits when user opts out.
(05) Guidelines principles

Guidelines — the rules.

書き方、作法、守るべき原則。トークンだけでは伝わらない「RONDOらしさ」のガイドライン。

Voice & Toneeditorial × journaling

Swiss editorial × Monotone

装飾を引き算し、タイポグラフィと余白で語る。色ではなく階調。1本のヘアラインが意味を持つ構造。

Japanese + English mix

英語はディスプレイ/メタラベル、日本語はキャッチと本文。"Leave a trace." の下に「写真、メモ、評価。訪れた場所に、記録を重ねていく。」

Ornament rules

グラフィックは説明せず、あしらいとして効かせる。ジャーナリング=記録を重ねる静かな作業、という製品の気分に寄り添う。

Writing conventionseditorial numbering

Section numbering

  • (NN)Top-level · Contents, Features, What's New, Story
  • (NN) — NN / nameSub-chapter · 01/02/03 Record/Revisit/Map
  • fig. NNFigure callout, per section

Version strings

  • Ver 1.2.1Marketing/UI
  • Version 1.2.1Headline form
  • 2026.04.19Dot-separated dates in YYYY.MM.DD

JP punctuation

  • Full-width comma (、)Use in body JP, not Latin comma
  • 「」quotation
  • · (U+00B7)Between Latin meta fragments
AccessibilityWCAG AA target

Contrast

  • Primary text#0A0A0A on #F4F4F2 · 19.5:1 AAA
  • Muted text#737373 on #F4F4F2 · 4.6:1 AA
  • Dim text#9A9A9A on #F4F4F2 · 3.0:1 Large only

Keyboard & Focus

  • Tap target≥ 44 × 44px (--tap-size)
  • Focus ring2px outline + 3px offset
  • Skip linkNot currently present — TODO

Motion sensitivity

prefers-reduced-motion で tilt / parallax / stagger を無効化。bootParallax() も短絡。装飾 SVG は aria-hidden="true"

File organizationhow CSS + HTML split

rondo.css (shared)

全ページ共通: tokens / reset / layout / motion base / global components (btn, mast, plain-list, block-label, controls, colophon, cta)。

<style> inline (per page)

ページ固有のレイアウト・コンポーネント: hero, feature, changelog, index, phone mockup, watermark 等。

rondo.js (shared)

theme, i18n, AOS, parallax, logo/controls inject, year setter。各ページで window.T を定義してから読み込み。

Browser supportmodern features used

Required

  • CSS Custom PropertiesAll modern browsers
  • aspect-ratioChrome 88+ / Safari 15+ / FF 89+
  • clamp()Chrome 79+ / Safari 13.1+

Progressive

  • color-mix()Used in hero watermark — falls back OK
  • word-break: auto-phraseChrome 119+ — JP only, safe fallback
  • :has() / nestingNot used

Back to the
product.

Design System / v1.0 · 2026 Runs on the same rondo.css as the LP
RONDO LP