Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .idea/deploymentTargetSelector.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/markdown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file not shown.
Binary file not shown.
20 changes: 19 additions & 1 deletion presentation/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,30 @@

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:background="@color/neutral100"
>


<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test Button"
android:textAppearance="@style/Caption1"
android:backgroundTint="@color/primary100"
android:textColor="@color/neutral800"
android:layout_marginTop="20dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
Comment on lines +22 to +33
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

테스트용 버튼을 프로덕션 레이아웃에서 제거하세요.

"test Button"은 디자인 시스템을 테스트하기 위한 것으로 보입니다. 프로덕션 코드에 머지하기 전에 제거하거나, 데모 목적이라면 주석으로 명확히 표시해주세요.

🤖 Prompt for AI Agents
presentation/src/main/res/layout/activity_main.xml lines 22-33: 해당 레이아웃에 남아 있는
"test Button" 테스트용 버튼은 프로덕션 레이아웃에서 제거해야 합니다; 파일에서 해당 <Button> 블록을 삭제하거나 실제로 데모
목적이라면 삭제 대신 명확한 주석(예: <!-- DEMO ONLY: ... -->)으로 표시하고, 디자인 시스템 테스트용이라면 임시 플래그나
별도 샘플 레이아웃으로 옮겨 배포에서 포함되지 않도록 조치하세요.


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textAppearance="@style/Title1Bold"
android:textColor="@color/neutral800"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
Expand Down
63 changes: 63 additions & 0 deletions presentation/src/main/res/values-night/colors.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>


<color name="primary100">#1B2964</color>
<color name="primary200">#243684</color>
<color name="primary300">#3149B5</color>
<color name="primary400">#3656D8</color>
<color name="primary500">#4264F0</color>
<color name="primary600">#617FFF</color>
<color name="primary700">#94A6FF</color>
<color name="primary800">#C2CEFF</color>
<color name="primary900">#DBE2FF</color>


<color name="accent100">#6B2A00</color>
<color name="accent200">#993C00</color>
<color name="accent300">#C74E00</color>
<color name="accent400">#E05700</color>
<color name="accent500">#F56000</color>
<color name="accent600">#FF7924</color>
<color name="accent700">#FFA266</color>
<color name="accent800">#FFCAA8</color>
<color name="accent900">#FFEDE0</color>
Comment on lines +7 to +26
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# Find and examine the night mode colors file
find . -path "*/presentation/src/main/res/values-night/colors.xml" -type f

Repository: UMC-PRODUCT/umc-product-android

Length of output: 206


🏁 Script executed:

# Also find the light mode colors file for comparison
find . -path "*/presentation/src/main/res/values/colors.xml" -type f

Repository: UMC-PRODUCT/umc-product-android

Length of output: 120


🏁 Script executed:

# List files in the colors directory to understand the structure
find . -path "*/presentation/src/main/res/values*/colors.xml" -type f

Repository: UMC-PRODUCT/umc-product-android

Length of output: 172


🏁 Script executed:

cat -n ./presentation/src/main/res/values/colors.xml

Repository: UMC-PRODUCT/umc-product-android

Length of output: 2591


🏁 Script executed:

cat -n ./presentation/src/main/res/values-night/colors.xml

Repository: UMC-PRODUCT/umc-product-android

Length of output: 2599


🏁 Script executed:

python3 << 'EOF'
def hex_to_rgb(hex_color):
    hex_color = hex_color.lstrip('#')
    return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))

def luminance(rgb):
    r, g, b = [x / 255.0 for x in rgb]
    r = r / 12.92 if r <= 0.03928 else ((r + 0.055) / 1.055) ** 2.4
    g = g / 12.92 if g <= 0.03928 else ((g + 0.055) / 1.055) ** 2.4
    b = b / 12.92 if b <= 0.03928 else ((b + 0.055) / 1.055) ** 2.4
    return 0.2126 * r + 0.7152 * g + 0.0722 * b

def contrast_ratio(hex1, hex2):
    l1 = luminance(hex_to_rgb(hex1))
    l2 = luminance(hex_to_rgb(hex2))
    lighter = max(l1, l2)
    darker = min(l1, l2)
    return (lighter + 0.05) / (darker + 0.05)

# Night mode colors
neutral000_night = "#121212"  # dark background
neutral800_night = "#EBEDEF"  # light text
primary500_night = "#4264F0"
primary700_night = "#94A6FF"
primary900_night = "#DBE2FF"
accent500_night = "#F56000"
accent700_night = "#FFA266"
accent900_night = "#FFEDE0"

# Light mode colors (for comparison)
neutral000_light = "#FFFFFF"
neutral900_light = "#1F2124"
primary500_light = "#4869F0"
accent500_light = "#FF6400"

print("=== DARK MODE CONTRAST RATIOS ===")
print(f"neutral000 vs primary500: {contrast_ratio(neutral000_night, primary500_night):.2f}:1")
print(f"neutral000 vs primary700: {contrast_ratio(neutral000_night, primary700_night):.2f}:1")
print(f"neutral000 vs primary900: {contrast_ratio(neutral000_night, primary900_night):.2f}:1")
print(f"neutral000 vs accent500:  {contrast_ratio(neutral000_night, accent500_night):.2f}:1")
print(f"neutral000 vs accent700:  {contrast_ratio(neutral000_night, accent700_night):.2f}:1")
print(f"neutral000 vs accent900:  {contrast_ratio(neutral000_night, accent900_night):.2f}:1")
print(f"neutral000 vs neutral800: {contrast_ratio(neutral000_night, neutral800_night):.2f}:1")

print("\n=== LIGHT MODE CONTRAST RATIOS (for comparison) ===")
print(f"neutral000 vs primary500: {contrast_ratio(neutral000_light, primary500_light):.2f}:1")
print(f"neutral000 vs accent500:  {contrast_ratio(neutral000_light, accent500_light):.2f}:1")
print(f"neutral900 vs primary500: {contrast_ratio(neutral900_light, primary500_light):.2f}:1")
print(f"neutral900 vs accent500:  {contrast_ratio(neutral900_light, accent500_light):.2f}:1")

print("\n=== WCAG AA STANDARDS ===")
print("Normal text (body): 4.5:1")
print("Large text (18pt+): 3:1")
print("Graphics/UI components: 3:1")

print("\n=== BRAND CONSISTENCY CHECK ===")
print(f"Primary500 Light (#4869F0) vs Dark (#4264F0): Similar? {contrast_ratio('#4869F0', '#4264F0') < 1.1}")
print(f"Accent500 Light (#FF6400) vs Dark (#F56000): Similar? {contrast_ratio('#FF6400', '#F56000') < 1.1}")

EOF

Repository: UMC-PRODUCT/umc-product-android

Length of output: 161


🏁 Script executed:

python3 << 'EOF'
# Simplified WCAG contrast calculation
def contrast(hex1, hex2):
    hex1 = hex1.lstrip('#')
    hex2 = hex2.lstrip('#')
    
    r1, g1, b1 = int(hex1[0:2], 16), int(hex1[2:4], 16), int(hex1[4:6], 16)
    r2, g2, b2 = int(hex2[0:2], 16), int(hex2[2:4], 16), int(hex2[4:6], 16)
    
    def lum(r, g, b):
        rgb = [r/255, g/255, b/255]
        rgb = [x/12.92 if x <= 0.03928 else ((x+0.055)/1.055)**2.4 for x in rgb]
        return 0.2126*rgb[0] + 0.7152*rgb[1] + 0.0722*rgb[2]
    
    l1, l2 = lum(r1, g1, b1), lum(r2, g2, b2)
    lighter = max(l1, l2)
    darker = min(l1, l2)
    return round((lighter + 0.05) / (darker + 0.05), 2)

bg = "#121212"
colors = {
    "primary500": "#4264F0",
    "primary700": "#94A6FF", 
    "primary900": "#DBE2FF",
    "accent500": "#F56000",
    "accent700": "#FFA266",
    "accent900": "#FFEDE0",
    "neutral800": "#EBEDEF"
}

print("Dark Mode Contrast (neutral000 bg):")
for name, color in colors.items():
    ratio = contrast(bg, color)
    status = "✓ AA" if ratio >= 4.5 else ("✓ Large" if ratio >= 3 else "✗ Fail")
    print(f"{name:15} {color}: {ratio}:1 {status}")
EOF

Repository: UMC-PRODUCT/umc-product-android

Length of output: 375


Primary 컬러의 접근성 확인이 필요합니다.

다크 모드용 Primary와 Accent 컬러의 접근성을 검증했습니다:

WCAG AA 대비 비율 결과:

  • primary500 (#4264F0): 3.85:1 - 대형 텍스트만 적합 (일반 텍스트는 4.5:1 필요)
  • primary700 이상: 모두 충족 (8.17:1 이상)
  • 모든 accent 색상: 모두 충족 (5.85:1 이상)

브랜드 일관성: 라이트 모드와 다크 모드의 Primary/Accent 색상이 일관되게 유지됩니다.

권장사항:

  1. 일반 본문 텍스트는 primary700 (#94A6FF) 이상 사용
  2. primary500은 큰 텍스트(18pt+)나 UI 컴포넌트에만 사용
  3. 다양한 다크 모드 배경에서 실제 UI 가독성 테스트 수행
🤖 Prompt for AI Agents
presentation/src/main/res/values-night/colors.xml lines 7-26: primary500
(#4264F0) does not meet WCAG AA for normal text and must not be used for body
copy; update the codebase to replace usages of primary500 for regular text with
primary700 (#94A6FF) or darker tokens, restrict primary500 to large text (18pt+)
or non-body UI components only, add a brief XML comment in this file documenting
the accessibility guidance (which tokens are safe for body vs. large text), and
run visual QA across common dark-mode backgrounds to verify contrast after the
changes.



<color name="neutral000">#121212</color>
<color name="neutral100">#28292F</color>
<color name="neutral200">#3A3F46</color>
<color name="neutral300">#626C75</color>
<color name="neutral400">#7C8792</color>
<color name="neutral500">#A6ADB5</color>
<color name="neutral600">#C2C7CC</color>
<color name="neutral700">#DCDDE0</color>
<color name="neutral800">#EBEDEF</color>
<color name="neutral900">#F7F7F7</color>
Comment on lines +29 to +38
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check light mode neutral colors
echo "=== Light mode neutral colors ==="
if [ -f "presentation/src/main/res/values/colors.xml" ]; then
  cat "presentation/src/main/res/values/colors.xml" | grep -E 'neutral[0-9]+'
else
  find . -name "colors.xml" -type f ! -path "*/values-night/*" | head -5
fi

echo -e "\n=== Dark mode neutral colors ==="
if [ -f "presentation/src/main/res/values-night/colors.xml" ]; then
  cat "presentation/src/main/res/values-night/colors.xml" | grep -E 'neutral[0-9]+'
fi

Repository: UMC-PRODUCT/umc-product-android

Length of output: 1042


의미론적 색상 네이밍 일관성 문제 수정 필요

다크 모드와 라이트 모드의 neutral 색상 스케일이 의미론적으로 일관성이 없습니다.

  • 라이트 모드: neutral000 = #FFFFFF (가장 밝음) → neutral900 = #1F2124 (가장 어두움)
  • 다크 모드: neutral000 = #121212 (가장 어두움) → neutral900 = #F7F7F7 (가장 밝음)

같은 이름(neutral000)이 모드별로 정반대의 의미를 가지므로, 같은 색상 이름이 두 모드에서 같은 의미론적 역할을 하도록 수정해야 합니다. 예를 들어 neutral000은 양쪽 모드에서 주 배경색으로 사용되어야 합니다.



<color name="success100">#044836</color>
<color name="success300">#076E51</color>
<color name="success500">#0B9D71</color>
<color name="success700">#87DEC4</color>
<color name="success900">#D4F7EB</color>


<color name="warning100">#9E6500</color>
<color name="warning300">#C77E00</color>
<color name="warning500">#FFA500</color>
<color name="warning700">#FFCD75</color>
<color name="warning900">#FFF4BD</color>


<color name="danger100">#751A1A</color>
<color name="danger300">#A82424</color>
<color name="danger500">#E03131</color>
<color name="danger700">#F29B9B</color>
<color name="danger900">#FDECEC</color>
Comment on lines +41 to +59
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

Material Design 3 semantic color scale success warning danger levels

💡 Result:

Short answer

  • Material Design 3 (M3) officially defines an Error semantic color family with four roles: error, on‑error, error‑container, on‑error‑container (and the same 1°/container/on roles for primary/secondary/tertiary/surface). (developer.android.com)
  • M3 does not ship built‑in success/warning/danger (named “success”/“warning”/“danger”) token families in the core spec; implementers create those semantic families following the same pattern as Error (e.g., success, on‑success, success‑container, on‑success‑container; warning, on‑warning, warning‑container, on‑warning‑container). Many design systems and M3 implementations follow that convention. (designbusan.ai.kr)

Recommended token set (follow M3 naming/roles)

  • {role} — filled/strong color (e.g., success / warning / danger).
  • on-{role} — content color placed on {role}.
  • {role}-container — softer background/container variant.
  • on-{role}-container — content color on the container variant.

Usage rules (brief)

  • Use the filled token for badges, icons, filled buttons and high‑attention UI.
  • Use the container token for backgrounds, toasts, panels, input borders.
  • Always provide matching on‑ tokens to guarantee accessible contrast. Follow the same contrast and accessibility rules used by M3 for Error tokens. (developer.android.com)

If you want, I can:

  • generate a concrete 4‑token set (hex values) for success/warning/danger that follows M3 contrast guidance, or
  • produce CSS/SCSS variable names and examples for using them in light/dark modes.

Citations:


🌐 Web query:

Android Material Design color system tonal palette semantic colors

💡 Result:

Summary — Material (Android) color system: tonal palettes & semantic colors

  • Tonal palettes: Material 3 (Material You) expands each key color into a tonal palette of 13 tones (tones are lightness/ luminance steps generated using HCT/CAM-based utilities). The system uses five key tonal palettes (accent1/2/3, neutral1/2), producing 5 × 13 = 65 tonal values used across the UI. [1][2]

  • Key colors → roles: The five key palettes correspond to the core accents and neutrals (primary, secondary, tertiary, neutral, neutral-variant). Components pick specific tones from those palettes (e.g., primary/primaryContainer, surface roles) rather than fixed hex values, which enables accessible light/dark variants and dynamic theming. [1][2]

  • Semantic colors: Semantic (role) colors are color tokens with specific meaning (Error, OnPrimary, Surface, etc.). They are derived from tonal palettes (selected tones) so semantic roles maintain contrast and accessibility automatically; apps can also define custom semantic colors and harmonize them with dynamic palettes. [1][3]

  • Dynamic color & generation: On Android (Material You), a single source color (wallpaper or chosen color) is converted by Material Color Utilities into the five tonal palettes with specified hue/chroma modifications; Android exposes theme APIs (65 color attributes) and Theme Builder/Material Theme Builder tools to generate tokens for Compose/Views. [2][3]

Sources

  • Android Developers — Material 3 / Color scheme & dynamic color. [1]
  • Android Developers — Android color system (HCT, tonal palettes, semantic/surface roles). [2]
  • Android Open Source Project — Material You dynamic color / tonal palette generation (accent1–3, neutral1–2 → 13 tones each = 65 colors). [3]

Would you like examples (palette tone numbers, sample hex outputs, or Compose code showing colorScheme usage)?


🌐 Web query:

Material Design 3 tonal palette 13 tones color tokens structure

💡 Result:

Summary — Material Design 3 (M3) tonal palette & token structure

  • Tonal palettes: M3 generates a tonal palette for each key color. There are six palettes used by the system: primary, secondary, tertiary, error, neutral, and neutral-variant. Each tonal palette contains 13 tones. [1][2]

  • The 13 tones (named by “tone” / lightness) are: 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 95, 99, 100 (0 = black, 100 = white). [2][4]

  • Color tokens (semantic roles) pick specific tones from the appropriate tonal palette. Common mappings (light mode) — examples:

    • primary = Primary40; onPrimary = Primary100; primaryContainer = Primary90; onPrimaryContainer = Primary10.
    • secondary = Secondary40; onSecondary = Secondary100; secondaryContainer = Secondary90; onSecondaryContainer = Secondary10.
    • tertiary = Tertiary40; onTertiary = Tertiary100; tertiaryContainer = Tertiary90; onTertiaryContainer = Tertiary10.
    • error = Error40; onError = Error100; errorContainer = Error90; onErrorContainer = Error10.
    • background = Neutral99; onBackground = Neutral10; surface = Neutral99; onSurface = Neutral10.
    • surfaceVariant = NeutralVariant90; onSurfaceVariant = NeutralVariant30; outline = NeutralVariant50. [1][3]
  • Light vs dark: the same tonal palettes are used for both modes but the token-to-tone assignments change (e.g., primary uses a darker mid-tone in light mode and a lighter mid-tone in dark mode), so components pick different tones per mode while staying within the same palette. [1][2]

Sources

  • Material 3 in Compose / Color scheme overview — Android Developers. [1]
  • Dynamic color / tonal palettes (Android Open Source Project). [2]
  • Practical token→tone mappings and tone list (M3 specification/examples). [3][4]

🌐 Web query:

Android material-color-utilities tonal palette generation levels

💡 Result:

Short answer — how levels work:

  • material-color-utilities (TonalPalette) generates colors by HCT tone values in the range 0–100 (tone = lightness). The API accepts a tone (0..100) to produce an ARGB color. [1]

  • Material You / Material 3 expands a single seed into five tonal palettes (accent1/2/3, neutral1/2). Each tonal palette contains 13 named levels (the Material/Android palette “stops”). Android’s dynamic-color resource set exposes 13 entries per palette; the platform documentation shows these indices and mapping conventions. [2][5]

  • Note about scales/units: Material tonal tones are 0..100 (0 = black, 100 = white). Android’s resource indices for dynamic palettes are often expressed as 0, 10, 50, 100, 200, ... 900, 1000 (Android historically uses 0..1000 ordering), so client code/platform maps between the two representations when generating resources. [2][3]

References

  • TonalPalette (material-color-utilities) docs. [1]
  • Android / Material You dynamic color & tonal-palette description (13 colors per palette; indices). [2]
  • Chromium note on Material tonal scale vs Android 0..1000 scale. [3]

Material Design 3 시맨틱 컬러 패턴을 따르지 않습니다.

Material Design 3 표준에서는 시맨틱 컬러(Success, Warning, Danger)를 다음과 같이 정의해야 합니다:

  • {role} (filled color)
  • on-{role} (content color on filled background)
  • {role}-container (soft background variant)
  • on-{role}-container (content color on container)

현재 구현은 success100, success300 등의 5단계 인덱스 방식을 사용하고 있어, 필수적인 on-success, success-container, on-success-container 역할이 누락되어 있습니다. 이는 접근성 대비 보장과 컴포넌트 테마 일관성에 영향을 미칩니다. M3 의미론적 컬러 구조를 따르도록 수정하세요.

🤖 Prompt for AI Agents
In presentation/src/main/res/values-night/colors.xml around lines 41-59, the
file uses numeric shade tokens (success100/300/500/700/900 etc.) instead of
Material 3 semantic color roles; replace those groups with the M3 semantic
entries for each role: {role} (filled), on-{role} (content on filled),
{role}-container (container/background), and on-{role}-container (content on
container). For success, warning, and danger add lines defining success,
on-success, success-container, on-success-container; warning, on-warning,
warning-container, on-warning-container; danger, on-danger, danger-container,
on-danger-container, using colors that preserve the current visual palette (map
existing hexes to the closest semantic roles) and ensure on-* colors meet
contrast requirements (e.g., use white or dark text as appropriate). Keep or
move the numeric shade values into a separate legacy token section if you need
them for components, but ensure all components are switched to the new semantic
names.




</resources>
3 changes: 3 additions & 0 deletions presentation/src/main/res/values-night/themes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@
<style name="Base.Theme.UMCProduct" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your dark theme here. -->
<!-- <item name="colorPrimary">@color/my_dark_primary</item> -->

</style>

<style name="Theme.UMCProduct" parent="Base.Theme.UMCProduct" />
</resources>
8 changes: 8 additions & 0 deletions presentation/src/main/res/values/attrs.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="colorBackgroundSemantic" format="color"/>
<attr name="colorBorderSemantic" format="color"/>
<attr name="colorTextPrimarySemantic" format="color"/>
<attr name="colorTextSecondarySemantic" format="color"/>
<attr name="colorTextDisablePlaceholderSemantic" format="color"/>
</resources>
57 changes: 57 additions & 0 deletions presentation/src/main/res/values/colors.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,61 @@
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>


<color name="primary100">#EBEFFF</color>
<color name="primary200">#CCD6FF</color>
<color name="primary300">#99ABFF</color>
<color name="primary400">#6683FF</color>
<color name="primary500">#4869F0</color>
<color name="primary600">#3A5AD9</color>
<color name="primary700">#324BB9</color>
<color name="primary800">#26398C</color>
<color name="primary900">#1D2C6C</color>


<color name="accent100">#FFF0E5</color>
<color name="accent200">#FFD1B2</color>
<color name="accent300">#FFA870</color>
<color name="accent400">#FF7F2D</color>
<color name="accent500">#FF6400</color>
<color name="accent600">#E85A00</color>
<color name="accent700">#CC5000</color>
<color name="accent800">#A34000</color>
<color name="accent900">#7A3000</color>


<color name="neutral000">#FFFFFF</color>
<color name="neutral100">#F4F5F7</color>
<color name="neutral200">#E7E8EA</color>
<color name="neutral300">#CDD1D5</color>
<color name="neutral400">#B2B8BF</color>
<color name="neutral500">#8A949E</color>
<color name="neutral600">#6D7882</color>
<color name="neutral700">#464C54</color>
<color name="neutral800">#34363E</color>
<color name="neutral900">#1F2124</color>


<color name="success100">#DDF8EF</color>
<color name="success300">#8FE0C8</color>
<color name="success500">#0CA678</color>
<color name="success700">#087C5B</color>
<color name="success900">#055741</color>


<color name="warning100">#FFF7D1</color>
<color name="warning300">#FFD180</color>
<color name="warning500">#FFA500</color>
<color name="warning700">#C97F00</color>
<color name="warning900">#A36800</color>


<color name="danger100">#FDECEC</color>
<color name="danger300">#F29B9B</color>
<color name="danger500">#E03131</color>
<color name="danger700">#A82424</color>
<color name="danger900">#751A1A</color>


</resources>
6 changes: 6 additions & 0 deletions presentation/src/main/res/values/themes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
<style name="Base.Theme.UMCProduct" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your light theme here. -->
<!-- <item name="colorPrimary">@color/my_light_primary</item> -->
<item name="colorBackgroundSemantic">@color/neutral100</item>
<item name="colorBorderSemantic">@color/neutral200</item>
<item name="colorTextPrimarySemantic">@color/neutral800</item>
<item name="colorTextSecondarySemantic">@color/neutral600</item>
<item name="colorTextDisablePlaceholderSemantic">@color/neutral400</item>

</style>

<style name="Theme.UMCProduct" parent="Base.Theme.UMCProduct" />
Expand Down
160 changes: 160 additions & 0 deletions presentation/src/main/res/values/typography.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>

<style name="LargeTitle">
<item name="android:textSize">34sp</item>
<item name="lineHeight">41sp</item>
<item name="android:fontFamily">@font/pretendard_regular</item>
<item name="android:letterSpacing">0.01</item>
</style>

<style name="Title1">
<item name="android:textSize">28sp</item>
<item name="lineHeight">34sp</item>
<item name="android:fontFamily">@font/pretendard_regular</item>
<item name="android:letterSpacing">0.01</item>
</style>

<style name="Title2">
<item name="android:textSize">22sp</item>
<item name="lineHeight">28sp</item>
<item name="android:fontFamily">@font/pretendard_regular</item>
<item name="android:letterSpacing">0.015</item>
</style>

<style name="Title3">
<item name="android:textSize">20sp</item>
<item name="lineHeight">25sp</item>
<item name="android:fontFamily">@font/pretendard_regular</item>
<item name="android:letterSpacing">0.019</item>
</style>

<style name="Headline">
<item name="android:textSize">17sp</item>
<item name="lineHeight">22sp</item>
<item name="android:fontFamily">@font/pretendard_regular</item>
<item name="android:letterSpacing">-0.02</item>
</style>

<style name="Body">
<item name="android:textSize">17sp</item>
<item name="lineHeight">21sp</item>
<item name="android:fontFamily">@font/pretendard_regular</item>
<item name="android:letterSpacing">-0.02</item>
</style>

<style name="Callout">
<item name="android:textSize">16sp</item>
<item name="lineHeight">21sp</item>
<item name="android:fontFamily">@font/pretendard_regular</item>
<item name="android:letterSpacing">-0.02</item>
</style>

<style name="Subheadline">
<item name="android:textSize">15sp</item>
<item name="lineHeight">20sp</item>
<item name="android:fontFamily">@font/pretendard_regular</item>
<item name="android:letterSpacing">-0.0016</item>
</style>

<style name="Footnote">
<item name="android:textSize">13sp</item>
<item name="lineHeight">18sp</item>
<item name="android:fontFamily">@font/pretendard_regular</item>
<item name="android:letterSpacing">-0.006</item>
</style>

<style name="Caption1">
<item name="android:textSize">12sp</item>
<item name="lineHeight">16sp</item>
<item name="android:fontFamily">@font/pretendard_regular</item>
<item name="android:letterSpacing">0</item>
</style>

<style name="Caption2">
<item name="android:textSize">11sp</item>
<item name="lineHeight">13sp</item>
<item name="android:fontFamily">@font/pretendard_regular</item>
<item name="android:letterSpacing">0.0005</item>
</style>



<style name="LargeTitleBold">
<item name="android:textSize">34sp</item>
<item name="lineHeight">41sp</item>
<item name="android:fontFamily">@font/pretendard_bold</item>
<item name="android:letterSpacing">0.01</item>
</style>

<style name="Title1Bold">
<item name="android:textSize">28sp</item>
<item name="lineHeight">34sp</item>
<item name="android:fontFamily">@font/pretendard_bold</item>
<item name="android:letterSpacing">0.01</item>
</style>

<style name="Title2Bold">
<item name="android:textSize">22sp</item>
<item name="lineHeight">28sp</item>
<item name="android:fontFamily">@font/pretendard_bold</item>
<item name="android:letterSpacing">0.015</item>
</style>

<style name="Title3Bold">
<item name="android:textSize">20sp</item>
<item name="lineHeight">25sp</item>
<item name="android:fontFamily">@font/pretendard_bold</item>
<item name="android:letterSpacing">0.019</item>
</style>

<style name="HeadlineBold">
<item name="android:textSize">17sp</item>
<item name="lineHeight">22sp</item>
<item name="android:fontFamily">@font/pretendard_bold</item>
<item name="android:letterSpacing">-0.02</item>
</style>

<style name="BodyBold">
<item name="android:textSize">17sp</item>
<item name="lineHeight">21sp</item>
<item name="android:fontFamily">@font/pretendard_bold</item>
<item name="android:letterSpacing">-0.02</item>
</style>

<style name="CalloutBold">
<item name="android:textSize">16sp</item>
<item name="lineHeight">21sp</item>
<item name="android:fontFamily">@font/pretendard_bold</item>
<item name="android:letterSpacing">-0.02</item>
</style>

<style name="SubheadlineBold">
<item name="android:textSize">15sp</item>
<item name="lineHeight">20sp</item>
<item name="android:fontFamily">@font/pretendard_bold</item>
<item name="android:letterSpacing">-0.0016</item>
</style>

<style name="FootnoteBold">
<item name="android:textSize">13sp</item>
<item name="lineHeight">18sp</item>
<item name="android:fontFamily">@font/pretendard_bold</item>
<item name="android:letterSpacing">-0.006</item>
</style>

<style name="Caption1Bold">
<item name="android:textSize">12sp</item>
<item name="lineHeight">16sp</item>
<item name="android:fontFamily">@font/pretendard_bold</item>
<item name="android:letterSpacing">0</item>
</style>

<style name="Caption2Bold">
<item name="android:textSize">11sp</item>
<item name="lineHeight">13sp</item>
<item name="android:fontFamily">@font/pretendard_bold</item>
<item name="android:letterSpacing">0.0005</item>
</style>

</resources>