diff --git a/Projects/UI/DesignSystem/Demo/DesignSystemDemoApp.swift b/Projects/UI/DesignSystem/Demo/DesignSystemDemoApp.swift
new file mode 100644
index 0000000..5a2c24e
--- /dev/null
+++ b/Projects/UI/DesignSystem/Demo/DesignSystemDemoApp.swift
@@ -0,0 +1,22 @@
+//
+// DesignSystemDemoApp.swift
+// DesignSystem
+//
+// Created by Seoyeon Choi on 11/25/25.
+// Copyright © 2025 kr.websoso.app. All rights reserved.
+//
+
+import SwiftUI
+import DesignSystem
+
+@main
+struct DesignSystemDemoApp: App {
+ init() {
+ DesignSystemFontFamily.registerAllCustomFonts()
+ }
+ var body: some Scene {
+ WindowGroup {
+ WSSFontDemoView()
+ }
+ }
+}
diff --git a/Projects/UI/DesignSystem/Demo/WSSFontDemoView.swift b/Projects/UI/DesignSystem/Demo/WSSFontDemoView.swift
new file mode 100644
index 0000000..eaa9f34
--- /dev/null
+++ b/Projects/UI/DesignSystem/Demo/WSSFontDemoView.swift
@@ -0,0 +1,33 @@
+//
+// WSSFontDemoView.swift
+// DesignSystem
+//
+// Created by Seoyeon Choi on 11/25/25.
+// Copyright © 2025 kr.websoso.app. All rights reserved.
+//
+
+import SwiftUI
+import DesignSystem
+
+struct WSSFontDemoView: View {
+ var body: some View {
+ VStack {
+ Text("제목입니다 제목이라구요 제목이야 이게 제목이라고")
+ .applyWSSFont(.headline1)
+ .border(DesignSystemAsset.Colors.wssPrimary100.swiftUIColor)
+
+ Text("마법학교 마법사로 살아가는 법마법학교 마법사로 살아가는 법마법학교 마법사로 살아가는 법")
+ .applyWSSFont(.title3)
+ .border(DesignSystemAsset.Colors.wssPrimary100.swiftUIColor)
+
+ Text("대학원생이 환생에서 대학원생이 됨. 주인공 완전 갓갓! 일단 작가가 세계관이나 마법에 대해서 진지하게 생각해보고설정을 짠게 느껴져서 좋아요. 요즘 하도 라이트하고 가짜 마법물이 많아서 ㅠ 찐 성장+마법물!!글고 일단 작가님 필력이 무난하게 잘뽑으시고 연재도 빠르")
+ .applyWSSFont(.body2)
+ .border(DesignSystemAsset.Colors.wssPrimary100.swiftUIColor)
+ }
+ .padding(40)
+ }
+}
+
+#Preview {
+ WSSFontDemoView()
+}
diff --git a/Projects/UI/DesignSystem/Project.swift b/Projects/UI/DesignSystem/Project.swift
new file mode 100644
index 0000000..6359147
--- /dev/null
+++ b/Projects/UI/DesignSystem/Project.swift
@@ -0,0 +1,15 @@
+//
+// Project.swift
+// Manifests
+//
+// Created by Seoyeon Choi on 11/25/25.
+//
+
+import ProjectDescription
+import ProjectDescriptionHelpers
+import DependencyPlugin
+
+let project = Project.createUIModule(
+ name: ModuleType.UI.designSystem.name,
+ targets: [.sources, .demo, .tests]
+)
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/blBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/blBlock.colorset/Contents.json
new file mode 100644
index 0000000..a0729d9
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/blBlock.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xFD",
+ "green" : "0xFA",
+ "red" : "0xF0"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/dramaBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/dramaBlock.colorset/Contents.json
new file mode 100644
index 0000000..9b92188
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/dramaBlock.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xF7",
+ "green" : "0xF0",
+ "red" : "0xEE"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/fantasyBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/fantasyBlock.colorset/Contents.json
new file mode 100644
index 0000000..a2226b1
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/fantasyBlock.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xFF",
+ "green" : "0xF1",
+ "red" : "0xF0"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/lightBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/lightBlock.colorset/Contents.json
new file mode 100644
index 0000000..d492966
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/lightBlock.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xD6",
+ "green" : "0xF3",
+ "red" : "0xEF"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/modernBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/modernBlock.colorset/Contents.json
new file mode 100644
index 0000000..82936be
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/modernBlock.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xFF",
+ "green" : "0xF2",
+ "red" : "0xE9"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/mysteryBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/mysteryBlock.colorset/Contents.json
new file mode 100644
index 0000000..2e28cbe
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/mysteryBlock.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xF2",
+ "green" : "0xE6",
+ "red" : "0xF2"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/rofanBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/rofanBlock.colorset/Contents.json
new file mode 100644
index 0000000..a952c4a
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/rofanBlock.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xE9",
+ "green" : "0xEB",
+ "red" : "0xF9"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/romanceBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/romanceBlock.colorset/Contents.json
new file mode 100644
index 0000000..898c382
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/romanceBlock.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xFC",
+ "green" : "0xF5",
+ "red" : "0xFF"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/wuxiaBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/wuxiaBlock.colorset/Contents.json
new file mode 100644
index 0000000..83c6190
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/wuxiaBlock.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xE3",
+ "green" : "0xF2",
+ "red" : "0xFD"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/blLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/blLink.colorset/Contents.json
new file mode 100644
index 0000000..b776d04
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/blLink.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xFF",
+ "green" : "0xA6",
+ "red" : "0x21"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/dramaLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/dramaLink.colorset/Contents.json
new file mode 100644
index 0000000..e9d58ef
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/dramaLink.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xA0",
+ "green" : "0x78",
+ "red" : "0x5D"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/fantasyLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/fantasyLink.colorset/Contents.json
new file mode 100644
index 0000000..a27acb3
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/fantasyLink.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xFC",
+ "green" : "0x57",
+ "red" : "0x64"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/lightLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/lightLink.colorset/Contents.json
new file mode 100644
index 0000000..e747a2b
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/lightLink.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0x3B",
+ "green" : "0xC2",
+ "red" : "0xAE"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/modernLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/modernLink.colorset/Contents.json
new file mode 100644
index 0000000..4fee6f9
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/modernLink.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xF7",
+ "green" : "0x67",
+ "red" : "0x47"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/mysteryLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/mysteryLink.colorset/Contents.json
new file mode 100644
index 0000000..624b910
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/mysteryLink.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xBF",
+ "green" : "0x60",
+ "red" : "0x95"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/rofanLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/rofanLink.colorset/Contents.json
new file mode 100644
index 0000000..f087969
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/rofanLink.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0x58",
+ "green" : "0x2F",
+ "red" : "0xB7"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/romanceLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/romanceLink.colorset/Contents.json
new file mode 100644
index 0000000..6381a81
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/romanceLink.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xCA",
+ "green" : "0x86",
+ "red" : "0xE5"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/wuxiaLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/wuxiaLink.colorset/Contents.json
new file mode 100644
index 0000000..ac49558
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/wuxiaLink.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0x6E",
+ "green" : "0x89",
+ "red" : "0xB8"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack.colorset/Contents.json
new file mode 100644
index 0000000..90f961c
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0x18",
+ "green" : "0x11",
+ "red" : "0x11"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack60.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack60.colorset/Contents.json
new file mode 100644
index 0000000..79f8eea
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack60.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "0.600",
+ "blue" : "0x00",
+ "green" : "0x00",
+ "red" : "0x00"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray100.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray100.colorset/Contents.json
new file mode 100644
index 0000000..6c7dad2
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray100.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xD1",
+ "green" : "0xCB",
+ "red" : "0xCB"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray20.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray20.colorset/Contents.json
new file mode 100644
index 0000000..7d23684
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray20.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xFA",
+ "green" : "0xFA",
+ "red" : "0xFA"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray200.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray200.colorset/Contents.json
new file mode 100644
index 0000000..6f0961a
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray200.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0x99",
+ "green" : "0x93",
+ "red" : "0x94"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray300.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray300.colorset/Contents.json
new file mode 100644
index 0000000..9e84e08
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray300.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0x5F",
+ "green" : "0x51",
+ "red" : "0x52"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray50.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray50.colorset/Contents.json
new file mode 100644
index 0000000..277b0f4
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray50.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xF8",
+ "green" : "0xF5",
+ "red" : "0xF4"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray70.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray70.colorset/Contents.json
new file mode 100644
index 0000000..fd9b89a
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray70.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xE3",
+ "green" : "0xDF",
+ "red" : "0xDF"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGrayToast.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGrayToast.colorset/Contents.json
new file mode 100644
index 0000000..68f5a2e
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGrayToast.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0x58",
+ "green" : "0x42",
+ "red" : "0x39"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary100.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary100.colorset/Contents.json
new file mode 100644
index 0000000..384d6ba
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary100.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xFD",
+ "green" : "0x5D",
+ "red" : "0x6A"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary20.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary20.colorset/Contents.json
new file mode 100644
index 0000000..59e6bde
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary20.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xFF",
+ "green" : "0xF7",
+ "red" : "0xF5"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary200.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary200.colorset/Contents.json
new file mode 100644
index 0000000..01e5d35
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary200.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0x91",
+ "green" : "0x09",
+ "red" : "0x24"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary50.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary50.colorset/Contents.json
new file mode 100644
index 0000000..19be8c9
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary50.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xFF",
+ "green" : "0xEF",
+ "red" : "0xF1"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssSecondary100.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssSecondary100.colorset/Contents.json
new file mode 100644
index 0000000..1179db5
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssSecondary100.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0x5D",
+ "green" : "0x67",
+ "red" : "0xFF"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssWhite.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssWhite.colorset/Contents.json
new file mode 100644
index 0000000..2d196a2
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssWhite.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+ "colors" : [
+ {
+ "color" : {
+ "color-space" : "extended-srgb",
+ "components" : {
+ "alpha" : "1.000",
+ "blue" : "0xFF",
+ "green" : "0xFF",
+ "red" : "0xFF"
+ }
+ },
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Bold.otf b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Bold.otf
new file mode 100644
index 0000000..8e5e30a
Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Bold.otf differ
diff --git a/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Medium.otf b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Medium.otf
new file mode 100644
index 0000000..0575069
Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Medium.otf differ
diff --git a/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Regular.otf b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Regular.otf
new file mode 100644
index 0000000..08bf4cf
Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Regular.otf differ
diff --git a/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-SemiBold.otf b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-SemiBold.otf
new file mode 100644
index 0000000..e7e36ab
Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-SemiBold.otf differ
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/Contents.json
new file mode 100644
index 0000000..20fe1ac
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "icAnnouncement.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/icAnnouncement.svg b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/icAnnouncement.svg
new file mode 100644
index 0000000..dc320fd
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/icAnnouncement.svg
@@ -0,0 +1,3 @@
+
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/Contents.json
new file mode 100644
index 0000000..77c4037
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "icCommasFinished.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/icCommasFinished.svg b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/icCommasFinished.svg
new file mode 100644
index 0000000..007bc4c
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/icCommasFinished.svg
@@ -0,0 +1,3 @@
+
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/Contents.json
new file mode 100644
index 0000000..a7c9805
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "icCommasStarted.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/icCommasStarted.svg b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/icCommasStarted.svg
new file mode 100644
index 0000000..ddcd227
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/icCommasStarted.svg
@@ -0,0 +1,3 @@
+
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/Contents.json
new file mode 100644
index 0000000..c87e539
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "icTextHot.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/icTextHot.svg b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/icTextHot.svg
new file mode 100644
index 0000000..3d60cd3
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/icTextHot.svg
@@ -0,0 +1,5 @@
+
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/Contents.json
new file mode 100644
index 0000000..036d668
--- /dev/null
+++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "imgLogoType.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "imgLogoType@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "imgLogoType@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType.png b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType.png
new file mode 100644
index 0000000..dfd6d2c
Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType.png differ
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@2x.png b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@2x.png
new file mode 100644
index 0000000..3af8dfb
Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@2x.png differ
diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@3x.png b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@3x.png
new file mode 100644
index 0000000..ed9ddf5
Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@3x.png differ
diff --git a/Projects/UI/DesignSystem/Sources/Extensions/UIScreenScaling.swift b/Projects/UI/DesignSystem/Sources/Extensions/UIScreenScaling.swift
new file mode 100644
index 0000000..bfe7a02
--- /dev/null
+++ b/Projects/UI/DesignSystem/Sources/Extensions/UIScreenScaling.swift
@@ -0,0 +1,44 @@
+//
+// UIScreenScaling.swift
+// DesignSystem
+//
+// Created by Seoyeon Choi on 12/8/25.
+// Copyright © 2025 kr.websoso.app. All rights reserved.
+//
+
+import Foundation
+import UIKit
+
+extension CGFloat {
+ var adjustedWidth: CGFloat {
+ let ratio: CGFloat = UIScreen.main.bounds.width / 375
+ return self * ratio
+ }
+
+ var adjustedHeight: CGFloat {
+ let ratio: CGFloat = UIScreen.main.bounds.height / 812
+ return self * ratio
+ }
+}
+
+extension Double {
+ var adjustedWidth: Double {
+ let ratio: Double = Double(UIScreen.main.bounds.width / 375)
+ return self * ratio
+ }
+
+ var adjustedHeight: Double {
+ let ratio: Double = Double(UIScreen.main.bounds.height / 812)
+ return self * ratio
+ }
+}
+
+extension Int {
+ var adjustedWidth: CGFloat {
+ return CGFloat(self).adjustedWidth
+ }
+
+ var adjustedHeight: CGFloat {
+ return CGFloat(self).adjustedHeight
+ }
+}
diff --git a/Projects/UI/DesignSystem/Sources/Font/View+applyWSSFont.swift b/Projects/UI/DesignSystem/Sources/Font/View+applyWSSFont.swift
new file mode 100644
index 0000000..b0f399b
--- /dev/null
+++ b/Projects/UI/DesignSystem/Sources/Font/View+applyWSSFont.swift
@@ -0,0 +1,22 @@
+//
+// View+applyWSSFont.swift
+// DesignSystem
+//
+// Created by Seoyeon Choi on 11/25/25.
+// Copyright © 2025 kr.websoso.app. All rights reserved.
+//
+
+import UIKit
+import SwiftUI
+
+extension View {
+ public func applyWSSFont(_ style: WSSFontStyle) -> some View {
+ modifier(
+ WSSFontViewModifier(
+ uiFont: style.uiFontGuide(),
+ lineHeight: style.defaultFontSize * style.lineHeight,
+ letterSpacing: style.letterSpacing
+ )
+ )
+ }
+}
diff --git a/Projects/UI/DesignSystem/Sources/Font/WSSFontStyle.swift b/Projects/UI/DesignSystem/Sources/Font/WSSFontStyle.swift
new file mode 100644
index 0000000..a52e15a
--- /dev/null
+++ b/Projects/UI/DesignSystem/Sources/Font/WSSFontStyle.swift
@@ -0,0 +1,143 @@
+//
+// WSSFontStyle.swift
+// DesignSystem
+//
+// Created by Seoyeon Choi on 11/25/25.
+// Copyright © 2025 kr.websoso.app. All rights reserved.
+//
+
+import SwiftUI
+
+public enum WSSFontStyle {
+ case headline1
+
+ case title1
+ case title2
+ case title3
+
+ case body1
+ case body2
+ case body3
+ case body4
+ case body4_2
+ case body5
+ case body5_2
+
+ case label1
+ case label2
+}
+
+public extension WSSFontStyle {
+ var fontName: DesignSystemFontConvertible {
+ switch self {
+ case .headline1:
+ return DesignSystemFontFamily.Pretendard.bold
+
+ case .title1:
+ return DesignSystemFontFamily.Pretendard.bold
+ case .title2:
+ return DesignSystemFontFamily.Pretendard.semiBold
+ case .title3:
+ return DesignSystemFontFamily.Pretendard.medium
+
+ case .body1:
+ return DesignSystemFontFamily.Pretendard.regular
+ case .body2:
+ return DesignSystemFontFamily.Pretendard.regular
+ case .body3:
+ return DesignSystemFontFamily.Pretendard.regular
+ case .body4:
+ return DesignSystemFontFamily.Pretendard.medium
+ case .body4_2:
+ return DesignSystemFontFamily.Pretendard.regular
+ case .body5:
+ return DesignSystemFontFamily.Pretendard.regular
+ case .body5_2:
+ return DesignSystemFontFamily.Pretendard.medium
+
+ case .label1:
+ return DesignSystemFontFamily.Pretendard.medium
+ case .label2:
+ return DesignSystemFontFamily.Pretendard.medium
+ }
+ }
+}
+
+extension WSSFontStyle {
+ private static let scaleRatio: CGFloat = max(1.adjustedHeight, 1.adjustedWidth)
+
+ var defaultFontSize: CGFloat {
+ switch self {
+ case .headline1: 20
+
+ case .title1: 18
+ case .title2: 16
+ case .title3: 14
+
+ case .body1: 17
+ case .body2: 15
+ case .body3: 14
+ case .body4: 13
+ case .body4_2: 13
+ case .body5: 12
+ case .body5_2: 12
+
+ case .label1: 13
+ case .label2: 10
+ }
+ }
+
+ private var adjustedSize: CGFloat {
+ return defaultFontSize * WSSFontStyle.scaleRatio
+ }
+
+ func uiFontGuide() -> UIFont {
+ switch self {
+ default: return UIFont(name: self.fontName.name, size: self.adjustedSize)!
+ }
+ }
+}
+
+extension WSSFontStyle {
+ var letterSpacing: CGFloat {
+ switch self {
+ case .headline1: -0.6
+
+ case .title1: -0.6
+ case .title2: -0.6
+ case .title3: -0.6
+
+ case .body1: -0.6
+ case .body2: -0.6
+ case .body3: -0.4
+ case .body4: -0.4
+ case .body4_2: -0.4
+ case .body5: 0
+ case .body5_2: 0
+
+ case .label1: -0.4
+ case .label2: 0
+ }
+ }
+
+ var lineHeight: CGFloat {
+ switch self {
+ case .headline1: return 1.4
+
+ case .title1: return 1.4
+ case .title2: return 1.4
+ case .title3: return 1.5
+
+ case .body1: return 1.4
+ case .body2: return 1.5
+ case .body3: return 1.5
+ case .body4: return 1.45
+ case .body4_2: return 1.45
+ case .body5: return 1.45
+ case .body5_2: return 1.45
+
+ case .label1: return 1.45
+ case .label2: return 1.0
+ }
+ }
+}
diff --git a/Projects/UI/DesignSystem/Sources/Font/WSSFontViewModifier.swift b/Projects/UI/DesignSystem/Sources/Font/WSSFontViewModifier.swift
new file mode 100644
index 0000000..8754e79
--- /dev/null
+++ b/Projects/UI/DesignSystem/Sources/Font/WSSFontViewModifier.swift
@@ -0,0 +1,24 @@
+//
+// WSSFontViewModifier.swift
+// DesignSystem
+//
+// Created by Seoyeon Choi on 12/8/25.
+// Copyright © 2025 kr.websoso.app. All rights reserved.
+//
+
+import SwiftUI
+import UIKit
+
+struct WSSFontViewModifier: ViewModifier {
+ let uiFont: UIFont
+ let lineHeight: CGFloat
+ let letterSpacing: CGFloat
+
+ func body(content: Content) -> some View {
+ return content
+ .font(Font(uiFont))
+ .lineSpacing(lineHeight - uiFont.lineHeight)
+ .kerning(letterSpacing)
+ .padding(.vertical, (lineHeight - uiFont.lineHeight) / 2)
+ }
+}
diff --git a/Projects/UI/DesignSystem/Tests/Tests.swift b/Projects/UI/DesignSystem/Tests/Tests.swift
new file mode 100644
index 0000000..e9b75c0
--- /dev/null
+++ b/Projects/UI/DesignSystem/Tests/Tests.swift
@@ -0,0 +1,7 @@
+//
+// Tests.swift
+// Manifests
+//
+// Created by Seoyeon Choi on 11/25/25.
+//
+
diff --git a/Projects/UI/WSSComponent/Demo/Demo.swift b/Projects/UI/WSSComponent/Demo/Demo.swift
new file mode 100644
index 0000000..680181e
--- /dev/null
+++ b/Projects/UI/WSSComponent/Demo/Demo.swift
@@ -0,0 +1,7 @@
+//
+// Demo.swift
+// Manifests
+//
+// Created by Seoyeon Choi on 11/25/25.
+//
+
diff --git a/Projects/UI/WSSComponent/Project.swift b/Projects/UI/WSSComponent/Project.swift
new file mode 100644
index 0000000..d18fb52
--- /dev/null
+++ b/Projects/UI/WSSComponent/Project.swift
@@ -0,0 +1,15 @@
+//
+// Project.swift
+// Manifests
+//
+// Created by Seoyeon Choi on 11/25/25.
+//
+
+import ProjectDescription
+import ProjectDescriptionHelpers
+import DependencyPlugin
+
+let project = Project.createUIModule(
+ name: ModuleType.UI.wssComponent.name,
+ targets: [.sources, .demo, .tests]
+)
diff --git a/Projects/UI/WSSComponent/Sources/Sources.swift b/Projects/UI/WSSComponent/Sources/Sources.swift
new file mode 100644
index 0000000..a8c667c
--- /dev/null
+++ b/Projects/UI/WSSComponent/Sources/Sources.swift
@@ -0,0 +1,7 @@
+//
+// Sources.swift
+// Manifests
+//
+// Created by Seoyeon Choi on 11/25/25.
+//
+
diff --git a/Projects/UI/WSSComponent/Tests/Tests.swift b/Projects/UI/WSSComponent/Tests/Tests.swift
new file mode 100644
index 0000000..e9b75c0
--- /dev/null
+++ b/Projects/UI/WSSComponent/Tests/Tests.swift
@@ -0,0 +1,7 @@
+//
+// Tests.swift
+// Manifests
+//
+// Created by Seoyeon Choi on 11/25/25.
+//
+