Groo Design

Logo Tile

물건 하나를 보이는 각진 타일 — 은행 · 증권 · 카드 · 코인 · 금 같은 자산과 회사를 기관 색 면 + 이름의 첫 글자로 그리고, 그림(카드 그림 · 로고)이 있으면 그림이 오는 대로 덮는다. 사람은 Avatar(원), 카테고리 · 기능은 List 의 타일(옅은 색 + 아이콘), 사진 · 카드 그림 자체는 Image Frame 이다.

SEED 에는 이 부품이 없다 — 가게 · 업체는 원 Avatar(Identity Placeholder business)이고 로고 · 브랜드 마크의 규칙은 출처에 없다. groo 는 사람만 Avatar 로 두기로 했고(2026-10-03), 물건은 이 타일이다. 모양 · 크기는 List 의 타일(40 · 모서리 크기 × 0.3), 첫 글자와 이름 색은 Avatar 의 규칙, 윤곽은 Image Frame 의 투명 윤곽이다(2026-10-04 사용자 결정). 지금 제품의 자산 로고(웹 AssetLogo · 앱 AssetLogo)와 HR 회사 로고를 대신한다.

수치 원본은 logo-tile.yaml이고, 기관 색은 institution-colors.yaml(78곳 — 그림 없는 카드의 면과 함께 쓴다)이다. 수치 표 자리([표: …])와 그림 자리([그림: …])는 사이트가 그 파일로 그린다 — GitHub 에서는 그 파일 · 그림 코드로 가는 링크로 보인다.

9:41
자산
순자산5,682,400원
계좌 · 현금
  • 신한 주거래 통장신한 · 입출금1,250,000원
  • 카카오뱅크 세이프박스카카오뱅크 · 저축3,000,000원
  • 유안타증권 CMA유안타증권 · 증권820,400원
  • 업비트업비트 · 코인412,000원
  • 비상금현금200,000원
9:41
계좌 관리
계좌 5개
  • 신한 주거래 통장신한 · 입출금
  • KB국민 적금KB국민 · 적금
  • NH농협 통장NH농협 · 입출금
  • 토스뱅크 통장토스뱅크 · 입출금
  • 비상금현금
9:41
자산 상세
신한 주거래 통장신한 · 입출금1,250,000원
최근 거래
  • 스타벅스 강남역점카페, 오후 2:10−5,600원
  • 급여수입, 10월 25일+3,200,000원
9:41
자산
순자산5,682,400원
계좌 · 현금
  • 신한 주거래 통장신한 · 입출금1,250,000원
  • 카카오뱅크 세이프박스카카오뱅크 · 저축3,000,000원
  • 유안타증권 CMA유안타증권 · 증권820,400원
  • 업비트업비트 · 코인412,000원
  • 비상금현금200,000원
9:41
계좌 관리
계좌 5개
  • 신한 주거래 통장신한 · 입출금
  • KB국민 적금KB국민 · 적금
  • NH농협 통장NH농협 · 입출금
  • 토스뱅크 통장토스뱅크 · 입출금
  • 비상금현금
9:41
자산 상세
신한 주거래 통장신한 · 입출금1,250,000원
최근 거래
  • 스타벅스 강남역점카페, 오후 2:10−5,600원
  • 급여수입, 10월 25일+3,200,000원
자산 줄 · 계좌 관리 · 자산 상세 머리 — 라이트 · 다크

직접 골라 보기

이름 · 크기 · 그림(없음 · 카드 그림 · 로고)과 그림이 오는 순간을 고르면 스펙대로 그린 타일과 그 코드가 바뀐다. 이름을 바꾸면 기관 색 · 글자색 · 첫 글자가 규칙대로 바뀐다(표에 없는 이름은 이름 색).

줄 안 — 이름 옆(장식)
  • 신한신한 · 시중은행1,250,000원
혼자 — 장식(옆에 이름이 있을 때)
찾은 기관 신한(같은 이름 · 별칭) · #0046FF · 흰 글자 6.33
첫 글자 “신” · 40 · 모서리 12(radius-r3) · 글자 16
보조 기술이 읽는 글: 타일은 읽지 않는다 — 옆의 이름을 한 번만 읽는다
면 face
크기 size
그림
그림이 오는 순간
혼자 쓸 때
모드

기관 색은 표에서만 찾는다(공백을 뺀 같은 이름 · 별칭, 아니면 든 가장 긴 이름). 없거나 face="name" 이면 이름 색 — Avatar 와 같은 함수(코드 포인트 합 % 10 → 차트 10색)다. 그림은 첫 글자를 덮을 뿐이라 늦거나 실패해도 줄이 깜빡이지 않는다.

import { LogoTile } from "@/components/ui/logo-tile"

<LogoTile name="신한" />

Anatomy

ⓐ Container — 40 · 모서리 12ⓑ Initial — 첫 글자 16 · 700ⓒ Plate · Image — 판 안쪽 4ⓓ Stroke — 안쪽 1px 투명 윤곽

40 을 3배로 그렸다 — 카드 그림은 옅은 판 위에 카드 전체(세로 그림은 돌린다), 로고 그림은 흰 판 위에 잘리지 않게. 점선 안쪽이 판의 여백 4 를 뺀 그림 자리다

타일 · 첫 글자 · 그림 판 · 안쪽 1px 윤곽
부위설명
ⓐ Container타일 — 정사각, 모서리 크기 × 0.3. 기관 색 면 또는 이름 색 면.
ⓑ Initial첫 글자 — 이름의 첫 글자 하나. 그림이 없거나 · 오기 전이거나 · 실패했을 때.
ⓒ Plate · Image그림 판 · 그림 — 그림이 오면 첫 글자를 덮는다. 카드는 옅은 판, 로고는 흰 판.
ⓓ Stroke안쪽 1px 투명 윤곽 — 늘. 짙은 타일이 다크 표면에 묻히지 않게.

부위

부위설명
root타일 — 정사각 · 모서리 크기 × 0.3. 기관 색 면 또는 이름 색 면
initial첫 글자 — 이름의 첫 글자 하나(Avatar 규칙). 그림이 덮기 전 · 그림이 없을 때 · 실패했을 때
plate그림 판 — 그림이 오면 첫 글자를 덮는다. 카드 그림은 옅은 판, 로고 그림은 흰 판
image그림 — 카드 그림(카드 전체 — 세로는 돌린다) · 로고 그림(잘리지 않게)
stroke안쪽 1px 윤곽 — 면 · 판 · 그림 위에 늘

Properties

Size

크기는 List 의 타일과 같다 — 40 (기본 — 목록 줄) · 48(상세 머리) · 32(좁은 줄 · 카드 옆 회사 표시). 모서리는 크기 × 0.3(12 · 14 · 10), 첫 글자는 크기의 40%(16 · 19 · 13)다. 이 밖의 크기를 만들지 않는다 — 지금 32 · 36 · 40 · 48 · 52 와 모서리 12 고정이 섞여 있다.

32모서리 10(radius-r2_5) · 글자 13
40(기본)모서리 12(radius-r3) · 글자 16
48모서리 14(radius-r3_5) · 글자 19

모서리는 크기 × 0.3, 첫 글자는 크기의 40%(반올림). 32 는 좁은 줄 · 카드 옆 회사, 40 은 목록 줄, 48 은 상세 머리 — 이 밖의 크기를 만들지 않는다

32 · 40 · 48 — 모서리 × 0.3 · 첫 글자 40%

크기

size크기모서리첫 글자 크기설명
3232pxradius-r2_5 10px — 32 × 0.3 = 9.6 → 1013px — 크기의 40%(12.8)32 — 좁은 줄 · 고르는 목록 · 카드 옆의 회사 표시(HR 회사 로고)
40 (기본)40pxradius-r3 12px — 40 × 0.3 — List 타일과 같다16px — 크기의 40%40 — 목록 줄(자산 · 계좌 관리 · 카드 추가) — 기본, List 타일과 같다
4848pxradius-r3_5 14px — 48 × 0.3 = 14.4 → 1419px — 크기의 40%(19.2)48 — 상세 머리(자산 상세)

공통

부위속성값비고
root넘침hidden모서리로 판 · 그림을 자른다
initial첫 글자 굵기700
initial첫 글자 줄 높이1타일 가운데 — 글자 크기 설정을 따르지 않는 px(타일 안에서 넘치지 않게, Avatar 와 같다)
initial첫 글자 대소문자uppercase이름의 첫 글자 하나(사용자가 보는 글자 단위 — 웹 Intl.Segmenter · 앱 characters.first), 로마자는 대문자. "신한" → "신" · "KB국민" → "K" · "Upbit" → "U". 이름이 비면 글자 없이 chart-gray
plate판 여백spacing-x1 4px그림은 판 안쪽 4 — 모든 크기 · 두 종류. 타일 모서리에 그림의 모서리가 잘리지 않는다
stroke윤곽 두께1px안쪽(inset box-shadow) — 크기가 변하지 않는다. 면 · 판 · 그림 위
stroke윤곽 색color-stroke-neutral-overlay #0000000C · 다크 #FFFFFF0Dv118 — 검정 4.7% · 다크 흰 5%. 다크 표면과 1.02 인 짙은 남색 타일 둘레도 1.14(윤곽 : 타일)로 잡힌다(장식 — 이름 글이 물건을 알린다)

면과 첫 글자

이름 은 기관이 있으면 기관 이름("신한"), 없으면 자산 이름("비상금")이다. 첫 글자 · 기관 색 찾기 · 이름 색 · 보조 기술의 이름이 모두 이 이름에서 나온다. 기관 색 표는 기관 이름으로만 찾는다 — 사용자가 지은 자산 이름 · HR 의 회사 이름은 표를 보지 않고 이름 색이다(표의 짧은 별칭 "우리" · "하나" · "국민" · "기업" 이 "우리 아이 적금" · "하나투어" 에 걸리지 않게).

  • 기관 색 면(institution) — 기관 이름이 기관 색 표에 있으면 그 색이다(찾기 — 공백을 빼고 같은 이름 · 별칭, 아니면 이름에 든 가장 긴 이름). 글자는 그 색 위 흰 글자가 4.5:1 이상이면 흰색(static-white), 아니면 짙은 글자(라이트 fg-neutral · 다크 fg-neutral-inverted)다 — 표의 text 가 그 답이다. 흰 · 짙은 글자 모두 모자라던 중간 밝기의 다섯 곳은 표가 명도만 고쳐 두었다. 기관 색은 모드를 따르지 않는다.
  • 이름 색 면(name) — 기관이 없거나 기관이 아닌 이름, 또는 표에 없는 기관이면 Avatar 와 같은 함수로 이름 색을 고른다(코드 포인트 합 % 10 → 차트 10색, 웹 · 앱이 같다). 글자는 fg-neutral-inverted(라이트 흰 · 다크 짙은 글자)다.
  • 첫 글자 — 이름의 첫 글자 하나(사용자가 보는 글자 단위), 로마자는 대문자 — "신한" → "신", "KB국민" → "K", "Upbit" → "U". 700 · 줄 높이 1. 두 글자 · 약칭을 넣지 않는다.
기관 색 · 흰 글자
신한
6.33:1
우리
5.94:1
삼성증권
11.41:1
업비트
5.73:1
기관 색 · 짙은 글자
KB국민
9.73:1
NH농협
5.14:1
유안타증권
6.47:1
카카오뱅크
12.84:1
이름 색 — 기관이 없는 자산
indigo
5.27:1
brown
4.90:1
yellow
4.55:1
green
5.07:1
라이트
기관 색 · 흰 글자
신한
6.33:1
우리
5.94:1
삼성증권
11.41:1
업비트
5.73:1
기관 색 · 짙은 글자
KB국민
8.59:1
NH농협
4.54:1
유안타증권
5.71:1
카카오뱅크
11.33:1
이름 색 — 기관이 없는 자산
indigo
6.13:1
brown
6.13:1
yellow
6.16:1
green
6.07:1
다크
기관 색 면 — 흰 글자 · 짙은 글자, 이름 색 면 — 라이트 · 다크

면

face배경첫 글자 색설명
institution (기본)기관 색 — institution-colors.yaml 의 color — 모드를 따르지 않는다(라이트 · 다크 같다). 저장된 자산 색(asset.color)이 아니라 이 표에서 찾는다기관 글자색 — 표의 text — white 면 static-white, dark 면 라이트 fg-neutral · 다크 fg-neutral-inverted(흰 글자가 4.5:1 에 못 미칠 때). 78곳 모두 4.52 이상기관(은행 · 증권 · 카드사 · 코인 · 금)의 이름 — 기관 색 표에서 찾아 그 색 면 + 표의 글자색. 표에 없으면 name 과 같다
namechart-{이름 색} — 이름의 코드 포인트 합 % 10 → 차트 10색(v110 순서) — Avatar 와 같은 함수. 라이트 700 · 다크 800-dark. 웹 · 앱이 같다color-fg-neutral-inverted #FFFFFF · 다크 #242938 — 라이트 흰 · 다크 짙은 글자 — 차트 색 위 4.55 ~ 7.70(Avatar 와 같다)기관이 없는 자산(비상금) · 기관이 아닌 회사(HR) — 표를 보지 않고 이름 색(Avatar 해시) + fg-neutral-inverted
타일 · 라이트 · 다크기관 · 별칭색글자대비
시중은행 8
신한신한은행#0046FF흰 글자6.33
KB국민KB · 국민 · KB국민은행#FFBC00짙은 글자9.73 · 다크 8.59
우리우리은행#0067AC흰 글자5.94
하나KEB하나 · 하나은행#008485흰 글자4.53
NH농협농협 · NH농협은행#00A651짙은 글자5.14 · 다크 4.54
IBK기업기업 · IBK · 기업은행#004098흰 글자9.60
SC제일제일 · SC · SC제일은행#1EA54E원래 #009A44짙은 글자5.12 · 다크 4.52
씨티시티 · 씨티은행 · 한국씨티#056DAE흰 글자5.52
인터넷은행 3
카카오뱅크카뱅#FEE500짙은 글자12.84 · 다크 11.33
토스뱅크토스#0064FF흰 글자4.92
케이뱅크K뱅크 · K Bank#0214A1흰 글자12.98
지방은행 6
부산부산은행 · BNK부산#0033A0흰 글자10.60
대구대구은행 · iM뱅크 · DGB대구#1464AC흰 글자6.09
경남경남은행 · BNK경남#0E4C92흰 글자8.51
광주광주은행 · JB광주#00428A흰 글자9.78
전북전북은행 · JB전북#0F3E8C흰 글자10.06
제주제주은행#F47216짙은 글자5.68 · 다크 5.01
특수은행 3
KDB산업산업 · 산업은행 · KDB#004098흰 글자9.60
수출입수출입은행 · EXIM#003A6C흰 글자11.53
수협수협은행 · Sh수협#003DA5흰 글자9.50
저축기관 8
우체국우체국예금 · 우체국금융#E4002B흰 글자4.85
새마을금고새마을 · MG#D61E29흰 글자5.15
신협신용협동조합#003A70흰 글자11.42
산림조합산림조합중앙회#2E7D32흰 글자5.13
SBI저축SBI저축은행 · SBI#0E3E85흰 글자10.26
OK저축OK저축은행#FECC00짙은 글자10.83 · 다크 9.56
웰컴저축웰컴저축은행#E30613흰 글자4.88
페퍼저축페퍼저축은행 · Pepper#B3002D흰 글자7.11
외국계 5
HSBC홍콩상하이 · 에이치에스비씨#DB0011흰 글자5.22
ICBC공상은행 · 중국공상은행#D6001C흰 글자5.42
BoA뱅크오브아메리카 · Bank of America#012169흰 글자14.76
도이치도이치뱅크 · Deutsche#004A8F흰 글자8.84
JP모건JPMorgan · JP모건체이스#006CB7흰 글자5.48
기타 1
현금지갑 · Cash#64748B흰 글자4.76
증권사 26
삼성증권삼성#1428A0흰 글자11.41
미래에셋미래에셋증권#2C3E50흰 글자10.98
NH투자NH투자증권#00A651짙은 글자5.14 · 다크 4.54
한국투자한투 · 한국투자증권#00529B흰 글자7.84
KB증권#FFBC00짙은 글자9.73 · 다크 8.59
신한투자신한금융투자 · 신한투자증권#0046FF흰 글자6.33
하나증권#008485흰 글자4.53
키움증권키움#ED022F원래 #FF0033흰 글자4.52
메리츠증권메리츠 · 메리츠종합금융증권#E60012흰 글자4.80
대신증권대신#F58220짙은 글자6.33 · 다크 5.59
유안타증권유안타 · 동양#10B981짙은 글자6.47 · 다크 5.71
유진투자유진투자증권#003595흰 글자10.81
교보증권교보#004A8F흰 글자8.84
IBK투자IBK투자증권#004098흰 글자9.60
DB금융투자DB · DB금투#008456흰 글자4.74
SK증권SK#EA002C흰 글자4.63
현대차증권현대차 · HMC투자#002C5F흰 글자13.77
하이투자하이투자증권#004098흰 글자9.60
한화투자한화투자증권 · 한화#FF7900짙은 글자6.24 · 다크 5.51
BNK투자BNK투자증권#0033A0흰 글자10.60
한양증권한양#004098흰 글자9.60
LS증권이베스트 · 이베스트투자 · E-best#005EB8흰 글자6.38
부국증권부국#003366흰 글자12.61
신영증권신영#005EB8흰 글자6.38
카카오페이증권카카오페이#FEE500짙은 글자12.84 · 다크 11.33
토스증권#0064FF흰 글자4.92
상품거래소 6
KRX 금시장한국거래소 · KRX · 금시장#C9A227짙은 글자6.79 · 다크 5.99
한국금거래소koreagoldx · 금거래소#B8232F흰 글자6.33
한국표준금거래소표준금거래소#8C6A1F흰 글자5.00
삼성금거래소삼성금#1428A0흰 글자11.41
한국조폐공사조폐공사 · 오롯 · KOMSCO#00594F흰 글자8.26
기타 금은방금은방 · 직접보관 · 실물#AF8A4E원래 #A78246짙은 글자5.13 · 다크 4.53
가상자산 4
업비트Upbit · UPBIT · 두나무#1F55F4흰 글자5.73
빗썸Bithumb · BITHUMB#F2811D짙은 글자6.20 · 다크 5.47
코인원Coinone · COINONE#F95B2A원래 #F55826짙은 글자5.13 · 다크 4.52
코빗Korbit · KORBIT#1D3FFF흰 글자6.55
카드사 8
신한카드#0046FF흰 글자6.33
KB국민카드#FFBC00짙은 글자9.73 · 다크 8.59
우리카드#0067AC흰 글자5.94
하나카드#008485흰 글자4.53
NH농협카드#00A651짙은 글자5.14 · 다크 4.54
삼성카드#1428A0흰 글자11.41
현대카드#1C2951흰 글자14.14
롯데카드#EA1721원래 #ED1C24흰 글자4.52
기관 색 표 — 78곳의 색 · 글자색 · 대비 — 짙은 글자 18곳 · 색을 고친 곳 5곳(원래 색은 옆에) · 가장 낮은 대비 4.52:1

그림

그림이 있으면 첫 글자 위에 판을 깔고 그림을 얹는다 — 판 안쪽 4.

  • 카드 그림(card) — 옅은 판(bg-neutral-weak) 위에 카드 전체가 보이게 — 판 안(크기 − 8)에 카드 비율(1.586)의 Image Frame 을 두고, 세로 그림은 시계 방향으로 90° 돌려 채운다. 정사각에 잘라 넣으면 카드의 63% 만 보인다.
  • 로고 그림(logo) — 흰 판(static-white — 두 모드 같다) 위에 잘리지 않게(contain). 다크에서도 로고의 검은 부분이 사라지지 않는다. 지금 자산에는 로고 그림이 없고, HR 회사 로고가 이것이다.
32 → 24×1540 → 32×2048 → 40×25가로 그림
324048긴 로고
카드 — 옅은 판(bg-neutral-weak) · 로고 — 흰 판(static-white, 두 모드 같다)
라이트
32 → 24×1540 → 32×2048 → 40×25가로 그림
324048긴 로고
카드 — 옅은 판(bg-neutral-weak) · 로고 — 흰 판(static-white, 두 모드 같다)
다크
카드 그림 — 옅은 판 위 카드 전체(세로는 돌림) · 로고 그림 — 흰 판

그림

image판 배경그림 모서리그림 맞춤설명
none (기본)———그림 없음 — 첫 글자 타일(기본, 지금 은행 · 증권 · 코인 · 금은 모두 이것)
cardcolor-bg-neutral-weak #F5F6FA · 다크 #353B4D — 옅은 판 — 흰 면 위 1.08 · 다크 1.30Image Frame 모서리 — 그림의 폭으로 — 24 는 4, 32 · 40 은 6. 윤곽도 Image Frame 대로카드 전체 — 판 안(크기 − 8)에 카드 비율(1.586)의 Image Frame — 세로 그림은 시계 방향 90° 돌려 그 안을 cover 로 채운다. 32 → 24 × 15 · 40 → 32 × 20 · 48 → 40 × 25카드 그림 — 옅은 판 위에 카드 전체(세로 그림은 시계 방향 90°)
logocolor-static-white #FFFFFF — 흰 판 — 두 모드 같다. 로고의 검은 부분이 다크에서 사라지지 않는다—contain — 잘리지 않게 — 판 안(크기 − 8)에 가운데로고 그림 — 흰 판 위에 잘리지 않게(contain)

그림이 늦을 때 · 실패할 때

줄의 이름 · 금액은 이미 와 있고 그림만 늦게 온다 — 그래서 첫 글자 타일을 먼저 그리고, 그림이 오면 그 위를 덮는다(Avatar 와 같다 — 스켈레톤을 따로 두지 않는다). 그림을 못 불러오면 첫 글자 그대로다. 줄이 깜빡이지 않고, 빈 칸 · 깨진 그림이 보이지 않는다 — 그림 · 사람 · 물건 자리에 무엇이 대신 보이는지는 Content Placeholder 의 "대신 보이는 것 고르기" 한 곳에서 고른다(2026-10-22 사용자 결정 1B).

  • 삼성카드 데일리삼성카드 · 신용카드−352,400원
처음 그릴 때이름을 아니까 첫 글자 타일 — 스켈레톤을 두지 않는다
  • 삼성카드 데일리삼성카드 · 신용카드−352,400원
그림이 옴판과 카드 그림이 첫 글자를 덮는다(전환 없이)
또는
  • 삼성카드 데일리삼성카드 · 신용카드−352,400원
못 불러옴첫 글자 그대로 — 깨진 그림 · 빈 칸이 없다
첫 글자 먼저 → 그림이 오면 덮기 → 실패하면 첫 글자 그대로

State

상태는 enabled 하나다 — 타일은 누르지 않는다. 누르면 무언가 되는 자리는 타일을 감싼 줄 · 버튼이 누름 · 포커스를 가진다. 막힌 줄에서도 타일은 그대로다(아바타 · 사진처럼) — 줄의 글이 비활성 색이 된다.

Guidelines

물건은 타일, 사람은 원

은행 · 증권 · 카드 · 코인 · 금 · 회사는 이 타일이다 — 원 아바타로 그리지 않는다. 카테고리 · 기능(거래 줄 · 알림 종류)은 기관이 아니라 분류라 List 의 타일(옅은 색 + 아이콘)이다. 한 목록 안에서 섞지 않는다 — 자산 목록은 로고 타일, 거래 목록은 카테고리 타일.

함께 쓰는 사람
  • 김민수
자산
  • 신한 주거래 통장신한 · 입출금1,250,000원
  • 유안타증권 CMA유안타증권 · 증권820,400원
최근 거래
  • 점심 식사식비 · 오후 12:40−12,000원
이렇게 — 사람은 원 아바타, 은행 · 증권은 로고 타일, 카테고리는 List 타일 — 목록마다 하나로
자산
  • 신한 주거래 통장신한 · 입출금1,250,000원
  • 유안타증권 CMA유안타증권 · 증권820,400원
이렇게 하지 않는다 — 은행 · 증권을 원 아바타로 — 사람과 물건이 한 모양이 된다
사람은 원 Avatar · 물건은 Logo Tile · 분류는 List 타일

흰 글자가 모자라면 짙은 글자

기관 색 위 흰 글자가 4.5:1 에 못 미치면 짙은 글자다 — 지금 노랑 일곱 곳만 짙은 글자이고 유안타 2.54 · 대신 2.59 · NH농협 3.19 같은 열 곳은 흰 글자라 읽기 어렵다. 글자색을 화면이 고르지 않는다 — 표의 text 를 쓴다.

유안타6.47 · 다크 5.71:1대신6.33 · 다크 5.59:1NH농협5.14 · 다크 4.54:1
이렇게 — 표의 글자색 — 흰 글자가 4.5:1 에 못 미치면 짙은 글자
유안타2.54:1대신2.59:1NH농협3.19:1
이렇게 하지 않는다 — 모든 기관 색에 흰 글자(지금) — 4.5:1 에 못 미쳐 첫 글자가 읽기 어렵다
표의 글자색 · 흰 글자가 모자란 지금(유안타 · 대신 · NH농협)

투명 윤곽으로 둘레를 잡는다

짙은 남색 타일(케이뱅크 · 삼성증권 · BoA …)은 다크 표면과 1.5:1 아래, 노랑 타일은 흰 표면과 1.3:1 아래라 타일이 사라지고 글자만 뜬다. 투명 윤곽(stroke-neutral-overlay)이 둘레를 잡는다 — 타일 색을 바꾸지 않는다.

BoA
표면 1.02
윤곽 1.14
현대카드
표면 1.02
윤곽 1.16
현대차증권
표면 1.05
윤곽 1.15
다크 표면 위
카카오뱅크
표면 1.28
윤곽 1.11
OK저축
표면 1.52
윤곽 1.11
KB국민
표면 1.69
윤곽 1.11
라이트 표면 위
이렇게 — 투명 윤곽(stroke-neutral-overlay)이 둘레를 잡는다 — 타일 색은 그대로. 윤곽은 장식이라 대비는 작아도 된다(이름 글이 물건을 알린다)
BoA
표면 1.02
현대카드
표면 1.02
현대차증권
표면 1.05
다크 표면 위
카카오뱅크
표면 1.28
OK저축
표면 1.52
KB국민
표면 1.69
라이트 표면 위
이렇게 하지 않는다 — 윤곽 없이 — 짙은 남색은 다크 표면에, 노랑은 흰 표면에 묻혀 글자만 뜬다
다크의 짙은 남색 · 흰 바탕의 노랑 — 윤곽 있음 · 없음

같은 기관은 같은 색

같은 회사는 어느 화면 · 어느 플랫폼에서나 한 색이다 — 기관 색은 표 하나에서, 이름 색은 Avatar 와 같은 함수에서만 온다. 자산을 만들 때 저장해 둔 색(asset.color)이 아니라 표에서 찾는다 — 저장된 값은 표와 다를 수 있다(하나카드 #008C74). 화면 · 플랫폼마다 해시 · 색 표를 따로 두지 않는다.

웹
  • 비상금현금200,000원
앱
  • 비상금현금200,000원
이렇게 — 웹 · 앱이 Avatar 와 같은 함수로 이름 색을 고른다 — "비상금" 은 어디서나 indigo
웹
  • 비상금현금200,000원
앱
  • 비상금현금200,000원
이렇게 하지 않는다 — 웹은 oklch 해시(#9a6500), 앱은 HSL 해시(#423fa6) — 같은 자산이 다른 색이다(지금)
같은 자산이 웹 · 앱에서 같은 색 · 웹 #9a6500 · 앱 #423fa6 로 갈린 지금

이름 옆이면 장식, 혼자면 이름

타일 옆에는 대개 이름이 있다 — 그때 타일은 장식이라 보조 기술에 숨긴다(첫 글자 "신" 도, 그림도 읽지 않는다 — "신 신한 주거래" 가 아니다). 이름 없이 타일만 있으면 타일이 이름을 가진다 — 그림이 있어도 없어도 같은 이름이다.

  • 신한 주거래 통장신한 · 입출금1,250,000원
보조 기술이 읽는 글: “신한 주거래 통장, 신한 · 입출금, 1,250,000원, 버튼”혼자인 타일(고르는 칸 · 접힌 메뉴)보조 기술이 읽는 글: “신한, 이미지”
이렇게 — 이름 옆 타일은 숨긴다(첫 글자도, 그림도) — 혼자인 타일은 이름을 가진다
  • 신한 주거래 통장신한 · 입출금1,250,000원
보조 기술이 읽는 글: “신, 신한 주거래 통장, 신한 · 입출금, 1,250,000원, 버튼”혼자인 타일(고르는 칸 · 접힌 메뉴)보조 기술이 읽는 글: “이미지”
이렇게 하지 않는다 — 첫 글자를 읽는다 — "신 신한 주거래 통장". 혼자인 타일은 이름이 없다
이름 옆 타일은 숨김 · 혼자인 타일은 이름

이번에 정하지 않은 것

  • 종목 타일(나라 색 · 한글 한 글자 · 심볼 두 글자)은 증권 화면 차례에 정한다.
  • 가맹점 · 구독 로고는 그림 출처가 없다 — 지금처럼 카테고리 타일이다.

코드

레시피 recipes/shadcn/components/ui/logo-tile.tsx 를 쓴다 — LogoTile. 기관 색은 recipes/shadcn/lib/institution-colors.ts(institution-colors.yaml 에서 만든 표와 institutionColor(name) — 같은 이름 · 별칭, 아니면 든 가장 긴 이름, 없으면 null)이고, 첫 글자 · 이름 색은 Avatar 의 avatarInitial(name) · avatarHue(name) 을 그대로 쓴다. LogoTile 은 name(필수 — 기관 이름, 없으면 자산 이름) · face("institution" 기본 — 기관 색 표에서 찾고 없으면 이름 색 · "name" — 표를 보지 않고 이름 색, 기관이 없는 자산 · 기관이 아닌 회사) · size(32 · 40 기본 · 48) · src(그림 — 없으면 첫 글자만) · imageType("card" · "logo" 기본 — 그림의 종류) · decorative(기본 true — 옆에 이름이 있을 때. false 면 role="img" + 이름)를 받는다. 앱은 같은 표 · 규칙 함수를 Dart 로 두고 아래 예시 이름으로 같은 답이 나오는지 시험한다. 아래 미리보기는 스펙 값으로 그린 모습이다.

이름찾은 기관 · 면글자
신한신한 · #0046FF"신" 흰 글자 6.33
NH농협카드 올원NH농협카드 · #00A651"N" 짙은 글자 5.14 · 다크 4.54
IBK기업은행IBK기업(든 가장 긴 이름) · #004098"I" 흰 글자 9.60
비상금(face="name" — 기관 없음)표를 보지 않는다 → 이름 색 indigo(코드 포인트 합 % 10 = 5)"비" fg-neutral-inverted

자산 줄 — 40

  • 신한 주거래 통장신한 · 입출금1,250,000원
  • 유안타증권 CMA유안타증권 · 증권820,400원
  • 업비트업비트 · 코인412,000원
  • 비상금현금200,000원
자산 목록 — 은행 · 증권 · 코인 · 비상금
import { ListButtonItem } from "@/components/ui/list"
import { LogoTile } from "@/components/ui/logo-tile"

{/* 이름은 기관 이름, 없으면 자산 이름(그때는 표를 보지 않는다) — 옆에 이름이 있어 타일은 장식(decorative 기본) */}
<ListButtonItem
  prefix={<LogoTile name={asset.institution ?? asset.assetName} face={asset.institution ? "institution" : "name"} />}
  title={asset.assetName}
  detail={[asset.institution, asset.typeLabel].filter(Boolean).join(" · ")}
  suffix={formatWon(asset.balance)}
  onClick={() => openAsset(asset.id)}
/>

카드 자산 — 카드 그림

  • 삼성카드 데일리삼성카드 · 신용카드−352,400원
그림이 왔다 — 판과 카드 그림이 덮었다
카드 자산 줄 — 첫 글자 "삼" 먼저, 그림이 오면 카드 전체
<LogoTile name={asset.cardCatalog.companyName} src={asset.cardCatalog.imgUrl} imageType="card" />

상세 머리 — 48

신한 주거래 통장신한 · 입출금1,250,000원
자산 상세 머리 — 48 타일 · 자산 이름 · 기관
<LogoTile size={48} name={asset.institution ?? asset.assetName} face={asset.institution ? "institution" : "name"} />

회사 로고 — 32 · 흰 판

숲길

오렌지랩

새회사

HR 회사별 인원 — 회사 로고 32, 로고가 없는 회사는 첫 글자
{/* 회사는 기관이 아니다 — 표를 보지 않고, 로고 그림이 없거나 못 불러오면 회사 이름의 첫 글자 · 이름 색 */}
<span className="flex items-center gap-x2">
  <LogoTile size={32} name={company.name} face="name" src={company.logoUrl} imageType="logo" />
  <h3>{company.name}</h3>
</span>

Behavior

인터랙션동작
처음 그릴 때첫 글자 타일 — 이름을 아니까 바로 그린다
그림이 옴판과 그림이 첫 글자를 덮는다(전환 없이 바로 — Avatar 와 같다)
그림을 못 불러옴 · 그림 없음첫 글자 그대로 — 깨진 그림 · 빈 칸이 보이지 않는다
이름이 바뀜기관 색 · 글자색 · 첫 글자가 규칙대로 바로 바뀐다
누르기타일 자체는 누르지 않는다 — 감싼 줄 · 버튼의 동작
막힌 줄그대로 — 줄의 글이 비활성 색

Accessibility

기준검증
WCAG 1.4.3 Color contrast(글자 ≥ 4.5:1)기관 색 면의 첫 글자 — 표의 글자색으로 78곳 모두 4.52 이상(짙은 글자는 다크 #242938 로 잰 값) ✓. 이름 색 면 fg-neutral-inverted — 라이트 4.55 ~ 5.50 · 다크 6.07 ~ 7.70 ✓(Avatar)
WCAG 1.4.11 Non-text contrast(≥ 3:1)타일 둘레 · 윤곽은 장식 — 타일 옆 이름 글이 물건을 알린다. 윤곽은 다크의 짙은 남색 타일 둘레를 1.14(윤곽 : 타일)로, 흰 바탕의 노랑 타일 둘레를 1.11 로 잡는다
WCAG 1.4.1 Use of color기관 색은 거드는 것이다 — 기관 이름이 줄의 글에 있다
WCAG 1.1.1 Non-text Content이름 옆 타일은 장식(aria-hidden — 첫 글자도, 그림 alt="" 도) — 이름을 한 번만 읽는다. 혼자인 타일은 role="img" + 이름(aria-label="신한"), 그림이 있어도 실패해도 같은 이름
WCAG 2.5.8 Target Size — Minimum(AA ≥ 24×24)해당 없음 — 누르지 않는다(감싼 줄의 규칙)
WCAG 2.5.5 Target Size — Enhanced(AAA ≥ 44×44)해당 없음 — 누르지 않는다
ARIA장식이면 타일 전체 aria-hidden. 혼자면 role="img" + aria-label 하나 — 안의 첫 글자 · 그림은 읽지 않는다. 앱은 Semantics(label: 이름, image: true) · 장식이면 ExcludeSemantics

Do / Don't

✅ Do

  • 은행 · 증권 · 카드 · 코인 · 금 · 회사는 각진 타일로.
  • 크기는 32 · 40 · 48, 모서리는 크기 × 0.3.
  • 기관 색은 표에서, 글자색은 표의 text 로.
  • 첫 글자 먼저 그리고 그림이 오면 덮기.
  • 이름 옆 타일은 장식으로 숨긴다.

❌ Don't

  • 물건을 원 아바타로, 사람을 각진 타일로.
  • 흰 글자를 모든 기관 색에 — 유안타 · 대신 · NH 는 4.5:1 에 못 미친다.
  • 화면 · 플랫폼마다 다른 색 표 · 다른 해시.
  • 그림을 정사각에 잘라 넣기(카드의 63% 만 보인다) · 불러오는 동안 빈 칸.
  • 첫 글자 두 자 · 로마자 소문자, 첫 글자를 읽게 두기("신 신한").

Specification

logo-tile.yaml 의 규칙을 하나도 빼지 않고 조건마다 그린다 — 웹 · 앱이 Logo Tile 을 만들 때 이 값을 그대로 쓴다. 조건이 없는 Base 가 모든 조합에 걸리고, 뒤의 규칙이 앞의 같은 값을 덮는다. 기관 색 78곳은 institution-colors.yaml 이다.

Base

부위상태속성값
rootenabled넘침overflowhidden모서리로 판 · 그림을 자른다
initialenabled첫 글자 굵기fontWeight700
첫 글자 줄 높이lineHeight1타일 가운데 — 글자 크기 설정을 따르지 않는 px(타일 안에서 넘치지 않게, Avatar 와 같다)
첫 글자 대소문자textTransformuppercase이름의 첫 글자 하나(사용자가 보는 글자 단위 — 웹 Intl.Segmenter · 앱 characters.first), 로마자는 대문자. "신한" → "신" · "KB국민" → "K" · "Upbit" → "U". 이름이 비면 글자 없이 chart-gray
plateenabled판 여백paddingspacing-x14px그림은 판 안쪽 4 — 모든 크기 · 두 종류. 타일 모서리에 그림의 모서리가 잘리지 않는다
strokeenabled윤곽 색borderColorstroke-neutral-overlay#0000000C다크 #FFFFFF0Dv118 — 검정 4.7% · 다크 흰 5%. 다크 표면과 1.02 인 짙은 남색 타일 둘레도 1.14(윤곽 : 타일)로 잡힌다(장식 — 이름 글이 물건을 알린다)
윤곽 두께borderWidth1px안쪽(inset box-shadow) — 크기가 변하지 않는다. 면 · 판 · 그림 위

size=32

부위상태속성값
rootenabled크기size32px
모서리radiusradius-r2_510px32 × 0.3 = 9.6 → 10
initialenabled첫 글자 크기fontSize13px크기의 40%(12.8)

size=40

부위상태속성값
rootenabled크기size40px
모서리radiusradius-r312px40 × 0.3 — List 타일과 같다
initialenabled첫 글자 크기fontSize16px크기의 40%

size=48

부위상태속성값
rootenabled크기size48px
모서리radiusradius-r3_514px48 × 0.3 = 14.4 → 14
initialenabled첫 글자 크기fontSize19px크기의 40%(19.2)

face=institution

부위상태속성값
rootenabled배경background기관 색institution-colors.yaml 의 color — 모드를 따르지 않는다(라이트 · 다크 같다). 저장된 자산 색(asset.color)이 아니라 이 표에서 찾는다
initialenabled첫 글자 색foreground기관 글자색표의 text — white 면 static-white, dark 면 라이트 fg-neutral · 다크 fg-neutral-inverted(흰 글자가 4.5:1 에 못 미칠 때). 78곳 모두 4.52 이상

face=name

부위상태속성값
rootenabled배경backgroundchart-{이름 색}이름의 코드 포인트 합 % 10 → 차트 10색(v110 순서) — Avatar 와 같은 함수. 라이트 700 · 다크 800-dark. 웹 · 앱이 같다
initialenabled첫 글자 색foregroundfg-neutral-inverted#FFFFFF다크 #242938라이트 흰 · 다크 짙은 글자 — 차트 색 위 4.55 ~ 7.70(Avatar 와 같다)

image=card

부위상태속성값
plateenabled판 배경backgroundbg-neutral-weak#F5F6FA다크 #353B4D옅은 판 — 흰 면 위 1.08 · 다크 1.30
imageenabled그림 모서리radiusImage Frame 모서리그림의 폭으로 — 24 는 4, 32 · 40 은 6. 윤곽도 Image Frame 대로
그림 맞춤objectFit카드 전체판 안(크기 − 8)에 카드 비율(1.586)의 Image Frame — 세로 그림은 시계 방향 90° 돌려 그 안을 cover 로 채운다. 32 → 24 × 15 · 40 → 32 × 20 · 48 → 40 × 25

image=logo

부위상태속성값
plateenabled판 배경backgroundstatic-white#FFFFFF흰 판 — 두 모드 같다. 로고의 검은 부분이 다크에서 사라지지 않는다
imageenabled그림 맞춤objectFitcontain잘리지 않게 — 판 안(크기 − 8)에 가운데

SEED 와 다른 점

  • groo 에만 있는 부품이다 — SEED 는 가게 · 업체를 원 Avatar(Identity Placeholder business)로 그리고, 물건은 사진(Image Frame)뿐이며 로고 · 브랜드 마크 · 색 바탕 아이콘 타일의 규칙이 없다. 가장 가까운 SEED 값은 첨부 파일 썸네일(48 · 모서리 8 · 옅은 면 · 아이콘 24)이다.
  • 사람만 원, 물건은 각진 타일 — groo 결정(2026-10-03). 모양 · 크기는 List 타일(groo), 첫 글자 · 이름 색은 Avatar(groo), 윤곽만 SEED(Image Frame 의 stroke.neutral-subtle)다.
  • 로고 그림은 잘리지 않게 흰 판 위 — SEED 의 그림은 모두 cover 라 로고를 맞추는 규칙이 없다.

Migration notes

2026-10-08 — 기관 고르기도 로고 타일 줄

사용자가 데이터 표시 비교 페이지 13A 로 정했다 — 계좌 · 투자 추가의 은행 · 증권사 고르기는 위 검색 + 분류 머리(List Header) + 로고 타일 40 줄 + 오른쪽 라디오다(Searchable List). 지금 Desk 웹의 분류별 칩 34개(고르면 기관 색 채움 — widgets/asset-full/ui/AssetEditDialog.tsx:1119-1245)를 걷는다 — 기관 색은 칩 채움이 아니라 타일이 보인다.

2026-10-04 — 새로 둔다(물건 로고 타일)

사용자가 이미지 비교 페이지에서 정했다 — 브랜드 채움 + 대비 고침(5A — 기관 색 면, 흰 글자가 4.5:1 에 못 미치면 짙은 글자, 투명 윤곽, 모서리 × 0.3 · 크기는 List 타일, 첫 글자 · 이름 색은 Avatar 규칙), 그림이 늦으면 첫 글자 먼저(6B), 색 표는 하나(자산 70 + 카드사 — institution-colors.yaml), HR 회사 로고도 이 타일(흰 판 + 윤곽, 모르는 회사는 첫 글자). 옅은 바탕 타일 · 진짜 로고 그림 · 그림이 늦을 때의 스켈레톤은 고르지 않았다.

지금새
모서리 12 고정(32 에서 37.5%) · 웹 관리 줄 11 · 앱 계좌 추가 미리보기 8크기 × 0.3 — 10 · 12 · 14
크기 32 · 36 · 40 · 48 · 5232 · 40 · 48
글자 웹 12 / 14 / 16 · 800, 앱 12 / 13 / 16 · 700크기의 40%(13 · 16 · 19) · 700
첫 글자 웹 charAt(0) · 앱 글자 단위, 로마자 그대로글자 단위 첫 글자 · 로마자 대문자(Avatar)
흰 글자(노랑 일곱 곳만 #191919)표의 글자색 — 흰 글자가 4.5:1 에 못 미치면 짙은 글자(18곳)
기관 없는 자산: 웹 oklch(.55 .12 해시) · 앱 HSL(해시, .45, .45)Avatar 의 이름 색(차트 10색) + fg-neutral-inverted
카드 그림: 정사각 cover(63%) · 불러오는 동안 빈 칸옅은 판 위 카드 전체(세로는 돌림) · 첫 글자 먼저

제품은 앱 적용 단계에서 옮긴다(2026-10-03 조사 — Desk 웹 · HR 은 크로미움에 띄워 쟀고, Desk 앱은 위젯 테스트로 쟀다).

  • Desk 웹 AssetLogo(entities/asset/ui/asset-logo.tsx:23-87) — 모서리 var(--radius-tile) 12 고정(:44 · 66), 글자 800, 첫 글자 charAt(0)(:53), 카드 그림은 정사각 cover 에 불러오는 동안 투명 빈 칸(:35-50), 모노그램 글자를 읽고 그림이 뜨면 침묵한다(:39 · 84). 해시는 oklch(.55 .12 h)(:5-10 · 56-60). 색 우선순위가 저장된 asset.color → 표 → 해시라 만들 때 저장한 옛 색이 남는다 — 표에서 찾는다(저장된 값은 그대로 두고 읽지 않는다 — 옛 앱은 계속 저장된 값을 그리고, 강제 업데이트는 필요 없다).
  • Desk 앱 AssetLogo(features/asset/presentation/widgets/asset_logo.dart:17-72) — ClipRRect(12) 고정(:28 · 59) · 700 · 13, 그림은 loadingBuilder 없이 빈 칸(:27-36), 해시 HSL(hash & 0xFF, .45, .45)(shared/brand/bank_colors.dart:553-560)는 색상의 절반이 흰 글자 4.5 미만(최저 2.58)이다. 같은 자산이 웹 · 앱에서 다른 색이다("비상금" 웹 #9a6500 · 앱 #423fa6).
  • 흰 글자 미달 열 곳 — 유안타 2.54 · 대신 2.59 · 한화투자 2.63 · 빗썸 2.65 · 제주 2.89 · NH농협 · NH투자 3.19 · 코인원 3.33 · SC제일 3.68 · 키움 3.96(shared/lib/groo/bank-colors.ts:52-555 — 앱 표도 같다). 표의 글자색으로(SC제일 · 키움 · 코인원 · 기타 금은방 · 롯데카드는 색을 조금 고쳤다 — ΔE 0.9 ~ 3.8).
  • 다크에서 묻히는 짙은 남색 15곳(BoA 1.02 · 현대차증권 1.05 · 케이뱅크 1.12 …)과 흰 바탕의 노랑(카카오뱅크 · 카카오페이증권 1.28) — 투명 윤곽으로.
  • 크기 · 모서리가 자리마다 — 웹 계좌 관리 줄 36 · 11(widgets/asset-full/ui/AccountManager.tsx:368-375), 앱 계좌 · 투자 추가 미리보기 52 · 8(features/asset/presentation/account_add_dialog.dart:633-689 · investment_add_dialog.dart:1182-1240), 웹 같은 자리는 52 · 12. 줄은 40, 상세 머리는 48, 미리보기는 48 로.
  • 카드 추가 · 편집의 카탈로그 목록 썸네일 — 44 × 28 의 카드 그림(웹 AssetEditDialog.tsx:1042-1060 · 앱 card_add_dialog.dart:1030-1060)은 Image Frame 카드 그림이다. 표에 없는 회사(BC 등)를 웹은 --color-chart-brown 갈색으로, 앱은 borderDefault 로 칠한다 — 카드 면 규칙(모르면 대체 그림)으로.
  • HR 회사 로고(features/admin-users-management/ui/UserCompanyStatsItem.tsx:17-61 ← UserCompanyCard.tsx:17 · features/dashboard/ui/widgets/UserCompanyStatsWidget.tsx:26) — 번들 SVG 6개를 32 · 바탕 · 테두리 없이 그려 다크 카드(#202020)에서 로고의 검은 부분이 사라지고, 표에 없는 회사는 깨진 그림 아이콘 + "새회사 logo" 글이 32 칸을 넘친다. alt "{회사} logo" 가 바로 위 제목과 겹쳐 두 번 읽힌다(:22-24). Logo Tile 32 · logo(흰 판 + 윤곽) · 회사는 기관이 아니라 face="name"(로고가 없으면 회사 이름의 첫 글자 · 이름 색) · 이름 옆이라 장식으로.
  • 물건이 아닌 타일은 List 의 타일 — 카테고리 · 이체 · 알림 종류의 타일 세부(아이콘 20 · 없는 아이콘 · 이체 회색)는 List 의 Migration notes 에 있다.

이 페이지