본문으로 건너뛰기
TDSMoring 디자인 시스템

색상

TDS의 색은 이름(토큰)으로 정해져 있다. 서비스가 Mordy에서 Morit으로 바뀌어도 이름은 같고 HEX 값만 바뀐다. 코드에는 HEX 값이 아니라 토큰 이름을 쓴다.

이 페이지의 목차

읽는 방법#

  • 화면 오른쪽 아래의 서비스 색 선택기(Mordy, Morit)를 바꾸면 이 페이지의 모든 색 견본과 HEX 값이 바로 바뀐다.
  • 모든 토큰에는 라이트(밝은 화면)와 다크(어두운 화면) 값이 있다. 두 값을 같은 줄에 나란히 적었다.
  • 토큰 이름은 코드의 color.primary와 같다. 웹에서는 CSS 변수 --tds-primary로 쓴다.
  • 웹 확장 표시가 있는 토큰은 앱 코드(tokens.ts)에는 없고, 웹에서 글자 대비를 맞추려고 TDS가 더한 토큰이다.
  • 앱 미사용 표시가 있는 토큰은 앱 코드에 정의만 있고 아직 읽는 곳이 없다.

서비스별 주요 색#

선택기와 상관없이 두 서비스의 값을 한눈에 비교하는 표다. 나머지 모든 토큰은 아래 그룹별 표에 있다.

서비스별 주요 색 비교
토큰Mordy 라이트Morit 라이트Mordy 다크Morit 다크
화면 배경bg--tds-bg#FCFCFD#F7F8FA#0B0F17#1C2327
회색 바탕canvas--tds-canvas#F4F6FA#F7F8FA#0B0F17#1C2327
흰 면surface--tds-surface#FFFFFF#FBFDFC#141A25#242C30
본문text--tds-text#141B2D#17211F#ECF0F7#DCE3E4
보조 글자textSecondary--tds-text-secondary#737B8F#65717D#9AA4B8#ACBABD
주색primary--tds-primary#1F7BFF#00856A#3D8BFF#79C7AF
진한 주색primaryStrong--tds-primary-strong#0C70FC#00856A#2F80FF#326C59
옅은 주색primarySoft--tds-primary-soft#E8F1FD#EAF8F4#172A4A#2F4D43
그라데이션 시작gradientFrom--tds-gradient-from#3A93FF#00856A#3A93FF#326C59
그라데이션 끝gradientTo--tds-gradient-to#0A70FF#00856A#0A70FF#326C59
성공success--tds-success#0E9057#00856A#2FBF7E#79C7AF
주의amber--tds-amber#F8A434#E3A008#F8A434#D5BD8E
오류danger--tds-danger#E5213A#C43C42#FF5A6E#EBA6A4

배경과 면#

화면, 패널, 입력 칸처럼 넓은 면에 쓰는 색이다.

배경과 면 색상 토큰
토큰라이트다크용도
화면 배경bg--tds-bg#FCFCFD#F7F8FA#0B0F17#1C2327화면 맨 뒤 배경이다. Screen 컴포넌트의 기본 배경이다.앱 코드에서 74곳에서 읽는다.
회색 바탕canvas--tds-canvas#F4F6FA#F7F8FA#0B0F17#1C2327흰 패널(Panel) 아래에 까는 옅은 회색 바탕이다. 시험 계획과 리포트 화면이 쓴다.앱 코드에서 30곳에서 읽는다.
흰 면surface--tds-surface#FFFFFF#FBFDFC#141A25#242C30패널, 시트, 대화상자, 탭 바, 선택 전 보기 칸의 배경이다.앱 코드에서 110곳에서 읽는다.
홈well--tds-well#F6F8FB#F2F4F6#1A2130#2C353A패널 안에서 행을 감싸는 옅은 홈이다. WellRow 배경과 시트 닫기 버튼 배경이다.앱 코드에서 54곳에서 읽는다.
카드card--tds-card#F3F7FE#F3FBF8#18202E#283837주색을 옅게 깐 카드 배경이다. Card의 기본 색이고 메뉴 목록 배경이다.앱 코드에서 26곳에서 읽는다.
진한 카드cardStrong--tds-card-strong#EAF2FD#EAF8F4#1D2839#2C433Dcard보다 한 단계 진한 틴트다. 온보딩에서 선택된 타일과 다크 모드 토스트의 배경이다.앱 코드에서 6곳에서 읽는다.
선택됨selected--tds-selected#F4F8FF#F3FBF8#15233C#2A3D3A선택된 항목의 배경이다. ChoiceCard, WellRow, FilterPill이 선택되면 이 색을 깐다.앱 코드에서 20곳에서 읽는다.
입력 칸field--tds-field#F4F7FB#F2F4F6#1A2130#2C353AField의 기본 배경이다. 포커스를 받으면 surface로 바뀐다.앱 코드에서 14곳에서 읽는다.
보조 면muted--tds-muted#F2F5F9#F0F3F2#1A2130#2C353A누르지 않는 보조 면이다. 표 머리글, 작은 태그, 이전·다음 둥근 버튼, 모임 커버 자리의 배경이다.앱 코드에서 28곳에서 읽는다.
누름pressed--tds-pressed#F5F8FC#F0F3F2#1B2230#343F44행을 누르는 동안의 배경이다. SettingsRow와 메뉴 행이 쓴다.앱 코드에서 6곳에서 읽는다.
사진 자리photo--tds-photo#F1F3F7#F2F4F6#10151F#191F23사진을 불러오기 전이나 사진이 없을 때 깔리는 색이다. Avatar, SourceCrop, ImageBlock이 쓴다.앱 코드에서 17곳에서 읽는다.
로딩 막대skeleton--tds-skeleton#EAF0F8#E8EAED#1C2433#343F44Skeleton의 막대 색이다.앱 코드에서 1곳에서 읽는다.
빈 막대track--tds-track#E6ECF5#E8EAED#253043#3D494F진행 막대, 슬라이더 레일, 차트 막대의 비어 있는 부분이다.앱 코드에서 36곳에서 읽는다.

선#

구분선과 테두리에 쓰는 색이다.

선 색상 토큰
토큰라이트다크용도
기본 선line--tds-line#E8EDF5#EEF1F0#232C3C#3A464A구분선과 기본 테두리다. 두께는 1px(또는 헤어라인)이다.앱 코드에서 93곳에서 읽는다.
진한 선lineStrong--tds-line-strong#D9E1EC#D8E1DE#2F394C#5E6D6D선택 전 체크 원, 라디오 테두리, 시트 손잡이처럼 눈에 띄어야 하는 선이다.앱 코드에서 49곳에서 읽는다.
카드 테두리cardBorder--tds-card-border#EDF1F6#E2E9E7#212A3A#3A464AChoiceCard 테두리이고, 다크 모드에서는 Panel 테두리다.앱 코드에서 29곳에서 읽는다.
선택 테두리앱 미사용selectedLine--tds-selected-line#DCE8FB#D5EBE6#284B82#42625C선택된 항목의 옅은 테두리로 정의되어 있다. 앱 코드에서는 아직 읽지 않는다.앱 코드에서 0곳에서 읽는다.

글자#

글자와 아이콘에 쓰는 색이다.

글자 색상 토큰
토큰라이트다크용도
본문text--tds-text#141B2D#17211F#ECF0F7#DCE3E4제목과 본문 글자다. 흰 면 위에서 가장 진한 글자다.앱 코드에서 178곳에서 읽는다.
보조 글자textSecondary--tds-text-secondary#737B8F#65717D#9AA4B8#ACBABD날짜, 설명, 개수처럼 본문 아래에 놓는 보조 글자다.앱 코드에서 555곳에서 읽는다.
약한 글자textTertiary--tds-text-tertiary#9AA3B5#8B95A1#667085#82948F입력 칸 안내 문구와 쓸 수 없는 상태의 글자다. 읽어야 하는 내용에는 쓰지 않는다.앱 코드에서 220곳에서 읽는다.
선택 안 된 탭tabInactive--tds-tab-inactive#6F7486#65717D#7C8699#ACBABD하단 탭 바에서 선택되지 않은 아이콘과 이름이다.앱 코드에서 2곳에서 읽는다.
슬레이트slate--tds-slate#4B5A74#4E5A57#AAB5C8#A5BEC4선택되지 않은 달력 날짜 숫자, 노트 카드의 종류 이름, 선택되지 않은 알림 선택지의 글자다.앱 코드에서 11곳에서 읽는다.
네이비navy--tds-navy#0B1F56#173D34#DCE7FF#BAE7D6워드마크 글자와 PillTabs의 선택된 칸 색이다. 다크 모드의 PillTabs는 navy 대신 primary를 쓴다.앱 코드에서 14곳에서 읽는다.
보조 글자(웹)웹 확장textSecondaryInk--tds-text-secondary-ink#6A7184#65717D#9AA4B8#ACBABD웹에서 작은 보조 글자를 쓸 때 쓴다. textSecondary를 흰 면에서 4.5:1이 되도록 진하게 만든 값이다.

주색#

서비스마다 값이 가장 크게 달라지는 색이다. 버튼, 링크, 선택 표시에 쓴다.

주 버튼의 배경이다. 왼쪽 gradientFrom에서 오른쪽 gradientTo로 이어진다. Morit은 단색이라 두 값이 같다.
주색 색상 토큰
토큰라이트다크용도
주색primary--tds-primary#1F7BFF#00856A#3D8BFF#79C7AF주 행동, 링크, 선택 표시, 진행 막대의 색이다. 앱 코드에서 가장 많이 쓰이는 색이다.앱 코드에서 487곳에서 읽는다.
진한 주색primaryStrong--tds-primary-strong#0C70FC#00856A#2F80FF#326C59색이 채워진 둥근 표식에 쓴다. 오늘 날짜 원과 중앙 버튼 그림자가 이 색이다.앱 코드에서 13곳에서 읽는다.
옅은 주색primarySoft--tds-primary-soft#E8F1FD#EAF8F4#172A4A#2F4D43선택 타일, D-Day 칩, 부드러운 버튼, 안내(Notice) 배경이다.앱 코드에서 76곳에서 읽는다.
주색 테두리primaryLine--tds-primary-line#9CC3FF#88D6BA#35609E#286B55SecondaryButton의 테두리와 켜진 FilterPill의 테두리다.앱 코드에서 19곳에서 읽는다.
그라데이션 시작gradientFrom--tds-gradient-from#3A93FF#00856A#3A93FF#326C59주 버튼, 중앙 버튼, 진행 막대, 아바타 바탕의 그라데이션 시작 색(왼쪽 또는 위)이다.앱 코드에서 12곳에서 읽는다.
그라데이션 끝gradientTo--tds-gradient-to#0A70FF#00856A#0A70FF#326C59그라데이션의 끝 색(오른쪽 또는 아래)이다.앱 코드에서 12곳에서 읽는다.
primary 위 글자(웹)웹 확장onPrimary--tds-on-primary#FFFFFF#FFFFFF#FFFFFF#132F25primary로 채운 면 위에 놓는 글자와 아이콘 색이다. 앱 코드에서는 white를 쓴다.
primaryStrong·그라데이션 위 글자(웹)웹 확장onPrimaryStrong--tds-on-primary-strong#FFFFFF#FFFFFF#FFFFFF#EDF4EFprimaryStrong 또는 gradient로 채운 면 위에 놓는 글자와 아이콘 색이다. 앱 코드에서는 white를 쓴다.
주색 글자(웹)웹 확장primaryInk--tds-primary-ink#1A69D9#007E65#4590FF#79C7AF웹에서 작은 글자를 주색으로 쓸 때 쓴다. primary를 흰 면에서 4.5:1이 되도록 진하게 만든 값이다.

탭과 구분 컨트롤#

탭, 칩, 구분 컨트롤의 바탕에 쓰는 색이다.

탭과 구분 컨트롤 색상 토큰
토큰라이트다크용도
구분 컨트롤 선택segment--tds-segment#4B5A74#4E5A57#3A4A66#30434C촬영 검토 화면에서 선택된 필터 칩의 배경이다.앱 코드에서 1곳에서 읽는다.
구분 컨트롤 바탕segmentTrack--tds-segment-track#F1F4F8#F2F4F6#1A2130#2C353A중립 대화상자 버튼, 시간 선택 띠, AiMark 칩의 배경이다.앱 코드에서 18곳에서 읽는다.
탭 바탕tabTrack--tds-tab-track#E9EDF3#E8EAED#1A2130#2C353APillTabs의 바탕 띠다.앱 코드에서 1곳에서 읽는다.

상태#

성공, 주의, 오류를 알리는 색이다. 색만으로 알리지 않고 아이콘과 글자를 함께 쓴다.

상태 색상 토큰
토큰라이트다크용도
성공success--tds-success#0E9057#00856A#2FBF7E#79C7AF정답, 완료, 성공 토스트의 아이콘 색이다.앱 코드에서 82곳에서 읽는다.
성공 면successSoft--tds-success-soft#ECF8F2#EAF8F4#11281E#2F4D43정답 보기와 FeedbackCard(correct)의 배경이다.앱 코드에서 20곳에서 읽는다.
성공 글자successText--tds-success-text#1F724D#173D34#7EDDB0#BAE7D6successSoft 위에 놓는 글자 색이다.앱 코드에서 2곳에서 읽는다.
민트mint--tds-mint#2DC48D#00A884#33C891#79C7AF학습 목표선, 학습 완료 표시, 차트의 세 번째 선 색, 올라간 수치의 배경이다.앱 코드에서 18곳에서 읽는다.
민트 글자mintText--tds-mint-text#17A673#00856A#4FD6A2#79C7AF이번 주 달성 목표 수치와 올라간 수치의 글자와 아이콘이다.앱 코드에서 10곳에서 읽는다.
주의amber--tds-amber#F8A434#E3A008#F8A434#D5BD8E복습 추천 버튼(AmberButton)과 경고 표시 색이다.앱 코드에서 44곳에서 읽는다.
주의 면amberSoft--tds-amber-soft#FCF6E9#FFF8D6#2A2215#4B4231Notice(warn)와 복습 추천 카드의 배경이다.앱 코드에서 21곳에서 읽는다.
주의 글자amberText--tds-amber-text#8A5A12#6D5429#F5C576#E9D5ACamberSoft 위에 놓는 글자 색이다.앱 코드에서 31곳에서 읽는다.
주황orange--tds-orange#F59A3C#E3A008#F59A3C#D5BD8E연속 학습일을 나타내는 불꽃 아이콘의 색이다.앱 코드에서 8곳에서 읽는다.
오류danger--tds-danger#E5213A#C43C42#FF5A6E#EBA6A4오류 글자, 오답 표시, 삭제 버튼, D-Day 임박 점의 색이다.앱 코드에서 116곳에서 읽는다.
오류 면dangerSoft--tds-danger-soft#FFEFF2#FFF1F1#321820#513638Notice(error), 오답 보기, 삭제 행 아이콘 타일의 배경이다.앱 코드에서 32곳에서 읽는다.
오류 테두리dangerLine--tds-danger-line#F6C3CB#ECC4C6#6A2A36#645153오류 면 위의 옅은 테두리다. 문제 번호 격자와 단원 카드에 쓴다.앱 코드에서 7곳에서 읽는다.
오류 위 글자(웹)웹 확장onDanger--tds-on-danger#FFFFFF#FFFFFF#FFFFFF#441C1Cdanger 위에 놓는 글자 색이다. 앱 코드에서는 white를 쓴다.

덮개와 고정색#

화면을 덮거나, 어떤 서비스에서도 바뀌지 않는 색이다.

덮개와 고정색 색상 토큰
토큰라이트다크용도
어둠막scrim--tds-scrimrgba(12, 18, 34, 0.45)rgba(12, 18, 34, 0.45)rgba(0, 0, 0, 0.62)rgba(0, 0, 0, 0.62)대화상자와 시트 뒤를 어둡게 덮는 반투명 색이다.앱 코드에서 2곳에서 읽는다.
베일veil--tds-veilrgba(255, 255, 255, 0.55)rgba(255, 255, 255, 0.55)rgba(11, 15, 23, 0.55)rgba(11, 15, 23, 0.55)촬영 검토 화면에서 사진 위를 흐리게 덮는 반투명 흰색이다.앱 코드에서 1곳에서 읽는다.
흰색white--tds-white#FFFFFF#FFFFFF#FFFFFF#FFFFFF색이 채워진 면 위의 글자와 아이콘이다. 모든 모드와 서비스에서 #FFFFFF다.앱 코드에서 171곳에서 읽는다.
검정앱 미사용black--tds-black#000000#000000#000000#000000정의되어 있지만 앱 코드에서는 아직 쓰지 않는다.앱 코드에서 0곳에서 읽는다.

과목 팔레트#

과목을 구분하는 8가지 색이다. 데이터를 구분하는 색이라서 서비스가 바뀌어도 값이 같다. 각 색은 다섯 값으로 이루어진다. 글리프는 아이콘과 링의 색, 옅은 면은 아이콘 바탕, 채움은 아이콘 타일의 그라데이션(왼쪽 위에서 오른쪽 아래), 막대는 차트 막대의 색이다.

과목 팔레트
이름글리프옅은 면채움 (시작 → 끝)막대기본 과목
blue#3B82F6#5B9BFF#E9F3FDrgba(91, 155, 255, 0.16)#7DB4FF#4C8DFB#5B9BFF수학
green#18A865#35C483#E6F7EErgba(53, 196, 131, 0.16)#6FD7A0#3DBE7C#7CD0A4영어
orange#F08A24#FFA24A#FFF3E6rgba(255, 162, 74, 0.16)#FFC07A#F59A3C#FCC470사회
red#F25C5C#FF7676#FFECEFrgba(255, 118, 118, 0.16)#FF8F8F#F25C5C#FC8C64한국사
purple#7B61FF#9C86FF#F0EBFFrgba(156, 134, 255, 0.16)#B3A2FF#8B72FF#A897FF—
teal#14A89A#2EC7B5#E0F8F0rgba(46, 199, 181, 0.16)#6ADBC6#1FB58A#6ACFB8과학
yellow#E0A100#F2BE2E#FFF7DDrgba(242, 190, 46, 0.16)#FFD96B#F1B81C#F6D36B—
gray#6B7A99#98A5BD#F1F4F8rgba(152, 165, 189, 0.16)#AAB4C7#8391AA#AAB4C7국어, 기타

각 칸에서 위쪽 값이 라이트, 아래쪽 값이 다크다. 채움과 막대는 라이트와 다크가 같다. 다크의 옅은 면은 글리프 색을 16% 투명도로 얹은 값이다.

글자 색 대비#

글자와 바탕의 밝기 차이를 숫자로 나타낸 값이다. 작은 글자(굵은 18.66px 미만)는 4.5:1 이상이어야 읽기 쉽다. 아래 표는 선택한 서비스와 모드의 실제 값으로 계산한 결과다.

글자 색 대비
쓰임글자색바탕대비기준 4.5:1
본문 글자textsurface17.15:115.25:116.13:110.92:1통과통과통과통과
배경 위 본문 글자textbg16.72:116.78:115.51:112.24:1통과통과통과통과
회색 바탕 위 본문 글자textcanvas15.85:116.78:115.51:112.24:1통과통과통과통과
보조 글자 (앱 값)textSecondarysurface4.23:16.95:14.88:17.11:1미달통과통과통과
보조 글자 (웹용 보정값)textSecondaryInksurface4.87:16.95:14.88:17.11:1통과통과통과통과
약한 글자·안내 문구textTertiarysurface2.53:13.50:12.97:14.45:1미달미달미달미달
선택 안 된 탭tabInactivesurface4.64:14.75:14.88:17.11:1통과통과통과통과
주색 글자 (앱 값)primarysurface3.93:15.26:14.50:17.17:1미달통과통과통과
주색 글자 (웹용 보정값)primaryInksurface5.16:15.55:14.92:17.17:1통과통과통과통과
옅은 주색 면 위 주색 글자 (앱 값)primaryprimarySoft3.45:14.32:14.21:14.68:1미달미달미달통과
옅은 주색 면 위 주색 글자 (웹용 보정값)primaryInkprimarySoft4.53:14.55:14.60:14.68:1통과통과통과통과
PrimaryButton 글자onPrimaryStronggradient (양 끝 중 낮은 값)3.08:13.08:14.60:15.48:1미달미달통과통과
primary 면 위 글자onPrimaryprimary3.93:13.31:14.60:17.25:1미달미달통과통과
AmberButton 글자whiteamber2.02:12.02:12.25:11.82:1미달미달미달미달
주의 면 위 글자amberTextamberSoft5.48:19.81:16.66:16.86:1통과통과통과통과
성공 면 위 글자successTextsuccessSoft5.39:19.55:110.96:16.84:1통과통과통과통과
오류 글자dangersurface4.55:15.76:15.04:17.11:1통과통과통과통과
오류 면 위 글자dangerdangerSoft4.09:15.39:14.69:15.43:1미달통과통과통과
danger 면 위 글자onDangerdanger4.55:13.02:15.15:17.36:1통과미달통과통과

Morit 값의 출처#

Morit은 Flutter의 Material 3 색 체계를 쓴다. TDS 토큰은 Mordy의 이름을 기준으로 하므로, Morit의 각 값이 어디에서 왔는지 세 가지로 나누어 적는다.

  • 코드 값 Morit 코드에 있는 값을 그대로 가져왔다. Flutter가 자동으로 만드는 색 역할(colorScheme.primaryContainer 같은 것)도 실제 앱을 실행해서 읽은 값이다.
  • 계산 Morit에 같은 역할이 없어서, 코드 값 둘을 섞어 만들었다. 섞는 비율을 같이 적었다.
  • 공통 Morit 코드에 정한 값이 없어서 Mordy와 같은 값을 쓴다. 어둠막, 흰색, 검정이 여기에 속한다.
Morit 색상 값의 출처
토큰라이트 값라이트 출처다크 값다크 출처
bg#F7F8FA코드 값 colorScheme.surface#1C2327코드 값 colorScheme.surface
canvas#F7F8FA코드 값 colorScheme.surface#1C2327코드 값 colorScheme.surface
surface#FBFDFC코드 값 colorScheme.surfaceContainerLow (cardTheme.color)#242C30코드 값 colorScheme.surfaceContainerLow (cardTheme.color)
well#F2F4F6코드 값 colorScheme.surfaceContainer#2C353A코드 값 colorScheme.surfaceContainer
card#F3FBF8계산 primaryContainer 50% + surfaceContainerLow 50%#283837계산 primaryContainer 35% + surfaceContainerLow 65%
cardStrong#EAF8F4코드 값 colorScheme.primaryContainer#2C433D계산 primaryContainer 70% + surfaceContainerLow 30%
selected#F3FBF8계산 primaryContainer 50% + surfaceContainerLow 50%#2A3D3A계산 primaryContainer 50% + surfaceContainerLow 50%
field#F2F4F6코드 값 inputDecorationTheme.fillColor#2C353A코드 값 inputDecorationTheme.fillColor
muted#F0F3F2코드 값 colorScheme.surfaceContainerHigh#2C353A코드 값 colorScheme.surfaceContainer
pressed#F0F3F2코드 값 colorScheme.surfaceContainerHigh#343F44코드 값 colorScheme.surfaceContainerHigh
photo#F2F4F6코드 값 colorScheme.surfaceContainer#191F23코드 값 colorScheme.surfaceContainerLowest
skeleton#E8EAED코드 값 colorScheme.surfaceContainerHighest#343F44코드 값 colorScheme.surfaceContainerHigh
track#E8EAED코드 값 colorScheme.surfaceContainerHighest#3D494F코드 값 colorScheme.surfaceContainerHighest
line#EEF1F0코드 값 dividerTheme.color#3A464A코드 값 dividerTheme.color
lineStrong#D8E1DE코드 값 outlinedButtonTheme 테두리색#5E6D6D계산 outline 50% + outlineVariant 50%
cardBorder#E2E9E7코드 값 _lightCardBorder#3A464A코드 값 colorScheme.outlineVariant
selectedLine#D5EBE6계산 primary 15% + surfaceContainerLow 85%#42625C계산 primary 35% + surfaceContainerLow 65%
text#17211F코드 값 colorScheme.onSurface#DCE3E4코드 값 colorScheme.onSurface
textSecondary#65717D코드 값 colorScheme.onSurfaceVariant#ACBABD코드 값 colorScheme.onSurfaceVariant
textTertiary#8B95A1코드 값 colorScheme.outline#82948F코드 값 colorScheme.outline
tabInactive#65717D코드 값 colorScheme.onSurfaceVariant#ACBABD코드 값 colorScheme.onSurfaceVariant
slate#4E5A57코드 값 listTileTheme.iconColor#A5BEC4코드 값 colorScheme.secondary
navy#173D34코드 값 colorScheme.onPrimaryContainer#BAE7D6코드 값 colorScheme.onPrimaryContainer
textSecondaryInk#65717D웹 확장 textSecondary를 surface·bg·canvas·well·card 위에서 4.5:1이 되도록 조정한 값#ACBABD웹 확장 textSecondary를 surface·bg·canvas·well·card 위에서 4.5:1이 되도록 조정한 값
primary#00856A코드 값 colorScheme.primary#79C7AF코드 값 colorScheme.primary
primaryStrong#00856A코드 값 filledButtonTheme 배경색#326C59코드 값 filledButtonTheme 배경색
primarySoft#EAF8F4코드 값 colorScheme.primaryContainer#2F4D43코드 값 colorScheme.primaryContainer
primaryLine#88D6BA코드 값 colorScheme.inversePrimary#286B55코드 값 colorScheme.inversePrimary
gradientFrom#00856A코드 값 filledButtonTheme 배경색 (Morit 버튼은 단색이라 시작과 끝이 같다)#326C59코드 값 filledButtonTheme 배경색 (Morit 버튼은 단색이라 시작과 끝이 같다)
gradientTo#00856A코드 값 filledButtonTheme 배경색 (Morit 버튼은 단색이라 시작과 끝이 같다)#326C59코드 값 filledButtonTheme 배경색 (Morit 버튼은 단색이라 시작과 끝이 같다)
onPrimary#FFFFFF코드 값 colorScheme.onPrimary#132F25코드 값 colorScheme.onPrimary
onPrimaryStrong#FFFFFF코드 값 filledButtonTheme 글자색#EDF4EF코드 값 filledButtonTheme 글자색
primaryInk#007E65웹 확장 primary를 surface·primarySoft·canvas·card·selected 위에서 4.5:1이 되도록 조정한 값#79C7AF웹 확장 primary를 surface·primarySoft·canvas·card·selected 위에서 4.5:1이 되도록 조정한 값
segment#4E5A57코드 값 listTileTheme.iconColor#30434C코드 값 colorScheme.secondaryContainer
segmentTrack#F2F4F6코드 값 colorScheme.surfaceContainer#2C353A코드 값 colorScheme.surfaceContainer
tabTrack#E8EAED코드 값 colorScheme.surfaceContainerHighest#2C353A코드 값 colorScheme.surfaceContainer
success#00856A코드 값 colorScheme.primary#79C7AF코드 값 colorScheme.primary
successSoft#EAF8F4코드 값 colorScheme.primaryContainer#2F4D43코드 값 colorScheme.primaryContainer
successText#173D34코드 값 colorScheme.onPrimaryContainer#BAE7D6코드 값 colorScheme.onPrimaryContainer
mint#00A884코드 값 seed#79C7AF코드 값 colorScheme.primary
mintText#00856A코드 값 colorScheme.primary#79C7AF코드 값 colorScheme.primary
amber#E3A008코드 값 colorScheme.tertiary#D5BD8E코드 값 colorScheme.tertiary
amberSoft#FFF8D6코드 값 colorScheme.tertiaryContainer#4B4231코드 값 colorScheme.tertiaryContainer
amberText#6D5429코드 값 colorScheme.onTertiaryContainer#E9D5AC코드 값 colorScheme.onTertiaryContainer
orange#E3A008코드 값 colorScheme.tertiary#D5BD8E코드 값 colorScheme.tertiary
danger#C43C42코드 값 colorScheme.error#EBA6A4코드 값 colorScheme.error
dangerSoft#FFF1F1코드 값 colorScheme.errorContainer#513638코드 값 colorScheme.errorContainer
dangerLine#ECC4C6계산 error 30% + surfaceContainerLowest 70%#645153계산 error 35% + surface 65%
onDanger#FFFFFF코드 값 colorScheme.onError#441C1C코드 값 colorScheme.onError
scrimrgba(12, 18, 34, 0.45)공통 Morit 코드에 정한 값이 없어 Mordy와 같은 값을 쓴다rgba(0, 0, 0, 0.62)공통 Morit 코드에 정한 값이 없어 Mordy와 같은 값을 쓴다
veilrgba(255, 255, 255, 0.55)공통 Morit 코드에 정한 값이 없어 Mordy와 같은 값을 쓴다rgba(11, 15, 23, 0.55)공통 Morit 코드에 정한 값이 없어 Mordy와 같은 값을 쓴다
white#FFFFFF공통 Morit 코드에 정한 값이 없어 Mordy와 같은 값을 쓴다#FFFFFF공통 Morit 코드에 정한 값이 없어 Mordy와 같은 값을 쓴다
black#000000공통 Morit 코드에 정한 값이 없어 Mordy와 같은 값을 쓴다#000000공통 Morit 코드에 정한 값이 없어 Mordy와 같은 값을 쓴다

코드에서 쓰기#

앱 (React Native, Mordy)

앱에서 색 읽기
import { color } from '@/ui/tokens';

// 현재 라이트·다크 모드의 값을 돌려준다.
<View style={{ backgroundColor: color.surface }}>
  <Text style={{ color: color.text }}>제목</Text>
</View>

웹 (CSS 변수)

tokens.css를 불러오고, 서비스는 data-tds-service로, 다크 모드는 data-tds-scheme="dark"로 정한다.

tokens.css 사용
@import url('https://developers.moring.co/tds/tokens.css');

.card {
  background: var(--tds-surface);
  color: var(--tds-text);
  border: 1px solid var(--tds-line);
}
서비스와 모드 정하기
<html data-tds-service="morit" data-tds-scheme="dark">

값 전체가 필요하면 tokens.json을 읽는다. Flutter에서 Morit을 만들 때는 위 “Morit 값의 출처” 표에서 코드 값(colorScheme.*)을 그대로 쓴다.

새 서비스 추가#

서비스를 추가하려면 색 값만 정하면 된다. 간격, 글자, 모서리, 그림자, 컴포넌트 코드는 그대로 쓴다.

  1. 값을 정한다. src/tds/data/services.ts의 services 목록에 항목을 하나 더한다. 라이트와 다크 모두 이 페이지의 53개 토큰(과 웹 확장 토큰)을 빠짐없이 채운다.

  2. 확인한다. npm run tds:check를 실행한다. 빠진 토큰이나 글자 대비가 4.5:1에 못 미치는 웹 확장 값이 있으면 알려 준다.

  3. 끝이다. 서비스 색 선택기, CSS 변수, 이 페이지의 표, tokens.json, tokens.css, 마크다운 문서가 목록을 읽고 자동으로 늘어난다.