Design tokens (YAML front matter)
name: flex
colors:
canvas: '#ffffff'
ink: '#111111'
on-dark: '#ffffff'
action-lime: '#00ff44'
announcement-orange: '#ff4d00'
typography:
about-display:
fontSize: 96px
fontWeight: 600
lineHeight: 1
use: About-page relationship statement
about-display-inverse:
fontSize: 80px
fontWeight: 600
lineHeight: 1.2
use: Dark About-page statement
body-emphasis:
fontSize: 17px
fontWeight: 600
lineHeight: 1.55
use: About-page explanatory copy
navigation:
fontSize: 14px
fontWeight: 700
lineHeight: 1
use: Global navigation controls
rounded:
nav: 8px
badge: 18px
cta: 24px
spacing:
compact: 8
nav-action-x: 14
cta-y: 30
cta-x: 44
components:
relationship-story-card:
type: card
backgroundColor: rgba(255,255,255,0.04)
border: 1px solid rgba(255,255,255,0.08)
rounded: 16px
padding: 24px
use: Non-interactive relationship-data story item observed on the public home surface
nav-action-outline:
type: button
backgroundColor: transparent
textColor: '#111111'
border: '1px #111111'
rounded: 8px
padding: 8px 14px
height: 33px
typography: 13px / 700
states: default captured on both surfaces; the capture holds no state frame for this action
use: 'About-page global navigation secondary action (a, variant-border) at surface-2::[data-omd-capture="8"]; on the dark home header the same action computes #ffffff text and a 1px #ffffff border (home::[data-omd-capture="8"])'
nav-action-solid:
type: button
backgroundColor: '#111111'
textColor: '#ffffff'
rounded: 8px
padding: 8px 14px
height: 33px
typography: 13px / 700
states: default captured on both surfaces; the capture holds no state frame for this action
use: 'About-page global navigation primary action (a, variant-invert) at surface-2::[data-omd-capture="9"]; on the dark home header it inverts to a #ffffff fill with #111111 text (home::[data-omd-capture="9"])'
focus: no visible change (measured 2026-10-16) on :focus-visible
gnb-menu-button:
type: button
backgroundColor: transparent
textColor: '#111111'
rounded: 8px
padding: 8px
height: 32px
typography: 14px / 700
states: default captured on six menu buttons per surface; no state frame and no menu-open record
use: 'About-page global navigation menu button (button, variant-gnb) at surface-2::[data-omd-capture="2"]; the dark home header computes #ffffff text for the same buttons'
lime-cta:
type: button
backgroundColor: '#00ff44'
textColor: '#111111'
rounded: 24px
padding: 30px 44px
height: 80px
typography: 17px / 700
states: default captured on both surfaces; no state frame
use: High-emphasis marketing conversion link (a, variant-color, size-xl) at home::[data-omd-capture="13"]; /about repeats it at surface-2::[data-omd-capture="25"]
new-badge:
type: badge
backgroundColor: '#ff4d00'
textColor: '#000000'
rounded: 18px
padding: 0px 8px
height: 20px
typography: 12px / 700 / 16.56px
states: static label; no state frame
use: Announcement-strip new badge (span, badgeType-new) at home::span; /about carries the same badge (surface-2::span)
carousel-arrow:
type: button
backgroundColor: rgba(17, 17, 17, 0.08)
rounded: 50%
padding: 0px
size: 40px x 40px
hover: bg rgba(17, 17, 17, 0.12)
pressed: bg rgba(17, 17, 17, 0.12)
states: 'rest, hover, and pressed sampled on the enabled arrow (capture 12); both frames record rgba(17, 17, 17, 0.12). The disabled arrow beside it (capture 11, same class) records the same two frames, which supports a settled value; the disabled arrow is given no state. Focus is not declared from the bundle: there is no focus frame, and the collector presses before it focuses'
use: About-page carousel arrow (button.l2024-c-lnBcZQ) at surface-2::[data-omd-capture="12"]; icon-only, its glyph colour was not sampled
accordion-item:
type: card
backgroundColor: rgba(255, 255, 255, 0.08)
rounded: 24px
padding: 24px
states: collapsed (capture 15, class open-false) and expanded (capture 13 and 14, class open-true) variants captured at rest; the expanded fill is rgba(255, 255, 255, 0.1); no pointer-state frame
use: About-page accordion item (li role=button, l2024-c-bloTie) at surface-2::[data-omd-capture="15"]; the white-alpha fill implies a dark section, and the label style was not sampled separately
feature-card:
type: card
backgroundColor: rgba(17, 17, 17, 0.96)
rounded: 24px
padding: 24px
size: 328px x 452px
states: non-interactive; three colour variants
use: 'About-page feature card (li.l2024-c-fMALsr, color-black, two occurrences) at surface-2::li; the color-gray variant fills rgba(17, 17, 17, 0.1) and the color-green variant #00dc3a'
about-card:
type: card
backgroundColor: '#ffffff'
rounded: 24px
padding: 24px
states: non-interactive; three colour variants
use: 'About-page 500px-wide card (li.l2024-c-CFKUv, color-white) at surface-2::li; the color-black variant fills #111111 and the color-trans variant rgba(255, 255, 255, 0.08)'
fonts:
roles:
ui: Pretendard Variableflex — Design Reference
Relations Driven AX. (Observed on
flex.team, 2026-07-13)Korean HR-data and AI platform reference: a black-and-white information field punctuated by an acid-lime conversion action. The public marketing surface frames AI as an understanding of organizational relationships and context, while the corporate About surface makes that same thesis concrete through very large editorial type and stark light/dark transitions.
Overview
Visual Theme & Atmosphere
flex is a Korean company building an HR-data-based AI platform for organizations: its public product language spans people and organization management, performance, payroll and benefits, and operational workflows. Its current expression is not the earlier “one ink / graphite card” system. The 2026 public site leads with Relations Driven AX—the claim that AI becomes useful when it understands the relationships and context inside an organization—and turns that idea into a high-contrast, editorial marketing system. Black or white fields establish the serious enterprise register; #00FF44 appears as a deliberately loud action color rather than a general-purpose semantic palette. The About page gives the brand’s “Human Relations” reinterpretation of HR room to breathe in 80–96px type, then alternates dark and light narrative sections. This reference describes those current public marketing and corporate surfaces only; it does not treat the separate help center as product UI evidence.
What is distinctive in the observed surfaces:
- Relationship data as the visual argument. Large, plain-spoken statements carry the thesis before any UI treatment; application screenshots serve the story rather than becoming generic SaaS decoration.
- Hard contrast, selective lime.
#111111/white carry most chrome and text, while#00FF44is reserved for primary conversion links. - Editorial scale plus dense enterprise copy. About-page statements reach 96px, then resolve into 17px/600 explanatory copy and 15px supporting copy.
- Rounded actions rather than rounded everything. Global nav actions use 8px corners; campaign CTAs use 24px pills. No universal card-radius rule is asserted.
Primary tasks
- Find out which HR operations the platform covers
- Judge whether an AI subscription actually changes how a company works
- See how the platform works through application screenshots
- Read how the company grew and where it is heading
- Start a trial or send an inquiry
Iconography
The captured public surfaces expose inline brand/product imagery and ordinary navigation affordances, but no named icon library or reusable icon-size/weight rule. No icon token is promoted.
Imagery & Illustration
- The home page uses application screenshots to demonstrate contextual AI answers, organizational signals, and connected-work-system data; these are marketing illustrations of the platform, not a component library.
- The About page is primarily typographic and narrative. Its light/dark editorial fields frame the company story rather than adding a stock-photo visual language.
- No imagery crop ratio, overlay treatment, or product-screen frame is promoted because the supplied evidence does not identify a repeatable image component.
Brand Narrative
Flex says it was established in 2019 and launched its flex service in 2020. Its current About page describes a progression from establishing an HR-platform standard (2019–2021), through enterprise expansion (2022–2024), toward an AX platform grounded in HR data (2025–2027). The current brand thesis is Relations Driven AX: HR is redefined from “Human Resources” to “Human Relations,” and relationship data is presented as the context that lets AI diagnose, suggest, and execute work safely. The company frames its mission as solving organizations’ and employees’ problems so that it becomes an essential service for everyone who works.
Principles
- Context before capability. Explain what the organization knows and how access is bounded before claiming AI benefit.
- Contrast carries authority. Build the public hierarchy with black, white, and measured opacity; reserve lime for the decisive conversion point.
- Use lime as an action, not a status system.
#00FF44is evidenced on marketing CTA links, not as a universal product semantic token. - Let scale establish the thesis. Keep editorial statements distinct from supporting explanation; the recorded 80–96px About styles are a surface-specific example.
- Keep source domains separate. Marketing/corporate pages, Help Center chrome, and unverified app surfaces must not be mixed into one inferred product design system.
Personas
Flex’s official copy names organizations, members, leaders, and teams as the stakeholders of its platform. It also describes HR teams dealing with attendance, evaluation, compensation, compliance, and data-informed decisions. This reference therefore recognizes those official stakeholder groups without inventing named fictional personas or unverified audience demographics:
- Organization and HR operators: need connected organizational and employee data to handle HR operations and compliance.
- Leaders: use organizational context and goal/health signals to make decisions.
- Employees: receive access and AI assistance bounded by their role and organizational relationship.
Colors
Color & Typography
Color tokens
#000000— public-surface black field and the catalog primary color#111111— light-surface navigation text and solid navigation action background#FFFFFF— light canvas, on-dark text, and outline navigation action background#00FF44— primary marketing conversion action on home and About#FF4D00— compact “new” badge in the announcement strip#00DC3A— green variant of the About-page feature card (§4); a card fill, not the#00FF44action limergba(17,17,17,0.84)— measured dark-on-light long-form emphasisrgba(255,255,255,0.84)andrgba(255,255,255,0.48)— measured on-dark supporting copy and label tones
The lime and orange are observed marketing accents with separate purposes; neither is promoted as a product-app status color.
Typography evidence classes
- Live loaded Flex webfont: both supplied public surfaces resolve visible text to
"Pretendard Variable", Pretendard, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif. The collector classifiesPretendard Variableas loaded/high-confidence, records 351 visible uses across headings, body, navigation, badges, and actions, and resolves 92 Flex-hosted subset URLs understatic.flex.team. The machine family token therefore names onlyPretendard Variable. - Declared but unused fallback: static
Pretendardis present in declarations but has zero observed visible uses.system-uiappears once as an operating-system stack. Neither is promoted as another Flex UI-family token or rendered as a substitute specimen. - Measured public hierarchy:
/aboutincludes 96px/600/96px and 80px/600/96px display samples, 17px/600/24.65–26.35px body-emphasis samples, and 14px/700 global-navigation controls. These sizes are retained as measured styles without assigning a family token. - Documentation chrome:
guide.flex.teamis a separate Help Center surface. It was inspected only to classify the source domain and contributes no color, typography, or component token here.
Layout
Layout & Grid
- Global announcement strip: the two captured public surfaces begin with a 48px-high announcement link; it uses 60px horizontal padding at the 1440px collector viewport.
- Global navigation: on
/about, the captured menu controls use 8px radius and 8px internal padding; the two conversion actions use 8px 14px padding. - About-page editorial hierarchy: measured headline styles include 96px/600/96px on a light field and 80px/600/96px on a dark field. These are surface-local display treatments, not a claimed product-app type scale.
- Conversion action: the observed lime action is a 24px-radius link with 30px 44px padding and 17px/700 text on both captured public surfaces.
- Boundary: no container maximum, page section height, or responsive breakpoint is promoted because the supplied 1440×900 capture does not establish those values across viewports.
Motion & Easing
Motion
No duration, easing, transition, or scroll-trigger state was recorded in the supplied evidence. Motion is intentionally undocumented rather than extrapolated from the static surfaces.
No motion values were captured. Preserve the absence of a claimed motion system rather than assigning easing curves, delays, or stagger behavior from visual inference.
Components
Global navigation action — outline
Light-surface secondary action
- Background: transparent (
rgba(0, 0, 0, 0)over the white page). Corrected 2026-09-29: the July text listed#FFFFFF, which is the page behind the action, not the element’s fill. - Text:
#111111 - Border:
1px solid #111111 - Radius:
8px - Padding:
8px 14px - Font:
13px / 700 - Height: 33px
- Use:
/aboutlight global navigation secondary conversion action; evidencesurface-2::[data-omd-capture="8"] - States: default captured on both surfaces; the capture holds no state frame for this action. On the dark home header the same action computes
#FFFFFFtext and a 1px#FFFFFFborder (home::[data-omd-capture="8"]).
Global navigation action — solid
Light-surface primary action
- Background:
#111111 - Text:
#FFFFFF - Radius:
8px - Padding:
8px 14px - Font:
13px / 700 - Height: 33px
- Use:
/aboutlight global navigation primary conversion action; evidencesurface-2::[data-omd-capture="9"] - States: default captured on both surfaces; no state frame. On the dark home header it inverts to a
#FFFFFFfill with#111111text (home::[data-omd-capture="9"]).
Marketing CTA — lime
Primary conversion
- Background:
#00FF44 - Text:
#111111 - Radius:
24px - Padding:
30px 44px - Font:
17px / 700 - Height: 80px
- Use: high-emphasis marketing conversion link on home and
/about; evidencehome::[data-omd-capture="13"],surface-2::[data-omd-capture="25"] - States: default captured on both surfaces; no state frame.
Announcement badge — new
Default
- Background:
#FF4D00 - Text:
#000000 - Radius:
18px - Padding:
0px 8px - Font:
12px / 700 - Height: 20px (line height 16.56px)
- Use: compact “new” label in the public announcement strip; evidence
home::span,surface-2::span - States: static label; no state frame.
The components below were transcribed on 2026-09-29 from the same 2026-07-13 bundle; nothing was re-measured.
Global navigation menu button
- Background: transparent
- Text:
#111111on/about; the dark home header computes#FFFFFF - Radius:
8px - Padding:
8px - Height: 32px
- Font:
14px / 700 - Use: global navigation menu button (
variant-gnb), six per surface; evidencesurface-2::[data-omd-capture="2"],home::[data-omd-capture="2"] - States: default captured; no state frame and no menu-open record.
Carousel arrow
- Background:
rgba(17, 17, 17, 0.08) - Radius:
50% - Padding:
0px - Size: 40px × 40px
- Hover: background
rgba(17, 17, 17, 0.12) - Pressed: background
rgba(17, 17, 17, 0.12) - States: sampled on the enabled arrow,
surface-2::[data-omd-capture="12"]; its hover and pressed frames, taken at different moments, record the same fill. The disabled arrow beside it (surface-2::[data-omd-capture="11"], same classl2024-c-lnBcZQ) records the same two frames, which supports reading the value as settled; the disabled arrow itself is given no state value. Focus is not declared: the capture holds no focus frame, and the collector presses before it focuses, which suppresses:focus-visible. - Use: About-page carousel arrow; icon-only, and its glyph colour was not sampled.
Accordion item
- Background:
rgba(255, 255, 255, 0.08)collapsed;rgba(255, 255, 255, 0.1)expanded - Radius:
24px - Padding:
24px - Use: About-page accordion item (
li[role=button], classl2024-c-bloTie); collapsedsurface-2::[data-omd-capture="15"](open-false), expanded"13"and"14"(open-true). The white-alpha fill implies a dark section. The item’s own 14px / 500 is the container’s computed style, not a sampled label style, so no text style is declared. - States: collapsed and expanded DOM variants at rest; no pointer-state frame.
Cards
- Relationship story card (home,
li.l2024-c-cbIXJP, 325 × 248, nine occurrences): fillrgba(255, 255, 255, 0.04), border 1pxrgba(255, 255, 255, 0.08), 16px radius, 24px padding. This is the July frontmatter token, described in prose here for the first time. - Feature card (
li.l2024-c-fMALsr, 328 × 452): 24px radius, 24px padding; fillsrgba(17, 17, 17, 0.96)(color-black, two occurrences),rgba(17, 17, 17, 0.1)(color-gray), and#00DC3A(color-green). - About card (
li.l2024-c-CFKUv, 500px wide): 24px radius, 24px padding; fills#FFFFFF(color-white),#111111(color-black), andrgba(255, 255, 255, 0.08)(color-trans). - All three are non-interactive list items. Their own computed text colour is the container’s, not a sampled label style, so no text colour is declared.
The carousel arrow is the only component with measured pointer states. The bundle’s interactions[] record is empty (no dialog, tab, menu, or form record), so menu, dialog, form, disabled, and focus states stay omitted. Corrected 2026-09-29: the July text read the empty interaction record as the absence of every state sample, while the bundle holds hover and pressed frames for the carousel arrows.
The legacy #1D1D1F/graphite/pill-service-card claims conflict with the supplied 2026 live public capture and were removed; no usable Tier 2 token record was available for a second comparison.
States
No loading, error, empty, disabled, or success state was captured for a Flex product workflow. The bundle’s interactions[] record is empty, but it holds pointer-state frames for the About-page carousel arrows: hover and pressed both record rgba(17, 17, 17, 0.12) over the rgba(17, 17, 17, 0.08) rest (§4). The other state-like observations are surface-theme variants (dark versus light navigation), the accordion’s collapsed and expanded variants, and static defaults in §4. Focus is not declared. Corrected 2026-09-29: the July text said the evidence reported zero interaction coverage and read that as no state sample.
Live state probe, 2026-10-16 (), nav-action-solid: focus — no visible change (measured 2026-10-16).
Do’s and Don’ts
Do
- Use
#111111and#FFFFFFas the dominant public-surface contrast pair. - Reserve
#00FF44for the large, high-emphasis conversion action observed on the current public pages. - Use the 8px navigation action and 24px campaign CTA radii only in their observed contexts.
- Treat 80–96px editorial type as a current About-page treatment, not proof of a product-app display scale.
- Keep help-center chrome and any unobserved logged-in application UI out of this public-surface reference.
Don’t
- Reintroduce the legacy graphite manifesto cards, service-filter pills, or inset-ring variants as current Flex components.
- Treat the orange announcement badge as a general error or warning semantic color.
- Render static
Pretendardor a system fallback as though it were the verifiedPretendard Variablefamily. - Invent hover, disabled, form, dialog, or loading variants beyond the carousel arrow’s measured hover and pressed fill.
- Turn relationship-data positioning into generic AI copy that omits access, role, and organizational context.
Pipeline: omd:add-reference UPDATE (3-tier reconcile) Catalog position: KR · saas · HR-data/AI platform
Voice & Tone
Content & Voice
The public narrative starts from organizational context rather than generic AI capability. The home page asks whether blanket AI subscriptions actually change how a company works, then answers through three forms of knowledge: knowing the user, anticipating work, and connecting enterprise context. The About page reframes HR as Human Relations and positions the company’s mission around solving organizational and employee problems. CTA language is direct and operational—trial or inquiry—while the surrounding prose remains declarative and explanatory.
Voice adjectives: contextual · declarative · enterprise-serious
| Do | Don’t |
|---|---|
| Start with a concrete organizational condition or question. | Lead with abstract “AI transformation” claims without context. |
| Explain how context, access, and relationships change an outcome. | Treat every user or team as interchangeable. |
| Use a clear conversion label for a trial or inquiry. | Turn every paragraph into a sales CTA. |
| Pair confident headlines with explanatory follow-through. | Use playful hype that conflicts with the governance and safety message. |
The examples are a source-derived style description, not a license to reproduce Flex copy verbatim.
Governance
Accessibility
#111111on#FFFFFFand#FFFFFFon#111111are high-contrast text pairs in the captured light/dark chrome.- The lime primary CTA uses
#111111text over#00FF44; retain this pairing when reproducing the observed action treatment. - The collector did not record focus-visible or keyboard interaction states. Do not infer focus treatment from the 8px or 24px radii; provide an accessible focus indicator in an implementation.
Pretendard Variableis backed by loaded-face evidence and Flex-hosted subset URLs. StaticPretendardandsystem-uiremain declared/system fallbacks and must not be presented as additional Flex font roles.
Known Gaps
- Contrast,
nav-action-outline. Text#111111on#00000000measures 1.11:1, below the WCAG AA 4.5:1 minimum for normal-size text. Recorded as measured, not adjusted. - Contrast,
gnb-menu-button. Text#111111on#00000000measures 1.11:1, below the WCAG AA 4.5:1 minimum for normal-size text. Recorded as measured, not adjusted.