디자인 시스템 갤러리 Things 3

Things 3

노란 Today 별 + 원형 완료 컨트롤 + 블루 Magic Plus의 정갈한 할 일 앱

서양생산성소비자차가운modern-minimal고딕comfortableroundsubtle라이트다크한글 지원출시 2017개정 2024

갤러리에서 열기 — 적용 예시 · 가이드 다운로드

Brand DNA

브랜드 DNA

  • 브랜드명: Things 3 (Cultured Code)
  • 한 줄 정체성: macOS·iOS 전용 프리미엄 할 일 앱 — 2017 Apple Design Award
  • 공식 디자인 철학: "Beautifully simple" — Apple HIG 충실, 정갈한 타이포·여백
  • 시그니처 요소 1개: 노란 Today 별(★), 얇은 원형 완료 컨트롤, Things Blue(#3A82F7)의 Magic Plus가 만드는 “오늘 중심” 흐름. Inbox/Today/Upcoming/Anytime/Someday 시간 분류와 SF Pro의 정갈한 리듬이 이를 받칩니다.

Tone & Mood

톤 & 무드

  • 핵심 키워드 3개: 정갈, 아름다움, 애플답게
  • 무드 설명: 기본 Light appearance는 깨끗한 종이 같은 흰 작업면과 옅은 회색 사이드바를 사용하고, 공식 Dark appearance는 같은 위계를 차콜 표면으로 옮깁니다. 색은 Things Blue, Today Yellow, Deadline Red에만 절제해 쓰며 넓은 여백과 부드러운 원형 컨트롤이 핵심입니다.
  • 비주얼 스타일: 모던 미니멀
  • 밀도(Density): Comfortable
  • 모서리 성향: Round (4~10px)
  • 평면성: Subtle

Color System

컬러 시스템 (CSS 변수)

:root {
  /* Primary - Things Blue */
  --color-primary-50:  #E0EDFE;
  --color-primary-100: #BDD7FD;
  --color-primary-200: #90BAFB;
  --color-primary-300: #639CFA;
  --color-primary-400: #4D8FF9;
  --color-primary-500: #3A82F7;   /* Things Blue */
  --color-primary-600: #2A6FE0;
  --color-primary-700: #1F55B0;
  --color-primary-800: #143A78;
  --color-primary-900: #082146;

  /* Star (today/evening) yellow */
  --color-star: #FFCC02;

  /* Project deadline pink */
  --color-deadline: #FF3B30;

  /* Neutral (Apple system gray) */
  --color-neutral-0:    #FFFFFF;
  --color-neutral-50:   #F5F5F5;
  --color-neutral-100:  #F2F2F7;
  --color-neutral-200:  #E5E5EA;
  --color-neutral-300:  #D1D1D6;
  --color-neutral-500:  #AEAEB2;
  --color-neutral-700:  #8E8E93;
  --color-neutral-800:  #48484A;
  --color-neutral-900:  #1D1D1F;
  --color-neutral-1000: #000000;

  /* Semantic */
  --color-success-bg: #D1F0DC;
  --color-success-fg: #34C759;
  --color-warning-bg: #FFF1C5;
  --color-warning-fg: #FF9500;
  --color-error-bg:   #FFDAD7;
  --color-error-fg:   #FF3B30;
  --color-info-bg:    #E0EDFE;
  --color-info-fg:    #3A82F7;

  /* Surface */
  --bg-base:     #F5F5F5;
  --bg-subtle:   #F2F2F7;
  --bg-elevated: #FFFFFF;
  --bg-sidebar:  #F0F0F0;
  --bg-overlay:  rgba(29,29,31,0.40);

  /* Text */
  --text-primary:    #1D1D1F;
  --text-secondary:  #48484A;
  --text-tertiary:   #8E8E93;
  --text-on-primary: #FFFFFF;
  --text-link:       #3A82F7;
  --text-disabled:   #C7C7CC;

  /* Border */
  --border-default: #E5E5EA;
  --border-subtle:  #F2F2F7;
  --border-strong:  #C7C7CC;
  --border-focus:   #3A82F7;
}

[data-theme="dark"] {
  --bg-base:     #1C1C1E;
  --bg-subtle:   #2C2C2E;
  --bg-elevated: #2C2C2E;
  --bg-sidebar:  #1C1C1E;
  --text-primary:    #FFFFFF;
  --text-secondary:  #EBEBF5;
  --border-default:  #3A3A3C;
}

Typography

타이포그래피

  • 폰트 페어링:
    • 영문: SF Pro Text/Display (Apple 시스템)
    • 한글: Apple SD Gothic Neo / Pretendard
  • 위계:
    • Display: 34px / 700 / 1.2 (Today 헤더)
    • H1: 28px / 700 / 1.25
    • H2: 22px / 700 / 1.3
    • H3: 17px / 700 / 1.35
    • Body Large: 17px / 400 / 1.45 (Apple HIG body)
    • Body: 15px / 400 / 1.4
    • Body Small: 13px / 500 / 1.4
    • Caption: 12px / 500 / 1.3

Spacing

스페이싱

  • Base unit: 4px
  • 토큰: ``css --space-xs: 4px; --space-sm: 8px; --space-md: 12px; --space-lg: 18px; --space-xl: 24px; --space-2xl: 36px; --space-3xl: 56px; ``

Border Radius

Border Radius

--radius-none: 0;
--radius-sm: 4px;
  --radius-md: 6px;     /* 버튼·입력 */
--radius-lg: 10px;
--radius-xl: 14px;
--radius-full: 9999px;

Shadow / Elevation

Shadow / Elevation

--shadow-none: none;
--shadow-sm: 0 1px 2px rgba(0,0,0,0.04);
--shadow-md: 0 4px 12px rgba(0,0,0,0.06);
--shadow-lg: 0 12px 28px rgba(0,0,0,0.10);

Iconography

Iconography

  • 스타일: SF Symbols (Apple 시스템)
  • Stroke 굵기: 1.5~2px (SF Symbol Regular)
  • 모서리 처리: Round
  • 추천 라이브러리: SF Symbols

Component Guide

컴포넌트 가이드

Button

.btn { font: 600 15px/1 -apple-system, 'SF Pro Text', sans-serif; border-radius: 6px; padding: 8px 16px; border: 0; cursor: pointer; }
.btn-primary { background: var(--color-primary-500); color: var(--text-on-primary); }
.btn-primary:hover { background: var(--color-primary-600); }
.btn-secondary { background: var(--bg-elevated); color: var(--color-primary-500); border: 1px solid var(--border-default); }
.btn-add { background: transparent; color: var(--color-primary-500); padding: 8px 0; font: 500 15px/1 inherit; display: inline-flex; align-items: center; gap: 6px; }
.btn-add::before { content: '+'; font: 400 18px/1 inherit; }

Input

.input { background: var(--bg-elevated); border: 1px solid var(--border-default); border-radius: 6px; padding: 9px 12px; font: 400 15px/1.4 inherit; color: var(--text-primary); }
.input:focus { border-color: var(--color-primary-500); outline: 2px solid rgba(58,130,247,0.20); }
.todo-input { background: transparent; border: 0; font: 400 17px/1.4 inherit; color: var(--text-primary); outline: 0; padding: 0; }

Card (To-Do row)

.todo { display: grid; grid-template-columns: 22px 1fr; gap: 12px; padding: 9px 0; align-items: flex-start; }
.todo .check { width: 18px; height: 18px; border: 1.5px solid var(--border-strong); border-radius: var(--radius-full); cursor: pointer; margin-top: 2px; display: grid; place-items: center; transition: all var(--duration-fast) var(--ease-out); }
.todo .check:hover { border-color: var(--color-primary-500); }
.todo.done .check { background: var(--color-primary-500); color: #fff; border-color: var(--color-primary-500); font: 800 12px/1 inherit; }
.todo.done .check::before { content: '✓'; }
.todo.done .title { color: var(--text-tertiary); text-decoration: line-through; }
.todo .title { font: 400 17px/1.4 inherit; color: var(--text-primary); }
.todo .meta { font: 500 13px/1.4 inherit; color: var(--text-tertiary); margin-top: 3px; display: flex; gap: 12px; align-items: center; }
.todo .meta .project { color: var(--color-primary-500); display: inline-flex; align-items: center; gap: 4px; }
.todo .meta .when { display: inline-flex; align-items: center; gap: 4px; }
.todo .meta .deadline { color: var(--color-deadline); }
.project-card { background: var(--bg-elevated); border-radius: 10px; padding: 14px 18px; box-shadow: var(--shadow-sm); }
.project-card .head { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.project-card .progress { width: 22px; height: 22px; border-radius: 9999px; background: conic-gradient(var(--color-primary-500) 60%, var(--bg-subtle) 0); }
.project-card .title { font: 700 17px/1.3 inherit; }

Badge / Tag

.tag { background: var(--bg-subtle); color: var(--text-secondary); border-radius: 9999px; padding: 2px 10px; font: 600 12px/1.4 inherit; }
.area-badge { background: var(--bg-subtle); color: var(--text-primary); border-radius: 6px; padding: 3px 10px; font: 600 13px/1.4 inherit; }
.star-yellow { color: var(--color-star); font: 700 14px/1 inherit; }
.heading { font: 700 17px/1.4 inherit; color: var(--text-primary); padding: 14px 0 6px; border-bottom: 1px solid var(--border-default); margin-bottom: 6px; }

Navigation (Sidebar — 5단계 시간 분류)

.sidebar { background: var(--bg-sidebar); width: 240px; padding: 14px 0; }
.sidebar .item { display: flex; align-items: center; gap: 14px; padding: 7px 18px; font: 500 15px/1 inherit; color: var(--text-secondary); cursor: pointer; border-radius: 6px; margin: 1px 8px; }
.sidebar .item:hover { background: var(--border-default); }
.sidebar .item.active { background: var(--color-primary-500); color: #fff; font-weight: 600; }
.sidebar .item.active .count { color: rgba(255,255,255,0.85); }
.sidebar .item .ico { width: 22px; text-align: center; font-size: 16px; }
.sidebar .item .count { margin-left: auto; font: 500 13px/1 inherit; color: var(--text-tertiary); }
.sidebar h2 { padding: 12px 18px 4px; font: 600 12px/1.4 inherit; color: var(--text-tertiary); text-transform: uppercase; letter-spacing: 0.04em; margin: 0; }

Motion

Motion

--duration-fast: 120ms;
--duration-base: 240ms;
--duration-slow: 400ms;
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);   /* Apple spring */

Anti-patterns

Anti-patterns

1. 5단계 시간 분류(Inbox/Today/Upcoming/Anytime/Someday) 축소 금지 — 시간 축 분류가 정체성 2. 완료 컨트롤을 각진 체크박스로 변경 금지 — Things의 얇은 원형 completion circle과 진행 애니메이션이 핵심 3. 본문 폰트 17px 미만으로 줄이기 금지 — Apple HIG 본문 톤 4. 색을 여러 가지 추가 금지 — Blue·Star Yellow·Deadline Red 3색만 5. 모든 표면을 떠 있는 카드로 만들기 금지 — 종이처럼 이어지는 목록, 넓은 여백, 최소한의 경계가 우선

Sources

출처

  1. https://culturedcode.com/things/
  2. https://culturedcode.com/things/features/
  3. https://culturedcode.com/things/blog/2018/09/night-and-day/