Banksalad's design system uses #04c584 as its primary color and Pretendard for typography, with 2px corner radius. Banksalad (뱅크샐러드) is the design language of a **trustworthy financial advisor that runs on data, not optimism**.
Banksalad (뱅크샐러드) is the design language of a trustworthy financial advisor that runs on data, not optimism. Where Toss flattens money into one cheerful gesture and KakaoPay wraps it in Kakao yellow, Banksalad insists that more information, clearly presented, is the actual brand promise. The home page opens on a white canvas (#ffffff/#fbfbfb) with warm near-black text (#2b2b2b for headings, #434444 for body — never pure #000), anchored by a saturated mint-green #04c584 that does all the interactive work. The green is specifically a salad-leaf green (the brand name is literally "Bank + Salad" — financial data freshly tossed for you), warmer than Spotify's #1db954 and far brighter than the corporate teal that legacy Korean banks default to.
The single most distinctive geometric choice is the radius scale. The CSS bundle contains 81 occurrences of border-radius: 2px and only 5 of 8px and 3 of 4px. Banksalad is almost-flat: 2px is just enough to take the harshness off a corner without softening anything into "app-friendly" plumpness. This is a deliberate rejection of the Toss/Kakao consumer-app idiom (12–16px). It tells the user: this is data, not a toy. The tabular density follows from the same conviction — cards pack rows of numbers tightly, and the 700-weight Pretendard digits never apologize for taking up space.
Typography pairs Pretendard (the de-facto Korean modern sans, designed by Kil Hyun-jin, weight-axis variable) with BM JUA ("배민 주아체", Battle Grounds Jua — a rounded, friendly Korean display face) as an accent. Pretendard does 99% of the work; Jua appears only for marketing/landing display moments where Banksalad wants to feel warm rather than clinical. The default weight is 700 (160 of 304 weight declarations) — Banksalad numbers and headings are confident and chunky, with 500 as the secondary "emphasis on body" weight. Light weights (300) appear ~26 times — only for the largest hero numerals where the size carries the authority.
Key Characteristics:
#04c584 (mint, salad-leaf) for all interactive moments#10df99 (one shade brighter) — interaction makes things lighter, not darker#2b2b2b/#434444 for type instead of #000000#f3fdfa on input backgrounds — the only branded background tint in the system0 2px 5px rgba(0,0,0,.12) — never colored, never theatrical#34464b/#5c818a/#1c6c73/#a7c7cf) for chart series — cool, advisor-grade#04c584): Primary brand color, CTA backgrounds, links, accent rules, financial-status accents. Mint with a touch of grass — readable on white, energetic but not playful.#10df99): Brighter mint applied on hover, focus border, and the resting state of less-prominent CTAs. Banksalad lightens to indicate interaction (opposite of the conventional darken-on-hover pattern).#f3fdfa): Focus background on inputs, success surface fill. The only branded tint in the system.#2b2b2b): Warm near-black for headlines, prominent labels, and financial amounts. Never #000.#434444): Standard reading text. Filled-input text color.#7b7b7b): Captions, secondary descriptions.#999999): Input placeholders, muted metadata.#acacac / #c0c0c0): Disabled text and icons.#ffffff): Default canvas.#fbfbfb): Soft surface alternation, panel fills.#f5f5f5): Dividers, separator backgrounds, content shelf fills (most-used neutral after green).#e1e1e1): Default input border, divider line.#f3fdfa): Success-state surface fill.#0b0c0c): Maximum-depth axis labels.#333a44): Primary chart series.#34464b): Secondary chart series, table headers.#436068): Tertiary chart.#1c6c73): Highlighted data point.#5c818a): Subdued data, legend.#318b93): Mid-range fills.#a7c7cf): Background fills for chart bands.The teal-slate family is intentionally cooler than the brand green, so that chart series read as neutral data rather than as branded surfaces. Banksalad's green is for interaction; teal-slate is for information.
#fe493d): Strong error states, blocking validation.#ff8a84): Light error tint, secondary error indicators.#fd8700): Warning emphasis (rate spikes, expiry).#f56200): Highest-severity warning.#ff9900): Soft warning highlights.#0099ff): External links, info notices (used sparingly — green is the default link color).#04c584 / #10df99 / #13bd7e): Success uses brand green; there is no separate success hue.Pretendard, -apple-system, BlinkMacSystemFont, system-ui, "Segoe UI", Roboto, "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", sans-serif"BM JUA", sans-serif — reserved for marketing-landing headlines where a warm, rounded Korean voice is wanted (rare; default to Pretendard)| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|---|---|---|---|---|---|---|
| Hero Display | Pretendard | 52px | 700 | 64px (1.23) | -1px | Largest landing headline; sometimes Jua for marketing warmth |
| Display Large | Pretendard | 48px | 700 | 1.2 | -1px | Secondary hero |
| Display | Pretendard | 38–44px | 700 | 1.25 | -1px | Section-opening figures (balances, scores) |
| Section Heading | Pretendard | 32–36px | 700 | 1.3 | -0.5px | Marketing section titles |
| Heading 1 | Pretendard | 28px | 700 | 32px | normal | In-app section titles |
| Heading 2 | Pretendard | 22–24px | 700 | 28px | normal | Card titles, panel headings |
| Heading 3 | Pretendard | 20px | 700 | 24px | normal | Sub-card headings |
| Subhead | Pretendard | 18px | 700 | 1.3 | normal | Featured-button text, key callouts |
| Body Large | Pretendard | 16px | 500 | 1.5 | normal | Standard reading text on data screens (700 for emphasis) |
| Body | Pretendard | 14px | 500 | 1.34 | normal | Default body text; 500 weight, not 400 |
| Body Tight | Pretendard | 13px | 500 | 1.34 | normal | Compact labels |
| Caption | Pretendard | 12px | 500 | 1.34 | normal | Metadata, helper text |
| Caption Small | Pretendard | 10px | 500 | 1 | normal | Disclosures, smallest labels |
| Button | Pretendard | 16–18px | 700 | tight | -1px on display CTAs | All CTAs are 700 |
| Financial Amount | Pretendard | 20–36px | 700 | 1 | normal | Always 700, comma-grouped, won unit follows in 500 |
-1px tracking to compress for density.Primary CTA (Salad Green)
#04c584#ffffff#10df99 (lightens — opposite of convention)Primary CTA — Large Display
#04c584#ffffff#10df99Primary CTA — Hover-Inverted (Retry)
#10df99 (default lighter)#ffffff#04c584 (darkens — the one place Banksalad uses the darken pattern)Ghost / Outlined
#ffffff#04c584#04c584#f3fdfa (mint tint)Neutral / Cancel
#f5f5f5#434444#e1e1e1Disabled
#e1e1e1#acacacLink Button (Inline Text Link)
#04c584Data Card (Default)
#ffffff#e1e1e1 (some surfaces use no border + shadow only)0 2px 5px rgba(0, 0, 0, 0.12)Card — Soft Variant
#fbfbfb0 2px 8px rgba(0, 0, 0, 0.1)Card — Highlight (Selected)
#f3fdfa#10df99Text Input (Default)
#ffffff#999999 (placeholder) / #434444 (filled)#e1e1e1Text Input — Focus
#f3fdfa#434444#10df99Text Input — Error
#ffffff#434444#fe493d#fe493dAmount Input (Financial)
#ffffff#2b2b2b#f5f5f5Status Pill (Brand)
#f3fdfa#04c584Status Badge (Warning)
#ffffff#f56200#fd8700Status Badge (Negative)
#ffffff#fe493d#fe493dTable Header Row
#f5f5f5#7b7b7b#e1e1e1Table Body Row
#ffffff (alternates with #fbfbfb on dense tables)#434444#e1e1e1#2b2b2b (positive) or #fe493d (negative)Chart Series Tokens
#34464b (primary)#5c818a (secondary)#1c6c73 (tertiary)#a7c7cf (quaternary / pale)#04c584 (always reserved for "your value" / user's own data point)#fe493d#04c584Axis & Gridlines
#7b7b7b#e1e1e1#ffffff or #fbfbfb#ffffff), no shadow at rest, 1px bottom border #f5f5f5#04c584 (or #2b2b2b mono variant)#434444, hover #04c584#2b2b2b text, 1px solid #d8dfe6 border, 16px radius, 6px 14px padding, 14px / 400 (the home-page header uses a softer 16px radius for the auth pill — exception to the 2px default; this is the only 16px-radius live observation in the captured DOM)| Level | Treatment | Use |
|---|---|---|
| Flat | none | Page background, inline elements |
| Soft (L1) | 0 1px 1px rgba(0,0,0,.08) | Subtle row separators |
| Standard (L2) | 0 2px 5px rgba(0,0,0,.12) | Default cards — most common (~38 occurrences) |
| Elevated (L3) | 0 4px 9px rgba(0,0,0,.15) | Dropdowns, popovers |
| Deep (L4) | 0px 2px 8px rgba(0,0,0,.1) | Floating panels |
| Modal (L5) | 0 17px 50px rgba(0,0,0,.19) | Modal dialogs |
| Inset | inset 0 1px 1px rgba(0,0,0,.12) | Pressed-button / depressed input feel |
Verified: 2026-05-13 (omd:add-reference CREATE mode)
Tier 1 sources: banksalad.com home (live HTML — Pretendard + Jua preload, 16px-radius sign-in pill via playwright DOM); webview-cdn.banksalad.com/.../v2.5c10981711a65fe446400c6ecec36a221b1c3e9e.bundle.css (865 KB CSS bundle — 81× border-radius: 2px, primary CTA #04c584 rule, input focus #10df99/#f3fdfa, full color-frequency map); blog.banksalad.com/tech/banksalad-product-language-ios/ (BPL principle quote); github.com/banksalad (styleguide org confirmed).
Tier 2 sources: getdesign.md/banksalad — no record ("No designs found for 'banksalad'"). styles.refero.design/?q=banksalad — no record (search returns no banksalad cards). Tier 2 unavailable; Tier 1 treated as authoritative.
Conflicts unresolved: none. (Single playwright DOM observation of 16px-radius on the sign-in header pill is documented as an exception in §4 Navigation rather than treated as a token-system conflict — the bundle's overwhelming 81× 2px frequency is the system default.)
Earlier gap: none — this is CREATE.
#ffffff) and off-white (#fbfbfb) sections alternate quietly — not for drama, but to chunk dense data into scannable bands.Banksalad's 2px is a typographic-engineering commitment: pixel rounding sharp enough to look engineered, soft enough to not draw blood. Any radius ≥ 12px feels Toss-ish and is reserved for explicitly marketing-warmth contexts.
| Level | Treatment | Use |
|---|---|---|
| Flat (L0) | No shadow | Page background, inline elements |
| Soft (L1) | 0 1px 1px rgba(0,0,0,.08) | Subtle row lift, list-item separators |
| Standard (L2) | 0 2px 5px rgba(0,0,0,.12) | Default cards — by far the most common (~38 occurrences) |
| Elevated (L3) | 0 4px 9px rgba(0,0,0,.15) | Dropdowns, hover-elevated cards |
| Deep (L4) | 0px 2px 8px rgba(0,0,0,.1) | Floating action panels |
| Modal (L5) | 0 17px 50px rgba(0,0,0,.19) | Dialog modals, account-switch overlays |
| Inset (L-1) | inset 0 1px 1px rgba(0,0,0,.12) | Pressed button state, depressed input visual |
| Halo | 0 0 2px rgba(0,0,0,.26) | Thin outline on overlay menus and popovers |
Shadow Philosophy. Shadows are always neutral and single-layer. No colored shadows, no parallax stacks. Where Stripe brands its shadows in navy and Toss uses near-zero shadows for clinical clarity, Banksalad sits between — visible enough that cards lift off the surface, restrained enough that the data inside is what the eye lands on. The signature 0 2px 5px rgba(0,0,0,.12) is a small, low-cost lift used 38× in the bundle.
#04c584 for every interactive moment — CTAs, links, focus accents, "your data point" on charts#10df99 for hover (it's brighter than #04c584 — Banksalad lightens on interaction)#f3fdfa mint tint on input focus background — the only branded surface tint in the system#2b2b2b/#434444 warm near-blacks for type instead of #000000#34464b/#5c818a/#1c6c73/#a7c7cf) for chart series — cooler than brand green by design#04c584 only for "your value" on a chart — never as a generic data fill12,400,000원)약 120만원) on primary financial surfaces — bare numerals with commas only#0099ff info-blue for default links — green is the default link color; blue is reserved for external references| Name | Width | Key Changes |
|---|---|---|
| Mobile | <600px | Single column, full-width tables (horizontal scroll if needed), 16px gutters |
| Tablet | 600–1024px | 2-column card grids, 20px gutters |
| Desktop | 1024–1280px | Full marketing layout, 3-column feature grids |
| Large | >1280px | Centered content max-width ~1200px |
#04c584)#10df99)#ffffff)#fbfbfb)#f5f5f5)#2b2b2b)#434444)#7b7b7b)#999999)#e1e1e1)#f3fdfa)#34464b / #5c818a / #1c6c73 / #a7c7cf#fe493d#fd8700 / #f56200#04c584 background, white text, 2px border-radius (not 12px), 700-weight Pretendard at 16px, 12px 24px padding, 42px height. Hover lightens to #10df99."#e1e1e1 border, 2px radius, 20px 24px padding, shadow 0 2px 5px rgba(0,0,0,.12). Card logo 32px left, title 16px/700 #2b2b2b, three filter chips below (#f3fdfa bg, #04c584 text, 41px radius, 12px/500), annual-fee figure right-aligned 18px/700 with '원' suffix in 500."#f5f5f5, on focus border #10df99 and background #f3fdfa. Text 22px/700 right-aligned, #2b2b2b, won unit in 500 weight following the digits."#7b7b7b, gridlines 1px dashed #e1e1e1. Series 1 #34464b, series 2 #5c818a, series 3 #1c6c73. User's own data point in #04c584 to make 'your value' pop against neutral teal-slate."#ffffff / #fbfbfb background, 12px 16px padding, 1px solid #e1e1e1 bottom border. Date column 14px/500 #7b7b7b, merchant 14px/500 #434444, amount right-aligned 14px/700 — #2b2b2b for positive, #fe493d for negative."#04c584 as a generic background fill or decorative element. It always means: the user can tap this, or this is the user's own data.#04c584 → #10df99 on hover (the opposite of conventional darken-on-hover). This is a signature.0 2px 5px rgba(0,0,0,.12) is the workhorse. No colored shadows.#34464b / #5c818a / #1c6c73 / #a7c7cf. Reserve green for the user's own data point.Banksalad speaks like a trustworthy financial advisor who happens to read the regulations carefully — calm, factual, slightly older-feeling than Toss, never the "friend with money" voice that consumer-app fintech defaults to. Where Toss says "송금 완료", Banksalad says "내 신용점수가 5점 올랐어요. 이번 달 카드 결제 이력이 안정적이었기 때문이에요." The voice explains why the number changed, not just that it changed. Korean is the primary register; English UI strings are translations, not parity.
| Context | Tone |
|---|---|
| CTAs | Imperative, concrete outcome. 내 카드 찾기, 대출 한도 확인하기, 신청하기. Never 시작하기 → with an arrow flourish. |
| Section headlines | Statement of fact, not a hook. 이번 달 지출 분석 not 이번 달, 얼마나 썼는지 보러 갈까요?. |
| Recommendations | Justified. Every recommended card or loan has a one-sentence reason next to it (연 30만원 이상 절약될 수 있어요). Never a bare ranked list. |
| Financial figures | Bare numerals with commas. 1,240,000원. Approximations (약 124만원) are forbidden on primary surfaces. |
| Success messages | One-line confirmation + the relevant figure. 신용점수가 855점으로 올랐어요. No emoji, no exclamation. |
| Error / validation | Specific cause + one-line action. 주민등록번호가 일치하지 않아요. 다시 확인해주세요. Never 오류가 발생했습니다. |
| Empty states | Explain the why, then suggest one next step. 아직 연동된 카드가 없어요. 카드를 연동하면 자동으로 지출 분석이 시작돼요. |
| Legal / disclosure | Formal ~합니다 endings. Pinned at the bottom of recommendation cards. Treated as part of the product, not a footer afterthought. |
| Health-asset (DNA, screening) | Same calm advisor voice as finance. No marketing exuberance about "discovering your DNA". Just 이번 검사로 18가지 항목을 확인할 수 있어요. |
Forbidden phrases. 오류가 발생했습니다, Oops, 간단하게, 최고의 ~, 놓치지 마세요, exclamation marks on routine CTAs, emoji on financial surfaces, approximations on money (약 ~원), 놀라운 절약 / "amazing savings" / superlative-driven recommendations. Banksalad's voice is the opposite of clickbait — the user came here to think about money, and the product should respect the seriousness of that intent.
Banksalad is the consumer brand of Rainist (레이니스트), founded in 2012 by Kim Tae-hoon (김태훈) — a Sogang University graduate who started the company inside the Smilegate game-studio incubator and whose founding team manually classified 16 hours a day of Korean financial-product data to build the first comparison database (Hankyung 2019-03-12). The founding rejection was specific: every legacy Korean financial portal in 2012 (Bankrate-style aggregators, bank-run comparison pages) presented credit cards and loans in alphabetical lists optimized for the issuer, not the user. Kim Tae-hoon's stated thesis was "정보 비대칭성을 해소해 누구나 똑똑해지는 세상을 만들겠다" — "resolve information asymmetry so anyone can become smart [about their own money]" (founder interviews, Korean press 2018–2019). The product's design language follows directly from that thesis: more facts, clearly tiered, with the reason next to every recommendation.
Banksalad's monthly active users tripled to 1.5M in early 2019 (Korea Herald 2019-02-22). The company raised a ₩45B ($37M USD) Series C at a ₩300B ($247M) valuation in 2019 (Korea Herald 2019-08-28) and has raised $169.96M cumulatively to date (PitchBook). Today the product spans credit-card recommendation, personal loans, mortgages, deposits/savings, and — uniquely — a free DNA-based health-screening service that extends the "manage your assets" framing from financial assets to health assets. The home-page tagline as of 2026-05-13 reads "뱅크샐러드 | 금융을 넘어 건강 자산까지" ("Banksalad — from finance to health assets"), making that extension the brand's current positioning.
The design system is internally called BPL — Banksalad Product Language, documented on the official tech blog (blog.banksalad.com/tech/banksalad-product-language-ios). BPL's most-quoted principle is "Communication cost is most expensive. Code and Show first, argue after that." BPL is implemented on iOS with LayoutDrivenUI + RxSwift, on Android in Kotlin, on Web through the CSS bundle this DESIGN.md was extracted from. The system explicitly avoids premature component abstraction — similar components stay independent, matching how designers structure their Figma libraries. The mint-green (#04c584), the 2px radius, the Pretendard 700 default, the teal-slate chart palette — all are BPL primitives.
What Banksalad refuses: the cheerful consumer-app voice of Toss and KakaoPay (banksalad explains; it does not delight), the institutional-indigo of legacy Korean banks (which is why it picked green, not blue), the playful illustration of Kakao-family products (Banksalad does not use mascot characters), and the data-density of Bloomberg-terminal aesthetics (the tables are dense but the type is human-readable). Banksalad sits in a narrow middle: serious enough to be an advisor, modern enough to be the app a 26-year-old opens between subway stops.
#04c584 only appears where the user can act (CTA, link, focus, selection) or where the user's own data is shown ("your value" on a chart, "your score"). Never on a decorative gradient, never as a page-section background. UI implication: never use brand green as a fill that does not change on hover.disclosure slot that is always rendered, not collapsed-by-default.1,240,000원 and $1,240 should read as one column, not two scripts arguing. UI implication: never substitute a Latin-only font for numeric display; Pretendard handles both.seriesColors defaults to [#34464b, #5c818a, #1c6c73, #a7c7cf]; user's series defaults to #04c584.약 ~원 on a primary money surface tells the user the product does not actually know the number. Banksalad's brand promise is information clarity; rounded figures are forbidden where the precise figure exists. UI implication: financial-amount components do not accept a round: true flag.Personas below are fictional archetypes informed by publicly observable Banksalad user segments (Korean millennials managing credit-card portfolios, freelancers comparing loan products, mid-life users tracking health-and-finance side by side), not individual people.
박지혜 (Park Ji-hye), 31, Seoul. Senior designer at a Seoul-based scaleup. Opens Banksalad once a week to scan her credit-card spend-by-category report. Switches cards every 18 months based on whichever one Banksalad's recommendation engine surfaces with the best annual-savings figure for her actual usage pattern — not the one with the flashiest sign-up bonus. Reads the one-sentence justification under every recommendation before tapping; would close the app permanently if it ever shipped a "best card 🔥" list without reasons.
김상민 (Mr. Kim), 47, Daegu. Self-employed, runs a small import business. Uses Banksalad primarily for comparing business-friendly credit cards and tracking interest-rate movements on his three commercial loans. Trusts the product because the rate comparison shows the source date and the underlying assumption (연 환산 기준). Pays attention to the disclosure text inside each recommendation card — would lose trust immediately if a recommendation appeared without its rate basis.
이수연 (Lee Su-yeon), 28, Seongnam. UX researcher. Uses Banksalad for two unrelated reasons: monthly spend analysis, and the free DNA-based health screening. Finds the same voice across both surfaces (calm, factual, advisor-tone) reassuring — it makes the health-screening feel like an extension of "manage your assets" rather than a sudden pivot. Compares Banksalad's spend analysis to Toss's and prefers Banksalad's because "Toss는 다 정리되어 있고 깔끔한데, 뱅크샐러드는 왜 그런지를 알려줘요" (illustrative paraphrase) — Toss tidies, Banksalad explains.
조현우 (Cho Hyun-woo), 39, Busan. Mid-career operations manager. Reviews Banksalad's monthly credit-report widget — has been watching his credit score climb from 820 to 868 over 14 months. Doesn't tap CTAs; uses Banksalad strictly as a dashboard. Trusts the green #04c584 "your score" indicator on the score-trend chart because it always shows him his position against the teal-slate distribution of the population — the green-vs-teal distinction tells him at a glance which data is about him.
| State | Treatment |
|---|---|
| Empty (no linked accounts) | White canvas. Single short paragraph in #434444 body text explaining why the screen is empty (아직 연동된 카드가 없어요. 카드를 연동하면 자동으로 지출 분석이 시작돼요.). One primary CTA in Salad Green (#04c584, 2px radius). No illustration. |
| Empty (filter cleared) | Single line of #7b7b7b caption (조건에 맞는 결과가 없어요. 필터를 조정해주세요.). No CTA — user adjusts filters themselves. |
| Empty (no transactions this period) | Two-line message in #434444 explaining the filter scope (선택한 기간에 거래 내역이 없어요. 다른 기간을 선택하거나 카드 연동을 확인해보세요.). |
| Loading (first paint) | Skeleton blocks at #f5f5f5 matching the final layout exactly. Financial amounts render as --원 placeholders rather than skeleton bars — a skeleton bar that resolves to a number is disorienting; -- is honest. 1s shimmer with 8% white highlight using a linear-gradient sweep. |
| Loading (refresh / in-place) | Subtle #04c584 2px progress bar at top of the section. Previous values stay visible. Never block the table during refresh. |
| Error (inline field) | #fe493d 1px border on the input, 12px error text below in #fe493d weight 500. One actionable sentence (주민등록번호가 일치하지 않아요. 다시 확인해주세요.). |
| Error (recommendation fetch failed) | Inline banner inside the recommendation card area. #fe493d left border, white background, 14px #434444 text explaining what failed + a 다시 시도하기 button in the retry-button style (#10df99 resting → #04c584 on hover). Never a generic toast. |
| Error (data freshness warning) | Soft warning banner with #fd8700 left accent bar, white background, 13px #7b7b7b text noting the data is N hours stale. Non-blocking — the user can still see the (possibly stale) figures. |
| Success (action confirmed) | Inline confirmation row in #f3fdfa mint-tint background, #04c584 16px / 700 confirmation text, the relevant figure in 22px / 700 #2b2b2b below. No toast for important actions — they get their own confirmation surface. |
| Success (passive update) | 3s auto-dismiss toast at top-right. #2b2b2b background (NOT brand green — green is reserved for interactive surfaces), white 14px / 500 text, 2px radius, shadow 0 2px 5px rgba(0,0,0,.12). No emoji. |
| Skeleton | #f5f5f5 blocks at exact final dimensions, 2px radius matching the component being loaded. 1s shimmer. Financial-amount slots show --원, not a bar. |
| Disabled | Background #e1e1e1, text #acacac, 2px radius preserved. Cursor not-allowed. The geometry stays identical to the enabled state so re-enabling does not shift layout. |
| Pressed (button) | Inset shadow inset 0 1px 1px rgba(0,0,0,.12) + background shifts by ~5% darker for the press duration. Returns instantly on release (no spring). |
Durations:
| Token | Value | Use |
|---|---|---|
motion-instant | 0ms | State commits, checkbox flips, focus ring appearance |
motion-fast | 150ms | Hover, focus, button press overlays, inline value updates |
motion-standard | 250ms | Card expand, dropdown open, tab content switch, modal open |
motion-slow | 400ms | Page-level transitions, recommendation-card reveal animation |
motion-data | 600ms | Chart series draw-in, score-bar count-up — slower because the user needs time to read the number |
Easings:
| Token | Curve | Use |
|---|---|---|
ease-enter | cubic-bezier(0.0, 0.0, 0.2, 1) | Arriving — modals, dropdowns, sheets |
ease-exit | cubic-bezier(0.4, 0.0, 1, 1) | Dismissals |
ease-standard | cubic-bezier(0.4, 0.0, 0.2, 1) | Two-way transitions, chart draw-in |
ease-data | cubic-bezier(0.25, 0.46, 0.45, 0.94) | Score count-up, chart series — eases out gradually so the final value is the calm resting state |
Explicitly forbidden. No spring overshoot anywhere. No bounce. No cubic-bezier with a middle control above 1.0. Banksalad's voice is advisor, not delighter — spring-easing reads as a consumer app celebrating a transaction, which is the opposite of the brand promise. Where Toss licenses spring easing only for the money-moved checkmark, Banksalad does not license it at all.
Signature motions.
motion-data (600ms) with ease-data. The duration is deliberately slow — the user is supposed to read the change, not see it flash. The Korean numeric separators (,) re-flow correctly during the count.motion-data with ease-standard. The user's own series (#04c584) is drawn last, so the eye lands on the user's own data after the surrounding distribution has been established.motion-standard / ease-enter from opacity: 0; translateY(4px). Translate is intentionally small (4px, not 20px) — the cards arrive, they do not fly in.prefers-reduced-motion: reduce, all motion-* tokens collapse to motion-instant. Score count-ups become instant value swaps. Chart draw-ins render their final state immediately. Banksalad remains fully usable; nothing in the product is information-dependent on motion.Banksalad (뱅크샐러드) is the design language of a trustworthy financial advisor that runs on data, not optimism. Where Toss flattens money into one cheerful gesture and KakaoPay wraps it in Kakao yellow, Banksalad insists that more information, clearly presented, is the actual brand promise. The home page opens on a white canvas (#ffffff/#fbfbfb) with
Brand
Accent
Neutrals
Semantic
Type Scale
Rendered in system-ui to clearly show scale & weight.
Fonts
Spacing
| Purpose | Value | Preview |
|---|---|---|
| Density | compact | |
| Base unit | 4px | |
| Section gap | 40px | |
| Card padding | 20px | |
| Element gap | 12px |
Border Radius
| Element | Value | Preview |
|---|---|---|
| buttons | 2px | |
| inputs | 2px | |
| cards | 2px | |
| dialogs | 2px | |
| badges | 2px |
Elevation
Do and Don't guidelines parsed from DESIGN.md.
Do
Don't
Buttons
Inputs
Cards
Badges
List items