From b39e37ca28a3f8d58641d12498470c63b6b847f2 Mon Sep 17 00:00:00 2001 From: xiaomai Date: Thu, 30 Apr 2026 13:52:44 +0800 Subject: [PATCH] feat(ui): overhaul frontend design system and layout Introduce reusable UI components (AppShell, EntityCard, PageHeader) Implement Pokemon-themed CSS variables and responsive grids Refactor all views to adopt the new component structure --- DesignGuidelines.html | 4142 +++++++++++++++++++++ frontend/public/types/1.png | Bin 0 -> 2362 bytes frontend/public/types/10.png | Bin 0 -> 1446 bytes frontend/public/types/11.png | Bin 0 -> 2053 bytes frontend/public/types/12.png | Bin 0 -> 3026 bytes frontend/public/types/13.png | Bin 0 -> 2204 bytes frontend/public/types/14.png | Bin 0 -> 2413 bytes frontend/public/types/15.png | Bin 0 -> 1422 bytes frontend/public/types/16.png | Bin 0 -> 2542 bytes frontend/public/types/17.png | Bin 0 -> 2171 bytes frontend/public/types/18.png | Bin 0 -> 2037 bytes frontend/public/types/19.png | Bin 0 -> 11060 bytes frontend/public/types/2.png | Bin 0 -> 2357 bytes frontend/public/types/3.png | Bin 0 -> 1858 bytes frontend/public/types/4.png | Bin 0 -> 2601 bytes frontend/public/types/5.png | Bin 0 -> 2534 bytes frontend/public/types/6.png | Bin 0 -> 1949 bytes frontend/public/types/7.png | Bin 0 -> 1998 bytes frontend/public/types/8.png | Bin 0 -> 2147 bytes frontend/public/types/9.png | Bin 0 -> 1757 bytes frontend/public/types/small/1.png | Bin 0 -> 1485 bytes frontend/public/types/small/10.png | Bin 0 -> 1326 bytes frontend/public/types/small/11.png | Bin 0 -> 1206 bytes frontend/public/types/small/12.png | Bin 0 -> 1614 bytes frontend/public/types/small/13.png | Bin 0 -> 1132 bytes frontend/public/types/small/14.png | Bin 0 -> 1368 bytes frontend/public/types/small/15.png | Bin 0 -> 1289 bytes frontend/public/types/small/16.png | Bin 0 -> 1542 bytes frontend/public/types/small/17.png | Bin 0 -> 1187 bytes frontend/public/types/small/18.png | Bin 0 -> 1227 bytes frontend/public/types/small/2.png | Bin 0 -> 1116 bytes frontend/public/types/small/3.png | Bin 0 -> 1191 bytes frontend/public/types/small/4.png | Bin 0 -> 1446 bytes frontend/public/types/small/5.png | Bin 0 -> 1423 bytes frontend/public/types/small/6.png | Bin 0 -> 1308 bytes frontend/public/types/small/7.png | Bin 0 -> 1482 bytes frontend/public/types/small/8.png | Bin 0 -> 1311 bytes frontend/public/types/small/9.png | Bin 0 -> 1651 bytes frontend/src/App.vue | 31 +- frontend/src/components/AppShell.vue | 50 + frontend/src/components/DetailSection.vue | 17 + frontend/src/components/EntityCard.vue | 36 + frontend/src/components/FilterPanel.vue | 5 + frontend/src/components/PageHeader.vue | 22 + frontend/src/components/PokeBallMark.vue | 14 + frontend/src/components/StatusMessage.vue | 43 + frontend/src/styles/main.css | 991 +++-- frontend/src/views/AdminView.vue | 15 +- frontend/src/views/HabitatDetail.vue | 32 +- frontend/src/views/HabitatList.vue | 23 +- frontend/src/views/ItemDetail.vue | 47 +- frontend/src/views/ItemsList.vue | 43 +- frontend/src/views/LoginView.vue | 15 +- frontend/src/views/PokemonDetail.vue | 37 +- frontend/src/views/PokemonList.vue | 35 +- frontend/src/views/RecipeDetail.vue | 32 +- frontend/src/views/RegisterView.vue | 17 +- frontend/src/views/VerifyEmailView.vue | 19 +- 58 files changed, 5203 insertions(+), 463 deletions(-) create mode 100644 DesignGuidelines.html create mode 100644 frontend/public/types/1.png create mode 100644 frontend/public/types/10.png create mode 100644 frontend/public/types/11.png create mode 100644 frontend/public/types/12.png create mode 100644 frontend/public/types/13.png create mode 100644 frontend/public/types/14.png create mode 100644 frontend/public/types/15.png create mode 100644 frontend/public/types/16.png create mode 100644 frontend/public/types/17.png create mode 100644 frontend/public/types/18.png create mode 100644 frontend/public/types/19.png create mode 100644 frontend/public/types/2.png create mode 100644 frontend/public/types/3.png create mode 100644 frontend/public/types/4.png create mode 100644 frontend/public/types/5.png create mode 100644 frontend/public/types/6.png create mode 100644 frontend/public/types/7.png create mode 100644 frontend/public/types/8.png create mode 100644 frontend/public/types/9.png create mode 100644 frontend/public/types/small/1.png create mode 100644 frontend/public/types/small/10.png create mode 100644 frontend/public/types/small/11.png create mode 100644 frontend/public/types/small/12.png create mode 100644 frontend/public/types/small/13.png create mode 100644 frontend/public/types/small/14.png create mode 100644 frontend/public/types/small/15.png create mode 100644 frontend/public/types/small/16.png create mode 100644 frontend/public/types/small/17.png create mode 100644 frontend/public/types/small/18.png create mode 100644 frontend/public/types/small/2.png create mode 100644 frontend/public/types/small/3.png create mode 100644 frontend/public/types/small/4.png create mode 100644 frontend/public/types/small/5.png create mode 100644 frontend/public/types/small/6.png create mode 100644 frontend/public/types/small/7.png create mode 100644 frontend/public/types/small/8.png create mode 100644 frontend/public/types/small/9.png create mode 100644 frontend/src/components/AppShell.vue create mode 100644 frontend/src/components/DetailSection.vue create mode 100644 frontend/src/components/EntityCard.vue create mode 100644 frontend/src/components/FilterPanel.vue create mode 100644 frontend/src/components/PageHeader.vue create mode 100644 frontend/src/components/PokeBallMark.vue create mode 100644 frontend/src/components/StatusMessage.vue diff --git a/DesignGuidelines.html b/DesignGuidelines.html new file mode 100644 index 0000000..70c2892 --- /dev/null +++ b/DesignGuidelines.html @@ -0,0 +1,4142 @@ + + + + + + Pokémon UI Library Design Guidelines v3 + + + + + + + +
+
+
+ Authorized Pokémon Product System +

Pokémon UI Library Design Guidelines v3

+

+ 针对已获得授权的 Pokémon 网页、活动页、会员中心、图鉴工具和电商体验,建立一套可落地的 UI 库。v3 在基础控件之上补齐 Team Builder、Evolution Chain、Move Data、Weakness Matrix、Battle Menu、Bag、Event 和 Reward 等产品专属组件。 +

+ + +
+ + +
+ +
+
+
+ 01 / Creative Direction +

设计方向

+

旧版的问题是过度抽象成泛怪兽风。新版以授权 Pokémon 产品为前提,明确使用官方视觉元素,但把它们工程化为可复用的 UI 语言。

+
+ +
+
+ 01 +

Official First

+

可使用 Pokémon、Poké Ball、Pokédex、官方角色名、类型体系、HP/EXP、Gym Badge 等授权资产语言。

+
+
+ 02 +

Game UI, Web Quality

+

借用游戏中的状态、收集、队伍、战斗和背包结构,但网页控件必须保持可访问、可扫描、可响应。

+
+
+ 03 +

Bright, Not Noisy

+

黄色、蓝色、红色用于关键动作和品牌识别;大面积阅读区域仍使用白色、浅蓝灰和明确分割线。

+
+
+ 04 +

System Completeness

+

从按钮、表单、筛选、Tab、弹窗、Toast 到图鉴卡、数据表、页面模板,全部使用同一套 tokens。

+
+
+
+
+ +
+
+
+ 02 / Official Elements +

官方元素使用规范

+

授权场景下可以使用官方元素,但需要把“品牌资产”和“UI 控件”分层管理。Logo 和角色图优先作为内容资产,Poké Ball、类型色、徽章和图鉴框架可以进入组件体系。

+
+ +
+
+ Pokémon +
+
T
+
+ TRAINER PASS + Ash Ketchum + Pallet Town · Badge 08 +
+
+
+ +
+
+ + Poké Ball + 用于图标、空状态、加载、徽章背景 +
+
+ + Gym Badge + 用于等级、成就、会员权益 +
+
+ Fire + Type System + 筛选、标签、属性、状态分类 +
+
+ DEX #150 + Pokédex ID + 列表编号、详情标识、收藏序号 +
+
+
+ +
+
+

可进入 UI 库的元素

+
    +
  • Poké Ball 作为系统图标、加载器、选择状态、空状态主符号。
  • +
  • 使用 frontend/public/types/ 中的 Type 图片资产作为筛选、标签、数值、卡片边缘和图表标识;CSS 类型色保留为 token 和兜底。
  • +
  • Pokédex 屏幕、训练家卡、Gym Badge、HP/EXP Bar 作为组件构型。
  • +
  • 官方角色名和编号可用于样例数据,如 Pikachu #025、Charizard #006、Eevee #133。
  • +
+
+
+

仍需控制的元素

+
    +
  • Logo 不作为普通按钮图标反复出现,只用于品牌区域、授权说明和首屏识别。
  • +
  • 角色官方插画不应被裁切到无法识别,也不应被当作装饰纹理平铺。
  • +
  • 高饱和类型色必须配合文字对比策略,Electric、Ice、Ground、Steel 等浅色标签用深色字。
  • +
  • 战斗 UI 可以借鉴状态结构,不建议直接把主机游戏画面一比一搬到网页任务流。
  • +
+
+
+
+
+ +
+
+
+ 03 / Design Tokens +

视觉令牌

+

Tokens 要覆盖品牌色、类型色、基础表面、描边、阴影、圆角和组件状态。这里采用 8px 卡片圆角,强调专业网页质感,而不是过度玩具化。

+
+ +
+
Pokémon YellowPrimary CTA / Logo fill#FFCB05
+
Pokémon BlueNavigation / Links#2A75BB
+
Deep BlueHeader / Text contrast#003A70
+
Poké RedUrgent / Ball top#EE1515
+
Ball BlackIcon stroke / Strong line#202124
+
Map MistPage background#F2F5FA
+
+ +
+
+

Type Badge Assets

+ large badges + small icons +
+
+ Normal + Fighting + Flying + Poison + Ground + Rock + Bug + Ghost + Steel + Fire + Water + Grass + Electric + Psychic + Ice + Dragon + Dark + Fairy + Stellar +
+

+ 横向徽章使用 frontend/public/types/1.pngfrontend/public/types/19.png;紧凑网格、筛选器、矩阵和卡片内图标使用 frontend/public/types/small/1.pngfrontend/public/types/small/18.png。文件映射:1 Normal, 2 Fighting, 3 Flying, 4 Poison, 5 Ground, 6 Rock, 7 Bug, 8 Ghost, 9 Steel, 10 Fire, 11 Water, 12 Grass, 13 Electric, 14 Psychic, 15 Ice, 16 Dragon, 17 Dark, 18 Fairy, 19 Stellar. +

+
+ +
+
+

Typography

+

标题使用圆润粗体,正文使用系统无衬线。Pokémon wordmark 只用于品牌展示,不替代正文或按钮文字。

+
+

Catch, Train, Explore

+

正文保持 16px 以上,行高 1.55 至 1.7,保证儿童和成人用户都能快速阅读。

+ CAPTION / DEX ENTRY +
+
+
+

Shape

+

卡片半径 8px,控件半径 8px,Pill 只用于 type chips、HP、status badges。Poké Ball 和头像保持圆形。

+
+ + Water + +
+
+
+

Elevation

+

主 CTA 和游戏化面板可使用硬阴影,普通信息卡使用柔和阴影。阴影不可替代清晰边框。

+
+ +
Soft rowReady
+
+
+
+
+
+ +
+
+
+ 04 / Controls +

控件库

+

控件覆盖按钮、图标按钮、输入、选择、开关、范围、步进器、分段控制、Tabs 和筛选标签。所有控件最小点击高度不低于 44px。

+
+ +
+
+

Buttons

Default / Hover / Active / Disabled
+
+
+ + + + + +
+
+ + + + + +
+
+
+ +
+

Inputs

A11y ready
+
+
+ + +
+
+
+ + + 可用名称 +
+
+ + +
+
+
+ +
+ ID + + GEN 1 +
+ 需要 12 位数字代码。 +
+
+ + +
+
+
+ +
+

Selection Controls

+
+
+ + +
+
+ + + +
+
+ + +
+
+ Capture chance +
+ + 64 +
+
+
+ Potion count +
+ + 3 + +
+
+
+
+ +
+

Segmented / Tabs / Chips

+
+
+ + + +
+ +
+
+ + + +
+
+

Base tab 显示编号、分类、身高、体重、能力和基础数值。

+
+
+

Moves tab 显示 Thunderbolt、Quick Attack、Iron Tail 等技能列表。

+
+
+

Evolution tab 显示 Pichu → Pikachu → Raichu 的进化路径。

+
+
+ +
+ Electric + Fire + Water + Grass +
+
+
+
+
+
+ +
+
+
+ 05 / Data Display +

数据展示组件

+

Pokémon 产品通常需要承载大量收集、列表、数值和状态。展示组件应优先保证对比和扫描效率,再加入品牌趣味。

+
+ +
+
+
+ +
+
+
+
+ #025 + Pikachu +
+ HP 35 +
+
+ Electric +
+
+
EXP68%
+
+
+
+
+ +
+

List Rows

+
+
+ +
Charizard

Fire / Flying · #006

+ Rare +
+
+ +
Squirtle

Water · #007

+ Caught +
+
+ +
Mewtwo

Psychic · #150

+ Locked +
+
+
+ +
+

Stats / Progress

+
+
+
HP82 / 100
+
+
+
+
EXP44%
+
+
+
+
Catch rate18%
+
+
+
+
Snorlax Lv. 42HP
+
+
+
+
+
+ +
+

Data Table

Sortable / Filterable
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DexNameTypeRegionStatusAction
#001BulbasaurGrassKantoCaught
#004CharmanderFireKantoSeen
#007SquirtleWaterKantoCaught
+
+
+
+
+ +
+
+
+ 06 / Pokémon Product Components +

Pokémon 专属组件

+

v3 新增一组真正贴近 Pokémon 产品场景的组件:搜索联想、进阶 Type 筛选、进化链、技能数据、弱点矩阵、队伍构建、对比面板、战斗菜单、背包、活动和奖励体系。

+
+ +
+
+
+

Pokémon Autocomplete

+ Combobox +
+
+
+ + +
    +
  • + +
    Pikachu#025 · Mouse Pokémon
    + Electric +
  • + +
  • + +
    Pichu#172 · Tiny Mouse Pokémon
    + Electric +
  • + +
+
+

用于 Pokédex、Team Builder、Shop search。结果项建议包含编号、名称、分类和 Type badge。

+
+
+ +
+
+

Advanced Type Filter

+ Multi-select +
+
+
+
+ Selected: Electric, Flying +

支持多选、清空、组合筛选和弱点模式。

+
+ +
+
+ + + + + + + + +
+
+
+ +
+
+

Evolution Chain

+ Detail page +
+
+
+
172
+ Pichu + Electric +

High friendship

+
+
+
025
+ Pikachu + Electric +

Thunder Stone

+
+
+
026
+ Raichu + Electric +

Final form

+
+
+
+ +
+
+

Move Cards

+ Power / Accuracy / PP +
+
+
+
ThunderboltElectric
+

May leave the target with paralysis.

+
SpecialPower 90Acc 100PP 15
+
+
+
Quick AttackNormal
+

This move always goes first.

+
PhysicalPower 40Acc 100PP 30
+
+
+
Iron TailSteel
+

May lower the target's Defense stat.

+
PhysicalPower 100Acc 75PP 15
+
+
+
Electro BallElectric
+

The faster the user, the greater the power.

+
SpecialVariableAcc 100PP 10
+
+
+
+
+ +
+
+
+

Weakness Matrix

+ Electric / Flying sample +
+
+
Ground2x
+
Rock2x
+
Ice2x
+
Fighting0.5x
+
Flying0.5x
+
Steel0.5x
+
Bug0.5x
+
Grass0.5x
+
Electric0.5x
+
Ghost1x
+
Dragon1x
+
Fairy1x
+
+
+ +
+
+

Team Builder Slots

+ 6 slots +
+
+ + + + + + +
+
+
+ +
+
+

Compare Panel

3-way compare
+
+
MetricPikachuRaichuJolteon
+
TypeElectricElectricElectric
+
HP356065
+
Attack559065
+
Speed90110130
+
AbilityStaticStaticVolt Absorb
+
+
+ +
+

Base Stats Radar

SVG tokenized
+
+ + + + + + + + + + + + HP + ATK + DEF + SPD + SP.DEF + SP.ATK + +

雷达图适合详情页摘要;精确对比仍建议使用条形图或 Compare Panel。

+
+
+
+ +
+
+

Battle Action Menu

+
+ + + + +
+
+ +
+

Bag Item Card

+
+
+ +
Hyper Potion

Restores 120 HP to one Pokémon.

Qty 12
+
+
+ +
Ultra Ball

A high-performance Ball with a better catch rate.

Qty 4
+
+
+
+ +
+

Event / Reward

+
+
+
+ Electric Spotlight Weekend +

Featured Pokémon, bonus candy, limited raid tasks.

+
+ Electric + Open +
+
+ 18h +
+
+
1Badge
+
Potion
+
Ball
+
?Locked
+
Secret
+
+
+
+
+
+
+ +
+
+
+ 07 / Feedback & Overlays +

反馈与覆盖层

+

反馈组件需要清晰表达系统状态。Poké Ball 可以作为提示图标,但错误、成功、等待、解锁仍要配合文字和颜色。

+
+ +
+
+

Alerts

+
+
+ +
Pokémon caught!

Pikachu has been added to your Pokédex.

+ +
+
+ ! +
Bag almost full

You have 2 slots left. Transfer items before the next battle.

+ +
+
+ × +
Connection lost

Battle data will retry automatically.

+ +
+
+
+ +
+

Modal / Toast / Tooltip

+
+
+ + + + + 捕获率提示需要解释公式来源和影响因素。 + +
+
+ +
+

No Pokémon found

+

调整类型筛选或搜索其它区域。

+
+ +
+
+
+ +
+

Loading States

+
+
+
+
+
+
+
+
+
+ +
+

Motion Rules

+
    +
  • 按钮 hover 上浮 2px,active 下压 2px,时长 120ms 至 180ms。
  • +
  • 捕获、升级、徽章解锁可使用 300ms 左右的弹性动效。
  • +
  • 列表筛选和 Tab 切换不使用大幅移动,避免影响扫描。
  • +
  • 必须支持 prefers-reduced-motion,关闭闪烁和持续动画。
  • +
+
+
+
+
+ + + +
+
+
+ 09 / Templates +

页面模板

+

以下模板把控件组合成可直接落地的页面结构,覆盖图鉴列表、详情页、战斗状态和背包网格。

+
+ +
+
+
+ Pokédex Listing + +
+
+
+ + +
+
+ Electric + Fire + Water + Grass +
+
+
#025 PikachuElectric
+
#006 CharizardFire
+
#007 SquirtleWater
+
#133 EeveeNormal
+
#143 SnorlaxNormal
+
#150 MewtwoPsychic
+
+
+
+ +
+
+
+ Pokémon Detail + #025 +
+
+
+
+
+
+

Pikachu

+

Mouse Pokémon · Electric

+
+
+ Electric + HP 35 +
+
+
Friendship84%
+
+
+ +
+
+
+
+ +
+
+ Battle & Bag + Live +
+
+
+
Raichu Lv. 36HP 62/90
+
+
+
+
Poké Ball
+
Potion
+
Rare Candy
+
Badge
+
+
+
+
+
+
+
+ +
+
+
+ 10 / Delivery Guidelines +

交付规范

+

设计稿和前端实现需要以 token 与官方资产目录为唯一来源,避免组件各自写死颜色和尺寸。Logo、角色图、商品图与 Type 图片必须有授权来源和版本记录。

+
+ +
+
+

设计验收清单

+
    +
  • 所有页面使用同一套 Pokémon brand tokens、type assets、type tokens、surface tokens。
  • +
  • Logo、角色图、官方插画、商品图均标注授权来源和使用范围。
  • +
  • 核心控件覆盖 default、hover、active、focus、disabled、loading、error 状态。
  • +
  • 图鉴列表、详情、Team Builder、Move Data、Weakness Matrix、背包、战斗状态、活动卡片均有桌面和移动端布局。
  • +
  • Type 展示优先使用 frontend/public/types/ 图片资产,隐藏文本和 CSS 类型色作为语义与兜底。
  • +
+
+ +
+

前端验收清单

+
    +
  • CSS 变量集中声明,不在组件内硬编码品牌色和类型色。
  • +
  • 控件高度不低于 44px,键盘焦点清晰,弹窗有 focus 管理和 ESC 关闭。
  • +
  • Tab、Modal、Toast、Switch、Range、Combobox、Type Filter、Team Slot 等控件具备基础 ARIA 语义。
  • +
  • 支持明暗主题与 reduced motion,动画不会阻塞主要任务流程。
  • +
  • 表格、列表、图鉴网格在 320px 宽度下不产生内容重叠。
  • +
+
+
+ +
+
:root {
+  --pokemon-yellow: #ffcb05;
+  --pokemon-blue: #2a75bb;
+  --pokemon-blue-deep: #003a70;
+  --pokemon-red: #ee1515;
+  --line-strong: #1f2a3b;
+  --radius-card: 8px;
+  --radius-control: 8px;
+  --shadow-control: 0 3px 0 var(--line-strong);
+}
+
+.btn.primary {
+  min-height: 44px;
+  border: 2px solid var(--line-strong);
+  border-radius: var(--radius-control);
+  background: var(--pokemon-yellow);
+  color: #172036;
+  box-shadow: var(--shadow-control);
+}
+
+
+
+
+ + + +
+
+ +
+ Item added +

Potion has been added to your Bag.

+
+
+
+ + + + + + diff --git a/frontend/public/types/1.png b/frontend/public/types/1.png new file mode 100644 index 0000000000000000000000000000000000000000..bf9f3d1b78af67ada0719cafcc053d3c4dfa2e97 GIT binary patch literal 2362 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 Ag#Z8m literal 0 HcmV?d00001 diff --git a/frontend/public/types/11.png b/frontend/public/types/11.png new file mode 100644 index 0000000000000000000000000000000000000000..a35f2efd14f739a8d5c3502949cc40ef17a3887e GIT binary patch literal 2053 zcmV+g2>SPlP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2bxJlK~#8N?VZo6 z97Pz#^9sI#3&ExDkO%M`0xl&W1VjWC7ugDK1aT2Cf|3ZX!p%-pa3k3magl|Xr6fcG z7ou>jQ&#nyI(??QXS%0vb*K-1WNz12fBNh1bai$2Os>5C!P8^88n_v_A9xga61ZqI zDge2NoJ4LSN0F;8hexp+2Y5B`S)hrbu{Dsh$X(>H%WaF@Xh5T12VBRE#@0YCPZEmV zD7+PDGe+ZO138V{b~)c+HxkRw8XpPHr_ops3ahd0fQL&Zp71Bzl)y#UBAI zT3p5B!7M@C`r$>A$3^_C<+hDA(eWILwD(5X#@ITz-_PP z?^a2`9{lldlE+2-tmU?iHA&;Z?3UL`-Fiv*{QF%wa5LhKuXDUn+3#EF%`&E>x3!s*a+RFRu%^o;~eLc zf*S*TcAmnwGX$M|Y#VEm#-Yi?XX4Bhfgs7*v<D_SfJ2OUB+MrRi@dak;HyE!RIrARm6a6Ud#P`X{(CL!Y^R zMEAd5povZ(r+ZSK0yA`QiXgf+)+CQ3FeH$D`-96!Zi599Z%UZ{aHid7y#y0}f4r-U z&(0^KV;*Z;QGsYV+S3`cH}mTL*9$Ze1%fvnox?Juzziip5k%L!&UE*M!m3{Q4gcFEMTDC0;WN_Uj`(HUXA&_OCnsYD$?u@d}H~~9cAE$)+)`W@) zp2}Dt`gvddyq&r8bD2zsCRk4(QqFZTyRn@@Ab{fmE6R0zb#osA!52$h;c;*<0(zTs z$n?H{#PxAXq<=Pku*pflLSTUmCQ9PrdekClH7$ zI35ZHC&*O0^nh~T0r%velOT_mEhiW6e{a76`dsMayXRIQu&$nrcaA{DOhuvsK{?vY zxaVA#emrM#GJ)usVw{RHpa;=vGf2RV#Qg<^|2x5ljBk!W&}NUYADKA<$#Ln8XIsQY`r@~F5$L&wHsXPCeXL0s1KU1<;NN`$>GlOA zf#C9r1v154Jmv_bI|(sJYKF?(8YI&l^Os8?@iymbBmlj>c=rC1d=!= zMlqpfd~*b1pX@7CUj@QtfUTP2H;?$BaM@Q)Bv5m#iU5Z(a5A$%@Z2JfF~K$_kYg;i zBjc+{AiU2oC+Lk4Uo`>CE!0Dxma-Ul*TkZi8=7uFq`D$;Qdx(ALqvc!rd=M zeRX^_2?VIwHn&0Xy8Cipm`FO18zf4v*Vu>x}hqHT?#FK@=}(%+Eyoqxp?Uzh^ReC0L-Atw}qRRm`O z`R)#cQj0)id?uMPljNWlv&Y5+0@PF>y71<*i1d#>hU(NP5I**>;`pn7eeC_&pUlilt!EwY z-7T-l5hw(Y(Zs{HE|@h0G>rqvfn;Ia_|!-D2VbsYw0@6J2S1#^ZSoH(jJ5Y#I1ZU> zUz`{1Od+wKMmU38aLnc@#(#?$qkKmZbCs`bQCLqK&r%Ax*> z)>mAeA*4PF1lT%rkp8R>qyF_U`KL$0j32Kq1(E~fW(!!JRf-@owvQEYV`2{VSG2z3 z>I@~f{U(r6dY4s<-6&wuvg|AI zjmG7JoGupR4!hBS+g>vl?~O(^AeXyaxkK2E1E5hnf^RcQV{0I1k-L+Gk+B;m(*7Ih jMy((h7x-_WpI-S7jjNaKm6k<%00000NkvXXu0mjf5@y$3 literal 0 HcmV?d00001 diff --git a/frontend/public/types/12.png b/frontend/public/types/12.png new file mode 100644 index 0000000000000000000000000000000000000000..893e8ce32dd245f46592f5d449979c8b2c9b66fa GIT binary patch literal 3026 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 literal 0 HcmV?d00001 diff --git a/frontend/public/types/13.png b/frontend/public/types/13.png new file mode 100644 index 0000000000000000000000000000000000000000..e555254876155f25d444a2e5c708f3c0dce7327c GIT binary patch literal 2204 zcmV;N2xIq&P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2r)@SK~#8N?VY`< z97hm^Z|Kyo;AasyH3lbs06&W|$BrB+5%>v&jT5I1WZ_IW6c>R6P9&}_to!tA%~qd2 z{Wm+K-8ED2!QJVus;-`@o}SsCd-w4B-BO+eo(5h7UI*R<4m&$n0CEvIiQGhvB3D%o zH<1S`d=>a9uouJ5t%00H?jna(ZcF4r0gOHmD91ZHw+3>#t5D=Y;)lR~#n}13ft*He ztDK*a2OVc$H9q_{hO)7YP$POG?r8oc=0E)x&_~z%NUD?>#`3xZEvs%aw1XjHn_sRcw|2!*@!>9L= zhnL^%1+sH#vh7y#B7mC~rMMU?j)zy@9jfy2{&0BvYutjF&XR)hx@(|(c$CfvxxFtk z9$tMvqikG~eEehWS&Vf48Me0p$&I@&4m|c+{b`j2)-7?{b-F)MHfvzZW>=*i9{>4q z_7%tZ{_h0k!!wUFECACLQu|Ths+rq6CCuafFULu7Li6KMK6-#I#-iH%)gFFZTVk(^ zzTBSZ#yO)HoiE>a)**WvfEt(|0s8`3b!%lHsF*mt;!X%w6J@i8KS5oDBJd~RoC2A~ zFMJdz6^JYh6E{D8+(7y0A&$SJKqjW+r7dx)8~RbZjkTB)a+cQ6n_;Ad}sLsJgpeE)5S?%7#PsY&J%85@L<)a2C zxF1gsYZVAyPi?u65=v|ALm4!&(v1CKr#vAug5qQjsbQcgC2@=>Fm5Or8z`S6S;SP7mlyjJ}T ztg@{~qM$t=W8=^J^%qFIuXCcdXr3v?w1Ct(*pR0vkk#Hb2Qdh@!u5(Jgt9q8o)A+4 zlxXR5J2TrUCRiUVYb8W09`pZM3WOy3rSV)DFHj)(Vu@;8M4SjKj?Mz{tEI9z0w;te zK#7((k&MHd6}*rS6?8nSG_@x_^U@}f%plQHV4QO zBAn_3v!Fn>Oo*1W^tqiWC0I** zklIs3 zY(fp?qehYtN^D$5s`?_Km{NkZlw_G5rZn11a;-p~J85FM% zl#d!oLMYh_Bw^|JZ9!vui3EQZ$Bh<9++wYMlkUOE9ug$2d$gx~)JPKI<9$3a3882` zReh0AOew*TKojKu$SoI$C3n;#dx->p76)SXaw7#2Z_-zP%*zZFiLLC%B2hkSa6<4{ zn3g`bGo=JOB~k7(MHScOZ_-h;I0m?Y@p{%Hdx^OD=NvE_tbb+1$Goe)QOMW?fvzpr zu|VdD6*g;(CO9*yUrI2%?n!_cBfW1_D-b(gg8R4PX^r3P&T<@Q(Vv&#Z|-OJrAP5G zj==slCcaU)>PJnOEWp;)#1%*EFKpHrO>kyZzm;H0$76B&0)dp`x8o(ae=DBW_|5LT zMLLetzOTXd5()lHANT@+__kiy-^Rp`nt*lR3vs9*OEO({)4s}PjnM>WM)g|>rgS_O zCl`pVu%-TX4`r_n?%#^1HGXe9ij6ZM{do!g5`8L=)>TBs$o@8D{;(og?c?r@4=x5+ zxPqMawbWnOtTCG4%&2}V!IX~2;+#Lh>I8G8`uoS|=wmiw8})C+(;C0G9j_v;K(IAr zdx->piN4rk^Z1P<#xow;oI&z&_szaA<%0%%!-om*tAw&K0w;v`-9wg8AyI0KBv^}> z5G3A*@&oZUTJyo}CA(_;ytt_=KqA7Ql93qM-i9P!m;#%9<<`Tp_9Zk)h)(gV*r>jp zTy;{VxD^=q*wqSak}WJp;Uulj$C(8JSp4dqwF`goDpZi37}?%NWM8=jsF>C7Mf~L9 ztCL=)lR$lhjS+6SKtL%;O2Ycp`B=OGNss7l{&YpY3e`Y9L-cfG-fR+0Xs} z|Am>-2~ajhxb*^ot==M;e5d-=`BI#5P#~bUNc_10Y;OaKKl@{>y4CW* z*&f>mt#r=8er#a`|Dyn^y@u(=tD|Ud!Q;1a#Ki=CSO)Le4sZWR;P%-Ljem|y^qd)=WXn&@y zf4YK2=$?l4H>CTgN5SepUX8#x_;_6CoCDjxcFr9?>ocwX+|G>lXWIHxft*O&S$`vt z>q9?YZJfQ`;(!^Ya}LVKHFNIxS)Xb3=XPeaKhxH~c!6ZwDvvx!;HG7>ciMM$E(CHq zxgl4`g91GETJ`3AXXk<-m*+>hHRQnxFp9U}_bbZIt%00H?sgT1ArE%4{~PF?YX!Nu e!oPvOyZa9#!%0K4#kX|;0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2?9w(K~#8N?Va6< zB{dXgSx(r(b&Z+TE?(3EU5S8+aP{D{y;m{$4=& z?7Z-x7EzO^P1GoARn_n!va!P}fsX_Ki5L`06c**PbCIBCQM;&NRofETC_vDM0X6Y| ziV}rI`RrUgsO42ck&VP#f#>Fm!6;E!l+Vsi05y%;RyALcjfTUo8n53QL&ezHIUT5R zRr?Xy7QlhUCePPD`QRUNb<>CfAy0uc&w4Zjz#WvEPT12 z{q5X1R*Z9&>fq*^pWWCQj_2X^Qey^z2FgpoRv;U1t>%Nl*}xWnw6GX)T!00V%`SL- zhEX{Tuuxc)rF?x3Gi&19d~bvn=CZuyDf&6O&dV|qlo#qfIum7V^$!XZz=M!u_i{s_LcTvZhnKc z93MhuD|3Son*|87{nkz`5M|YKS@^wJ5D1w2>zph~1U*!Y2GB$l2tMhk2CM>$!iEh; zyW6<3K@@}fvmX~AEXHI1QPMm%zAI3(ak0RSU48VW^oJ>bkPDS>(O7`RKhcWMR;{s_ zBgc1R&~EIM0&#_(jKxunb>aYZP8KDC9x6tMI}ivy4y-y?fkk0+8^&-9H73D!Zh-)6 z@iuGFAHra9BPx(*`S_0aBsZVsph=@}BtTw?EUU+xWBchsE13K>l?O za~~gLj?E{X)|}JXnBy-&;`{zdXnWf*=U0s#6bReYu5#Lr5!4{b*@8f zC~RIR;nPJgZaEW5p8-U%9YY|ncne1Ubq;eM--6_0ti+e*WYh7NIFCU1*yfX_%4s`F z1U*!Y4o?qyK#z1cZ_9#Aer$Oj?K41%vsNJ1tU!RYaNC6Ei}|*SbC_du{G5lia$=zN z?FGkio`hol+z_4t4c0DDAb&w1s$)HkV!;A!-9TPkSe{4w43Ofi5r`^~GLB*t!*fLf zLaB4`b8rm)JQ&KZsAl;+fgFupHSKyYd0#i1PpE#93@C?$!+64+EKBQm#%e+g5vDvQ`k5Tcb z0@D6$vmj@z9aA9lD_AwwMg&p|I?tnW+Kv)I4;71*w?QDtp_L!Fdgs$P#TZ55vd5go@Fid{_}&^vB&t1yaNTEAMxt@l*iT4iyMsYuy4u9Jjy!5y!Ad ztesLIYHzRJ{mjKE`I=`IFOoVZi#_%=s2C00$K5ab52n08gpWfXZ~2@0bZj6Ny|Fk( z#4BS>yg7~^&u3+rE6m_yi!GZiI%`K4NXI{0S4e4HTgT5FAb=&@A54LZ{gYe#TsBPk zIHo+fptGU9^ilsLpmp(bJCAq8MAlsMU~|0l3dCJ)$z;A^4X_ri<7ZAJkm^rv0Ti?0 zS!7=LNG`O*^Zca^*|rD-aQ@L6$2VVLbiB0!L5@91vakj=*E*i( z1OkBu;?)CKfq;wo+MiZDe=-|y zwHl-im6y|GV+DFB)57P1#K!rDSmo2h6t`fh082g(!bv1NR4?UYW8s0fD!erBe4FC^ z(H0-x6ZJ#B$Bspgc5M7o3Db`k2H2m+kLP<<%B@w#{bG25zj_pN^iV!MX5aj5l|h>= zXwdW5`0;hTX&kN;k;OBx?NhJPjgI&I?B5!{KHsyk`m0C53;gBPn4^dC>7ioG)CE1} z&*STO%E#jUxxX&p(eb{Y{g=lx-v3OX)`z~lI&=8#77Jhr72~L2jvmUVhl(*%7xb7v zkFVn?AB*?r{J8Z0Sp{m^J&-G8qW~{^ z9rxk=NbCaH*#K&}yp-ERHg-TzyaoTPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1tUpBK~#8N?VUl2 z)j$x2y@FTpB7)4ygLnj&f*YBI7w`(R6x=unf``ySMi2!zGJ=9GpZ)ii_mx-&yE(jI?auGR++(eEdS5*%8A`3gX zmw1r~F$8M^Ig8vy4y)Xj$U*^vo+Z?VgJ5kSm#cyDXGIAa9=8^~$ow#xYiS?DK~Y~-_u2?V#`l~XS^&}?e{ zjH^~`e98xC%Vu?|4@<)DhY|?$GEKw0`40tdZ|29A+t--izS@T%15Gpn8GWbR2Aa(u zM9i&mtP96GoA=*}K-7Msjh%fBK1=uy6&8qZSA*JzAOlTgf#69;EKiK-lh9S9SFPxd}xm~BBIJQlXkDrOfUkXgArYJsk>17QhZ zXAiZmDA^VTV&kM@cEJKcoGw(1pvV;jqAEti34nuwzwxuywkQxQS24R_f%KV*5tNx- zAkV(-ZwTUNt%X4934zSZ>{F}|$hG;p5XdUXQ>3F0B;=s>Z3xU+b0zup^RE(fV zUZl@{nRlq6?bw95ZLHtmHWulA8wwR8D3UMp&U&M8jHy^_Il$IWFhn3W743?rV1aP^ z;3)Eq!dV|R;Y8>%_*y$Q+m7nPlCXY)E`jhqj(z+;1Tri6Q4=uh!-^{5+4}sgPW53) zSU*9RKmc2xK=1*=4>E>8W}|sn5!}e*?&@rUGWOewK-74Y;@OxWrjHQW z6Jh-X=(jgt2h<0FO*6e83(0?|3|*u%Y9E5k!55}LeC2imd|&$n0x%9GQ)d{M7Z3}i z#=OAPJ_PNr+yW?O@LI$Mx&-_Cguw4yuVQ%Ee`)x>)(8Y25<|=5C( z#A|U3;Au- zfHolzNi(%F4*qb&t4Alo60tTR;R7)keeJn^C>(FYRKI!@#LKHE!Y3n8J|6aGhWhux z@iq!_ebCFRjiaYqEP&QQqIwl$&G7yz9}oL8L;d^UcpIcOt@6l10*jVOABhiw1%RAB zSdc4Zp#Yb?CSAM-!7YMZZZ73^AqzV|P~3u#GfJ>Fkh93$Dq$G1u#)&U(7{qcE>7@o cpm%rv0wvq3j+c5}{Qv*}07*qoM6N<$f~wn(;s5{u literal 0 HcmV?d00001 diff --git a/frontend/public/types/16.png b/frontend/public/types/16.png new file mode 100644 index 0000000000000000000000000000000000000000..65b05ff0ff9e5cc60978617dafd9bddae4d484a0 GIT binary patch literal 2542 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 literal 0 HcmV?d00001 diff --git a/frontend/public/types/18.png b/frontend/public/types/18.png new file mode 100644 index 0000000000000000000000000000000000000000..55e510bead7b1bdd85750aeeb60b8a8e10b76c8e GIT binary patch literal 2037 zcmZWqdpHwp8=pfX%pr?4`xQBmv-k^0_= zy$oS;W@f$0>r7c;PVGWgt(s%+df)H5zCXS{?&o*i&-46#_w&21=eqB-(_Zc%4X6eH z005ypPWUQNs0eFypki%=)xs2@MDcZZ22}LIB#J~e42ebp09Cg&*Mqkx@~tEfe+mGg z-T5Pwx+65&~vgWvGU0;^%*KFpV~tWN!+J0p+>c1bXqR;#*h$ql@J+kTtSU*>c%pG zr&c}NY?}7MBcgj5s0Ei^fEzO7DW8-~-jcBWq7g@U#?Z{0U<06Q_@+yd!c_ap_ z9hsK#RB6ZofBd6!^^|kIeY|(Z*wg=T3(X3+zZsd3Q5Xhh+RHev6C=jqRS`urv)8)e zEgbsFns04pR2cZmg0J71`5^4T$m9qwr+ZeK%VRls!0QcKRY`+lU;rJYd~8Gh!b0AF zaX%oe-!5Vi#JC_4%h+L_V*gg(@G+N14x>y~T^JoK(_=Kn%Fj+JuBzF3G`T;Jmpi|I z9Ol*XXF9K@yd>mGV@9H|uq);r?x%KehCLd_?2$a=LAKC>;#FS)CGj`}{?5FkGft(b z21$RiWnM6<0peo68%LbtC>W-k01=#hLyY_RWnMr(jKo~<3mr1mqO>w#4*3Ji}LciDs-l!p6`MSvCZu0);J?>16sMSc zvUeHB*(4@IWX8o824Q(s-V@0kY{R3F_O~I@md|n+obBGx6|3}+1saH5ex%7%Pn$jQ zP1wZ`k0qc+bQwc%yL!Y)0GW|CFQ8^05WwImW;-xZq)-?# zg>>Q=r}F$Qj=6B7!XW>=A?=W@$6(`}rR=_IGPT*~a^J}Q6r%+y-7_1}Wm=m8WVWy- zqvP&c&!!=++yQtlOJs-nOVG7vb#|#eQ+NC2$@RACEq-EXqxE*0q}W{s;GR?)Uy|io z5Grg_ZCY$i${V<9ppuyLjPM&rsi?(yTcOJ+hz>%VmxpHiPyqFVm~2i%hiO?vBSdw8 ztT$4MltDhC>9@Ae2YOn!!nFbyoD8|Ca7A8gJG-xnzDpJJ;??irv6vi=efXW3bF4WP z4py&v1p4IsduZgng&rQvct^bs|61C)Ce(6)ZT^_vu(o-hyw1v>(r3!)iVxH(q4X}P z5;BnipUT3TtVi?63O7WPREbryoK;Wh@PyXqU>N;B7-!OVEQd^P{Hm^z(ayqF-3NE? z=R80LDQ7W;ak|9=-&|qv6nDXriruj}n-(9x{L|z0xxJS#3509SGs7)k!Fy$+H<$*m zywk(s=QEHzP-{(r()OdFK@G>#|90ebDiUnqi1$?xF;7gYtWooozqcZuze`0LY#5zG zII)p#z2?!3^>04!lD)874c9i`tYRK7WI|3Pf7Bk% z1@==t#_#7Cg>G`qh4G^1gTVt?3;}kv3Mu|V9}-{NH=VN*(yIBU1@YV%7XYSonZDR5 zqDexzaS`y5RHW>uYGLEl4A4JT6!%{9%rWT>b7Dr>zpMpIGYAw;-Su^d?gp)Kp_3~c zZ06`O!cBx<(w;&1vx`DroRBN;0Keb-i!;->*L#@b!yxrO8ps$# zfs}Plh3T{bl>!sKvhQc>m7J^$WsXY-+5Em>T^l!1bVIz>L_V^>Q1MM~?#Wxrfm*DE zC79=5!lNewzwZKj$m`i4Ug3|P{gjkschkW9cH!5hfyz*e%XSHJd*XZpZB1nS$q#>9 zx_;BKf85CNo1-#ZpgreVE)*N$zT}m%!j(sX#}6^?`5lRmq)(4--k8Q+d9vbtJ891G z;#=i($1uQYd^C!usIZODy^M}rf0Gc2WrB)F8aHXzXUe?m0!aUNx;?vRkAMg!4Mx?n zF$nCoulz2W71m1uW9oQ1+2sS*2t-?~?Rm|&yzGr-hIPz_DgacRJMZ3Lxu_VI;K=rg zMW#5rTG2iaOhx?wty2FXVve0THDu?ZmB`{i-~Wk1oNS2F2`9&vRl^ublmkp2@QY$p O15mDBCn}tSlKujuV(BRW literal 0 HcmV?d00001 diff --git a/frontend/public/types/19.png b/frontend/public/types/19.png new file mode 100644 index 0000000000000000000000000000000000000000..e901bcaad447fe3196ccd86c6455b0e5519e7efc GIT binary patch literal 11060 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 literal 0 HcmV?d00001 diff --git a/frontend/public/types/2.png b/frontend/public/types/2.png new file mode 100644 index 0000000000000000000000000000000000000000..09caf9df9c8dc95ac471178160d1d0ab588a206c GIT binary patch literal 2357 zcmV-53Ci|~P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2+B!BK~#8N?VUZV zBt;a4H#GGxh>4;9VMQB6J-q-zeP}!6*gPL z4GgaR^w#Nl`<*k@-80>H=I-`^2kumzI(4f0yxU)M?_N54>C(PjZg{of>xRD?ZZ({( ztegPUA~i{EQlr#rR>Om&jTIhfc&A|%!^%a2nx%HB;jFe((#8aWUTw%GURk+lP|Kr) zk~SL8G^}TgmAegUn%d54z9VfEhR+%=PUK}H^Qn>Lu(Gm0)Oc3=Eoo!J{SDmUWC8nR zMOW<+X#f8wNHhm?b?^+u(C1_TbEnC4-MS3WCM3Yq5pdI ztg|TSDD*!*D;>pLAZqx!K*E@VF{;;(e7^bV-MFhbc>a zjcLa{(Zs)f2iEyXQz)@VJ|8iN6-2JluKA83&djyTWXSfAcF(VkCF=>lT_B2|q<+*` zk6w0z&o@74pnC+Y0-1Jc6>tzwT_6!_4A?G#Ko%dOfQHNq5451LA%Uo=KrqjD3~dg3 z2!uAz&)0*W#!(nQWHC>S@%fgayVMGCpqR{Y7!KmSE)XrAA;U)xI9ybLfamAy!AIi+ z5pT$1p2)}NTaNZD5(42BeC9L^2XQWea7vAF5hrXZfn=rys`k&%oA$s9R%3HeSyN^q zKrQaDD0=Yq?DF;YvDWUnjQ_9jW3%6JEP&6nyJ@b0=c4;XtdE-gjd|3_g*{U-suA1w zV>!@7Cy@Q$l(XoICXko|B9~pLWdd;l5WjcbT#Cm1w6MIOw9nU5^99dO?fdt)`(s?h zohpzJnBqD1=95?&uUkj)0feH4kMGBFpovx-eA6*=7zc~KR|WF^qoqU4Zz{ELLL^>P zUQk`JH28XIzM%Pm+FSx*AJlYyjTNTz>DeRV_0~}43w+OfKbGY(0^#exS?4%d^u7Y2 zz}Orm#!+a%}}XPBj&HM;!Qqivw7-ZE=f5m}9d?5bB)zXduD#Z5`t3e$5f70NFUz3@VXI5D51AL*<8J-TIUDL_4T)HqqS2;Q24hEd-Kvj3*M; zfARe(4x1Nz@W^HiVmXFDuD!J(&QJmOMUfw?}O?qr#JeD0o4Xp)1%;)j^jwg`r%Zf1H*WH)0Qxpgf z9o%SBAD!!qw~A9^cbh=GUrqCS`?1nkj4^r^@%+d+?0f~%`?~x7zc7^@;6p49P!NS3 zg_q?}gE4ao#QQ09H!W~4K+UBsie&$EywB&p#}UP=hhL$#V;&cEB@>Ji0X{hrnp zDG9{itcR(O&o^Xx?8w9OpC2^Po;^SX0@MHOPb_%q!ZSl)nJAPjhZ>C0Oi#$C4`Punre}erkwSrhkygaNKr(|wi-+Xwp zfmzH$ASN&D5C$-3%r$1d7zf13e3U4pAPz8Omk8v*Hwttf{lcXCyYG-d)HlmN#(7+P zHLmU|WD-e`d@aq|6<)T5&QoEys5u}YHS^pd8l~aXUoZ-KL bzI5q-+)eNrg36Wn00000NkvXXu0mjfA~&IE literal 0 HcmV?d00001 diff --git a/frontend/public/types/3.png b/frontend/public/types/3.png new file mode 100644 index 0000000000000000000000000000000000000000..e0bbaeb083944530e8b850ad73871999ae055bd6 GIT binary patch literal 1858 zcmV-I2fg@-P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2G>bMK~#8N?VU}k z+(s0Iy@hNcYw=pLi9jIWfwzzq7y_AO5J)`9#Is-$5&{7mkMak>4};;sOQ55p?%REI zbV?ek<_d%E@4{T_Y(?af>sH#}{4-tfBNZNs5b*#O8zNebQ|9^Xf$ zvIxDytSCq4F`0ISwAdtYd-wEeKtq=zk;~a}9HBPj^jZ?yX2?Vf38|Tl) zea{gHjD1plMLGL|oUuTFw%-x$r$`6{x8R-AWFoMfFmo)GFiTS+kXWm(my=k>`;5@> zj{e=NdYZUg_w0vm-HSK3O~3EX;I%UrcF-T^IA8Wj?J3FwH5|5bj5!t?2bwqwWU+G( z7woCV8|cPZ65c#cSWfaWaB^^49ghX_^)KB7#=2PmK$DK^<_g5EZHz$FQZZsfOgY9J zi;V+Kv;x7Cj?Q5g8lWlW0`A6G65hOP3k0yC9SZ=kseq;kgy#q2xr3ZQv^}rU5ytTa z9E%Rhdc=PTzKY zQhWi&Vh22hK#J~~YXEd3hDEKiK`q1Cm6^Xg3Cz|8=#vPo8ZP=5}x~g z2n0TC+?Fk3#>qETAe!jB4_e3b%^!(@dkKzn`_nu* zi8%3iEJygUX+n1UyCmNnfoR{+?-YSV8^CjM@LKmsxj-mbC5BDFCb==zWJn-Grb6Z< z>L&CsuDx3L9Q!L1hzjB7Kkp8oHfw+Oa-Kk3pK2T{Ui%&>Kg1dtq?Cm)?kj*>5lAY2 z+}E+cGJycKDv%`YAy(N*`f1@B#36&PCRpIcSd*;?1US=imJo<0G{jK_Vrfs(%P#Yt z7M`;>ZV&$e!DGQ_|7(*HNX#jPu44&-pkFnv2TKS9u;DOkia=892N)Cl^Zvh+_pSxf zUgj;jQ5Xv^u_+0)G(!RzGoP3@CsE0I*pO&_pJfEX^M#>|Eyi=cLkS<{+-AoDX>Sx3 zJ!*nQyLY~^rtd~>j5T?v0?|Fw*D;>+9a>+Me;@*BA2k89Pt-LSV+{T(jKGbtCJ$90 zfKB%>#&f=~DDTeg;?MoJrm$$Wk_5RnYX}4uZwPUPD2Vb@eAw0yi1wE<^>e!U?JXY~pn>+&1F%5A}$(XuY=IFr$BZ6pa4yYJRuaSwKzoT!>yeLgcwe6--a1(pF{i0CA^aJ&yA=1H`V_G z5J>N^im`P2y(h}Lhi7I23+=wr~J+id*pY6Q!~@ wkh93$QNjpp;YjMAfv#*7Px#07*qoM6N<$f?4!^>Hq)$ literal 0 HcmV?d00001 diff --git a/frontend/public/types/4.png b/frontend/public/types/4.png new file mode 100644 index 0000000000000000000000000000000000000000..c54865c034cdf5719c66c222445fae50fe7ab310 GIT binary patch literal 2601 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 literal 0 HcmV?d00001 diff --git a/frontend/public/types/6.png b/frontend/public/types/6.png new file mode 100644 index 0000000000000000000000000000000000000000..129097089e2d2b3e22988ba4f326d4a484224044 GIT binary patch literal 1949 zcmV;O2V(e%P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2Qo=SK~#8N?VVlf z)MgmP-9op}wYZjUqE|vM+(H*%rGf}Tue_0dVQ-{RvGhVgDuP&a2{tGFpW)=>Zg?6Fgr0qyt7(mho6=~u^VQ)aoql^+48edhESB%2ZfTp4Cr1=wZ zp)mPX|G8W-+r4&3&de78!Qb%|FFnuPe{RKuE}2AbDF=wpl>Ymm2Z z{;0S2V4kl1cY$IIpI}mWKF$vVp$0-j`Fz-h`v*RKc-@%a$L|n$;B*UE4RY406&u}k zK+Xw2i269yuqLc$Z2a}&X|F*b#4*7q3g2GE3C7f>{ZxZ!bQ#3+|Nh&f#{52hr<_i; zXbw0g4IE^uV8(_XMEuRisfIN_F%(6SK}`kGzsHvHRm-M1b=H!lGqU350V7uV}SSA z=OZalhmP?%rx?V8wWb~&1bCu02tMhU21MAf)U>6-5A3xYBni&Px$u)Yh=;HD{vcf7 zMC)R$sb1aQYt?;8JvtD#VGw*AIIWDZF<`6MgF%3XkJIpVj?Ra0Gx>UbWzcZ|%k(Z4 z=`x6$&udLRIuLhZkV)^F>m8Y`LTgAhE(t`Tg8cO1UBj>{9v#V-2FA2EpGNx=or7=$vX07qQL* zJfFjH$sisua>{XFUQN0{2P)33LTgAhE{Th^%OHMgvNwZxaL$zDz+yuJ) z&_^{W;I3DlwG4vz<;Q!C-fz+WwYkVC)|lqb4V^=4NHs2r3w%sa%w(?y`RBu%M(?-i z|H{;-ShFwE$2R!f;6Z0-4XMT@ae?=RzjBbh7zA~~6dFUHEjt+XMf&X9ygVp=ur3kE z=?742NHs2r3mk#kh_9oNmAMAN_ROVyL9k!M^En*nc{m47t30;s|H{<2d1t>-sQ2+* zAag>6pm&Azu2HISNqiq&;4U=nP1+ZPuJidQV2!T6AchR0y{owy=XK*TmSYY-rhOm2 zJQ(#Gg|k0uq6Z9kL(hr6oO*y$jZ5OSxIrK)58V&oqE-|6d`Z0C8xM*ewDMKs8{CZR zGl#?Zb-6AbzT;2Jrns=>GbAWAb^gDQ?ipSB-yG zZ4bs8B+bEB5zl`hP9IhTXMfzCjY}f%rj7{}3*j>u)~Pu_s&Pqtzmh>*Y-yjoH|(F! z=eZD`i~Z4{z+3rbY;BT}1_2%iH%Q~-?z6uzl|;aGW1}wz*QFZPg!M4oAX>8qmy<40 z`#8^oFD-dJAcf~ka}F6q_YM21f!ely!dj5V7pB1MuiWavQ2ZdL7}}nHryACT^)R{& z;$lqum->QbBt@zRB=Ix4a$)%tg8+|%8l?4=TL8yQdeac-0mnho$4b{hLSS9m26)a? z!v0NfGu0qI$JW<`3jhz)uO2`R0%rg04;l!PS<>IJsUF2I=u@B$=9_8|Y~yjd;IHudc1Y*X{*bdy zwFnxh!oUGTv)OPx5V{QL!KIke99ser;8~OSHGu;IDZZY!OL12yg&WYfcTgV$i`r6n zz08YWC(%0jYb83C<8>_ia1eu>POV7eflz*Wv;zuZtRN^r(pqou$%0QFL)$xEpXc-O zp5GZ7@ALWi9WnZ+M?v}V>JFv~!Ufe@Z$QM#(Dshk=lOiR=XZw2`+PorCqV0ye!QAY zKHXAr13y4R`1WazEtx6^7gTG#;r$re-tqc8pO5$a&d_+D&&Th8)@hXz7aF)|nS6Jv zP`GlS>Ba?lA}$Qzw%4qS_d?-{fR<0Ua{Gu2dq7gW1z%oK3VQ>Zg?2|7gT#d+DgO<0 j;aY(fFYw<$-?{ZK_72fk?%R~%00000NkvXXu0mjfTn?`W literal 0 HcmV?d00001 diff --git a/frontend/public/types/7.png b/frontend/public/types/7.png new file mode 100644 index 0000000000000000000000000000000000000000..dae43fd74680951f17206fd7a01c46e7dd5c493a GIT binary patch literal 1998 zcmV;<2Qm1GP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2V+S@K~#8N?VZ7@ z97Pm{^9nAr)E5xnArB#ftDqbAZrr-a!i^9RAqZx9Ap|Z2LgJOU&_x6hh2Z7p8bQcL zNfue$MHXZI-E(^W`ukLORnJ_fr&9+$GPkPhRCU$)tE;+uCRe`v_Ucrw1#Sc$2F?R7 z0;@`81|Sv@lZZ{kC}P!%;ZfYg0p1CG9jIcc92$sO#4cjki)|M-(E(160$#5Gb=~c_57bF>(I|PltI}lkjftDEw`dS0@$>81+%f`)V5~JF0YO`W5PDR z_@<08e`EQZrD{w6_&6V+uZ@0w>|gyYkZ9x1;=paMt?yRtLL6rB<<&7~IGBF^?W@)4 z)8j#ozyD}ZAiw@`d-d|w^9Fp@e60`5R09FtKYk;M)bbbU8?nT7sJ{gQ4Rp7FSs+_2 zt&A#=4b2ksbvThBf}K9w2u1ywI1J72)wi}Gf#i-+E0VYl^|w&ErIv{Uit!FC1_O|q znMy1*z;lO#DOVt7|A#0i!df!ht|JfpovZ( zllLCzcq|WWnP7o!oIbr11|b$eWR!hx z4RfL-U;)zEG+=in5L`VjF5(Fa{mXR$>w9b0lXFa3n>w`qg>wx8!Rx?YW)_&))zG;n zl+*wiUOvid;J{Fq*M>R4!IUEqodhmRAh>$4KvL~Nn$aE;*P-<0x`ONUGIHVh`DI}3+EvOf-jbMnJzpaAlEQJ z2nO{xCJHsJU;XVHZd;B(^xV0;`q)Mwovj6;?Z`#zUpVK*8+0BJ%yy-w{z^?}SoODW zxNRJ;FiZwmCK|Z;z}5zJ+Q+U0f|~8H)o{f$WuLi8XnXULue`|9+4Z2=a36 zkOhK3RWvYl`BMe5SDH=wM%$C6JP3)}ac7gG`BnGXyZN`F9}@&{;wtCRWCb zeQEs*r@75r^q`OjEPG$n<#hLG-Xy1oH38 zvvtO*`ON-XHX`tX+We?ly4N0nHlQuAH&`IegTkU$O?Yr_9lhK3;DA}+TN%7s!dQB) zKDiF>a6A0?!x`EfmeZp?2B6F!#n4N5`AF`O!~?#IuwJSGJRco2ppTT)C@c~_H!es-c=-NK_Dg$6$sF!*qEtcy>ng|&_Hwb04xwt{Ifq6xT%h} zjx{lOAkU8TjF$mk8|H+a2PhQ?guvy21$wSX_!hAzkfE{iOv`)cyfBhK`(qR>wYc-} zvooo{KMSARjd|#GftLg-B>3byyf(}U4o;jGL^1}Sqvw<9Ew`i(y)ulpkH-P%*m*t{ zOt-W$qCbf2r|UMb1_!ve5y!w_mNR(3fGx#%kQlEGb3)HY+dqcqlQF-zqBKY!dSw_s z*5L6dZO?+p{^?PW{o~czp}>ON%ku_^!7(Xu0j~{n!aJW5JfDpESG+QeSB5EV&q6?~ z7yWp(F}mE+4jscA6vivVcx{*yrRSq~J{k3|cx4!`3{%>k1<+eoF>a!OO-u3Jtx9F) zAf}@YxrdwRfZJY0oA*j(#vqovTe(BHi37kX9>LcuO6AZ%%p!KPgkiXenbiLVx-wS~ gi#zylps!x}53}#GJU_Z0VE_OC07*qoM6N<$f@IsR0{{R3 literal 0 HcmV?d00001 diff --git a/frontend/public/types/8.png b/frontend/public/types/8.png new file mode 100644 index 0000000000000000000000000000000000000000..d46358ec5123cb91b9d637900f7ce603e6b97294 GIT binary patch literal 2147 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 literal 0 HcmV?d00001 diff --git a/frontend/public/types/small/1.png b/frontend/public/types/small/1.png new file mode 100644 index 0000000000000000000000000000000000000000..eb814ca74c40f7208c32952d8d65c143394923eb GIT binary patch literal 1485 zcmV;;1v2`HP)Z@|I zGQRNj!jeKm;iSuerX@5gsZwB2I4P{D$rXj*0H}R8ZD_iJ#z3nYe5ur7RJ*R;3TQ>> z<*t_5D(*6ZL94lYXN8wZY_N>41P6zqi+^~paHG)>9lbrhqC<|=(bAy%l8hTYs$L9K zHLuNEuowFo3{EU~aA;62Oz;GvvgIAT$TIZ-IvNjMef|YBg@||2Vjg1A2D?m>&ss%m1N|?Nb_32kuOfcE`m7!>Vs8T zy0;{2Kd#B%(>-e_K4OR^#~PS{BNxHDPj=-SG+ENqyMuWA-H90ytYNA*yijHWu?qjUy!UbnEN1yNR?KW$X ztNTpjg2|Y~#;+Afk{g!;C$PoTeyiDBM!T2b(UDOj2}ajS5R(*f+#|yyUbJ3Cfczd9E z4(5J4>W|I~QG;!6yUN<$-nOM=ZnxF4^=4`ywctnFk4(I|*le|O5uA&H|AExG!bc5t zPF3iCw_gsQ9k#T%|Hrg!aiN4oPu2h zFP2|Ae*j>+fcL$YO>=;3wQRkaYIVHAHd5bfSyL08+HAFKy_tBOg2VG0`@_Fl&%+RM zEj#$$VDo(wwk*N3a6k=eMY-vT-a2Xzs!yBaayj{{k0yy@V5?#4$wrrr z;0t9bE7*#pwZjceJh=*{;KN@ZvTMW4r!%>TMkw5E1(m_pi*i{v_X-oCVdJL_D;bUH z&xpA{Eo%4EjHAiebdVDQE;yq(;XLT2pk_MMG;Sj_&TsVDo<0!FTR)%MHF8XV11^&f zTU-zLZAc`T(*UrM(kQU`U3PMTEsom2=8v-{5)2_nIIbuwq`&VaCl16Tk{rgiSZY$+ z=6Bh>1@r7T#LD+8&IjTA(V3o}mbvS5GW+?gOnx%i0&Mt*AvUgI#8NY?&ps~RD@FwO&TgDki+5lkbj058F6HNQ6j zeC??P^EuM7`opT+SiB+Y8|(i*1AC@g(xIj;o97qt2V6Qgpqw@d&00v1!K~w_(cE&lbQvQ9300000NkvXXu0mjfL#Eq9 literal 0 HcmV?d00001 diff --git a/frontend/public/types/small/10.png b/frontend/public/types/small/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e35f93913f5cc3a608b8e471c90cfc5e8a8c603a GIT binary patch literal 1326 zcmV+}1=0G6P)=belXdM zSRb=sy)5$iSbych0+A~TQ&#TwZ4yV15bZZ<^Rt=QzU?&756oVeyjI4tk=5w*V2j*q zi)0?*we|dbt*yL%y{79{v;zYc8-u1Cy?<9V6H^>jrKNw+3f%YNpxOm_-F`TC!D}j) z_YahF&rytzdo22jT7mmNIOX%qdA~s0|J?D}mEpiaGT(TUb~ZLtQ5`Ic$g_3byI(0zOdU<_TN1sKuwIwTjbHJD^fqygU0p;G8Cd|1)+WLkj5s+Z(reovCS6 zOz;Q4rdvlfBt5$&;dxoP9O0nTZt_bk$li?2p5-Vv(=et@DiMx4r;|SxRh@cWa$r1< zB-qii$b}z?wz*gpR_l}d_XatqP7?iFDocH3kp5T_v4}DLT7ofy+O%Lx4$LQO_1ScP zS*6n0VeXlI(gNJB+koD_k={lj$S*Cx-Z?kuL}9jvpPmh?YOs6v%?*_;6p{n;9P2Lg zocq8bg0ygQG<8dxg!MM`KoR_IV3DhQCp=5@uyf{&^4B{>DPzn5OV7BKSlCn-GqkTd zd4wxNx+@%kiXODotW>p?Ij0M4^$Y5x4H$zzjdJ5s6Lsy1Y^VyWNs?AzIO6`gO3oKEWPNfD#iqo*(73fkry48@ z8bv!Wd;@gp=wUM78l}ENLokI3VC!FW0L6y`71_{U?N_7%Ty+QFkN#S(7HhdVHcs}; zdCJ}Vt@f2fE)~f+Jxu_`&Wcj{=?BJow_ZGs;~!k;eu?Dwm*~HDPf+QVSCwo|PxBr+ z;4cunJV3p0F-g)79OKQSyLZT4TT=o(rn&a&%z?ENv@#&K?E&*e=;+joa7Txi;kq)y znB|zgE7C3^e6=f3%aB(Mdb0Z^>)jCLU9cK2tgqi<<#mR>!qSQ0V7dZEu>KDK0RR6G k3(MsI000I_L_t&o0GK?~fa?oA>Hq)$07*qoM6N<$f`8qLivR!s literal 0 HcmV?d00001 diff --git a/frontend/public/types/small/11.png b/frontend/public/types/small/11.png new file mode 100644 index 0000000000000000000000000000000000000000..60a891bee076431ae6bfc585a47b6b599e91d191 GIT binary patch literal 1206 zcmV;n1WEgeP) zhaLo}9<-%;@L2HDLRpZ8q`q&nKa<^UvYUMqW7@J`=grJ}-@I>Mc6YKdi2p7w?q3;N z+*@H(7)Mzh`s;+ecP6b=1LF2!4ACU@;ONCOORyg#u2oFA(&JZ9>8;S0p zRCs)_mw-qa3Onf+j1?5z8p*g4EL)i)*zT+zqYX>cC!QPdmQ?L}FMU04b$x5pG3N$) z+`ekNgPM)D3ch-wHy|f$EZ`(KpkHvAv$ZjKi66q;RS#>-o+q^Gq`cjZ+k}_(=uoi2 zVPjr|yrsXwcFv82HJY=-#hUgB9t?h*9TlSu<{TfXR=eQzS>8J{W-j+qHXTeGW0-UN zf*!IX+65!sD7&gCKHy4= zw{oH)#S~_}FA9+Y*r}Bm4vTzf6FkA2jEUjkMx$9~h(T;KzgFk937#B2{<+&M*(9;e zxCI1*LIn{jgi1AA{J43K5Tw)#IgL&(a7>+!E$KaB*3pA&s?!IC!}NiK*5 zLY>G5bu7WI3$fq;m%|BL0?7qenZm}Sj}^juW?=bd zhWgJ1Q^c!j6@CxIEZ@jb_6%77C)xZ~>ko+8H)8rXbpQ4Hkmg^TuFuBZEKTsQ{q8^$ z1HK#itm`%Z#w2jM0|JJqVC1vDQ>HZrY@jfmp{=3t3WuG0efo0V=!j*88M5;}WfaVE#T#9`;OwfZ}F_ zW*?hWLbdsNBnSSiopEmAJNv|>;@67B0UlDgYqp;tUSB})@e6M6Rw)0BA4Shu_;-E= zGyL8q9s~0117F1WeI)x@1v`nBzLjgjSv)ouDj*VokK?bcW#YC7=5;#ekQbcd>sdt) zYgNJ1b(f_&2V0GW&Eb-VykN=fG;o~?)^JigiV_vZRn<{RX-o#Ya$2R6^S8?H^ixZ$ z_as!gTBX#Iv9p-{%tnqy7a3JXw;j+_tWqimt$zUk0RR66PgcGF000I_L_t&o0Hl7} Ue&%k`$N&HU07*qoM6N<$f@&r?i2wiq literal 0 HcmV?d00001 diff --git a/frontend/public/types/small/12.png b/frontend/public/types/small/12.png new file mode 100644 index 0000000000000000000000000000000000000000..398f92050452828d07f4eab8bd4c584386bb4b83 GIT binary patch literal 1614 zcmV-U2C?~xP)BwCS5L8FzDWRtbQ5UCbQq%S`7r6`4hAceMpP>4iAABySGYn!0A25GY8C5CmyWnxz_B5@J`jNjB;EZhCL#{?6Q=CF!Q^d^=pZaF+Afv!oD=~o6AUHBrilMN!7MtWsH$!^>oR?Apr*3cr*BBRi zm>q>fU=ICq75Ei5BIMRrOMJJ4TDZ)1H6_zmiQeRQLLY%WptjIIG zQ+a{cZ2{iaL`5fz0i2cmsiqpbU=|q3`i;3Sb5eA|AloLqjGP9PYJAToPEY@2lQ{{_ zwx6eD{ku*oM_Ew`?|Z(9q+~g|K_h(lm2PVD5nVii$O(({_2_HI(1!`49_3`C`Oh)G zk|)5_NT{HVj+1ZqYV&>~J4#f+MgV7CDdwdNqf6Cy5g_x?(Qrs+;;6?|aa2fzMI(H! z{Yy#LL?_-{GPtgjFJo&iB8VMCKb|HYlM9>+?y^;}y?R zN5f%*1lHEc*)$QawHh935T)9uY9H1%vN+GfC(AeLx?es2Xx|BK-oh_1b!TeBSfLb} zu(gk5;vgjx9agceo~(0UO1$>b$D2O2`SK%(oN!y6oGbSh;WdHl$_)4UiDE-8gtQ3qu0#GpZZ34f5Q^VPNGfrYxS%ie``(d|UQ}yn)X@@n~ z%|5rhNZHLJ?0(|$voT2DGT(F{vVhaWo6BXL#GbOy5w7NS_s~oD((2rgeP0~++;UnY z{BhG~&W>3+m%B@aH8O$4o+&h8ct6$Jk1RAsZhUX@k>rz5ZB@b~6DyP1F|n#prtlX4 zExgfC>Pf-q(oHkr9zN?TH1lN=I>OD8jfV9gkm9I0jS$ftx$%RcLUfIaOJOpbanZPo zeG}IAw8%U7@ZKWXMwZ8fjWLg-rt)e2wI{sTD)~+eYc0^%&UaiS-f`L6EZnfdW()v-MK*DzgX=t}IW^s-x?aoCNy*^2Uzgx!}Su@kYp=efONRV$C) z9M*FEC(Q9r_u-ZYChWF0T05G$bKNR3)q_MA4#on0nFvf+C@wusft_bU{sROPAB&_zb^4jZK z$-1r2JVsjz8eKS&62^Kf;`kdU(M}1A_j6Pz6b#htsNp+j(lGqz5G~~A+0Xi1KHbvC za+F!*k+3&kD&V`5hmnU$O4!;qnNW)^+Fk$WDl!`euADK+RMuUwLB?{T5_Ph&FTyFl zTu(f+N9NO2KllF}fo#Td=JmVoTHCvJ=%DaPSnXw{_jAo5!q&n1jjrxHXzq*f>n|Me z)sJ>(jJ>n~>-n{_@dI9i;|63MOlJ9xTV~{;S0;R_x!=Q0Fx9TAM!w}Ve@v5kN>B5J zpv=fauS|IS)+mk7j?#rIy`C6gJ@Ec_tsdR3tNy#cpv`H_YXiTYp#cx118z999{ER^ z@C3+C^wRjuWlv;S53p}(T3ni^48Ook;8PGzLT->cl^93~Tj$)}<$3Z#j`boW{Zno^ zZ^jzeJzyP=%)eDHC2Vc*sMjA8e$*o<8$TkvDl;k}{VE6#l@K8rm7!Q!+3EmWZHFkY zf@|!TV}D%b0``m-OO!Z*c@Z4J^#K3?0RR8we({w6000I_L_t&o0M#OpDX-F^Jpcdz M07*qoM6N<$f;@mI+5i9m literal 0 HcmV?d00001 diff --git a/frontend/public/types/small/13.png b/frontend/public/types/small/13.png new file mode 100644 index 0000000000000000000000000000000000000000..123567f2f6338907932781bc903b6eb8a3d1068d GIT binary patch literal 1132 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 literal 0 HcmV?d00001 diff --git a/frontend/public/types/small/16.png b/frontend/public/types/small/16.png new file mode 100644 index 0000000000000000000000000000000000000000..e8bb7569614715b7fe77367ad0ea4b5d51cc9de6 GIT binary patch literal 1542 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

P} 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 import { onMounted, onUnmounted, ref } from 'vue'; import { useRouter } from 'vue-router'; +import AppShell from './components/AppShell.vue'; import { api, getAuthToken, onAuthTokenChange, setAuthToken, type AuthUser } from './services/api'; const navItems = [ @@ -54,31 +55,7 @@ onUnmounted(() => { diff --git a/frontend/src/components/AppShell.vue b/frontend/src/components/AppShell.vue new file mode 100644 index 0000000..1fd82d1 --- /dev/null +++ b/frontend/src/components/AppShell.vue @@ -0,0 +1,50 @@ + + + diff --git a/frontend/src/components/DetailSection.vue b/frontend/src/components/DetailSection.vue new file mode 100644 index 0000000..cfe9dd8 --- /dev/null +++ b/frontend/src/components/DetailSection.vue @@ -0,0 +1,17 @@ + + + diff --git a/frontend/src/components/EntityCard.vue b/frontend/src/components/EntityCard.vue new file mode 100644 index 0000000..6c76a49 --- /dev/null +++ b/frontend/src/components/EntityCard.vue @@ -0,0 +1,36 @@ + + + diff --git a/frontend/src/components/FilterPanel.vue b/frontend/src/components/FilterPanel.vue new file mode 100644 index 0000000..ea5d58d --- /dev/null +++ b/frontend/src/components/FilterPanel.vue @@ -0,0 +1,5 @@ + diff --git a/frontend/src/components/PageHeader.vue b/frontend/src/components/PageHeader.vue new file mode 100644 index 0000000..20e800f --- /dev/null +++ b/frontend/src/components/PageHeader.vue @@ -0,0 +1,22 @@ + + + diff --git a/frontend/src/components/PokeBallMark.vue b/frontend/src/components/PokeBallMark.vue new file mode 100644 index 0000000..f94a169 --- /dev/null +++ b/frontend/src/components/PokeBallMark.vue @@ -0,0 +1,14 @@ + + + diff --git a/frontend/src/components/StatusMessage.vue b/frontend/src/components/StatusMessage.vue new file mode 100644 index 0000000..27affd9 --- /dev/null +++ b/frontend/src/components/StatusMessage.vue @@ -0,0 +1,43 @@ + + + diff --git a/frontend/src/styles/main.css b/frontend/src/styles/main.css index d9732f0..e861d69 100644 --- a/frontend/src/styles/main.css +++ b/frontend/src/styles/main.css @@ -1,8 +1,42 @@ :root { - color: #17211b; - background: #f6f4ee; - font-family: - Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + color-scheme: light; + --pokemon-yellow: #ffcb05; + --pokemon-yellow-soft: #ffe46b; + --pokemon-blue: #2a75bb; + --pokemon-blue-deep: #003a70; + --pokemon-red: #ee1515; + --pokemon-red-deep: #cc0000; + --pokeball-black: #202124; + --pokeball-white: #f7f8fb; + --bg: #f2f5fa; + --bg-alt: #eaf1fb; + --surface: #ffffff; + --surface-raised: #ffffff; + --surface-soft: #f8fafd; + --ink: #151923; + --ink-soft: #354052; + --muted: #687487; + --line: #d8deea; + --line-strong: #1f2a3b; + --focus: #0b63ce; + --success: #2eb872; + --warning: #ffb800; + --danger: #df2f2f; + --radius-card: 8px; + --radius-control: 8px; + --radius-small: 6px; + --shadow-control: 0 3px 0 var(--line-strong); + --shadow-soft: 0 8px 22px rgba(23, 35, 54, 0.09); + --shadow-raised: 0 14px 32px rgba(23, 35, 54, 0.13); + --container: 1240px; + --font-sans: + Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", + sans-serif; + --font-display: "Arial Rounded MT Bold", "Nunito", "Avenir Next Rounded", var(--font-sans); + + color: var(--ink); + background: var(--bg); + font-family: var(--font-sans); font-synthesis: none; text-rendering: optimizeLegibility; } @@ -11,9 +45,25 @@ box-sizing: border-box; } +html { + scroll-behavior: smooth; + scrollbar-gutter: stable; +} + +@supports not (scrollbar-gutter: stable) { + html { + overflow-y: scroll; + } +} + body { min-width: 320px; margin: 0; + color: var(--ink); + background: + linear-gradient(90deg, rgba(42, 117, 187, 0.08) 1px, transparent 1px) 0 0 / 32px 32px, + linear-gradient(rgba(42, 117, 187, 0.08) 1px, transparent 1px) 0 0 / 32px 32px, + linear-gradient(180deg, var(--bg) 0%, var(--bg-alt) 100%); } a { @@ -23,97 +73,139 @@ a { button, input, -select { +select, +textarea { font: inherit; } +button { + border: 0; +} + +img, +svg { + display: block; + max-width: 100%; +} + +:focus-visible { + outline: 3px solid var(--focus); + outline-offset: 3px; +} + .app-shell { min-height: 100vh; } -.topbar { +.container { + width: min(100%, var(--container)); + margin: 0 auto; + padding: 0 24px; +} + +.site-header { position: sticky; top: 0; - z-index: 10; - display: flex; - align-items: center; - justify-content: space-between; - gap: 24px; - padding: 16px clamp(16px, 4vw, 48px); - border-bottom: 1px solid #d7d2c4; - background: rgba(246, 244, 238, 0.94); - backdrop-filter: blur(12px); + z-index: 50; + border-bottom: 1px solid rgba(31, 42, 59, 0.12); + background: color-mix(in srgb, var(--surface) 88%, transparent); + backdrop-filter: blur(18px); } -.topbar-main { - display: flex; +.top-nav { + min-height: 70px; + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; - gap: 24px; - min-width: 0; + gap: 22px; } -.brand { - flex: 0 0 auto; - font-size: 20px; +.brand-lockup { + min-width: 216px; + display: inline-flex; + align-items: center; + gap: 12px; +} + +.pokemon-word { + display: inline-block; + color: var(--pokemon-yellow); + font-family: var(--font-display); + font-size: 28px; + font-weight: 900; + line-height: 0.9; + -webkit-text-stroke: 2px var(--pokemon-blue-deep); + text-shadow: 2px 3px 0 var(--pokemon-blue); +} + +.brand-subtitle { + display: block; + margin-top: 2px; + color: var(--muted); + font-size: 12px; font-weight: 800; - color: #1d3b2b; + text-transform: uppercase; } -.nav-tabs { +.nav-links { display: flex; - gap: 8px; + justify-content: center; + gap: 4px; overflow-x: auto; } -.nav-tabs a { - min-width: max-content; - padding: 8px 12px; - border-radius: 8px; - color: #4e5c52; - font-weight: 700; +.nav-links a { + min-height: 38px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 8px 10px; + border-radius: var(--radius-control); + color: var(--ink-soft); + font-size: 14px; + font-weight: 850; + white-space: nowrap; } -.nav-tabs a.router-link-active { - background: #1f6f50; +.nav-links a:hover { + background: rgba(255, 203, 5, 0.24); + color: var(--ink); +} + +.nav-links a.router-link-active { + background: var(--pokemon-blue); color: #ffffff; } .auth-actions { display: flex; align-items: center; + justify-content: flex-end; gap: 8px; - flex: 0 0 auto; -} - -.auth-actions a, -.auth-actions .plain-button { - min-height: 36px; - padding: 7px 12px; - border: 1px solid #c7c0b2; - border-radius: 8px; - background: #fffdfa; - color: #4e5c52; - font-weight: 800; -} - -.auth-actions a.router-link-active { - border-color: #1f6f50; - color: #1f5c40; } .auth-user { max-width: 180px; overflow: hidden; - color: #566156; - font-weight: 800; + color: var(--ink-soft); + font-size: 14px; + font-weight: 850; text-overflow: ellipsis; white-space: nowrap; } .page { - width: min(1180px, calc(100% - 32px)); + position: relative; + --page-padding-x: 24px; + width: min(100%, var(--container)); margin: 0 auto; - padding: 28px 0 56px; + padding: 30px var(--page-padding-x) 58px; +} + +.page-stack { + position: relative; + display: grid; + gap: 18px; } .page-header { @@ -121,51 +213,233 @@ select { align-items: end; justify-content: space-between; gap: 16px; - margin-bottom: 20px; +} + +.page-header__copy { + display: grid; + gap: 8px; + min-width: 0; +} + +.page-header__actions { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + gap: 8px; +} + +.page-kicker { + display: inline-flex; + align-items: center; + gap: 8px; + width: fit-content; + color: var(--pokemon-blue); + font-size: 13px; + font-weight: 900; + text-transform: uppercase; +} + +.page-kicker::before { + content: ""; + width: 18px; + height: 18px; + border: 3px solid var(--line-strong); + border-radius: 50%; + background: + linear-gradient(to bottom, var(--pokemon-red) 0 44%, var(--line-strong) 44% 56%, var(--surface) 56% 100%); } .page-title { margin: 0; - font-size: clamp(28px, 4vw, 40px); - line-height: 1.1; + color: var(--ink); + font-family: var(--font-display); + font-size: 42px; + font-weight: 950; + line-height: 1.08; } .page-subtitle { - margin: 8px 0 0; - color: #657067; + margin: 0; + color: var(--ink-soft); } +.pokeball-mark { + position: relative; + width: var(--ball-size, 34px); + height: var(--ball-size, 34px); + display: inline-block; + flex: 0 0 auto; + border: calc(var(--ball-size, 34px) * 0.07) solid var(--pokeball-black); + border-radius: 50%; + background: + linear-gradient( + to bottom, + var(--pokemon-red) 0 45%, + var(--pokeball-black) 45% 55%, + var(--pokeball-white) 55% 100% + ); + box-shadow: inset 0 4px 0 rgba(255, 255, 255, 0.45), 0 3px 0 rgba(0, 0, 0, 0.18); +} + +.pokeball-mark::after { + content: ""; + position: absolute; + inset: 50% auto auto 50%; + width: calc(var(--ball-size, 34px) * 0.34); + height: calc(var(--ball-size, 34px) * 0.34); + transform: translate(-50%, -50%); + border: calc(var(--ball-size, 34px) * 0.055) solid var(--pokeball-black); + border-radius: 50%; + background: var(--pokeball-white); + box-shadow: inset 0 0 0 calc(var(--ball-size, 34px) * 0.055) #dfe5ef; +} + +.ui-button, +.primary-button, +.link-button, +.plain-button, +.row-actions button, +.inline-row button, +.appearance-row button { + --btn-bg: var(--surface); + --btn-fg: var(--ink); + --btn-border: var(--line-strong); + min-height: 42px; + width: fit-content; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 9px 13px; + border: 2px solid var(--btn-border); + border-radius: var(--radius-control); + background: var(--btn-bg); + color: var(--btn-fg); + box-shadow: var(--shadow-control); + font-weight: 900; + line-height: 1.1; + cursor: pointer; + transition: + transform 0.14s ease, + box-shadow 0.14s ease, + background 0.14s ease, + border-color 0.14s ease; + white-space: nowrap; +} + +.ui-button:hover, +.primary-button:hover, +.link-button:hover, +.plain-button:hover, +.row-actions button:hover, +.inline-row button:hover, +.appearance-row button:hover { + transform: translateY(-2px); + box-shadow: 0 5px 0 var(--line-strong); +} + +.ui-button:active, +.primary-button:active, +.link-button:active, +.plain-button:active, +.row-actions button:active, +.inline-row button:active, +.appearance-row button:active { + transform: translateY(2px); + box-shadow: 0 1px 0 var(--line-strong); +} + +.ui-button--primary, +.primary-button { + --btn-bg: var(--pokemon-yellow); + --btn-fg: #172036; +} + +.ui-button--blue, +.link-button { + --btn-bg: var(--pokemon-blue); + --btn-fg: #ffffff; +} + +.ui-button--red { + --btn-bg: var(--pokemon-red); + --btn-fg: #ffffff; +} + +.ui-button--ghost, +.plain-button, +.row-actions button, +.inline-row button, +.appearance-row button { + --btn-bg: var(--surface); + --btn-border: var(--line); + box-shadow: none; +} + +.ui-button--small { + min-height: 36px; + padding: 7px 10px; + font-size: 14px; + box-shadow: 0 2px 0 var(--line-strong); +} + +button:disabled, +.ui-button:disabled, +.primary-button:disabled, +.link-button:disabled, +.plain-button:disabled { + cursor: not-allowed; + opacity: 0.54; + transform: none; + box-shadow: 0 2px 0 var(--line); +} + +.filter-panel, .toolbar { display: grid; - grid-template-columns: repeat(4, minmax(150px, 1fr)); - gap: 12px; - margin-bottom: 20px; + grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); + gap: 14px; padding: 16px; - border: 1px solid #d7d2c4; - border-radius: 8px; - background: #ffffff; + border: 2px solid var(--line-strong); + border-radius: var(--radius-card); + background: var(--surface); + box-shadow: var(--shadow-control); } .field { display: grid; - gap: 6px; + gap: 7px; + align-content: start; } -.field label { - font-size: 12px; - font-weight: 800; - color: #566156; +.field label, +.field-label { + color: var(--ink-soft); + font-size: 14px; + font-weight: 850; } .field input, -.field select { +.field select, +.tags-select__search { width: 100%; - min-height: 40px; - padding: 8px 10px; - border: 1px solid #c7c0b2; - border-radius: 8px; - background: #fffdfa; - color: #17211b; + min-height: 44px; + padding: 10px 12px; + border: 2px solid var(--line); + border-radius: var(--radius-control); + background: var(--surface); + color: var(--ink); + transition: + border-color 0.14s ease, + box-shadow 0.14s ease; +} + +.field input:focus, +.field select:focus, +.tags-select__search:focus { + border-color: var(--pokemon-blue); + box-shadow: 0 0 0 4px rgba(42, 117, 187, 0.16); + outline: none; } .tags-select { @@ -178,19 +452,19 @@ select { justify-content: space-between; gap: 8px; width: 100%; - min-height: 40px; - padding: 6px 10px; - border: 1px solid #c7c0b2; - border-radius: 8px; - background: #fffdfa; - color: #17211b; + min-height: 44px; + padding: 7px 10px; + border: 2px solid var(--line); + border-radius: var(--radius-control); + background: var(--surface); + color: var(--ink); text-align: left; cursor: pointer; } .tags-select__trigger.open { - border-color: #1f6f50; - box-shadow: 0 0 0 3px rgba(31, 111, 80, 0.12); + border-color: var(--pokemon-blue); + box-shadow: 0 0 0 4px rgba(42, 117, 187, 0.16); } .tags-select__selected { @@ -205,72 +479,61 @@ select { align-items: center; justify-content: center; gap: 6px; - min-height: 26px; - padding: 3px 7px; - border-color: #9fc9a5; - border: 1px solid #9fc9a5; + min-height: 28px; + padding: 4px 8px; + border: 1px solid rgba(42, 117, 187, 0.28); border-radius: 999px; - background: #edf7ef; - color: #1f5c40; + background: rgba(42, 117, 187, 0.1); + color: var(--pokemon-blue-deep); font-size: 13px; - font-weight: 800; + font-weight: 850; } .tags-select__remove { + min-width: 18px; + min-height: 18px; display: inline-flex; align-items: center; justify-content: center; - min-width: 18px; - min-height: 18px; border-radius: 999px; - color: #4e5c52; + color: var(--ink-soft); cursor: pointer; } .tags-select__remove:hover { - background: rgba(31, 111, 80, 0.12); + background: rgba(42, 117, 187, 0.14); } .tags-select__placeholder { - color: #8a8275; + color: var(--muted); } .tags-select__arrow { flex: 0 0 auto; - color: #657067; - font-size: 16px; + color: var(--muted); + font-size: 18px; line-height: 1; } .tags-select__dropdown { position: absolute; - top: calc(100% + 4px); + top: calc(100% + 6px); left: 0; z-index: 40; display: grid; gap: 8px; width: 100%; - min-width: 220px; + min-width: 240px; padding: 8px; - border: 1px solid #d7d2c4; - border-radius: 8px; - background: #ffffff; - box-shadow: 0 12px 28px rgba(23, 33, 27, 0.16); -} - -.tags-select__search { - width: 100%; - min-height: 40px; - padding: 8px 10px; - border: 1px solid #c7c0b2; - border-radius: 8px; - background: #fffdfa; - color: #17211b; + border: 2px solid var(--line-strong); + border-radius: var(--radius-card); + background: var(--surface); + box-shadow: var(--shadow-raised); } .tags-select__options { display: grid; - max-height: 220px; + max-height: 240px; overflow: auto; } @@ -283,9 +546,9 @@ select { min-height: 40px; padding: 8px 10px; border: 0; - border-radius: 6px; + border-radius: var(--radius-small); background: transparent; - color: #17211b; + color: var(--ink); text-align: left; cursor: pointer; } @@ -293,27 +556,23 @@ select { .tags-select__option:hover, .tags-select__option.active, .tags-select__option.selected { - background: #edf7ef; - color: #1f5c40; + background: rgba(255, 203, 5, 0.22); + color: var(--pokemon-blue-deep); } .tags-select__option.active { - box-shadow: inset 0 0 0 2px rgba(31, 111, 80, 0.18); + box-shadow: inset 0 0 0 2px rgba(42, 117, 187, 0.2); } .tags-select__option.selected { - font-weight: 800; + font-weight: 850; } .tags-select__create { - border-top: 1px solid #ebe6da; + border-top: 1px solid var(--line); border-radius: 0; - color: #1f6f50; - font-weight: 800; -} - -.tags-select__create:hover { - background: #edf7ef; + color: var(--pokemon-blue); + font-weight: 850; } .tags-select__option:disabled { @@ -323,80 +582,143 @@ select { .tags-select__state { flex: 0 0 auto; - color: #1f6f50; + color: var(--pokemon-blue); font-size: 12px; - font-weight: 800; + font-weight: 850; } .tags-select__empty { margin: 0; padding: 8px 10px; - color: #657067; + color: var(--muted); font-size: 13px; } .segmented { display: inline-flex; + flex-wrap: wrap; width: fit-content; - padding: 3px; - border: 1px solid #c7c0b2; - border-radius: 8px; - background: #f1eee5; + gap: 4px; + padding: 4px; + border: 2px solid var(--line); + border-radius: var(--radius-control); + background: var(--surface-soft); } .segmented button { min-width: 52px; - min-height: 32px; - border: 0; - border-radius: 6px; + min-height: 34px; + padding: 6px 10px; + border-radius: var(--radius-small); background: transparent; - color: #566156; + color: var(--ink-soft); + font-weight: 850; cursor: pointer; } .segmented button.active { - background: #ffffff; - color: #1f6f50; - font-weight: 800; - box-shadow: 0 1px 4px rgba(31, 111, 80, 0.16); + background: var(--pokemon-blue); + color: #ffffff; } +.tabs { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.tabs button { + min-height: 42px; + padding: 9px 13px; + border: 2px solid var(--line); + border-radius: var(--radius-control); + background: var(--surface); + color: var(--ink-soft); + font-weight: 900; + cursor: pointer; +} + +.tabs button.active { + border-color: var(--line-strong); + background: var(--pokemon-yellow); + color: #172036; + box-shadow: 0 2px 0 var(--line-strong); +} + +.entity-grid, .grid { display: grid; - grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); - gap: 14px; -} - -.entity-card, -.detail-section { - border: 1px solid #d7d2c4; - border-radius: 8px; - background: #ffffff; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 16px; } .entity-card { + min-height: 164px; display: grid; + grid-template-columns: auto minmax(0, 1fr); gap: 12px; padding: 16px; + border: 2px solid var(--line-strong); + border-radius: var(--radius-card); + background: var(--surface); + box-shadow: var(--shadow-control); + color: var(--ink); } -.entity-card h2, -.entity-card h3, -.detail-section h2 { - margin: 0; - font-size: 18px; +.entity-card--link { + transition: + transform 0.16s ease, + box-shadow 0.16s ease, + border-color 0.16s ease; } +.entity-card--link:hover { + transform: translateY(-2px); + border-color: var(--pokemon-blue); + box-shadow: 0 5px 0 var(--line-strong); +} + +.entity-card__mark { + width: 42px; + height: 42px; + display: inline-grid; + place-items: center; + border: 2px solid var(--line-strong); + border-radius: var(--radius-control); + background: var(--pokemon-yellow); + box-shadow: 0 3px 0 var(--line-strong); + color: #172036; + font-family: var(--font-display); + font-weight: 950; +} + +.entity-card__content { + display: grid; + align-content: start; + gap: 10px; + min-width: 0; +} + +.entity-card__title { + color: var(--ink); + font-family: var(--font-display); + font-size: 21px; + font-weight: 950; + line-height: 1.12; + overflow-wrap: anywhere; +} + +.entity-card__subtitle, .meta-line { margin: 0; - color: #657067; + color: var(--muted); } .edit-meta { margin: 0; - color: #7b766a; + color: var(--muted); font-size: 13px; - font-weight: 700; + font-weight: 750; } .chips { @@ -410,31 +732,60 @@ select { align-items: center; min-height: 28px; padding: 4px 8px; - border: 1px solid #cddfce; + border: 1px solid rgba(42, 117, 187, 0.28); border-radius: 999px; - background: #edf7ef; - color: #1f5c40; + background: rgba(42, 117, 187, 0.1); + color: var(--pokemon-blue-deep); font-size: 13px; - font-weight: 700; + font-weight: 800; } .detail-grid { display: grid; - grid-template-columns: 1fr 1fr; - gap: 14px; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; } .detail-section { + display: grid; + gap: 12px; padding: 18px; + border: 1px solid var(--line); + border-radius: var(--radius-card); + background: var(--surface); + box-shadow: var(--shadow-soft); +} + +.detail-section__header, +.detail-section > h2 { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; } .detail-section h2 { - margin-bottom: 12px; + margin: 0; + color: var(--ink); + font-family: var(--font-display); + font-size: 21px; + font-weight: 950; + line-height: 1.12; +} + +.detail-section__body { + display: grid; + gap: 12px; +} + +.detail-section a:not(.ui-button) { + color: var(--pokemon-blue-deep); + font-weight: 850; } .row-list { display: grid; - gap: 8px; + gap: 0; margin: 0; padding: 0; list-style: none; @@ -445,8 +796,8 @@ select { align-items: center; justify-content: space-between; gap: 12px; - padding: 10px 0; - border-bottom: 1px solid #ebe6da; + padding: 11px 0; + border-bottom: 1px solid var(--line); } .row-list li:last-child { @@ -469,7 +820,7 @@ select { gap: 4px; width: 100%; margin: 0; - color: #657067; + color: var(--muted); text-align: left; } @@ -485,67 +836,84 @@ select { } .appearance-summary dt { - color: #566156; - font-weight: 800; + color: var(--ink-soft); + font-weight: 850; } -.link-button { - display: inline-flex; - align-items: center; - justify-content: center; - min-height: 36px; - width: fit-content; - padding: 7px 12px; - border-radius: 8px; - background: #a83f39; - color: #ffffff; +.status-message { + position: absolute; + right: 0; + left: 0; + z-index: 80; + display: flex; + align-items: start; + gap: 10px; + width: auto; + margin: 0; + padding: 14px; + border: 1px solid var(--status-line, var(--line)); + border-left: 6px solid var(--status-accent, var(--pokemon-blue)); + border-radius: var(--radius-card); + background: var(--status-bg, var(--surface)); + box-shadow: var(--shadow-raised); + color: var(--ink-soft); font-weight: 800; + pointer-events: none; + opacity: 1; + transform: translateY(0); + visibility: visible; + transition: + opacity 0.18s ease, + transform 0.18s ease, + visibility 0.18s ease; } -.primary-button { - display: inline-flex; - align-items: center; - justify-content: center; - width: fit-content; - min-height: 40px; - padding: 8px 14px; - border: 0; - border-radius: 8px; - background: #1f6f50; - color: #ffffff; - font-weight: 800; - cursor: pointer; +.page > .status-message { + right: var(--page-padding-x); + left: var(--page-padding-x); +} + +.status-message--hidden { + opacity: 0; + transform: translateY(-6px); + visibility: hidden; +} + +.status-message::before { + content: ""; + width: 12px; + height: 12px; + flex: 0 0 auto; + margin-top: 6px; + border-radius: 50%; + background: var(--status-accent, var(--pokemon-blue)); +} + +.status-message--success { + --status-accent: var(--success); + --status-line: color-mix(in srgb, var(--success) 38%, var(--line)); + --status-bg: color-mix(in srgb, var(--success) 10%, var(--surface)); +} + +.status-message--warning { + --status-accent: var(--warning); + --status-line: color-mix(in srgb, var(--warning) 42%, var(--line)); + --status-bg: color-mix(in srgb, var(--warning) 12%, var(--surface)); +} + +.status-message--danger { + --status-accent: var(--danger); + --status-line: color-mix(in srgb, var(--danger) 38%, var(--line)); + --status-bg: color-mix(in srgb, var(--danger) 10%, var(--surface)); } .status { - padding: 18px; - border: 1px solid #d7d2c4; - border-radius: 8px; - background: #ffffff; - color: #657067; -} - -.tabs { - display: flex; - gap: 8px; - margin-bottom: 16px; -} - -.tabs button { - min-height: 40px; - padding: 8px 14px; - border: 1px solid #c7c0b2; - border-radius: 8px; - background: #fffdfa; - color: #566156; - cursor: pointer; -} - -.tabs button.active { - border-color: #1f6f50; - background: #1f6f50; - color: #ffffff; - font-weight: 800; + margin: 0; + padding: 14px; + border: 1px solid var(--line); + border-radius: var(--radius-card); + background: var(--surface); + color: var(--muted); } .auth-page { @@ -555,54 +923,60 @@ select { } .auth-panel { + position: relative; + width: min(480px, 100%); display: grid; gap: 18px; - width: min(460px, 100%); padding: 22px; - border: 1px solid #d7d2c4; - border-radius: 8px; - background: #ffffff; + border: 2px solid var(--line-strong); + border-radius: var(--radius-card); + background: var(--surface); + box-shadow: var(--shadow-control); } .auth-panel .page-header { - margin-bottom: 0; + display: block; +} + +.auth-panel .page-title { + font-size: 34px; } .auth-form { + position: relative; display: grid; gap: 14px; } +.auth-switch { + margin: 0; + color: var(--muted); +} + +.auth-switch a { + color: var(--pokemon-blue-deep); + font-weight: 900; +} + .auth-message { margin: 0; padding: 10px 12px; - border: 1px solid #b9d8bd; - border-radius: 8px; - background: #edf7ef; - color: #1f5c40; + border: 1px solid color-mix(in srgb, var(--success) 38%, var(--line)); + border-radius: var(--radius-card); + background: color-mix(in srgb, var(--success) 10%, var(--surface)); + color: var(--ink-soft); font-weight: 800; } .auth-message.error { - border-color: #e0b0ac; - background: #fff0ee; - color: #a83f39; -} - -.auth-switch { - margin: 0; - color: #657067; -} - -.auth-switch a { - color: #1f6f50; - font-weight: 800; + border-color: color-mix(in srgb, var(--danger) 38%, var(--line)); + background: color-mix(in srgb, var(--danger) 10%, var(--surface)); } .admin-layout { display: grid; - grid-template-columns: minmax(320px, 420px) 1fr; - gap: 14px; + grid-template-columns: minmax(320px, 420px) minmax(0, 1fr); + gap: 16px; align-items: start; } @@ -623,34 +997,28 @@ select { .row-actions { flex: 0 0 auto; + flex-wrap: wrap; + justify-content: flex-end; } .row-actions button, -.plain-button, .inline-row button, .appearance-row button { min-height: 34px; padding: 6px 10px; - border: 1px solid #c7c0b2; - border-radius: 8px; - background: #fffdfa; - color: #4e5c52; - cursor: pointer; -} - -.plain-button { - width: fit-content; + font-size: 14px; } .inline-row { align-items: center; } -.inline-row select { +.inline-row .tags-select { flex: 1; + min-width: 180px; } -.inline-row .tags-select { +.inline-row select { flex: 1; } @@ -658,40 +1026,56 @@ select { width: 90px; } +.check-row label { + display: inline-flex; + align-items: center; + gap: 7px; + min-height: 36px; + color: var(--ink-soft); + font-weight: 850; + cursor: pointer; +} + +.check-row input { + width: 18px; + height: 18px; + accent-color: var(--pokemon-blue); +} + .appearance-row { display: grid; grid-template-columns: 1fr; padding: 12px; - border: 1px solid #ebe6da; - border-radius: 8px; - background: #faf8f1; + border: 1px solid var(--line); + border-radius: var(--radius-card); + background: var(--surface-soft); } .appearance-row input { min-width: 64px; } -button:disabled { - cursor: not-allowed; - opacity: 0.6; -} - -@media (max-width: 760px) { - .topbar { - align-items: start; - flex-direction: column; +@media (max-width: 900px) { + .top-nav { + grid-template-columns: 1fr; + gap: 12px; + padding-top: 14px; + padding-bottom: 14px; } - .topbar-main { - align-items: start; - flex-direction: column; - gap: 12px; + .brand-lockup, + .auth-actions, + .nav-links { + justify-content: flex-start; + min-width: 0; + } + + .nav-links { width: 100%; } .auth-actions { flex-wrap: wrap; - width: 100%; } .page-header { @@ -699,22 +1083,63 @@ button:disabled { flex-direction: column; } - .toolbar, + .page-header__actions { + justify-content: flex-start; + } + .detail-grid, .admin-layout { grid-template-columns: 1fr; } +} - .appearance-row { +@media (max-width: 640px) { + .container, + .page { + --page-padding-x: 16px; + padding-right: var(--page-padding-x); + padding-left: var(--page-padding-x); + } + + .page { + padding-top: 22px; + padding-bottom: 44px; + } + + .page-title { + font-size: 32px; + } + + .pokemon-word { + font-size: 25px; + } + + .filter-panel, + .toolbar, + .entity-grid, + .grid { + grid-template-columns: 1fr; + } + + .entity-card { grid-template-columns: 1fr; } .appearance-list li { - align-items: start; grid-template-columns: 1fr; } - .appearance-list { - overflow-x: auto; + .appearance-summary div { + grid-template-columns: 68px minmax(0, 1fr); + } + + .inline-row { + align-items: stretch; + flex-direction: column; + } + + .inline-row input, + .inline-row .tags-select { + width: 100%; } } diff --git a/frontend/src/views/AdminView.vue b/frontend/src/views/AdminView.vue index d23b2a8..6f478ac 100644 --- a/frontend/src/views/AdminView.vue +++ b/frontend/src/views/AdminView.vue @@ -1,5 +1,7 @@