Compare commits
24 Commits
main
...
1f7693898c
| Author | SHA1 | Date | |
|---|---|---|---|
| 1f7693898c | |||
| 0c16763943 | |||
| e6f5cd0720 | |||
| 4173c64af8 | |||
| 81af93a813 | |||
| d9a4eba9a3 | |||
| 03cb0224d6 | |||
| 795509be1b | |||
| 877c833f7d | |||
| 66fb329747 | |||
| d7f46d174a | |||
| 76e9fc1af1 | |||
| a32c0d1337 | |||
| f2a4451b92 | |||
| 3e6206630f | |||
| 1dba0c80ab | |||
| 46bb77df9b | |||
| 2fab3af26d | |||
| 50d1aeea4b | |||
| 544281ed8e | |||
| e880f121b0 | |||
| 2371dff023 | |||
| 8e2fbe79d8 | |||
| 9b37235d1e |
@@ -51,6 +51,12 @@ pnpm-debug.log*
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# ==========================================
|
||||
# 디자인 시안 (Claude Design 내보내기) — 로컬 참고용, 개인 사진 포함
|
||||
# 앱에 필요한 에셋은 flutter/assets/ 로 옮겨 커밋한다
|
||||
# ==========================================
|
||||
/.design/
|
||||
|
||||
# ==========================================
|
||||
# 캐시
|
||||
# ==========================================
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- 명함 이미지를 앨범에 저장 (Android 10 이하만 필요 — gal) -->
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
|
||||
<application
|
||||
android:label="tma_app"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:requestLegacyExternalStorage="true">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
# 폰트 출처
|
||||
|
||||
시안(`.design/styles.css`)이 웹 CDN 에서 불러오는 서체를 앱에 번들했다.
|
||||
웹폰트(woff)만 배포되는 서체는 TTF 로 변환했다(테이블 압축만 해제, 글리프 변경 없음).
|
||||
|
||||
| 파일 | 서체 | 출처 | 라이선스 |
|
||||
| --- | --- | --- | --- |
|
||||
| `SUITE-*.ttf` | SUITE | https://github.com/sun-typeface/SUITE | SIL OFL 1.1 |
|
||||
| `ChungbukNationalUniversity-*.ttf` | 충북대학교 70주년 기념체 | 눈누(noonfonts_2201-2) woff → TTF 변환 | 배포처 약관 확인 필요 |
|
||||
| `UhBeeKeongKeong.ttf` | 어비 꿍꿍체 | 눈누(noonfonts_five) woff → TTF 변환 | 배포처 약관 확인 필요 |
|
||||
|
||||
> ⚠️ 충북대체·어비체는 **운영 배포 전에 원 배포처의 상업적 이용·앱 임베딩 허용 범위를 확인**한다.
|
||||
> 가능하면 원 배포처의 TTF/OTF 원본으로 교체한다.
|
||||
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="360" height="140" viewBox="0 0 360 140"><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#FFECE2"></stop><stop offset="1" stop-color="#FFD9C6"></stop></linearGradient></defs><rect width="360" height="140" fill="url(#g)"></rect><g fill="#FFB492" opacity="0.45"><circle cx="177" cy="77" r="4.2"></circle><circle cx="162" cy="71" r="4.0"></circle><circle cx="209" cy="60" r="5.0"></circle><circle cx="230" cy="24" r="6.0"></circle><circle cx="235" cy="33" r="6.3"></circle><circle cx="76" cy="21" r="8.1"></circle><circle cx="59" cy="64" r="8.2"></circle><circle cx="154" cy="75" r="6.8"></circle><circle cx="75" cy="122" r="5.7"></circle><circle cx="195" cy="52" r="4.3"></circle><circle cx="133" cy="54" r="4.0"></circle><circle cx="96" cy="111" r="5.9"></circle><circle cx="213" cy="59" r="7.2"></circle><circle cx="64" cy="40" r="5.8"></circle><circle cx="35" cy="61" r="6.9"></circle><circle cx="326" cy="51" r="5.7"></circle><circle cx="160" cy="107" r="5.8"></circle><circle cx="104" cy="42" r="7.2"></circle><circle cx="107" cy="99" r="7.7"></circle><circle cx="317" cy="109" r="7.2"></circle><circle cx="197" cy="19" r="5.2"></circle><circle cx="89" cy="59" r="6.9"></circle><circle cx="105" cy="119" r="3.6"></circle><circle cx="207" cy="64" r="4.0"></circle><circle cx="166" cy="110" r="6.4"></circle><circle cx="60" cy="102" r="7.9"></circle></g></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="360" height="140" viewBox="0 0 360 140"><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#FFEDF2"></stop><stop offset="1" stop-color="#FFD6E2"></stop></linearGradient></defs><rect width="360" height="140" fill="url(#g)"></rect><g fill="#FF9BBA" opacity="0.5"><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(253,78) scale(1.97) rotate(19)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(59,112) scale(1.20) rotate(2)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(151,49) scale(1.84) rotate(31)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(52,96) scale(1.74) rotate(2)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(126,48) scale(1.63) rotate(35)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(48,32) scale(1.01) rotate(18)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(52,26) scale(2.00) rotate(32)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(146,100) scale(2.00) rotate(15)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(183,83) scale(1.59) rotate(18)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(147,47) scale(1.15) rotate(24)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(332,17) scale(1.94) rotate(2)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(127,58) scale(2.00) rotate(22)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(230,17) scale(1.18) rotate(3)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(257,85) scale(1.03) rotate(19)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(96,29) scale(1.83) rotate(16)"></path><path d="M0,-3 C-3,-7 -9,-3 0,4 C9,-3 3,-7 0,-3 Z" transform="translate(195,115) scale(1.71) rotate(29)"></path></g></svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="360" height="140" viewBox="0 0 360 140"><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#F4EEFC"></stop><stop offset="1" stop-color="#E5D6F8"></stop></linearGradient></defs><rect width="360" height="140" fill="url(#g)"></rect><g fill="#B794EC" opacity="0.5"><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(138,119) scale(1.20) rotate(18)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(103,113) scale(1.29) rotate(15)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(103,18) scale(0.77) rotate(2)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(110,71) scale(1.45) rotate(17)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(155,16) scale(1.00) rotate(5)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(293,23) scale(1.09) rotate(16)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(142,67) scale(1.07) rotate(13)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(230,23) scale(1.17) rotate(8)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(44,49) scale(0.89) rotate(17)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(126,72) scale(0.67) rotate(1)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(222,98) scale(1.50) rotate(0)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(210,59) scale(0.75) rotate(17)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(276,48) scale(0.81) rotate(11)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(25,97) scale(0.83) rotate(12)"></path><path d="M0,-7 L1.8,-2.2 L7,-2.2 L2.6,1 L4.2,6 L0,3 L-4.2,6 L-2.6,1 L-7,-2.2 L-1.8,-2.2 Z" transform="translate(45,16) scale(1.27) rotate(10)"></path></g></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="360" height="140" viewBox="0 0 360 140"><defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#EAF7F1"></stop><stop offset="1" stop-color="#D2EFE1"></stop></linearGradient></defs><rect width="360" height="140" fill="url(#g)"></rect><g fill="#5BC79E" opacity="0.5"><g transform="translate(291,122) scale(0.88)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(217,87) scale(0.78)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(308,102) scale(0.84)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(74,106) scale(1.00)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(257,46) scale(1.18)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(237,44) scale(1.48)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(129,99) scale(1.09)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(213,73) scale(0.80)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(261,78) scale(1.22)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(30,63) scale(0.82)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(300,24) scale(1.23)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(273,59) scale(1.68)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g><g transform="translate(311,72) scale(0.84)"><ellipse cx="0" cy="2.5" rx="5" ry="4.2"></ellipse><circle cx="-4.6" cy="-3.2" r="2"></circle><circle cx="-1.4" cy="-5.4" r="2.1"></circle><circle cx="1.9" cy="-5.4" r="2.1"></circle><circle cx="5" cy="-3.2" r="2"></circle></g></g></svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg viewBox="161 64 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M161 88.2316C161 83.5539 161 81.2206 161.91 79.433C162.714 77.8651 163.99 76.5892 165.558 75.7855C167.34 74.875 169.679 74.875 174.357 74.875H190.737C191.532 74.875 192.177 75.5194 192.177 76.3144C192.177 77.1127 191.527 77.7585 190.729 77.7537L174.44 77.6566H174.44C172.054 77.6566 170.431 77.6566 169.178 77.7624C167.958 77.8598 167.332 78.0408 166.897 78.2636C165.85 78.7975 164.998 79.6493 164.464 80.6971C164.241 81.1315 164.06 81.7552 163.963 82.9775C163.86 84.2305 163.857 85.8454 163.857 88.2399V94.9224C163.857 97.3086 163.86 98.9319 163.963 100.185C164.063 101.404 164.244 102.031 164.464 102.465C164.998 103.512 165.85 104.364 166.897 104.899C167.332 105.122 167.958 105.303 169.178 105.4C170.431 105.5 172.046 105.503 174.44 105.503H192.26C194.646 105.503 196.27 105.503 197.522 105.4C198.742 105.3 199.369 105.119 199.803 104.899C200.85 104.364 201.702 103.512 202.236 102.465C202.459 102.031 202.64 101.404 202.738 100.182C202.841 98.9291 202.843 97.3142 202.843 94.9196V89.5792C202.843 88.8376 203.444 88.2359 204.185 88.2344C204.929 88.2328 205.533 88.8354 205.533 89.5792V94.9141C205.533 99.5918 205.533 101.925 204.623 103.713C203.822 105.283 202.545 106.56 200.975 107.36C199.193 108.271 196.854 108.271 192.177 108.271H192.177H174.357H174.357C169.679 108.271 167.346 108.271 165.558 107.36C163.99 106.556 162.714 105.281 161.91 103.713C161 101.931 161 99.5918 161 94.9141V88.2316Z" fill="currentColor"></path>
|
||||
<path d="M188.685 84.17C188.292 84.17 187.915 84.3261 187.637 84.6039C187.359 84.8817 187.203 85.2585 187.203 85.6514C187.203 86.0443 187.359 86.4211 187.637 86.6989C187.915 86.9767 188.292 87.1328 188.685 87.1328L196.9 87.1268C197.293 87.1268 197.67 86.9707 197.948 86.6929C198.226 86.4151 198.382 86.0383 198.382 85.6454C198.382 85.2526 198.226 84.8758 197.948 84.5979C197.67 84.3201 197.293 84.1641 196.9 84.1641L188.685 84.17ZM188.685 90.0955C188.292 90.0955 187.915 90.2516 187.637 90.5294C187.359 90.8072 187.203 91.184 187.203 91.5769C187.203 91.9698 187.359 92.3466 187.637 92.6244C187.915 92.9022 188.292 93.0583 188.685 93.0583L196.9 93.0523C197.293 93.0523 197.67 92.8962 197.948 92.6184C198.226 92.3406 198.382 91.9638 198.382 91.5709C198.382 91.1781 198.226 90.8013 197.948 90.5234C197.67 90.2456 197.293 90.0896 196.9 90.0896L188.685 90.0955ZM187.203 97.5024C187.203 97.1095 187.359 96.7327 187.637 96.4549C187.915 96.1771 188.292 96.021 188.685 96.021L193.938 96.0151C194.33 96.0151 194.707 96.1711 194.985 96.4489C195.263 96.7268 195.419 97.1036 195.419 97.4964C195.419 97.8893 195.263 98.2661 194.985 98.5439C194.707 98.8217 194.33 98.9778 193.938 98.9778L188.685 98.9838C188.292 98.9838 187.915 98.8277 187.637 98.5499C187.359 98.2721 187.203 97.8953 187.203 97.5024Z" fill="currentColor"></path>
|
||||
<path d="M181.905 84.9885C181.905 84.7655 181.635 84.6541 181.477 84.8122L178.854 87.4486C178.757 87.5462 178.757 87.7038 178.854 87.8013L180.921 89.8785C181.019 89.9767 181.178 89.9767 181.275 89.8785L181.727 89.4242C181.825 89.3259 181.984 89.3259 182.082 89.4242L182.534 89.8785C182.631 89.9767 182.79 89.9767 182.888 89.8785L184.148 88.6118C184.245 88.5143 184.245 88.3567 184.148 88.2592L181.977 86.077C181.931 86.0302 181.905 85.9668 181.905 85.9007V84.9885ZM169.179 87.8031C169.081 87.7049 168.922 87.7049 168.825 87.8031L168.371 88.2592C168.274 88.3567 168.274 88.5143 168.371 88.6118L170.542 90.794C170.588 90.8408 170.615 90.9042 170.615 90.9703V93.2536C170.615 93.2834 170.609 93.3131 170.599 93.341L169.824 95.416C169.814 95.444 169.808 95.4736 169.808 95.5035V98.7225C169.808 98.8606 169.92 98.9725 170.058 98.9725H171.171C171.309 98.9725 171.421 98.8606 171.421 98.7225V96.6401C171.421 96.5764 171.445 96.5151 171.489 96.4687L173.637 94.1879C173.685 94.1377 173.751 94.1093 173.819 94.1093L178.429 94.1093C178.567 94.1093 178.679 94.2212 178.679 94.3593V98.7225C178.679 98.8606 178.791 98.9725 178.929 98.9725H180.042C180.18 98.9725 180.292 98.8606 180.292 98.7225V90.9703C180.292 90.9042 180.265 90.8408 180.219 90.794L178.05 88.6136C177.952 88.5154 177.793 88.5154 177.695 88.6136L177.139 89.1724C177.092 89.2195 177.029 89.246 176.962 89.246H170.719C170.652 89.246 170.588 89.2195 170.541 89.1724L169.179 87.8031Z" fill="currentColor"></path>
|
||||
<path d="M208.839 78.4011H204.175V83.0659C204.175 83.3133 204.076 83.5506 203.901 83.7256C203.726 83.9005 203.489 83.9988 203.242 83.9988C202.994 83.9988 202.757 83.9005 202.582 83.7256C202.407 83.5506 202.309 83.3133 202.309 83.0659V78.4011H197.644C197.396 78.4011 197.159 78.3028 196.984 78.1278C196.809 77.9529 196.711 77.7156 196.711 77.4682C196.711 77.2207 196.809 76.9834 196.984 76.8085C197.159 76.6335 197.396 76.5352 197.644 76.5352H202.309V71.8705C202.309 71.623 202.407 71.3857 202.582 71.2108C202.757 71.0358 202.994 70.9375 203.242 70.9375C203.489 70.9375 203.726 71.0358 203.901 71.2108C204.076 71.3857 204.175 71.623 204.175 71.8705V76.5352H208.839C209.087 76.5352 209.324 76.6335 209.499 76.8085C209.674 76.9834 209.772 77.2207 209.772 77.4682C209.772 77.7156 209.674 77.9529 209.499 78.1278C209.324 78.3028 209.087 78.4011 208.839 78.4011Z" fill="currentColor" stroke="currentColor"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 35 35" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3437 3.64844H13.2606C9.89333 3.64844 9.58854 3.64844 7.52937 3.92552C5.42354 4.20844 3.76104 4.80052 2.45583 6.10427C1.15063 7.40948 0.56 9.07198 0.277083 11.1793C8.69234e-08 13.237 0 15.8751 0 19.2424V19.4086C0 22.7759 8.69234e-08 25.4141 0.277083 27.4732C0.56 29.5791 1.15208 31.2416 2.45583 32.5468C3.76104 33.852 5.42354 34.4426 7.53083 34.7255C9.58854 35.0026 12.2267 35.0026 15.594 35.0026H15.7602C19.1275 35.0026 21.7656 35.0026 23.8248 34.7255C25.9306 34.4426 27.5931 33.8505 28.8983 32.5468C30.2035 31.2416 30.7942 29.5791 31.0771 27.4718C31.3542 25.4141 31.3542 25.1093 31.3542 21.742V21.6589C31.3542 21.3688 31.2389 21.0906 31.0338 20.8855C30.8287 20.6803 30.5505 20.5651 30.2604 20.5651C29.9703 20.5651 29.6921 20.6803 29.487 20.8855C29.2819 21.0906 29.1667 21.3688 29.1667 21.6589C29.1667 25.1268 29.1637 25.2843 28.91 27.1801L28.8779 27.4018L24.8325 23.7603C23.9122 22.9323 22.7381 22.441 21.5023 22.3668C20.2665 22.2926 19.0421 22.6399 18.0294 23.352L17.5948 23.6582C17.2436 23.9045 16.8168 24.019 16.3895 23.9817C15.9622 23.9444 15.5617 23.7575 15.2585 23.4541L9.00229 17.1978C8.20424 16.4001 7.13282 15.9355 6.00504 15.8981C4.87727 15.8607 3.77744 16.2534 2.92833 16.9966L2.18896 17.6426C2.19625 15.0293 2.23271 13.0445 2.44417 11.4709C2.695 9.60573 3.17333 8.48135 4.00312 7.6501C4.83437 6.82031 5.95729 6.34344 7.8225 6.0926C9.71833 5.83885 9.87583 5.83594 13.3437 5.83594C13.6338 5.83594 13.912 5.7207 14.1171 5.51559C14.3223 5.31047 14.4375 5.03227 14.4375 4.74219C14.4375 4.45211 14.3223 4.17391 14.1171 3.96879C13.912 3.76367 13.6338 3.64844 13.3437 3.64844ZM2.44417 27.1801C2.695 29.0453 3.17333 30.1697 4.00312 31.0009C4.83437 31.8307 5.95729 32.3076 7.8225 32.5584C9.71833 32.8122 12.2092 32.8151 15.6771 32.8151C19.145 32.8151 21.6358 32.8122 23.5317 32.5584C25.3969 32.3076 26.5212 31.8293 27.3525 30.9995C27.7183 30.6343 28.0165 30.2072 28.2333 29.738C28.1761 29.7015 28.1216 29.6611 28.07 29.617L23.3698 25.3878C22.8178 24.8902 22.1133 24.5947 21.3715 24.5496C20.6297 24.5046 19.8946 24.7127 19.2865 25.1399L18.8533 25.4461C18.081 25.9891 17.1418 26.2422 16.2012 26.1609C15.2606 26.0795 14.3789 25.6689 13.7113 25.0014L7.455 18.7451C7.04938 18.3396 6.50477 18.1034 5.93151 18.0844C5.35825 18.0655 4.79923 18.2652 4.36771 18.643L2.1875 20.5505C2.19187 23.3914 2.22104 25.5161 2.44417 27.1801Z"/><path d="M33.7461 10.3438H27.2812V16.8086C27.2812 17.1515 27.145 17.4804 26.9025 17.7229C26.6601 17.9653 26.3312 18.1016 25.9883 18.1016C25.6454 18.1016 25.3165 17.9653 25.074 17.7229C24.8315 17.4804 24.6953 17.1515 24.6953 16.8086V10.3438H18.2305C17.8876 10.3438 17.5587 10.2075 17.3162 9.96505C17.0737 9.72257 16.9375 9.3937 16.9375 9.05078C16.9375 8.70787 17.0737 8.37899 17.3162 8.13652C17.5587 7.89404 17.8876 7.75781 18.2305 7.75781H24.6953V1.29297C24.6953 0.950052 24.8315 0.62118 25.074 0.378701C25.3165 0.136223 25.6454 0 25.9883 0C26.3312 0 26.6601 0.136223 26.9025 0.378701C27.145 0.62118 27.2812 0.950052 27.2812 1.29297V7.75781H33.7461C34.089 7.75781 34.4179 7.89404 34.6604 8.13652C34.9028 8.37899 35.0391 8.70787 35.0391 9.05078C35.0391 9.3937 34.9028 9.72257 34.6604 9.96505C34.4179 10.2075 34.089 10.3438 33.7461 10.3438Z"/></svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_1966_3511)">
|
||||
<path d="M0.679161 19.3289C0.935048 19.7221 1.32316 19.9377 1.81627 20.0725C1.92158 21.6261 2.97302 22.0949 4.44557 22.3781C6.35432 22.7455 8.31631 22.8688 10.2543 22.9556C14.2013 23.1325 18.8438 23.3566 22.6088 21.9251C23.8503 21.4529 24.4387 20.5367 24.667 19.2685C25.0044 17.394 24.9882 15.4233 24.9985 13.5261C25.0089 11.567 24.9688 9.58565 24.7115 7.64157C24.5317 6.28157 24.1552 5.01448 22.7172 4.67622C22.6001 4.24445 22.4343 3.82772 22.1866 3.43836C21.6164 2.54208 20.5125 2.46064 19.5615 2.34306C16.6663 1.98576 13.7243 1.90653 10.8102 1.90625C9.2935 1.90625 7.77709 1.95687 6.2643 2.06564C5.04812 2.1532 3.41968 2.15478 2.32784 2.7554C0.410153 3.81046 0.306091 6.16608 0.15676 8.11395C-0.0917638 11.3552 -0.0485461 14.6983 0.313334 17.937C0.360214 18.3552 0.381745 18.8728 0.679161 19.3289Z" fill="#1F1F1F"></path>
|
||||
<path d="M22.2745 8.92291C22.2374 7.67704 22.2626 6.337 21.9666 5.1174C21.5692 3.48123 20.497 3.29291 19.0292 3.14325C16.3042 2.86552 13.5551 2.75357 10.8163 2.76665C9.30065 2.77389 7.78174 2.80515 6.27036 2.92603C5.03189 3.02523 2.95919 2.94334 2.0857 3.98013C0.670047 5.66064 0.925172 8.82058 0.898935 10.8672C0.867025 13.3484 0.917967 15.8488 1.21172 18.3154C1.45252 19.6416 3.16905 19.4676 4.19924 19.5855C5.17539 19.6971 6.15229 19.8011 7.13126 19.8801C8.92022 20.0247 10.7139 20.1307 12.5088 20.1504C14.3002 20.1697 16.0989 20.1499 17.8837 19.9833C19.0034 19.8788 20.289 19.8163 21.3446 19.3796C22.2613 19.0006 22.1451 18.0296 22.1775 17.1926C22.2177 16.1429 22.2539 15.093 22.274 14.0429C22.3066 12.3371 22.3257 10.6287 22.2745 8.92291ZM9.69299 15.4591C9.64551 16.0194 9.5674 16.326 9.23731 16.5846C8.76324 16.9558 7.60336 16.8088 7.05207 16.8188C5.95363 16.8393 4.83286 16.8628 3.73853 16.744C2.90419 16.6536 2.68677 16.2647 2.62862 15.3989C2.55679 14.3253 2.33499 12.5713 3.05682 11.6591C3.5059 11.0916 4.37674 11.2232 5.03157 11.2102C6.12811 11.1882 7.24084 11.1641 8.33537 11.2556C8.82377 11.2965 9.12855 11.4994 9.32504 11.8163C9.63062 12.3097 9.65827 13.0362 9.7144 13.6344C9.76169 14.1369 9.73854 14.922 9.69299 15.4591ZM20.3082 9.33256C19.9984 9.89279 19.5504 10.0052 18.9578 10.0421C17.3103 10.1448 15.6537 10.1448 14.0035 10.1564C10.8049 10.1795 7.58332 10.2358 4.388 10.0537C3.95433 10.0291 3.55382 10.0217 3.17907 9.77629C2.61474 9.40721 2.60186 8.40937 2.59623 7.82605C2.58411 6.56476 2.5607 4.67331 4.16294 4.60856C7.30168 4.482 10.4535 4.52257 13.5941 4.535C15.1317 4.54112 16.67 4.54679 18.2071 4.58438C18.6026 4.59428 18.9996 4.59898 19.3939 4.63294C20.1107 4.69471 20.3093 5.5357 20.4356 6.10534C20.5867 7.03243 20.7905 8.46096 20.3082 9.33256Z" fill="#FF7500"></path>
|
||||
<path d="M3.19731 12.6096C3.35086 11.5621 4.22737 11.7365 5.02997 11.7162C5.84137 11.6956 6.6539 11.7009 7.46531 11.7212C7.755 11.7288 8.0444 11.742 8.33377 11.7616C8.941 11.8028 9.05322 12.3604 9.13133 12.885C9.2038 13.8517 9.24859 14.8537 9.09564 15.8147C8.99299 16.4609 7.75387 16.2863 7.26801 16.3009C6.51918 16.3237 5.76954 16.3193 5.02067 16.3009C4.47381 16.2877 3.27714 16.4763 3.19304 15.8147C3.04214 14.6256 3.05723 13.5635 3.19731 12.6096Z" fill="#FBB800"></path>
|
||||
<path d="M23.0266 17.1878C23.1791 13.5268 23.31 9.80357 22.9687 6.14912C22.9356 5.79182 23.0039 5.62519 23.333 6.04413C23.9178 6.7895 23.9329 8.06825 24.0085 8.98058C24.1437 10.6174 24.1626 12.2657 24.1538 13.9072C24.1453 15.4775 24.0877 17.0525 23.9148 18.6139C23.7347 20.2406 23.0726 20.9524 21.4999 21.407C18.4141 22.2995 14.9574 22.2149 11.778 22.1602C10.0778 22.1314 8.37799 22.0317 6.68694 21.8539C5.50504 21.7299 3.43976 21.7118 2.83362 20.586C2.68932 20.3178 2.76617 20.2499 3.14644 20.2993C4.93335 20.5311 6.7275 20.7037 8.52527 20.829C12.0796 21.0767 15.6978 21.1327 19.2378 20.6786C20.2155 20.5535 21.2634 20.4126 22.1362 19.9288C23.0653 19.4137 22.9894 18.0799 23.0266 17.1878Z" fill="#FFC522"></path>
|
||||
<path d="M3.11465 6.94773C3.13477 6.51877 3.2206 5.17121 3.85471 5.12481C4.0537 5.1102 4.25349 5.10501 4.45264 5.09809C5.86121 5.05077 7.27199 5.04763 8.68132 5.03946C11.9763 5.02015 15.2763 5.00063 18.5707 5.09463C19.3879 5.11789 19.7274 5.28339 19.9373 6.23174C20.0531 6.94129 20.3997 9.37615 19.2667 9.4986C18.8069 9.54826 18.3412 9.55647 17.8794 9.57216C16.2958 9.62544 14.7106 9.6355 13.1265 9.64351C10.0999 9.6586 7.03337 9.74 4.01253 9.51164C2.87856 9.42597 3.07803 7.72787 3.11465 6.94773Z" fill="white"></path>
|
||||
<path d="M5.02016 16.298C5.76899 16.3164 6.51863 16.3208 7.2675 16.298C7.75336 16.2834 8.99247 16.458 9.09513 15.8118C9.19291 15.1972 9.20941 14.5656 9.19005 13.9375C9.11995 14.4073 8.96289 14.8531 8.6553 15.2189C8.10968 15.8681 6.90594 15.6976 6.14894 15.7481C5.37383 15.8002 4.5582 15.8569 3.8587 15.4588C3.38463 15.1892 3.18907 14.6848 3.08597 14.1436C3.08472 14.6705 3.11805 15.2257 3.19253 15.8118C3.27663 16.4734 4.47329 16.2848 5.02016 16.298Z" fill="#BF8A19"></path>
|
||||
<path d="M7.47344 12.2617C6.56398 12.2219 4.43108 12.188 4.15065 12.4469C3.90072 12.6776 3.91251 13.2232 3.95037 13.5047C3.9851 13.7629 4.22734 13.8454 4.48858 13.8883C4.90688 13.957 6.72111 13.9615 7.63738 13.8752C8.20751 13.8218 8.43921 13.7776 8.46311 13.3859C8.47225 13.239 8.4213 12.9273 8.34851 12.7064C8.22606 12.3338 7.90868 12.2801 7.47344 12.2617Z" fill="#FFEE6C"></path>
|
||||
<path d="M9.59817 16.0299C9.75254 15.7524 9.8335 15.4155 9.86666 15.1189C9.97277 14.1687 9.85205 13.0624 9.63528 12.1284C9.44836 11.3231 8.75896 11.1071 8.02659 11.062C6.93745 10.9949 5.83853 11.0082 4.74907 11.0538C4.08937 11.0814 3.47474 11.0628 3.01906 11.6082C2.81958 11.847 2.70639 12.1796 2.65625 12.5422C2.735 12.2047 2.85935 11.8979 3.0533 11.6526C3.50238 11.0851 4.37322 11.2167 5.02805 11.2036C6.1246 11.1816 7.23732 11.1576 8.33186 11.2491C8.82025 11.29 9.12503 11.4929 9.32152 11.8098C9.62711 12.3032 9.65475 13.0297 9.71088 13.6278C9.75821 14.1304 9.73511 14.9155 9.68952 15.4526C9.66984 15.6841 9.64377 15.8705 9.59817 16.0299Z" fill="#F0420D"></path>
|
||||
<path d="M4.96813 4.38259C4.43056 4.41341 3.71533 4.34078 3.2609 4.70229C2.75303 5.10627 2.63625 5.63096 2.56941 6.2569C2.5169 6.74747 2.46974 7.45247 2.59722 8.06992C2.59484 7.98063 2.59376 7.89512 2.59299 7.81794C2.58088 6.55665 2.55746 4.66519 4.15971 4.60045C7.29845 4.47389 10.4502 4.51445 13.5908 4.52689C15.1285 4.533 16.6667 4.53868 18.2039 4.57626C18.5993 4.58616 18.9964 4.59087 19.3906 4.62483C20.1074 4.6866 20.3061 5.52758 20.4323 6.09722C20.5763 6.98001 20.7665 8.31639 20.368 9.19464C20.5381 8.97456 20.6423 8.71067 20.7058 8.32633C20.8448 7.48145 20.7568 6.59568 20.57 5.76572C20.4652 5.30107 20.256 4.81396 19.8267 4.57107C19.4304 4.34693 18.8532 4.41076 18.4156 4.39752C15.9991 4.32315 13.5789 4.32347 11.1617 4.31876C9.10185 4.3147 7.0257 4.2644 4.96813 4.38259Z" fill="#F0420D"></path>
|
||||
<path d="M22.3006 12.1161C22.242 13.083 22.1664 14.0487 22.0647 15.0122C21.9797 15.8206 21.8652 16.627 21.7374 17.4297C21.6382 18.0509 21.4322 18.5741 20.8573 18.89C19.8851 19.4247 18.5682 19.443 17.4968 19.5411C15.9005 19.6871 14.3015 19.7643 12.6988 19.7701C10.8553 19.7764 9.01177 19.6992 7.17283 19.5788C6.16055 19.5125 5.14951 19.4268 4.13956 19.3306C3.51097 19.2709 2.75176 19.3026 2.18916 18.9618C1.75279 18.6973 1.62438 18.1262 1.5326 17.6639C1.36379 16.8116 1.3281 15.9257 1.26049 15.0615C1.15329 13.6914 1.04798 12.3217 0.989957 10.9483C0.929919 9.53253 0.920181 8.10887 1.04215 6.69531C0.837165 8.12292 0.914026 9.67921 0.898935 10.8635C0.867025 13.3447 0.917967 15.8451 1.21172 18.3117C1.45252 19.6379 3.16905 19.4639 4.19924 19.5818C5.17539 19.6934 6.15229 19.7975 7.13126 19.8764C8.92022 20.021 10.7139 20.1271 12.5088 20.1467C14.3002 20.1661 16.0989 20.1463 17.8837 19.9797C19.0034 19.8751 20.289 19.8126 21.3446 19.3759C22.2613 18.9969 22.1451 18.026 22.1775 17.1889C22.2177 16.1392 22.2539 15.0893 22.274 14.0392C22.2862 13.3983 22.295 12.7573 22.3006 12.1161Z" fill="#F0420D"></path>
|
||||
<path d="M22.2685 8.68244C22.2399 7.50541 22.2439 6.25905 21.9667 5.1174C21.5694 3.48123 20.4972 3.29291 19.0293 3.14325C16.3043 2.86552 13.5553 2.75357 10.8164 2.76665C9.30079 2.77389 7.78188 2.80515 6.2705 2.92603C5.03202 3.02523 2.95933 2.94334 2.08583 3.98013C1.88322 4.22077 1.71784 4.49428 1.57813 4.78791C2.21428 4.13022 3.01909 3.70883 4.00179 3.51752C4.76777 3.36851 5.56867 3.33504 6.34531 3.28096C9.31616 3.0738 12.3037 3.05726 15.2785 3.18225C16.8082 3.24671 18.4518 3.24196 19.9438 3.62018C21.1816 3.93377 21.5887 4.90111 21.8328 6.02892C22.0219 6.90225 22.1604 7.78943 22.2685 8.68244Z" fill="#FFAE52"></path>
|
||||
<path d="M23.2446 6.56512C23.2289 6.33108 23.2092 6.10143 23.1764 5.87681C22.9838 5.70325 22.9409 5.86172 22.9679 6.15205C23.3092 9.80651 23.1783 13.5297 23.0258 17.1908C22.9885 18.0828 23.0645 19.4167 22.1355 19.9316C21.2626 20.4154 20.2148 20.5563 19.2371 20.6814C15.6971 21.1355 12.0789 21.0796 8.52455 20.8318C6.72678 20.7066 4.93263 20.534 3.14572 20.3021C2.85712 20.2647 2.74412 20.2952 2.76895 20.4291C5.14989 20.9857 7.66144 21.1266 10.0831 21.2311C13.1769 21.3644 16.3015 21.3836 19.3852 21.0672C20.3634 20.9669 21.6605 20.9337 22.4757 20.301C23.1873 19.7488 23.2891 18.8299 23.3457 17.9883C23.5224 15.3523 23.435 12.6768 23.3786 10.0381C23.3535 8.88006 23.3214 7.7211 23.2446 6.56512Z" fill="#FFA222"></path>
|
||||
<path d="M4.01187 9.51429C7.03271 9.7427 10.0993 9.66125 13.1258 9.64616C14.7099 9.63815 16.2952 9.62809 17.8787 9.57482C18.3405 9.55908 18.8063 9.55091 19.2661 9.50126C19.8025 9.44327 20.0053 8.86574 20.0599 8.19973C19.296 8.85725 18.2236 9.08831 17.0686 9.1496C15.2298 9.24658 13.3753 9.2543 11.5343 9.24311C9.61629 9.23181 7.66528 9.34983 5.75339 9.20179C4.80038 9.12839 3.66717 8.99037 3.18256 8.05196C3.1414 7.97241 3.1082 7.88911 3.07818 7.80469C3.07504 8.58406 3.20848 9.45361 4.01187 9.51429Z" fill="#C7C7C7"></path>
|
||||
<path d="M17.9213 5.5788C16.0154 5.46593 14.082 5.49896 12.1764 5.48826C10.0582 5.47615 7.93843 5.46625 5.8203 5.49707C5.41476 5.50319 4.96158 5.4974 4.56799 5.58274C4.19842 5.66339 3.93669 5.94929 3.83879 6.24985C3.64246 6.85329 4.0441 7.14314 4.75096 7.16282C7.28766 7.23324 15.2573 7.19127 18.0147 7.15779C18.8814 7.14773 19.3624 7.03614 19.1332 6.32124C19.0194 5.96547 18.6414 5.62093 17.9213 5.5788Z" fill="#EEEEEE"></path>
|
||||
<path d="M20.2934 14.3063C17.227 14.3836 14.1573 14.3721 11.09 14.3721C10.7617 14.3721 10.7617 13.8628 11.09 13.8628C14.1573 13.8628 17.227 13.8743 20.2934 13.797C20.6219 13.7888 20.6211 14.2981 20.2934 14.3063Z" fill="#1F1F1F"></path>
|
||||
<path d="M20.2988 18.3611C14.5289 18.6085 8.60838 18.9349 2.84602 18.4268C2.52157 18.3982 2.51859 17.8886 2.84602 17.9176C8.60838 18.4256 14.5289 18.0993 20.2988 17.8519C20.6272 17.8377 20.6258 18.347 20.2988 18.3611Z" fill="#1F1F1F"></path>
|
||||
<path d="M20.2934 12.2438C17.227 12.3209 14.1573 12.3095 11.09 12.3095C10.7617 12.3095 10.7617 11.8002 11.09 11.8002C14.1573 11.8002 17.227 11.8117 20.2934 11.7345C20.6219 11.7261 20.6211 12.2354 20.2934 12.2438Z" fill="#1F1F1F"></path>
|
||||
<path d="M20.3012 16.3844C17.2348 16.4616 14.1651 16.4502 11.0978 16.4502C10.7695 16.4502 10.7695 15.941 11.0978 15.941C14.1651 15.941 17.2348 15.9523 20.3012 15.8751C20.6297 15.8669 20.6289 16.3762 20.3012 16.3844Z" fill="#1F1F1F"></path>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1966_3511">
|
||||
<rect width="25" height="25" fill="white"></rect>
|
||||
</clipPath>
|
||||
</defs></svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,31 @@
|
||||
<svg viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.4621 20.8281C11.2178 20.2689 11.1472 19.6746 11.1199 19.0686C11.0921 18.453 11.2366 17.8587 11.2794 17.2482C11.2956 17.0155 11.3396 16.6818 11.2074 16.4718C11.0765 16.2644 10.8413 16.2683 10.6235 16.2534C9.96702 16.208 9.31117 16.1633 8.65468 16.118C8.48099 16.1063 8.35656 16.2301 8.31703 16.3791C8.13946 16.4562 8.01049 16.663 8.13039 16.8833C8.24833 17.1004 8.20297 17.3972 8.19973 17.6357C8.19649 17.9209 8.18612 18.206 8.17381 18.4912C8.16149 18.766 8.16409 19.0485 8.13103 19.3214C8.10446 19.5404 7.96513 19.74 8.09085 19.9539C8.20297 20.1438 8.46285 20.2241 8.64949 20.3168C8.90742 20.4451 9.16795 20.5683 9.43107 20.6869C9.96637 20.9279 10.5101 21.1483 11.061 21.3505C11.3869 21.4704 11.5742 21.0802 11.4634 20.8268L11.4621 20.8281Z" fill="white"></path>
|
||||
<path d="M20.1875 13.2088C19.8349 12.6975 19.3851 12.2432 18.8842 11.879C18.6418 11.7027 18.3949 11.4966 18.0896 11.459C17.7714 11.4227 17.4416 11.5575 17.2037 11.7733C16.5103 12.4681 15.6561 12.9781 14.8344 13.5115C14.7125 13.586 14.5881 13.6463 14.4507 13.6806C14.1967 13.7486 13.9135 13.7104 13.6581 13.807C13.4955 13.8666 13.3464 13.9619 13.1993 14.0558C12.7787 14.3514 12.2849 14.5134 11.8403 14.7681C11.281 15.0804 11.1391 15.619 11.1332 16.223C11.0937 17.4206 11.0412 18.6001 10.8643 19.7854C10.8403 19.9533 10.8163 20.1263 10.8209 20.2942C10.8222 21.1587 11.7541 21.3266 12.3905 21.3499C13.0943 21.3661 13.8649 21.379 14.5389 21.0958C15.1552 20.8437 15.7203 20.4815 16.2997 20.1561C16.498 20.0395 16.7196 19.8716 16.9562 19.9637C17.1007 20.011 17.2575 20.1367 17.4429 20.1678C17.811 20.2404 18.183 19.9799 18.2607 19.6143C18.334 19.3331 18.1134 19.0511 18.1711 18.7692C18.2035 18.5974 18.2795 18.3558 18.3554 18.1977C18.7261 17.525 19.133 16.8438 19.1855 16.0746C19.2141 15.7596 19.1888 15.4103 19.3845 15.1472C19.6074 14.8718 19.853 14.6223 20.0637 14.3293C20.3521 13.9833 20.4609 13.6281 20.1913 13.2179L20.1855 13.2082L20.1875 13.2088ZM16.6192 19.6396L16.6244 19.6455C16.6244 19.6455 16.6205 19.6422 16.6192 19.6396Z" fill="#FCF6EB"></path>
|
||||
<path d="M23.7358 9.8355C24.5524 19.3168 13.8648 22.4301 12.4865 22.4301C10.9859 22.4301 0.72469 19.7173 1.23732 9.8355C1.43238 6.08705 4.28325 2.71124 7.17106 2.49025C9.4108 2.31851 11.3868 2.87715 12.4872 4.81423C13.587 2.87715 15.5597 2.371 17.8027 2.49025C20.7184 2.64578 23.4137 6.09612 23.7358 9.8355Z" stroke="#FF7500" stroke-width="2.28802" stroke-miterlimit="10"></path>
|
||||
<path d="M20.1504 11.5451C19.8212 10.8828 19.6352 10.886 20.0506 10.1667C20.1718 9.92819 20.2463 9.6573 20.328 9.40585C20.4096 9.1855 20.374 8.92887 20.1018 8.8848C19.7577 8.84138 19.3786 8.9334 19.1051 9.15569C18.8582 9.32354 18.6125 9.49723 18.3857 9.69424C18.2567 9.78821 18.0993 9.79339 17.9444 9.77071C17.2574 9.67739 16.5445 9.70979 15.8809 9.85431C15.4927 9.95671 15.4746 9.72016 15.2821 9.42205C15.0261 9.04552 14.5848 8.75518 14.1259 8.74222C13.4131 8.73445 13.402 10.0345 13.4714 10.5354C13.5362 10.9314 13.3256 11.2716 13.1979 11.6313C13.1428 11.8121 13.1123 11.9988 13.0864 12.1874C13.0281 12.595 13.0326 13.0111 13.1111 13.4168C13.1273 13.4991 13.1441 13.5814 13.1454 13.6637C13.148 13.8166 13.102 13.9676 13.1823 14.035C13.2471 14.0966 13.4059 14.0934 13.5057 14.0746C13.6839 14.0447 13.8628 14.0072 14.0391 13.9663C15.5614 13.6812 16.4959 12.6566 17.6968 11.8083C17.9781 11.5989 18.1265 11.6922 18.3138 11.9456C18.5374 12.2211 18.7674 12.4959 19.0169 12.7493C19.2172 12.9476 20.1932 13.9022 20.4083 13.4991C20.6015 12.9689 20.3896 12.0571 20.1543 11.5555L20.1498 11.5451H20.1504Z" fill="#D3A061"></path>
|
||||
<path d="M17.4325 13.6079C17.4668 13.6863 17.5096 13.7602 17.5601 13.8289C17.5835 13.8607 17.6068 13.8911 17.6288 13.9242C17.6405 13.941 17.6509 13.9592 17.6606 13.9773C17.6625 13.9818 17.6651 13.9857 17.6671 13.9903C17.6684 13.9929 17.6742 14.0078 17.6697 13.9948C17.6651 13.9818 17.671 13.9974 17.6716 14C17.6736 14.0058 17.6755 14.0117 17.6774 14.0168C17.693 14.0648 17.7455 14.1017 17.7973 14.0849C17.8453 14.0693 17.8822 14.0168 17.8654 13.965C17.8375 13.8788 17.7863 13.8088 17.7332 13.7362C17.68 13.6636 17.636 13.5898 17.601 13.5088C17.5809 13.4621 17.5083 13.4478 17.4681 13.4738C17.4195 13.5049 17.4117 13.5567 17.4331 13.6066L17.4325 13.6079Z" fill="#1F1F1F"></path>
|
||||
<path d="M17.842 13.0267C17.737 13.0098 17.6158 13.004 17.5063 13.0001C17.2464 12.9923 17.5607 13.3455 17.6839 13.2956C17.7791 13.273 18.0572 13.0896 17.8491 13.028L17.842 13.0267Z" fill="#1F1F1F"></path>
|
||||
<path d="M16.9245 12.3262C16.9283 12.0954 16.7958 11.9061 16.6287 11.9034C16.4616 11.9007 16.323 12.0856 16.3193 12.3164C16.3155 12.5473 16.448 12.7366 16.6151 12.7393C16.7822 12.742 16.9208 12.5571 16.9245 12.3262Z" fill="#1F1F1F"></path>
|
||||
<mask id="mask0_1966_3476" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="16" y="11" width="1" height="2">
|
||||
<path d="M16.9558 12.3184C16.9595 12.0876 16.8271 11.8983 16.6599 11.8956C16.4928 11.8929 16.3543 12.0778 16.3505 12.3086C16.3468 12.5394 16.4792 12.7288 16.6464 12.7315C16.8135 12.7342 16.952 12.5493 16.9558 12.3184Z" fill="white"></path>
|
||||
</mask>
|
||||
<g mask="url(#mask0_1966_3476)">
|
||||
<path d="M16.7177 12.1932C16.73 12.2004 16.743 12.2062 16.7566 12.2094C16.7702 12.2127 16.7858 12.2153 16.8007 12.2153C16.8013 12.2153 16.8434 12.2094 16.8441 12.2094C16.8577 12.2062 16.8713 12.1997 16.8836 12.1926C16.9115 12.1777 16.9251 12.1582 16.9432 12.1336C16.9432 12.1336 16.9432 12.1336 16.9432 12.133C16.9504 12.1207 16.9549 12.107 16.9601 12.0934C16.9601 12.0934 16.9601 12.0928 16.9601 12.0921C16.9627 12.0779 16.9692 12.0144 16.9659 12.0487C16.9659 12.0487 16.9659 12.0481 16.9659 12.0474C16.9659 12.0325 16.964 12.0176 16.9601 12.0034C16.9523 11.9768 16.9381 11.9496 16.9173 11.9308C16.8953 11.91 16.8739 11.8964 16.8447 11.8886C16.8156 11.8809 16.7838 11.8809 16.7547 11.8886C16.7417 11.8938 16.7287 11.8997 16.7158 11.9048C16.7158 11.9048 16.7158 11.9048 16.7151 11.9048C16.7035 11.9126 16.6924 11.9217 16.6814 11.9308C16.6814 11.9308 16.6814 11.9308 16.6808 11.9314C16.6717 11.9424 16.662 11.9528 16.6549 11.9651C16.6549 11.9651 16.6549 11.9651 16.6549 11.9658C16.6698 11.934 16.6432 11.9917 16.6387 12.0047C16.6387 12.0047 16.6387 12.0053 16.6387 12.0059C16.6315 12.0513 16.6302 12.0487 16.6387 12.0941C16.6387 12.0941 16.6387 12.0941 16.6387 12.0947C16.6432 12.1083 16.6477 12.122 16.6555 12.1343C16.673 12.1621 16.6866 12.1744 16.7145 12.1926C16.7261 12.2004 16.7398 12.2049 16.7534 12.2088C16.7534 12.2088 16.7534 12.2088 16.754 12.2088C16.7689 12.2114 16.7832 12.2133 16.7981 12.2146H16.7994C16.8279 12.2127 16.8584 12.2088 16.883 12.1919L16.916 12.1667L16.9413 12.1336C16.9478 12.1213 16.953 12.1077 16.9582 12.0941C16.9646 12.0727 16.9659 12.0513 16.9607 12.0293C16.9595 12.0079 16.9536 11.9878 16.9413 11.969C16.9309 11.9502 16.9173 11.9347 16.8998 11.9236C16.8843 11.9094 16.8661 11.8997 16.8447 11.8945L16.802 11.8886C16.7728 11.8886 16.7456 11.8964 16.7203 11.9107L16.6873 11.936C16.6672 11.956 16.6536 11.98 16.6458 12.0072C16.651 11.9943 16.6568 11.9813 16.662 11.969C16.662 11.969 16.662 11.969 16.662 11.9697L16.6873 11.9366L16.7203 11.9113C16.7203 11.9113 16.7203 11.9113 16.7197 11.9113L16.7585 11.8951C16.7585 11.8951 16.7585 11.8951 16.7579 11.8951L16.8007 11.8893C16.8007 11.8893 16.7994 11.8893 16.7987 11.8893L16.8415 11.8951H16.8402L16.8791 11.9113L16.9121 11.9366L16.9374 11.9697L16.9536 12.0085C16.9536 12.0085 16.9536 12.0079 16.9536 12.0072L16.9595 12.05C16.9595 12.05 16.9595 12.0487 16.9595 12.0481L16.9536 12.0908C16.9536 12.0908 16.9536 12.0895 16.9536 12.0889L16.9374 12.1278C16.9374 12.1278 16.9374 12.1265 16.9381 12.1265L16.9128 12.1595C16.9128 12.1595 16.9134 12.1589 16.9141 12.1582L16.881 12.1835C16.881 12.1835 16.8817 12.1835 16.8823 12.1829L16.8434 12.1991C16.8434 12.1991 16.8447 12.1991 16.8454 12.1991L16.8026 12.2049C16.8026 12.2049 16.8039 12.2049 16.8046 12.2049L16.7618 12.1991C16.7618 12.1991 16.7624 12.1991 16.7631 12.1991L16.7242 12.1829C16.7242 12.1829 16.7242 12.1829 16.7248 12.1829L16.6918 12.1576L16.6665 12.1245L16.6503 12.0857C16.6503 12.0857 16.6503 12.0863 16.6503 12.087L16.6445 12.0442V12.0455L16.6503 12.0027C16.6503 12.0027 16.6503 12.0047 16.6503 12.0053L16.6665 11.9664C16.6665 11.9664 16.6665 11.9671 16.6659 11.9677L16.6911 11.9347C16.6911 11.9347 16.6911 11.9347 16.6905 11.9353L16.7236 11.91C16.7236 11.91 16.7236 11.91 16.7229 11.91L16.7618 11.8938C16.7618 11.8938 16.7618 11.8938 16.7611 11.8938L16.8039 11.888C16.8039 11.888 16.8039 11.888 16.8033 11.888L16.846 11.8938C16.846 11.8938 16.846 11.8938 16.8454 11.8938L16.8843 11.91C16.8843 11.91 16.8843 11.91 16.8836 11.91C16.8648 11.8984 16.8447 11.8919 16.8234 11.8906C16.802 11.8861 16.7806 11.8867 16.7585 11.8932C16.7372 11.8984 16.719 11.9081 16.7035 11.9223C16.686 11.934 16.6717 11.9489 16.662 11.9677L16.6458 12.0066C16.638 12.0351 16.638 12.0643 16.6458 12.0928L16.662 12.1317C16.6762 12.1563 16.6957 12.1751 16.7203 12.19L16.7177 12.1932Z" fill="white"></path>
|
||||
</g>
|
||||
<path d="M19.0048 12.3884C19.034 12.1594 18.9232 11.9566 18.7574 11.9355C18.5916 11.9144 18.4336 12.0829 18.4044 12.3119C18.3752 12.5409 18.486 12.7437 18.6518 12.7648C18.8176 12.7859 18.9757 12.6174 19.0048 12.3884Z" fill="#1F1F1F"></path>
|
||||
<mask id="mask1_1966_3476" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="18" y="11" width="1" height="2">
|
||||
<path d="M18.9814 12.3806C19.0106 12.1516 18.8998 11.9488 18.734 11.9277C18.5682 11.9066 18.4101 12.0751 18.3809 12.3041C18.3518 12.5331 18.4625 12.7359 18.6283 12.757C18.7942 12.7781 18.9522 12.6096 18.9814 12.3806Z" fill="white"></path>
|
||||
</mask>
|
||||
<g mask="url(#mask1_1966_3476)">
|
||||
<path d="M18.7615 12.2292C18.7816 12.2486 18.8069 12.2655 18.8347 12.2713C18.8626 12.2771 18.8943 12.2804 18.9222 12.2713C18.9533 12.2616 18.9715 12.2512 18.9954 12.2285C19.0045 12.2175 19.0129 12.2065 19.0207 12.1955C19.0207 12.1955 19.0207 12.1948 19.0214 12.1942C19.0265 12.1812 19.0324 12.1682 19.0376 12.1553C19.0376 12.1553 19.0376 12.1546 19.0376 12.154C19.0473 12.1177 19.044 12.1015 19.0376 12.0659C19.0324 12.0373 19.0129 12.014 18.9954 11.9926C18.9844 11.9835 18.9734 11.9751 18.9624 11.9673C18.9624 11.9673 18.9624 11.9673 18.9617 11.9673L18.9229 11.9511C18.9209 11.9511 18.882 11.9453 18.8794 11.9453C18.8794 11.9453 18.8788 11.9453 18.8781 11.9453C18.8639 11.9473 18.849 11.9492 18.8347 11.9511C18.8347 11.9511 18.8341 11.9511 18.8334 11.9511C18.8205 11.957 18.8075 11.9622 18.7945 11.9673C18.7945 11.9673 18.7939 11.9673 18.7932 11.9673C18.7816 11.9751 18.7699 11.9835 18.7595 11.9933C18.7595 11.9933 18.7595 11.9933 18.7595 11.9939C18.7505 12.0049 18.7414 12.0153 18.7336 12.0276C18.7336 12.0276 18.7336 12.0276 18.7336 12.0283C18.7278 12.0406 18.7207 12.0542 18.7168 12.0678C18.7168 12.0678 18.7168 12.0678 18.7168 12.0684C18.7252 12.016 18.7122 12.0976 18.7109 12.1119C18.7109 12.1132 18.7161 12.1533 18.7168 12.1553C18.7207 12.1689 18.7265 12.1825 18.7336 12.1948C18.7472 12.2182 18.7686 12.2402 18.7926 12.2538C18.8049 12.2609 18.8185 12.2661 18.8321 12.2706C18.8321 12.2706 18.8328 12.2706 18.8334 12.2706C18.8477 12.2739 18.8626 12.2765 18.8775 12.2765C18.8775 12.2765 18.8775 12.2765 18.8781 12.2765L18.9209 12.2706C18.9345 12.2674 18.9481 12.2609 18.9604 12.2538C18.9728 12.2467 18.9838 12.2376 18.9941 12.2279C19.0032 12.2169 19.0116 12.2058 19.0194 12.1948C19.0194 12.1948 19.0194 12.1948 19.0194 12.1942C19.0311 12.1754 19.0376 12.1553 19.0389 12.1339C19.0434 12.1125 19.0427 12.0911 19.0363 12.0691C19.0311 12.0477 19.0214 12.0296 19.0071 12.014C18.9954 11.9965 18.9805 11.9823 18.9617 11.9725L18.9229 11.9563C18.8943 11.9486 18.8652 11.9486 18.8367 11.9563L18.7978 11.9725C18.7732 11.9868 18.7544 12.0062 18.7395 12.0309C18.7395 12.0309 18.7395 12.0309 18.7395 12.0315L18.7647 11.9985L18.7978 11.9732C18.7978 11.9732 18.7978 11.9732 18.7971 11.9732L18.836 11.957C18.836 11.957 18.836 11.957 18.8354 11.957L18.8781 11.9511C18.8781 11.9511 18.8775 11.9511 18.8768 11.9511L18.9196 11.957C18.9196 11.957 18.9177 11.957 18.917 11.957L18.9559 11.9732L18.989 11.9985L19.0142 12.0315L19.0304 12.0704C19.0304 12.0704 19.0304 12.0697 19.0304 12.0691L19.0363 12.1119V12.1106L19.0304 12.1533C19.0304 12.1533 19.0304 12.152 19.0304 12.1514L19.0142 12.1903C19.0142 12.1903 19.0142 12.189 19.0149 12.189L18.9896 12.222C18.9896 12.222 18.9903 12.2214 18.9909 12.2207L18.9579 12.246C18.9579 12.246 18.9585 12.246 18.9591 12.2454L18.9203 12.2616C18.9203 12.2616 18.9216 12.2616 18.9222 12.2616L18.8794 12.2674C18.8794 12.2674 18.8807 12.2674 18.8814 12.2674L18.8386 12.2616C18.8386 12.2616 18.8393 12.2616 18.8399 12.2616L18.801 12.2454C18.801 12.2454 18.801 12.2454 18.8017 12.2454L18.7686 12.2201L18.7433 12.187L18.7271 12.1482C18.7271 12.1482 18.7271 12.1482 18.7271 12.1488L18.7213 12.106C18.7213 12.106 18.7213 12.1067 18.7213 12.1073L18.7271 12.0646C18.7271 12.0646 18.7271 12.0659 18.7271 12.0665L18.7433 12.0276C18.7433 12.0276 18.7433 12.0289 18.742 12.0296L18.7673 11.9965C18.7673 11.9965 18.7673 11.9972 18.7667 11.9972L18.7997 11.9719C18.7997 11.9719 18.7997 11.9719 18.7991 11.9719L18.838 11.9557C18.838 11.9557 18.838 11.9557 18.8373 11.9557L18.8801 11.9498C18.8801 11.9498 18.8801 11.9498 18.8794 11.9498L18.9222 11.9557C18.9222 11.9557 18.9222 11.9557 18.9216 11.9557L18.9604 11.9719L18.9935 11.9972C18.9786 11.9816 18.9617 11.9699 18.9417 11.9635C18.9222 11.9531 18.9015 11.9486 18.8794 11.9492C18.8574 11.9486 18.836 11.9531 18.8172 11.9635C18.7971 11.9699 18.7796 11.981 18.7654 11.9972L18.7401 12.0302C18.7252 12.0555 18.7181 12.0827 18.7181 12.1119L18.7239 12.1546C18.7317 12.1819 18.7453 12.2058 18.7654 12.2259L18.7615 12.2292Z" fill="white"></path>
|
||||
</g>
|
||||
<path d="M17.534 13.1968C17.4206 13.4716 17.3195 13.7515 17.2314 14.0354C17.1944 14.1553 17.3817 14.2065 17.4187 14.0872C17.5068 13.8034 17.6079 13.5234 17.7213 13.2486C17.7414 13.2 17.6999 13.1417 17.6533 13.1287C17.5975 13.1132 17.5541 13.1482 17.5334 13.1968H17.534Z" fill="#1F1F1F"></path>
|
||||
<path d="M18.1609 19.3184C18.1428 19.1855 18.1058 19.0598 18.0456 18.9392C18.0157 18.879 17.9801 18.8116 17.9205 18.7766C17.831 18.7234 17.7442 18.761 17.6574 18.7941C17.509 18.8504 17.3612 18.9055 17.2134 18.9626C17.067 19.0189 16.9212 19.0786 16.7889 19.1641C16.6956 19.2244 16.6878 19.3365 16.7559 19.4188C16.776 19.4428 16.8006 19.459 16.8265 19.4713C16.9296 19.7137 17.0436 19.9522 17.2692 20.1045C17.4876 20.2516 17.7909 20.2548 17.9905 20.0727C18.0903 19.982 18.135 19.8491 18.1544 19.7189C18.1745 19.5847 18.1778 19.4532 18.1596 19.3184H18.1609Z" fill="#FCF6EB"></path>
|
||||
<path d="M11.2188 20.6864L11.2298 15.2439C11.8027 14.7306 12.4689 14.3456 13.2323 14.0935C12.7139 13.1046 12.872 12.0333 13.3937 10.918C13.3937 10.918 13.0839 8.79621 14.0275 8.63095C14.9711 8.46569 15.5978 9.84349 15.5978 9.84349C16.5757 9.63157 17.4694 9.60241 18.2698 9.7748C18.2698 9.7748 19.7403 8.46569 20.295 8.79685C20.8497 9.12737 19.8135 10.9186 19.8135 10.9186C20.8504 12.5725 20.6599 13.9853 19.3034 15.1674C19.3034 15.1674 19.2432 16.1136 18.7882 17.2036C18.3333 18.2937 18.1168 18.8446 18.1168 18.8446C18.1168 18.8446 18.5588 19.8614 17.8699 20.1926C17.181 20.5237 16.7222 19.4473 16.7222 19.4473" stroke="#1F1F1F" stroke-width="0.324036" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M11.0735 16.7776C11.0735 16.7776 10.1215 21.3977 11.9899 21.283C14.5932 21.1236 12.511 10.4239 11.6089 10.5004L6.35364 12.1148C5.5753 12.2334 2.09881 19.8385 4.56732 19.6071C6.19592 19.4541 6.90233 16.1272 6.90233 16.1272" fill="white"></path>
|
||||
<path d="M11.0735 16.7776C11.0735 16.7776 10.1215 21.3977 11.9899 21.283C14.5932 21.1236 12.511 10.4239 11.6089 10.5004L6.35364 12.1148C5.5753 12.2334 2.09881 19.8385 4.56732 19.6071C6.19592 19.4541 6.90233 16.1272 6.90233 16.1272" stroke="#1F1F1F" stroke-width="0.324036" stroke-miterlimit="10" stroke-linecap="round"></path>
|
||||
<path d="M6.02648 6.27214C6.02648 6.27214 4.81783 2.8231 6.02648 2.30788C7.23514 1.79267 7.82877 4.29034 7.82877 4.29034L10.8287 4.37977C10.8287 4.37977 11.7794 1.66111 13.012 2.12318C14.2447 2.58526 12.7813 6.41472 12.7813 6.41472C12.7813 6.41472 12.9297 13.6828 6.02972 12.1495C6.02972 12.1495 2.81852 11.9875 6.02648 6.27279V6.27214Z" fill="white" stroke="#1F1F1F" stroke-width="0.324036" stroke-miterlimit="10"></path>
|
||||
<path d="M7.73984 6.93979C7.57004 6.93979 7.54801 6.71166 7.67244 6.65074C7.62837 6.60992 7.57782 6.58594 7.52338 6.58594C7.35942 6.58594 7.22656 6.80045 7.22656 7.06551C7.22656 7.33057 7.35942 7.54508 7.52338 7.54508C7.68734 7.54508 7.8202 7.33057 7.8202 7.06551C7.8202 7.01626 7.81566 6.9696 7.80723 6.92488C7.78779 6.9346 7.76576 6.94043 7.73919 6.94043L7.73984 6.93979Z" fill="#1F1F1F"></path>
|
||||
<path d="M9.54452 6.93978C9.37473 6.93978 9.35269 6.71166 9.47712 6.65074C9.43305 6.60992 9.3825 6.58594 9.32807 6.58594C9.1641 6.58594 9.03125 6.80045 9.03125 7.06551C9.03125 7.33057 9.1641 7.54508 9.32807 7.54508C9.49203 7.54508 9.62488 7.33057 9.62488 7.06551C9.62488 7.01626 9.62035 6.9696 9.61192 6.92488C9.59248 6.9346 9.57045 6.94043 9.54387 6.94043L9.54452 6.93978Z" fill="#1F1F1F"></path>
|
||||
<path d="M6.52068 9.62708C6.4319 8.94596 5.84863 8.64072 5.25046 8.45666C4.93291 8.35881 4.73589 8.65497 4.77802 8.90837C4.43389 9.24796 4.48444 9.9077 4.49027 10.3354C4.49351 10.6083 4.51036 10.8746 4.80135 10.9848C5.06706 11.0852 5.44553 11.0567 5.72161 11.0016C6.33015 10.8811 6.59456 10.1922 6.52133 9.62643L6.52068 9.62708Z" fill="#1F1F1F"></path>
|
||||
<path d="M5.87559 12.0859C5.87559 12.0859 5.4686 12.6679 6.11991 12.942C6.77123 13.2162 7.43096 12.3095 7.43096 12.3095L5.87559 12.0859Z" fill="#E2B4CC" stroke="#1F1F1F" stroke-width="0.324036" stroke-miterlimit="10"></path>
|
||||
<path d="M6.11634 9.17721C6.08199 9.14805 6.03987 9.1286 5.99774 9.11305C5.95562 9.0975 5.9109 9.08972 5.86618 9.08648C5.82989 9.08389 5.79166 9.09037 5.76184 9.11046C5.74305 9.11694 5.7262 9.1286 5.71324 9.1474C5.68991 9.18175 5.68991 9.2297 5.71 9.26535C5.73074 9.30164 5.76703 9.32367 5.80397 9.33988C5.83961 9.35608 5.87655 9.36969 5.91479 9.37876C5.94525 9.38589 5.98024 9.39043 6.01459 9.38913C6.0282 9.38978 6.04116 9.38783 6.05283 9.38395C6.09236 9.37552 6.12736 9.35608 6.14809 9.31719C6.17402 9.26924 6.15782 9.21091 6.11699 9.17656L6.11634 9.17721Z" fill="white"></path></svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" fill="#F1EDE6"></rect><g fill="none" stroke="#B7AFA3" stroke-width="3.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="32" cy="26" r="9.5"></circle><path d="M15 51c2.8-8.2 9.2-12.4 17-12.4S46.2 42.8 49 51"></path></g></svg>
|
||||
|
After Width: | Height: | Size: 325 B |
@@ -0,0 +1,9 @@
|
||||
<svg width="120" height="120" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(6,6) scale(2.7)">
|
||||
<path d="M16.1562 13.1016C16.6612 13.1016 17.0711 13.5108 17.0713 14.0156C17.0713 14.5207 16.6613 14.9307 16.1562 14.9307C15.6514 14.9304 15.2422 14.5205 15.2422 14.0156C15.2424 13.5109 15.6515 13.1018 16.1562 13.1016Z" fill="#C8C8C8" stroke="#C8C8C8" stroke-width="2"></path>
|
||||
<path d="M23.8125 13.1016C24.3174 13.1016 24.7273 13.5108 24.7275 14.0156C24.7275 14.5207 24.3175 14.9307 23.8125 14.9307C23.3076 14.9304 22.8984 14.5205 22.8984 14.0156C22.8987 13.5109 23.3078 13.1018 23.8125 13.1016Z" fill="#C8C8C8" stroke="#C8C8C8" stroke-width="2"></path>
|
||||
<path d="M19.9856 22.6328C19.9856 24.2189 20.4642 27.8976 17.1139 27.8976C16.3523 27.8976 15.6218 27.595 15.0833 27.0565C14.5447 26.5179 14.2422 25.7875 14.2422 25.0259" stroke="#C8C8C8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M20.0158 22.6328C20.0158 24.2189 19.5372 27.8976 22.8875 27.8976C23.6491 27.8976 24.3796 27.595 24.9181 27.0565C25.4567 26.5179 25.7592 25.7875 25.7592 25.0259" stroke="#C8C8C8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M21.8992 22.3919C21.8992 23.0523 19.9848 24.067 19.9848 24.067C19.9848 24.067 18.0703 23.0523 18.0703 22.3919C18.0703 21.7314 18.5489 21.1953 19.9848 21.1953C21.4206 21.1953 21.8992 21.7314 21.8992 22.3919Z" fill="#C8C8C8" stroke="#C8C8C8" stroke-width="2" stroke-linejoin="round"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,74 @@
|
||||
<svg width="52" height="54" viewBox="118 510 52 54" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path d="M169.045 536.846C168.089 548.135 160.391 558.064 150.502 561.442C146.898 562.676 142.995 563.042 139.02 562.292C136.976 561.9 134.918 561.216 132.868 560.201C130.246 558.907 127.857 557.161 125.806 555.091C122.866 552.111 120.636 548.44 119.448 544.399C118.061 539.68 118.12 534.649 119.448 529.977C120.304 526.95 121.691 524.07 123.563 521.528C124.392 520.4 125.321 519.331 126.337 518.349C141.927 503.276 170.943 514.32 169.045 536.846Z" fill="#ECAD00"></path>
|
||||
<path d="M122.344 549.211L122.51 549.43C122.437 549.324 122.384 549.257 122.344 549.211Z" fill="#D1B2A6"></path>
|
||||
<path d="M119.1 531.545C119.12 531.512 119.147 531.472 119.167 531.439C119.14 531.333 119.114 531.234 119.094 531.141C119.094 531.26 119.094 531.399 119.094 531.545H119.1Z" fill="#D1B2A6"></path>
|
||||
<path d="M119.638 531.953L119.445 532.451C119.498 532.338 119.565 532.179 119.638 531.953Z" fill="#D1B2A6"></path>
|
||||
<path d="M129.523 557.051L129.862 557.117C129.464 556.832 129.596 557.018 129.523 557.051Z" fill="#D1B2A6"></path>
|
||||
<path d="M120.609 549.227C120.716 549.373 120.775 549.42 120.802 549.4C120.696 549.254 120.623 549.174 120.609 549.227Z" fill="#D1B2A6"></path>
|
||||
<path d="M163.32 550.433C163.32 550.433 163.367 550.386 163.387 550.373C163.373 550.353 163.353 550.386 163.32 550.433Z" fill="#D1B2A6"></path>
|
||||
<path d="M169.157 540.336C169.143 540.455 169.103 540.641 169.07 540.82C169.097 540.734 169.123 540.588 169.157 540.336Z" fill="#D1B2A6"></path>
|
||||
<path d="M119.568 531.898C119.528 531.945 119.502 531.952 119.469 531.958C119.482 532.038 119.509 532.044 119.568 531.898Z" fill="#D1B2A6"></path>
|
||||
<path d="M129.453 557.031L129.473 557.051C129.473 557.051 129.506 557.051 129.513 557.051L129.453 557.038V557.031Z" fill="#D1B2A6"></path>
|
||||
<path d="M120.354 543.277L120.295 543.25C120.261 543.336 120.295 543.456 120.341 543.688L120.354 543.277Z" fill="#D1B2A6"></path>
|
||||
<path d="M122.855 549.653L122.795 549.547L122.742 549.839L122.855 549.653Z" fill="#D1B2A6"></path>
|
||||
<path d="M126.562 554.063C126.41 553.884 126.177 553.725 126.031 553.539C126.403 553.891 126.436 554.276 126.562 554.063Z" fill="#D1B2A6"></path>
|
||||
<path d="M134.287 517.526C135.15 518.814 136.73 519.497 138.283 519.557C139.829 519.61 141.356 519.112 142.743 518.429C144.249 517.692 145.836 516.331 145.53 514.685C145.358 513.75 144.575 513.02 143.692 512.648C142.816 512.283 141.84 512.223 140.891 512.183C137.984 512.057 131.201 512.913 134.287 517.533V517.526Z" fill="#EFF0F0"></path>
|
||||
<path d="M133.602 514.972C133.602 514.972 133.63 514.972 133.637 514.972C133.623 514.951 133.609 514.944 133.602 514.972Z" fill="#F1F2F2"></path>
|
||||
<path d="M136.337 520.021C136.337 520.021 136.323 520.007 136.323 520C136.316 520.021 136.323 520.021 136.337 520.021Z" fill="#F1F2F2"></path>
|
||||
<path d="M140.852 519.64C140.852 519.64 140.845 519.64 140.838 519.633C140.804 519.708 140.825 519.695 140.852 519.64Z" fill="#F1F2F2"></path>
|
||||
<path d="M127.039 547.657C127.45 548.028 127.922 548.373 128.473 548.413C128.851 548.44 129.222 548.314 129.574 548.161C131.426 547.358 132.933 545.712 133.41 543.754C134.313 540.031 130.337 535.252 126.309 536.799C122.035 538.438 124.683 545.513 127.046 547.657H127.039Z" fill="#EFF0F0"></path>
|
||||
<path d="M130.262 548.758C130.262 548.758 130.241 548.758 130.234 548.758C130.241 548.779 130.248 548.772 130.262 548.758Z" fill="#F1F2F2"></path>
|
||||
<path d="M157.986 531.471C157.057 531.505 156.161 531.133 155.325 530.721C153.639 529.892 151.966 528.777 151.177 527.078C150.865 526.401 150.712 525.578 151.09 524.927C151.601 524.045 152.796 523.899 153.818 523.872C155.006 523.839 156.234 523.839 157.342 524.284C159.864 525.292 162.161 531.339 157.993 531.471H157.986Z" fill="#EFF0F0"></path>
|
||||
<path d="M152.097 525.013L152.07 524.953C152.077 524.986 152.09 525.013 152.097 525.013Z" fill="#F1F2F2"></path>
|
||||
<path d="M154.406 523.898C154.406 523.898 154.42 523.924 154.426 523.944C154.439 523.898 154.459 523.851 154.473 523.805C154.453 523.831 154.433 523.864 154.406 523.898Z" fill="#F1F2F2"></path>
|
||||
<path d="M154.36 524.499L154.273 524.406C154.273 524.406 154.32 524.473 154.36 524.499Z" fill="#F1F2F2"></path>
|
||||
<path d="M151.82 526.069H151.973C151.96 526.023 151.893 526.062 151.82 526.069Z" fill="#F1F2F2"></path>
|
||||
<path d="M151.064 523.859C151.051 523.906 151.051 523.939 151.071 523.966C151.09 523.919 151.09 523.886 151.064 523.859Z" fill="#F1F2F2"></path>
|
||||
<path d="M152.805 528.55C152.805 528.55 152.805 528.557 152.805 528.564C152.882 528.55 152.861 528.543 152.805 528.55Z" fill="#F1F2F2"></path>
|
||||
<path d="M154.358 524.43C154.358 524.43 154.345 524.37 154.345 524.344C154.331 524.37 154.331 524.403 154.358 524.43Z" fill="#F1F2F2"></path>
|
||||
<path d="M151.797 526.062V526.069L151.825 526.062H151.797Z" fill="#F1F2F2"></path>
|
||||
<path d="M152.658 525.177V525.123C152.625 525.07 152.611 525.07 152.578 525.07L152.658 525.177Z" fill="#F1F2F2"></path>
|
||||
<path d="M152.03 525.306H152.043L151.891 525.18L152.03 525.306Z" fill="#F1F2F2"></path>
|
||||
<path d="M152.105 525.687C152.105 525.687 152.072 525.654 152.086 525.641C152.112 525.667 151.867 525.654 152.105 525.687Z" fill="#F1F2F2"></path>
|
||||
<path d="M149.633 544.792C149.553 544.347 149.54 543.876 149.739 543.471C150.011 542.907 150.628 542.602 151.199 542.337C152.732 541.626 154.292 540.91 155.964 540.691C159.827 540.18 164.274 544.427 160.391 547.507C157.073 550.141 150.509 549.657 149.633 544.792Z" fill="#EFF0F0"></path>
|
||||
<path d="M161.656 545.836H161.609C161.649 545.882 161.682 545.916 161.716 545.949C161.696 545.916 161.676 545.876 161.656 545.836Z" fill="#F1F2F2"></path>
|
||||
<path d="M158.505 542L158.398 542.113C158.478 542.146 158.471 542.066 158.505 542Z" fill="#F1F2F2"></path>
|
||||
<path d="M161.395 541.998C161.349 541.984 161.316 541.998 161.289 542.017C161.336 542.031 161.369 542.031 161.395 541.998Z" fill="#F1F2F2"></path>
|
||||
<path d="M155.256 541.272C155.256 541.272 155.249 541.272 155.242 541.258C155.2 541.335 155.221 541.314 155.256 541.272Z" fill="#F1F2F2"></path>
|
||||
<path d="M158.53 541.992C158.53 541.999 158.516 542.006 158.516 542.02L158.537 541.999L158.53 541.992Z" fill="#F1F2F2"></path>
|
||||
<path d="M150.497 561.425C146.894 562.66 142.991 563.025 139.016 562.275C139.208 561.472 139.659 560.536 140.423 559.454C140.847 558.844 141.325 558.226 141.996 557.895C142.666 557.563 143.449 557.549 144.192 557.583C145.666 557.649 147.192 557.875 148.433 558.671C149.429 559.302 150.132 560.31 150.484 561.425H150.497Z" fill="#EFF0F0"></path>
|
||||
<path d="M139.516 561.573L139.569 561.547C139.569 561.547 139.529 561.567 139.516 561.573Z" fill="#F1F2F2"></path>
|
||||
<path d="M139.818 562.486L139.758 562.466C139.758 562.466 139.785 562.479 139.791 562.486L139.188 561.55C139.188 561.55 139.194 561.53 139.188 561.523L139.811 562.492L139.818 562.486Z" fill="#F1F2F2"></path>
|
||||
<path d="M140.274 559.761C140.274 559.761 140.307 559.761 140.321 559.768C140.287 559.728 140.261 559.688 140.234 559.648C140.248 559.682 140.261 559.721 140.274 559.755V559.761Z" fill="#F1F2F2"></path>
|
||||
<path d="M140.751 560.133L140.625 560.153C140.665 560.153 140.705 560.153 140.751 560.133Z" fill="#F1F2F2"></path>
|
||||
<path d="M139.109 563.056C139.143 563.036 139.162 563.01 139.169 562.977C139.136 562.996 139.109 563.023 139.109 563.056Z" fill="#F1F2F2"></path>
|
||||
<path d="M140.705 560.095C140.705 560.095 140.652 560.075 140.625 560.055C140.638 560.081 140.665 560.095 140.705 560.095Z" fill="#F1F2F2"></path>
|
||||
<path d="M141.304 561.684C141.304 561.677 141.304 561.663 141.311 561.656L141.297 561.684H141.304Z" fill="#F1F2F2"></path>
|
||||
<path d="M140.351 561.982L140.305 561.955C140.245 561.949 140.239 561.955 140.219 561.989L140.351 561.975V561.982Z" fill="#F1F2F2"></path>
|
||||
<path d="M139.637 561.388L139.617 561.375L139.624 561.574L139.637 561.388Z" fill="#F1F2F2"></path>
|
||||
<path d="M140.657 561.276C140.618 561.263 140.564 561.303 140.531 561.283C140.624 561.263 140.637 561.515 140.657 561.276Z" fill="#F1F2F2"></path>
|
||||
<path d="M125.1 529.044C124.722 529.569 124.224 530.033 123.607 530.252C122.956 530.478 122.239 530.411 121.549 530.318C120.839 530.226 120.129 530.113 119.445 529.98C120.301 526.954 121.689 524.073 123.56 521.531C123.6 521.551 123.646 521.578 123.68 521.604C126.062 523.124 126.759 526.754 125.093 529.051L125.1 529.044Z" fill="#EFF0F0"></path>
|
||||
<path d="M121.484 526.672L121.504 526.725C121.504 526.725 121.498 526.685 121.484 526.672Z" fill="#F1F2F2"></path>
|
||||
<path d="M121.616 526.393L121.562 526.359C121.562 526.359 121.609 526.406 121.616 526.393Z" fill="#F1F2F2"></path>
|
||||
<path d="M124.36 521.066C124.373 520.926 124.413 520.714 124.333 520.847L124.273 520.979C124.327 520.986 124.353 521.026 124.36 521.066Z" fill="#F1F2F2"></path>
|
||||
<path d="M122.069 523.848C122.069 523.848 122.102 523.848 122.115 523.848C122.082 523.809 122.049 523.775 122.016 523.742C122.029 523.775 122.049 523.809 122.069 523.842V523.848Z" fill="#F1F2F2"></path>
|
||||
<path d="M122.565 524.188L122.445 524.207C122.485 524.207 122.525 524.207 122.565 524.188Z" fill="#F1F2F2"></path>
|
||||
<path d="M121.016 528.227L121.135 528.319C121.162 528.246 121.082 528.253 121.016 528.227Z" fill="#F1F2F2"></path>
|
||||
<path d="M120.133 525.938C120.146 525.971 120.166 525.997 120.199 526.011C120.186 525.977 120.166 525.951 120.133 525.938Z" fill="#F1F2F2"></path>
|
||||
<path d="M126.192 523.164C126.192 523.164 126.179 523.191 126.172 523.211C126.212 523.244 126.252 523.277 126.265 523.33C126.298 523.257 126.305 523.177 126.192 523.171V523.164Z" fill="#F1F2F2"></path>
|
||||
<path d="M123.109 529.535C123.109 529.535 123.116 529.542 123.123 529.549C123.123 529.528 123.116 529.528 123.109 529.535Z" fill="#F1F2F2"></path>
|
||||
<path d="M120.133 529.644C120.133 529.644 120.133 529.651 120.133 529.658C120.182 529.602 120.168 529.609 120.133 529.644Z" fill="#F1F2F2"></path>
|
||||
<path d="M123.733 522.437L123.726 522.43H123.719L123.733 522.437Z" fill="#F1F2F2"></path>
|
||||
<path d="M123.744 522.613C123.631 522.46 123.665 522.447 123.724 522.433L123.359 522.234L123.751 522.613H123.744Z" fill="#F1F2F2"></path>
|
||||
<path d="M122.517 524.158C122.517 524.158 122.464 524.138 122.438 524.125C122.457 524.145 122.484 524.165 122.517 524.158Z" fill="#F1F2F2"></path>
|
||||
<path d="M121 528.202C121.007 528.202 121.021 528.216 121.028 528.216L121.007 528.195L121 528.202Z" fill="#F1F2F2"></path>
|
||||
<path d="M124.395 523.149C124.395 523.116 124.415 523.089 124.435 523.062C124.401 523.082 124.382 523.116 124.395 523.149Z" fill="#F1F2F2"></path>
|
||||
<path d="M124.75 522.683L124.77 522.697L125.029 522.484L124.75 522.683Z" fill="#F1F2F2"></path>
|
||||
<path d="M123.289 522.423C123.322 522.549 123.428 522.263 123.448 522.403C123.515 522.35 123.435 522.29 123.495 522.25C123.395 522.283 123.395 522.223 123.289 522.423Z" fill="#F1F2F2"></path>
|
||||
<path d="M123.492 522.254C123.492 522.254 123.525 522.241 123.552 522.234C123.525 522.234 123.505 522.248 123.492 522.254Z" fill="#F1F2F2"></path>
|
||||
<path d="M122.225 525.969L122.179 525.943C122.126 525.929 122.112 525.943 122.086 525.969H122.219H122.225Z" fill="#F1F2F2"></path>
|
||||
<path d="M121.64 526.833L121.653 526.82L121.461 526.773L121.64 526.833Z" fill="#F1F2F2"></path>
|
||||
<path d="M121.53 527.746C121.53 527.746 121.53 527.659 121.543 527.633C121.543 527.719 121.297 527.666 121.53 527.746Z" fill="#F1F2F2"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,19 @@
|
||||
<svg width="154" height="128" viewBox="218 367 154 128" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path d="M353.794 415.648C352.265 415.648 350.768 414.915 349.844 413.562C348.363 411.38 348.92 408.401 351.102 406.92C362.506 399.163 363.828 389.782 355.355 376.499C353.937 374.269 354.59 371.323 356.82 369.905C359.05 368.488 361.996 369.141 363.414 371.371C377.653 393.716 367.507 407.334 356.47 414.836C355.641 415.393 354.718 415.664 353.794 415.664V415.648Z" fill="#FDFDFD" stroke="#1F1F1F" stroke-width="2.5" stroke-miterlimit="10"></path>
|
||||
<path d="M241.663 455.328C241.663 455.328 215.447 462.479 220.161 475.492C224.876 488.504 266.525 472.211 266.525 472.211" fill="#FDFDFD"></path>
|
||||
<path d="M241.663 455.328C241.663 455.328 215.447 462.479 220.161 475.492C224.876 488.504 266.525 472.211 266.525 472.211" stroke="#1F1F1F" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M360.266 437.78C360.091 435.279 359.31 433.081 358.578 430.804C358.307 426.36 357.638 421.948 356.125 417.728C356.125 417.728 356.125 417.712 356.109 417.696C356.236 417.122 356.221 416.517 356.014 415.912C355.106 413.364 353.959 410.974 352.366 408.792C351.777 407.98 351.012 407.359 350.136 407.056C349.913 406.754 349.706 406.451 349.483 406.164C347.413 403.616 344.737 401.609 341.727 400.287C334.862 397.261 327.058 397.643 320.018 399.937C306.703 404.269 298.389 415.307 290.903 426.472C290.139 427.618 290.234 429.115 290.855 430.31C290.298 430.82 289.772 431.313 289.295 431.759C286.173 434.69 283.449 438.035 281.108 441.618C277.19 441.395 273.256 441.618 269.386 442.287C269.433 441.841 269.417 441.379 269.354 440.902C268.892 438.035 268.223 435.232 267.379 432.492C267.076 431.218 266.71 429.976 266.216 428.765C266.184 428.064 266.152 427.379 266.073 426.679C265.818 424.465 264.448 422.792 262.091 422.697C261.613 422.681 261.183 422.729 260.769 422.824C259.192 422.585 257.456 423.143 256.771 424.688C253.57 431.998 251.77 439.659 251.595 447.671C251.595 447.926 251.611 448.148 251.659 448.387C247.374 451.127 243.36 454.296 239.729 457.848C234.999 462.483 230.746 468.424 231.718 475.384C232.578 481.596 237.34 486.549 242.978 488.906C249.922 491.805 257.711 490.563 264.703 488.476C268.51 487.345 268.318 481.659 264.783 480.783C267.028 477.582 269.672 474.667 272.651 472.135C273.224 472.119 273.829 471.991 274.45 471.673C278.034 469.921 281.745 468.503 285.552 467.341C285.647 467.85 285.743 468.36 285.854 468.854C286.014 469.921 286.125 470.972 286.141 472.071C286.205 476.005 291.269 477.216 293.308 474.46C293.706 475.288 294.375 475.941 295.156 476.387C295.538 477.247 296.271 477.948 297.163 478.378C297.513 481.309 301.001 483.204 303.82 480.799C303.852 480.783 303.868 480.751 303.9 480.736C304.059 480.927 304.25 481.102 304.457 481.261C305.445 483.762 309.493 486.619 311.5 484.07C313.045 482.095 314.141 478.952 315.686 476.977C316.036 476.531 316.419 476.069 316.801 475.623C315.479 477.518 314.444 479.605 313.775 481.834C313.281 483.443 314.077 485.53 315.606 486.326C318.68 487.935 321.866 487.664 325.194 487.329C328.523 486.995 331.629 486.374 334.703 485.068C339.991 482.806 344.403 478.999 348.639 475.177C350.662 473.345 352.796 471.625 354.771 469.746C356.762 467.85 357.431 465.716 357.702 463.311C358.164 461.878 358.419 460.349 358.61 458.581C359.358 451.78 360.776 444.613 360.282 437.764L360.266 437.78ZM350.2 451.684C350.2 451.684 350.28 451.589 350.312 451.541C350.312 451.541 350.312 451.573 350.312 451.589C350.28 451.621 350.232 451.652 350.2 451.684ZM320.384 470.94C321.547 468.997 323.586 468.854 321.499 464.999C321.515 465.015 321.531 465.031 321.547 465.063C322.025 466.258 322.566 467.452 323.124 468.647C323.267 468.949 323.426 469.204 323.586 469.475C323.076 469.762 322.598 470.064 322.12 470.399C321.085 470.877 320.241 471.577 319.572 472.422C319.238 472.74 318.951 473.075 318.632 473.409C319.254 472.613 319.859 471.816 320.368 470.972L320.384 470.94Z" fill="#FDFDFD"></path>
|
||||
<path d="M262.153 488.853C262.153 488.853 237.291 494.825 232.831 477.13C228.372 459.435 252.119 448.716 252.119 448.716C252.119 448.716 252.008 421.672 260.337 421.672C268.667 421.672 270.451 441.565 270.451 441.565C270.451 441.565 275.373 440.275 280.772 440.864" stroke="#1F1F1F" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M286.661 467.734C286.661 467.734 258.486 475.172 263.185 488.201C267.899 501.213 312.161 484.219 312.161 484.219" fill="#FDFDFD"></path>
|
||||
<path d="M286.661 467.734C286.661 467.734 258.486 475.172 263.185 488.201C267.899 501.213 312.161 484.219 312.161 484.219" stroke="#1F1F1F" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M336.099 438.124C336.099 438.124 324.026 439.335 320.427 450.324C316.827 461.314 324.154 468.497 324.154 468.497C323.931 468.274 321.064 470.218 320.841 470.361C318.595 471.858 316.509 473.706 314.996 475.967C313.849 477.687 312.893 479.853 312.686 481.924C312.527 483.66 313.052 485.555 314.454 486.591C315.219 487.148 316.158 487.403 317.082 487.61C326.399 489.633 335.653 486.543 343.25 481.128C347.567 478.054 351.373 474.327 354.798 470.297C357.298 467.335 358.907 463.735 359.432 459.913C361.439 445.339 364.004 407.448 337.979 399.596C305.28 389.722 285.992 435.576 285.992 435.576" stroke="#1F1F1F" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M261.699 454.502C261.603 454.47 261.508 454.438 261.428 454.391C261.396 454.391 261.38 454.359 261.348 454.343C261.205 454.247 261.109 454.168 261.014 454.008C261.014 454.008 261.014 453.992 261.014 453.977C260.982 453.913 260.95 453.833 260.918 453.769C260.918 453.722 260.886 453.594 260.886 453.546C260.886 453.546 260.886 453.546 260.886 453.531C260.886 453.451 260.886 453.371 260.918 453.292C260.934 453.196 260.982 453.116 261.03 453.037C261.141 452.846 261.301 452.702 261.476 452.575C261.476 452.575 261.508 452.575 261.524 452.559C261.125 451.906 260.6 451.508 259.995 451.508C258.784 451.508 257.812 453.148 257.812 455.155C257.812 457.162 258.784 458.802 259.995 458.802C261.205 458.802 262.177 457.162 262.177 455.155C262.177 454.948 262.161 454.757 262.145 454.55C262.001 454.55 261.858 454.534 261.715 454.502H261.699Z" fill="#1F1F1F"></path>
|
||||
<path d="M274.542 454.502C274.447 454.47 274.351 454.438 274.272 454.391C274.24 454.391 274.224 454.359 274.192 454.343C274.049 454.247 273.953 454.168 273.858 454.008C273.858 454.008 273.858 453.992 273.858 453.977C273.826 453.913 273.794 453.833 273.762 453.769C273.762 453.722 273.73 453.594 273.73 453.546C273.73 453.546 273.73 453.546 273.73 453.531C273.73 453.451 273.73 453.371 273.762 453.292C273.778 453.196 273.826 453.116 273.874 453.037C273.985 452.846 274.144 452.702 274.32 452.575C274.32 452.575 274.351 452.575 274.367 452.559C273.969 451.906 273.444 451.508 272.838 451.508C271.628 451.508 270.656 453.148 270.656 455.155C270.656 457.162 271.628 458.802 272.838 458.802C274.049 458.802 275.02 457.162 275.02 455.155C275.02 454.948 275.004 454.757 274.988 454.55C274.845 454.55 274.702 454.534 274.558 454.502H274.542Z" fill="#1F1F1F"></path>
|
||||
<path d="M233.98 480.414C233.98 480.414 223.309 484.524 226.526 489.827C229.744 495.131 244.158 488.999 244.158 488.999C239.205 486.833 235.669 484.03 233.964 480.398L233.98 480.414Z" fill="#EFBAD5" stroke="#1F1F1F" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M232.695 487.199C234.001 486.163 235.291 485.351 236.582 484.969" stroke="#1F1F1F" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M249.591 464.96C249.113 461.838 246.66 459.019 243.841 457.713C242.854 457.251 241.866 457.012 240.767 457.314C239.334 458.143 238.028 459.194 236.833 460.42C234.747 462.443 233.377 464.753 232.772 467.603C232.612 468.384 232.453 469.196 232.453 469.993C232.453 471.426 233.042 472.716 234.014 473.751C235.017 474.834 236.387 475.583 237.773 476.013C240.783 476.921 244.016 476.061 246.326 473.99C246.724 473.624 247.074 473.21 247.409 472.78C247.95 472.111 248.476 471.442 248.842 470.646C249.336 469.547 249.575 468.671 249.718 467.476C249.814 466.6 249.718 465.82 249.575 464.944L249.591 464.96Z" fill="#1F1F1F"></path>
|
||||
<path d="M245.603 461.85C245.396 461.675 245.173 461.532 244.902 461.468C244.902 461.468 244.87 461.468 244.854 461.468C244.807 461.452 244.759 461.42 244.711 461.404C244.647 461.388 244.6 461.372 244.536 461.357C244.408 461.341 244.281 461.309 244.154 461.325C243.962 461.341 243.803 461.372 243.628 461.468C243.469 461.548 243.341 461.691 243.246 461.834C243.023 462.217 243.118 462.71 243.453 462.997C243.771 463.252 244.106 463.459 244.504 463.57C244.695 463.618 244.902 463.65 245.109 463.666C245.348 463.666 245.603 463.586 245.778 463.411C245.874 463.316 245.921 463.236 245.969 463.124C246.017 462.997 246.049 462.886 246.049 462.742C246.033 462.408 245.858 462.089 245.603 461.882V461.85Z" fill="#FDFDFD"></path>
|
||||
<path d="M281.266 443.492C281.266 443.492 292.16 420.971 303.484 425.16C314.808 429.349 303.484 452.73 303.484 452.73" stroke="#1F1F1F" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.9 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="12" height="12" viewBox="18.43 15 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.162 21.6401C20.9932 21.4712 20.8984 21.2423 20.8984 21.0036C20.8984 20.7649 20.9932 20.536 21.162 20.3672L26.2544 15.2748C26.3374 15.1888 26.4367 15.1203 26.5466 15.0731C26.6564 15.0259 26.7745 15.0011 26.894 15C27.0136 14.999 27.1321 15.0218 27.2427 15.067C27.3534 15.1123 27.4539 15.1791 27.5384 15.2637C27.6229 15.3482 27.6898 15.4487 27.735 15.5593C27.7803 15.6699 27.8031 15.7885 27.802 15.908C27.801 16.0275 27.7762 16.1457 27.729 16.2555C27.6818 16.3653 27.6132 16.4646 27.5272 16.5477L23.0713 21.0036L27.5272 25.4596C27.6912 25.6293 27.782 25.8567 27.7799 26.0928C27.7779 26.3288 27.6832 26.5546 27.5163 26.7215C27.3494 26.8884 27.1236 26.983 26.8876 26.9851C26.6515 26.9871 26.4242 26.8964 26.2544 26.7324L21.162 21.6401Z" fill="#1F1F1F"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 924 B |
@@ -0,0 +1,9 @@
|
||||
<svg width="22" height="22" viewBox="19.57 102.21 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path d="M39.0809 119.161C38.8352 120.478 37.8761 121.422 36.7444 121.723C35.1646 122.143 34.067 121.303 32.8079 121.638C31.5489 121.973 31.0132 123.247 29.4335 123.667C28.3017 123.967 27.0006 123.625 26.1337 122.604C25.2663 121.582 24.799 120.095 24.9544 118.752C25.2884 115.862 27.2489 112.377 30.1413 111.608C33.0337 110.839 36.4657 112.89 38.191 115.232C38.9932 116.321 39.3262 117.844 39.0809 119.161Z" fill="#1F1F1F"></path>
|
||||
<path d="M26.7572 111.096C25.1953 111.754 23.3399 110.878 22.6128 109.139C21.8853 107.401 22.5621 105.458 24.1236 104.801C25.6851 104.143 27.5408 105.019 28.268 106.757C28.9951 108.496 28.3187 110.438 26.7568 111.096L26.7572 111.096Z" fill="#1F1F1F"></path>
|
||||
<path d="M23.5417 116.651C22.429 117.399 20.8593 117.001 20.0355 115.761C19.2116 114.521 19.4458 112.91 20.558 112.162C21.6707 111.413 23.2404 111.812 24.0642 113.051C24.8881 114.291 24.6539 115.903 23.5417 116.651Z" fill="#1F1F1F"></path>
|
||||
<path d="M32.8455 109.475C34.5279 109.27 35.7031 107.588 35.4708 105.718C35.2385 103.848 33.6867 102.498 32.0042 102.703C30.3218 102.908 29.1466 104.589 29.379 106.459C29.6113 108.329 31.1631 109.679 32.8455 109.475Z" fill="#1F1F1F"></path>
|
||||
<path d="M38.3855 112.705C39.7229 112.802 40.8874 111.676 40.9868 110.191C41.0861 108.706 40.0824 107.423 38.7454 107.327C37.4081 107.23 36.2435 108.355 36.1441 109.84C36.0448 111.325 37.0485 112.608 38.3855 112.705Z" fill="#1F1F1F"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,16 @@
|
||||
<svg width="143" height="103" viewBox="51 361 143 103" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path d="M102.761 403.303C102.594 403.481 102.417 403.659 102.25 403.825C100.874 405.235 99.4971 406.645 98.1205 408.055C97.9873 408.188 97.8652 408.31 97.7431 408.443C96.2444 409.975 94.7346 411.507 93.247 413.028C93.2359 413.039 93.2137 413.061 93.2026 413.073C72.7317 433.932 53.4818 453.237 53.4818 453.237C53.4818 453.237 52.6381 453.36 51.75 452.527C51.3948 452.205 51.206 451.861 51.1172 451.55C51.0617 451.35 51.0395 451.173 51.0395 451.006C51.0395 450.606 51.1616 450.34 51.1616 450.34C51.1616 450.351 138.496 361.273 141.138 361.973C142.371 362.306 123.387 382.177 102.772 403.292L102.761 403.303Z" fill="#EC6C00"></path>
|
||||
<path d="M102.75 403.304C102.583 403.481 102.406 403.659 102.239 403.826L98.6758 403.737C98.5204 403.737 98.3761 403.792 98.2761 403.903C98.1651 404.014 98.1096 404.159 98.1207 404.303L98.2539 407.467C98.2539 407.667 98.2095 407.878 98.1096 408.055C98.0652 408.133 98.0097 408.211 97.9431 408.277C97.8765 408.344 97.8099 408.399 97.7322 408.444C97.5545 408.544 97.3547 408.61 97.1438 408.599L93.9577 408.521C93.8023 408.521 93.658 408.577 93.5469 408.688C93.4359 408.799 93.3804 408.943 93.3915 409.099L93.5247 412.263C93.5358 412.551 93.4359 412.829 93.2361 413.04C93.2361 413.04 93.225 413.062 93.2139 413.062C93.2139 413.062 93.2028 413.073 93.1917 413.084C92.9808 413.284 92.7032 413.395 92.4035 413.384L89.2063 413.306C89.0509 413.306 88.9066 413.362 88.8066 413.473C88.6956 413.584 88.6401 413.728 88.6512 413.872L88.7844 417.036C88.7955 417.336 88.6845 417.625 88.4736 417.835C88.2627 418.046 87.974 418.169 87.6632 418.157L84.4771 418.08C84.3217 418.08 84.1774 418.135 84.0775 418.246C83.9664 418.357 83.9109 418.502 83.922 418.646L84.0553 421.81C84.0664 422.109 83.9553 422.398 83.7444 422.609C83.5335 422.82 83.2448 422.942 82.934 422.931L79.7368 422.853C79.5814 422.853 79.4371 422.909 79.3372 423.02C79.2261 423.131 79.1706 423.275 79.1817 423.431L79.315 426.594C79.3261 426.894 79.215 427.183 79.0041 427.394C78.7932 427.605 78.5046 427.727 78.1937 427.716L75.0076 427.638C74.8522 427.638 74.7079 427.693 74.5969 427.805C74.4859 427.916 74.4303 428.06 74.4414 428.204L74.5747 431.368C74.5858 431.668 74.4747 431.956 74.2638 432.167C74.0529 432.378 73.7643 432.5 73.4534 432.489L70.2673 432.412C70.1119 432.412 69.9676 432.467 69.8566 432.578C69.7456 432.689 69.69 432.833 69.7011 432.989L69.8344 436.153C69.8455 436.452 69.7345 436.741 69.5235 436.952C69.3126 437.163 69.024 437.285 68.7131 437.274L65.5159 437.196C65.3605 437.196 65.2162 437.252 65.1163 437.363C65.0053 437.474 64.9498 437.618 64.9609 437.762L65.0941 440.926C65.1052 441.226 64.9942 441.515 64.7832 441.726C64.5723 441.937 64.2837 442.059 63.9728 442.048L60.7756 441.97C60.6202 441.97 60.4759 442.025 60.376 442.136C60.265 442.247 60.2095 442.392 60.2206 442.536L60.3538 445.7C60.3649 446 60.2539 446.288 60.0429 446.499C59.832 446.71 59.5434 446.832 59.2325 446.821L56.0353 446.743C55.8799 446.743 55.7356 446.799 55.6357 446.91C55.5247 447.021 55.4692 447.165 55.4803 447.31L55.6135 450.474C55.6246 450.773 55.5136 451.062 55.3026 451.273C55.125 451.45 54.8919 451.561 54.6366 451.595C54.5921 451.595 54.5477 451.595 54.4922 451.595L51.0841 451.517C51.0286 451.317 51.0064 451.14 51.0064 450.973L54.5033 451.062C54.6588 451.062 54.8031 451.006 54.903 450.895C55.014 450.784 55.0695 450.64 55.0584 450.496L54.9252 447.332C54.9141 447.032 55.0251 446.743 55.236 446.533C55.447 446.322 55.7356 446.2 56.0464 446.211L59.2436 446.288C59.3991 446.288 59.5434 446.233 59.6433 446.122C59.7543 446.011 59.8098 445.866 59.7987 445.711L59.6655 442.547C59.6544 442.247 59.7654 441.959 59.9763 441.748C60.1873 441.537 60.4759 441.415 60.7867 441.426L63.9839 441.504C64.1394 441.504 64.2837 441.448 64.3836 441.337C64.4946 441.226 64.5501 441.082 64.539 440.926L64.4058 437.762C64.3947 437.463 64.5057 437.174 64.7166 436.963C64.9275 436.752 65.2162 436.63 65.527 436.641L68.7242 436.719C68.8796 436.719 69.024 436.663 69.135 436.552C69.246 436.441 69.3015 436.297 69.2904 436.142L69.1572 432.978C69.1461 432.678 69.2571 432.389 69.468 432.178C69.6789 431.968 69.9676 431.845 70.2673 431.857L73.4645 431.934C73.6199 431.934 73.7643 431.879 73.8642 431.768C73.9752 431.657 74.0307 431.512 74.0196 431.368L73.8864 428.204C73.8753 427.904 73.9863 427.616 74.1972 427.405C74.4081 427.194 74.6968 427.072 75.0076 427.083L78.1937 427.161C78.3491 427.161 78.4935 427.105 78.5934 426.994C78.7044 426.883 78.7599 426.739 78.7488 426.594L78.6156 423.431C78.6045 423.131 78.7155 422.842 78.9264 422.631C79.1373 422.42 79.426 422.298 79.7368 422.309L82.934 422.387C83.0894 422.387 83.2337 422.332 83.3337 422.221C83.4447 422.109 83.5002 421.965 83.4891 421.821L83.3559 418.657C83.3448 418.357 83.4558 418.069 83.6667 417.858C83.8776 417.647 84.1663 417.525 84.4771 417.536L87.6632 417.613C87.8186 417.613 87.9629 417.558 88.074 417.447C88.185 417.336 88.2405 417.192 88.2294 417.047L88.0962 413.883C88.0851 413.584 88.1961 413.295 88.407 413.073C88.6179 412.862 88.9066 412.74 89.2174 412.751L92.4146 412.829C92.57 412.829 92.7143 412.773 92.8143 412.662C92.9253 412.551 92.9808 412.407 92.9697 412.263L92.8365 409.099C92.8254 408.799 92.9364 408.51 93.1473 408.299C93.3582 408.088 93.6469 407.966 93.9577 407.977L97.1438 408.055C97.2992 408.055 97.4435 408 97.5434 407.889C97.6545 407.778 97.71 407.633 97.6989 407.489L97.5656 404.325C97.5545 404.025 97.6656 403.737 97.8765 403.526C98.0874 403.315 98.3761 403.193 98.6869 403.204L102.75 403.304Z" fill="white"></path>
|
||||
<path d="M164.742 438.912C165.142 440.189 166.262 443.378 169.404 447.585C173.645 453.269 176.842 452.237 179.573 456.145C182.304 460.052 183.569 463.238 183.569 463.238C183.569 463.238 184.879 460.696 186.889 461.285C188.898 461.873 189.442 460.363 189.964 458.931C190.497 457.488 192.517 459.197 192.517 459.197C191.796 452.881 179.806 446.131 174.622 444.022C170.67 442.423 167.986 439.603 167.042 438.438C165.91 439.259 165.197 439.079 164.753 438.924L164.742 438.912Z" fill="#FFD066"></path>
|
||||
<path d="M189.04 457.469L189.462 457.336C189.462 457.336 187.763 452.051 181.402 449.498C176.75 447.633 173.22 445.468 170.9 443.07L170.578 443.37C172.943 445.812 176.528 448.01 181.235 449.898C187.397 452.362 189.018 457.402 189.04 457.458V457.469Z" fill="#1F1F1F"></path>
|
||||
<path d="M186.614 458.281L187.047 458.17C185.915 453.841 180.664 451.088 180.442 450.977L180.242 451.365C180.242 451.365 185.538 454.14 186.614 458.281Z" fill="#1F1F1F"></path>
|
||||
<path d="M179.519 453.422L179.841 453.112C178.309 451.546 176.91 450.803 175.545 450.081C174.757 449.659 173.946 449.226 173.114 448.638C170.338 446.673 169.395 445.185 167.407 441.422L167.008 441.622C169.028 445.452 169.994 446.973 172.847 448.993C173.702 449.593 174.535 450.037 175.334 450.458C176.722 451.202 178.043 451.902 179.519 453.411V453.422Z" fill="#1F1F1F"></path>
|
||||
<path d="M184.545 459.944L184.967 459.8C184.234 457.702 181.914 455.259 181.814 455.148L181.492 455.448C181.492 455.448 183.846 457.935 184.545 459.933V459.944Z" fill="#1F1F1F"></path>
|
||||
<path d="M141.195 361.987C147.077 361.583 157.785 367.62 153.563 395.005C149.341 422.391 158.438 432.755 163.515 434.513" stroke="#1F1F1F" stroke-width="0.568762"></path>
|
||||
<path d="M166.954 434.814C166.932 434.189 166.257 433.467 164.385 433.298C163.999 433.263 163.648 433.475 163.417 433.868C163.116 434.367 163.022 435.171 163.417 435.753C163.603 436.03 164.064 436.461 165.053 436.305C165.397 436.249 165.706 436.157 165.969 436.034C166.59 435.755 166.958 435.316 166.943 434.818L166.954 434.814ZM164.344 433.733C165.818 433.871 166.493 434.383 166.511 434.822C166.523 435.204 166.053 435.69 164.986 435.86C164.431 435.952 164.013 435.823 163.785 435.489C163.503 435.069 163.576 434.447 163.793 434.082C163.853 433.98 163.958 433.839 164.109 433.765C164.182 433.741 164.256 433.716 164.34 433.723L164.344 433.733Z" fill="#1F1F1F"></path>
|
||||
<path d="M166.758 437.407C166.291 437.622 165.828 437.672 165.371 437.567C164.033 437.243 163.307 435.601 163.286 435.538L163.697 435.365C163.697 435.365 164.366 436.873 165.486 437.142C166.024 437.278 166.596 437.098 167.199 436.627C167.753 436.184 167.994 435.787 167.924 435.436C167.779 434.758 166.472 434.283 165.987 434.164L166.102 433.739C166.306 433.788 168.132 434.277 168.362 435.347C168.479 435.87 168.185 436.425 167.48 436.977C167.238 437.164 167.007 437.312 166.775 437.424L166.758 437.407Z" fill="#1F1F1F"></path>
|
||||
<path d="M165.513 438.054C164.984 438.291 164.229 438.45 163.235 438.139C162.88 438.023 162.508 437.855 162.142 437.638C161.454 437.225 161.123 436.762 161.175 436.253C161.282 435.175 163.103 434.46 163.31 434.379L163.472 434.793C162.984 434.98 161.697 435.61 161.631 436.288C161.597 436.604 161.847 436.93 162.388 437.252C162.725 437.455 163.059 437.612 163.385 437.714C164.604 438.102 165.407 437.668 165.79 437.377C165.902 437.292 165.961 437.225 165.961 437.225L166.295 437.523C166.295 437.523 166.211 437.622 166.06 437.731C165.931 437.833 165.748 437.952 165.524 438.051L165.513 438.054Z" fill="#1F1F1F"></path>
|
||||
<path d="M166.262 439.194C166.262 439.194 166.189 439.219 166.157 439.229C165.487 439.465 164.682 439.126 163.754 438.208L164.07 437.891C164.843 438.662 165.511 438.977 166.005 438.812C166.739 438.554 167.039 437.248 167.098 436.76L167.537 436.812C167.53 436.896 167.308 438.715 166.262 439.194Z" fill="#1F1F1F"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.2 KiB |
@@ -0,0 +1,4 @@
|
||||
<svg width="24" height="20.63" viewBox="35.57 656.58 24 20.63" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M59.5703 675.336C59.5703 676.372 58.7309 677.211 57.6953 677.211H37.4453C36.4098 677.211 35.5703 676.372 35.5703 675.336V655.086C35.5703 654.05 36.4098 653.211 37.4453 653.211H57.6953C58.7309 653.211 59.5703 654.05 59.5703 655.086V675.336Z" fill="#FFE812" fill-opacity="0.01"></path>
|
||||
<path d="M47.5703 656.586C42.1855 656.586 37.8203 660.028 37.8203 664.273C37.8203 667.018 39.6453 669.427 42.3904 670.787C42.2411 671.302 41.4307 674.1 41.3985 674.32C41.3985 674.32 41.3791 674.485 41.486 674.548C41.593 674.611 41.7188 674.563 41.7188 674.563C42.0256 674.52 45.276 672.236 45.8386 671.84C46.4006 671.92 46.9793 671.961 47.5703 671.961C52.9551 671.961 57.3203 668.519 57.3203 664.273C57.3203 660.028 52.9551 656.586 47.5703 656.586Z" fill="#17191A"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 883 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="17.1" height="15" viewBox="38.57 601.2 17.1 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M49.7715 601.211V608.779L44.3903 601.211H38.5703V616.211H44.3691V608.643L49.7525 616.211H55.5703V601.211H49.7715Z" fill="white"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 259 B |
@@ -0,0 +1,9 @@
|
||||
<svg width="250" height="250" xmlns="http://www.w3.org/2000/svg" viewBox="786 163 250 250"><g>
|
||||
<path fill="#FFCF5C" d="M1030.7,300.8c0,64.7-45.7,98.3-121,98.3s-118.3-34.3-118.3-99,60.3-124.7,118.9-124.7,120.4,60.7,120.4,125.3Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M991.3,385.5c-31.3,17.3-73.6,19.5-109,15.5-17.6-2-34-6.3-49.5-14.3-23.9-12.4-39.8-34.4-43.8-61.2-4.8-32,1.6-64.4,17.9-92.4,10.3-17.8,24.7-32.5,41.8-43.6,37.8-24.3,85.7-24.4,123.7-.5,26.4,16.7,45.5,41.9,55,71.7,7.1,22.2,9.3,45,5,67.8-4.7,24.7-19.1,44.9-41.1,57ZM984.3,379.3c53.4-26.9,49.7-99.3,20.9-145.3-29.1-46.3-85.4-67.8-136.6-45.3s-36.4,22.8-48.9,40.8c-19.7,28.3-28.6,68-20.3,101.6,7.9,32.1,33.5,50.7,65,57.7,37.2,8.2,85.6,7.6,119.9-9.6Z"></path>
|
||||
<path fill="#FF9E9E" d="M862.6,299.5c0,12.1-24.5,18.6-40.1,8.9-3.2-2-5.2-5.7-5.2-8.8,0-3.5,2.3-7,5.8-9,16.6-9.5,39.4-1.8,39.5,9Z"></path>
|
||||
<path fill="#FF9E9E" d="M1004.2,299.5c-.2,12.8-25.2,18.4-40.3,8.6-3.1-2-5-5.5-5-8.6s2-6.4,5.2-8.4c16.4-10.3,40.3-2.8,40.2,8.4Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M956.8,274.1c13.2.5,11.7-13.8,18.1-11.8s3.5,3.1,2.7,5.4c-3,9.1-11.2,14.7-20.2,14.7s-17.8-5.9-20.5-15.3,1.2-4.4,2.9-4.9,4.4.7,5.1,2.8c1.9,5.4,6.5,8.9,11.8,9.1Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M863.9,274.1c12.5.4,11.2-13.1,17.5-11.9s3.9,2.7,3.4,4.6c-2.7,9.6-11.3,15.7-20.9,15.5-9.5-.2-18.4-6.7-20.1-16.6-.3-1.5,2.5-3.7,3.9-3.7s3.8,1.3,4.4,3.1c1.8,5.5,6.7,8.7,12,8.9Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M910.6,303.1c9.2,0,7.2-10.3,13.6-8.2s3.3,3.2,2.3,5.6c-2.7,7-8.8,10.8-15.9,10.8s-13.1-4.1-15.5-11.1.4-5,2.5-5.5c6.3-1.5,4.5,8.3,13,8.3Z"></path>
|
||||
</g></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,12 @@
|
||||
<svg width="250" height="250" xmlns="http://www.w3.org/2000/svg" viewBox="408 163 250 250"><g>
|
||||
<path fill="#FFCF5C" d="M652.6,300.8c0,64.7-45.7,98.3-121,98.3s-118.3-34.3-118.3-99,60.3-124.7,118.9-124.7,120.4,60.7,120.4,125.3Z"></path>
|
||||
<path fill="#C1442E" d="M545.2,327.6c-9.6,4.8-20.9,3.4-29-2.9-7.7-5.9-12.2-14.6-12.2-24.2s5.2-12.1,11.9-12.7c11.6-1.2,23.3-1.5,34.8.1,7.5,1.1,12,7.4,11.3,14.7-.9,10.6-6.9,20-16.8,24.9Z"></path>
|
||||
<g>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M614.9,384.4c-33.1,19.1-80.2,21.2-117.6,15.5-15.2-2.3-29.2-6.5-42.7-13.5-23.1-12-38.7-33.1-43.2-59-5.4-31.2.5-63.2,15.6-91.1s24-33.6,41.2-45.2c35.9-24.4,81.8-26.6,119.8-5.8s56,50.4,64.7,87.9c9.8,42.5,1.8,88.2-37.8,111.1ZM605.5,379.7c29.4-14.4,42.7-42.8,42.3-75.3-.7-48.5-26.7-94.8-71.4-115.3-33.1-15.1-71-12-101.5,7.8-24.5,15.9-41.9,39.9-50.5,67.8-12.8,41.6-8.4,90.1,32.1,112.7,9.1,5.1,18.3,8.7,28.7,11.1,37.3,8.5,85.8,8,120.3-9Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M552.8,323.6c-9.4,8.7-23.1,10.2-34,4.1s-15.6-15.3-16.3-26.3,4.7-13.8,12.5-14.6c11.7-1.3,23.6-1.4,35.4-.1,7.7.8,13.3,6.6,13,14.1-.2,8.7-3.8,16.7-10.6,22.9ZM532.2,323.5c17.7.7,27.2-21,21.5-27.1s-3.8-2.2-5.5-2.2h-30.9c-3.6.1-6.8,2.7-6.6,6.6.6,11.2,9.3,22.2,21.6,22.7Z"></path>
|
||||
</g>
|
||||
<path fill="#FF9E9E" d="M484.8,299.5c-.1,12.2-25,19-41.1,8.1-2.4-1.6-4.1-4.7-4.4-6.7-.4-2.8,1-6.4,3.1-8.3,13.6-12.3,42.5-5.4,42.3,6.8Z"></path>
|
||||
<path fill="#FF9E9E" d="M626.2,297.9c3.1,12-22.5,21.2-39.8,10.4-3.1-1.9-5.3-5.6-5.3-8.8,0-10.8,19.9-16.7,35.5-10.9s8.4,4.8,9.5,9.2Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M501.3,276c-6.6,1.1-3.3-11.9-13.4-13.9s-11.1,3.6-12.1,9.6-1.8,4.2-4,4.5-4.6-1.5-4.5-3.7c.2-5.6,2.8-10.6,6.8-14.4,6.7-6.3,16.9-6.3,23.7-.1s9.7,17,3.5,18Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M590.1,271.8c-.8-5.1-4.9-9.9-10.3-9.9s-9.4,4.7-10.3,10c-.4,2.1-1.8,3.7-3.7,4.1s-4.7-1.1-4.7-3.4c.2-8.3,5.6-15.6,13.4-18.4,10.4-3.6,21.1,3.7,24,15.9s-.6,5.4-3.1,5.8-4.9-1.2-5.4-4.2Z"></path>
|
||||
</g></svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,9 @@
|
||||
<svg width="250" height="250" xmlns="http://www.w3.org/2000/svg" viewBox="30 163 250 250"><g>
|
||||
<path fill="#FFCF5C" d="M275.2,300.8c0,64.7-45.7,98.3-121,98.3s-118.3-34.3-118.3-99,60.3-124.7,118.9-124.7,120.4,60.7,120.4,125.3Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M229.7,388.4c-31.8,15.2-74.2,16.8-108.9,11.8-15.1-2.2-29-6.2-42.4-12.8-46.4-22.9-54.4-73.9-41.6-121,8.4-30.9,27-57.6,53.5-75.5,38.8-26.2,89.5-26.4,128.5-.5,41.3,27.3,62.8,76.1,59.3,125s-18.7,58.7-48.5,73ZM231.3,377.6c24.7-13.7,37.4-38.8,38.4-66.9,1.7-47.9-21.9-95.5-64.7-118.3-55.2-29.4-119-5.4-148.1,48.3-16.2,29.9-22.9,70.5-9.5,102.1,11.6,27.5,36.9,41.3,65.5,47,37,7.3,85.1,6.2,118.4-12.2Z"></path>
|
||||
<path fill="#FF9E9E" d="M106.9,298.8c1,12.4-23.7,19.6-40.2,9.5-3.3-2-5.3-5.5-5.2-8.8.2-11.2,23.7-18.4,40.2-8.7s5,5.1,5.3,7.9Z"></path>
|
||||
<path fill="#FF9E9E" d="M248.6,298.8c1,12.2-23.5,19.7-40.1,9.5s-5.3-5.5-5.3-8.8,2.1-6.7,5.4-8.7c16.7-9.9,39.2-2.2,40,8Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M177.2,289.4c-3.3,9.9-12.5,15.5-22.9,15.2s-18.5-6-21.5-15.7.7-4.3,2.1-4.8,4.8,0,5.4,1.7c2.3,6.4,7.5,10.1,13.8,10.5s12.6-2.9,14.9-9.1,2.8-3.8,5.1-3.4,4,3,3.1,5.6Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M198,256.2c6.8-2,13.1,1.8,14.8,7.9,1.8,6.3-1.4,12.9-8,14.8-5.8,1.7-12.3-1.4-14.4-7.5s.8-13.1,7.6-15.1Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M105.2,256.2c7-1.9,12.9,2,14.7,8.3s-1.9,12.7-7.9,14.4-12.6-1.6-14.5-7.4.9-13.4,7.8-15.3Z"></path>
|
||||
</g></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,9 @@
|
||||
<svg width="250" height="250" xmlns="http://www.w3.org/2000/svg" viewBox="30 440 250 250"><g>
|
||||
<path fill="#FFCF5C" d="M275.2,573.9c0,63.5-45.7,96.6-121,96.6s-118.3-33.7-118.3-97.2,60.3-122.4,118.9-122.4,120.4,59.6,120.4,123.1Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M193,669.7c-26.8,3.8-53.1,3.5-79.4-.6-39-6.1-72-26.8-80-67-3.3-16.4-2.6-32.4.3-48.9,5-27.9,18-53.1,38.2-72.8,34.9-34,87-43.6,131.6-23.3,25.1,11.4,45.2,31,58.1,55.4,18.5,35,25.1,85.6,2.3,119.1-15.6,23-43.5,34.2-71.1,38.1ZM234.9,646.8c26.6-15.3,36.7-43.5,34.8-73.6-2.3-37.4-18.6-72.2-48-95-42.3-32.7-101-30-140.5,5.9-20.4,18.6-33.7,43.6-38.6,71.1-2.8,15.7-3.5,30.8,0,46.3,7.5,34,34.5,51.9,67.8,58.1s90.7,6.7,124.6-12.8Z"></path>
|
||||
<path fill="#FF9E9E" d="M107.1,572.8c.4,12.5-24,19.5-40.8,9.1-3-1.8-4.8-5.3-5-8.3s1.8-6.5,4.9-8.5c16.8-10.9,40.5-3,40.9,7.7Z"></path>
|
||||
<path fill="#FF9E9E" d="M248.7,572.9c.7,11.4-23.5,19.9-40.6,9.1s-4.8-5.4-5-8.4c-.7-11.3,24.1-19.6,40.9-8.5,2.7,1.8,4.5,5.2,4.7,7.7Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M176.1,576.7h-42.8c-2,0-3.9-1.7-4.3-3.3s.9-5.1,3-5.1h45.6c1.9,0,3.7,2.9,3.5,4.5-.3,2.4-2.5,4-5,4Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M104.6,531.2c6.8-2.3,13,1.5,15.1,7.6,2.1,5.9-1.3,12.6-7.2,14.8-6.1,2.3-12.6-1-14.9-6.6-2.5-6.2.2-13.5,7-15.8Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M198.1,531.1c6.7-2.1,13,1.9,14.8,8s-1.5,12.9-8,14.8c-5.9,1.7-12.4-1.5-14.4-7.5s.8-13.2,7.7-15.3Z"></path>
|
||||
</g></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,11 @@
|
||||
<svg width="250" height="250" xmlns="http://www.w3.org/2000/svg" viewBox="408 440 250 250"><g>
|
||||
<path fill="#FFCF5C" d="M652.6,573.8c0,63.1-45.7,96-121,96s-118.3-33.5-118.3-96.6,60.3-121.7,118.9-121.7,120.4,59.2,120.4,122.3Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M571.6,669.7c-25.9,3.7-51.3,3.6-76.7,0-14.6-2-27.7-5.8-40.7-12.2-23.6-11.7-39.4-33-43.3-59.4-8.2-56.2,19.4-115.5,71.9-140.3,40.8-19.3,88.8-13.3,124,14.7s35.4,38.7,43.2,64.1c13.2,43,9.3,93.1-32.1,117.5-14.2,8.4-29.2,13.2-46.2,15.6ZM612.8,646.8c28.3-16.3,37.5-46.8,34.6-78.4-3.5-38-21.7-72.6-53.2-94.2-41.8-28.5-97.1-24.3-134.6,9.5s-29.9,36.3-36.4,59.4c-11,39.7-6.2,84.7,32.6,105.2s24.6,10.4,38.3,12.5c37,5.7,85.9,4.8,118.7-14Z"></path>
|
||||
<path fill="#FF9E9E" d="M484.7,576.8c0,12.3-29.2,19.4-42.7,6.4-1.9-1.8-3.2-5.4-2.8-7.8,1.5-10.8,25.3-17.7,41.3-6.6,2.6,1.8,4.2,5.4,4.2,8Z"></path>
|
||||
<path fill="#FF9E9E" d="M626.6,576.7c-.3,11.6-24,18.6-40,8.6s-5.1-5.1-5.3-7.9c-1.1-12.1,23.7-20.2,40.7-9.1,2.9,1.9,4.7,5.5,4.6,8.3Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M536.6,573.8c-8.8-1.8-16.3,2.3-19.4,10.4s-3.9,1.6-5,.9-2.8-3.4-2.1-5.2c3.7-9.7,12.6-15.1,22.9-15.1,10.3,0,19.5,5.7,22.8,15.8s-1.3,4.2-2.7,4.7c-6.7,2.3-4.2-8.9-16.6-11.5Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M575.9,536.5c6.7-2.1,13.2,1.5,15,7.8,1.7,6.1-1.4,12.8-8.3,14.8s-12.1-1.3-14.2-7.4c-2.1-5.9.5-13.1,7.5-15.2Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M482.8,536.4c6.6-1.9,13.3,1.4,15,8.2s-1.6,12.3-8,14.3-12.4-1.1-14.7-7.4.9-13.1,7.6-15.1Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M493.3,521c-10.2,9.4-28.6,15.6-29.5,8.2s10.3-2.3,23.6-14.2c1.7-1.5,4.2-1.5,5.7-.3s2,4.6.2,6.2Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M578.2,514.9c13.8,12.3,25.2,7.1,24,14.3-1.3,7.6-19.7.6-29.1-7.6s-2.1-4.2-.9-6.1,4.2-2.3,6.1-.6Z"></path>
|
||||
</g></svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,10 @@
|
||||
<svg width="250" height="250" xmlns="http://www.w3.org/2000/svg" viewBox="786 440 250 250"><g>
|
||||
<path fill="#FFCF5C" d="M1030.7,573.9c0,63.5-45.7,96.6-121,96.6s-118.3-33.7-118.3-97.2,60.3-122.4,118.9-122.4,120.4,59.6,120.4,123.1Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M1019.2,537.7c2.6-2.1,4.6-4,6.8-6.7,15.1,44.9,12.9,98.1-31.1,123.4-12.9,7.4-26.7,12.1-41.7,14.5-27.6,4.5-55.6,4.7-83.2.3-15-2.3-28.6-6.6-41.6-13.8-36.7-20.2-45.9-59.9-38.9-99.7,4.4-25.2,14.8-48.8,31.7-67.9,13.6-15.4,30-27.1,49.2-34.1,46.4-16.9,97.6-3.1,129.9,33.7l-4.8,7.8c-31.1-37.3-82.2-50.5-126.8-31.6-24.5,10.4-44.3,29.3-56.9,52.8-14,26.4-20.4,60.8-12.2,89.9,9.4,33.4,39.3,49.3,72.5,54.4,25.4,4,51,3.9,76.3,0s27.4-6.3,40.1-12.9c40.7-21.4,43-69.1,30.7-110.2Z"></path>
|
||||
<path fill="#FF9E9E" d="M1004.2,572.9c.9,12-24.3,19.8-40.7,8.9-2.9-1.9-4.9-5.4-4.9-8.1-.1-11.3,23.2-19.1,40.3-9s5,5.2,5.2,8.2Z"></path>
|
||||
<path fill="#FF9E9E" d="M862.7,573.6c-.2,10.9-23.8,18.9-40.5,8.4-3-1.9-4.8-5.4-5-8.4-.7-11.3,24.6-19.8,41.3-8.1s4.3,5.3,4.2,8.1Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M944.4,577.8c-1.3,4.9-5.7,7.9-9.7,8.4-9.9,1.4-11.8-8.1-16.3-8.6s-5.1,8.6-14,8.7c-9.3,0-10.5-8.1-14.9-8.7s-4.6,7.4-10.3,5.1-2.6-3.5-1.7-5.6c2.1-4.5,6.4-7.1,10.6-7.6,9.4-1,11.5,7.7,15.6,8.4s5-8.3,14.7-8.5c8.9-.2,10.8,8.9,14.8,8.6s4.5-6.2,8-5.1,3.7,2.9,3.2,4.8Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M977.8,543.8c-1.9,4.9-6.5,7.7-10.4,8.1-10.3,1.2-12.9-8-17.8-8.3s-5.3,8.3-11,4.6-2.1-4.4-.5-6.4c2.7-3.6,6.8-6,10.9-6.3,8.8-.6,11.8,7.5,16.3,8.2,4.1.7,5-6.1,9.6-5.1s3.8,2.8,2.9,5.1Z"></path>
|
||||
<path fill="#1F1B16" fill-rule="evenodd" d="M883.5,546.1c-3.1,3.7-6.9,6.1-11,6-9.8-.2-11.4-8.6-16.3-8.4s-3.7,1.7-4.4,2.9c-1.5,2.6-4,3.2-6.5,1.6s-2.1-4.5-.3-6.7c2.9-3.5,6.8-6,11.1-6,9.2-.2,11.8,8.3,16.3,8.3s3.5-1.5,4.1-2.6c1.6-2.8,4.1-3.3,6.4-1.8s2.6,4.2.6,6.7Z"></path>
|
||||
<path fill="#A8DCF5" d="M995.4,493.2c-7.9,15.7-15.4,39.7,7.2,46.5,13.9,3.9,26.1-3.7,25.7-19,.3-10.7-3.7-20.7-8.7-29.7-9.3-18.3-16.5-13.6-24.1,2.1v.2Z"></path>
|
||||
</g></svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M837.985 1121.5C843.415 1135.2 837.235 1149.83 826.265 1156.09C815.895 1162.01 796.605 1158.62 791.245 1145.06L767.155 1084.07C660.535 1072.28 555.655 1030.57 492.965 942.15C435.365 1011.81 328.705 1000.43 276.495 938.83C258.535 917.64 258.195 887.61 281.605 871.11C293.575 862.67 311.245 855.18 326.245 852.09L443.305 827.92C446.145 802.08 453.255 779.69 469.145 760.95L533.825 684.65C563.665 649.45 583.245 610.35 597.155 566.49C611.315 521.82 630.215 480.02 659.075 443.05C757.505 316.98 965.105 306.08 1076.9 420.2C1106.39 450.3 1124.05 487.04 1140.64 525.27L1224.32 571.21C1241.84 580.83 1238.92 609.06 1225.35 622.48C1210.75 636.91 1193.53 646.6 1173 657.5C1213.41 847.89 1156.79 1009.24 963.445 1068.96L978.205 1100.03C983.225 1110.59 972.615 1126.69 962.305 1130.94C952.885 1134.83 935.755 1130.23 930.475 1119.05L913.105 1082.25L824.905 1088.53L837.975 1121.51L837.985 1121.5ZM532.215 904.63L561.595 943.29C654.395 1032.41 808.865 1049.73 932.465 1022.76C987.085 1010.84 1034.49 984.7 1072.58 945.44C1137.11 870.3 1143.53 775.4 1124.24 679.19C1088.94 679.63 1066.32 654.48 1060.03 621.98C1053.47 588.11 1058.43 554.28 1084.42 530.34C1054.54 446.8 978.595 396.2 890.845 393.36C822.655 391.16 756.635 411.61 710.715 462.49C675.425 501.59 657.465 549.03 641.385 598.91C624.535 651.18 592.755 694.78 558.085 737.18L501.685 806.13C498.115 810.5 496.315 822.42 498.355 827.01C500.105 830.95 507.535 837.77 511.725 839.77C566.465 865.79 626.905 871.62 683.165 850.08C729.535 832.33 758.905 794.31 768.725 746.44C771.675 732.04 787.645 724.31 799.645 727.27C812.905 730.54 821.045 743.91 818.285 759.47C795.325 889.04 656.625 938.59 532.195 904.64L532.215 904.63ZM1172.65 598.93L1116.54 572.78C1105.56 591.18 1106.95 607.44 1118.18 626.98L1172.65 598.93ZM409.055 936.74C434.085 930.91 450.555 911.96 466.415 895.08L469.975 883.61C470.795 880.97 461.675 875.83 460.905 876.62L400.535 889.5L320.275 908.41C343.245 932.73 375.185 944.62 409.045 936.73L409.055 936.74Z" fill="black"></path>
|
||||
<path d="M957.496 615.62C932.616 618.12 918.856 599.7 917.666 580.32C916.546 561.95 927.246 542.66 948.186 539.94C969.526 537.18 984.496 552.14 987.926 568.86C992.216 589.79 982.446 613.11 957.496 615.62Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
@@ -0,0 +1,7 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M1217.04 938.855C1211.06 1040.55 1145.27 1122.27 1049.98 1151.65C1008.96 1164.3 967.344 1164.49 923.644 1162.78C855.544 1205.34 789.724 1206.6 710.574 1203.64C669.154 1227.14 618.864 1228.96 587.124 1190.13C552.974 1230.92 496.274 1229.34 458.584 1196.23C405.634 1185.18 356.904 1160.92 324.664 1116.81C255.684 1022.43 278.574 880.065 345.404 784.955C264.104 699.585 266.004 573.485 326.184 477.615C317.314 429.275 315.024 381.615 329.424 335.425C341.324 292.545 379.714 270.785 422.974 282.225C462.464 292.675 496.304 314.715 529.634 339.525C602.304 312.835 679.514 315.725 753.014 338.785C787.664 311.285 823.154 290.265 863.614 281.245C905.304 271.955 939.684 293.255 951.914 333.375C966.184 380.145 964.564 428.005 954.974 477.755C1015.21 572.485 1015.14 693.165 941.884 777.955C990.344 846.455 1014.7 923.035 1007.95 1007.26C1054.06 991.155 1068.22 940.915 1045.1 900.355C1026.72 868.105 1024.27 827.595 1045.54 796.875C1061.48 773.865 1088.36 762.265 1114.91 763.665C1188.08 767.545 1221.76 858.315 1217.02 938.855H1217.04ZM756.444 1041.65C766.374 1043.54 779.393 1057.45 775.853 1069.3L751.224 1151.76C850.684 1159.32 938.374 1117.88 954.514 1015.53C965.794 943.945 944.464 871.925 902.884 812.655L862.814 835.865C849.164 843.775 833.244 833.645 828.654 820.445C825.524 811.445 829.324 795.075 840.834 789.535C889.734 765.985 927.574 725.995 941.104 672.515C956.714 610.785 940.994 547.145 906.024 495.545C896.074 480.865 921.874 424.295 904.174 352.525C892.484 305.095 823.814 346.925 781.084 383.215C770.684 392.045 757.944 395.105 744.754 390.615C678.484 368.035 607.514 364.955 541.784 389.555C525.104 395.795 512.854 394.055 498.904 382.455C467.074 355.995 410.324 319.565 388.514 334.045C367.124 348.245 369.114 423.455 377.134 468.755C379.344 481.265 377.544 494.025 370.564 504.605C305.144 603.665 327.334 733.445 436.524 787.285C448.424 793.155 454.634 807.065 452.934 817.965C451.234 828.865 436.794 843.375 424.214 837.305L385.674 818.715C314.814 920.335 306.544 1078.53 427.794 1133.85L414.334 1041.37C412.214 1026.84 430.434 1018.21 441.974 1019.53C453.884 1020.89 463.254 1031.12 465.074 1045.08C472.474 1101.9 479.084 1170.09 522.464 1169.49C559.414 1168.98 564.214 1119.72 565.874 1074.16C566.484 1057.31 579.594 1045.53 594.084 1047.67C635.514 1053.78 600.983 1109.25 624.863 1155.14C631.043 1167.02 650.274 1171.52 661.784 1168.76C671.034 1166.54 685.854 1158.07 692.074 1148.48C728.924 1091.66 716.164 1034 756.444 1041.65ZM975.534 1111.29C1025.54 1109.32 1065.1 1096.24 1099.66 1067.77C1168.23 1011.3 1186.7 908.855 1141.86 833.545C1132.54 817.885 1115.1 811.935 1100.4 816.965C1088.47 821.055 1077.32 838.835 1083.11 854.075L1096.4 889.045C1111.48 928.735 1110.93 968.475 1089.2 1005.94C1071.04 1037.24 1035.37 1058.18 995.934 1063.75L975.524 1111.28L975.534 1111.29Z" fill="black"></path>
|
||||
<path d="M796.572 650.084C769.592 654.574 752.772 634.894 752.112 612.714C751.502 592.184 766.422 570.044 790.522 571.174C809.942 572.084 823.362 589.474 825.362 605.804C827.602 624.104 819.042 646.344 796.562 650.084H796.572Z" fill="black"></path>
|
||||
<path d="M486.85 650.199C466.56 647.149 458.4 627.999 457.57 612.209C456.67 595.019 467 576.449 486.02 572.129C511.17 566.429 529.23 587.159 530.55 608.769C531.99 632.399 514.9 654.419 486.84 650.199H486.85Z" fill="black"></path>
|
||||
<path d="M674.682 634.018C686.622 644.968 652.652 676.758 640.062 674.778C619.792 671.588 596.532 641.898 607.502 632.678C624.962 618.008 657.602 618.368 674.672 634.018H674.682Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,7 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M769.435 1177.29C758.785 1207.91 737.455 1227.47 706.555 1230.6C651.955 1236.13 596.565 1231.01 543.175 1217.86C500.055 1207.24 467.845 1178.95 446.515 1141.85C391.985 1138.38 343.025 1117.85 308.335 1078.57C259.965 1023.8 254.405 942.437 303.615 888.937C313.395 878.297 328.245 873.437 341.565 877.117C373.915 886.037 349.815 963.577 429.575 992.987C442.745 928.027 468.725 868.227 512.115 814.967C472.855 777.477 448.015 730.727 445.145 674.837C386.275 680.007 337.705 641.737 330.875 583.467C324.755 494.037 379.175 411.327 447.985 355.737C484.525 326.227 528.735 314.237 576.395 330.257C689.705 252.937 852.185 242.367 969.945 320.867C1009.38 302.087 1052.45 305.547 1089.47 330.097C1138.45 362.577 1177.31 407.327 1206.38 458.447C1223.39 492.257 1234.27 527.497 1229.66 564.587C1223.84 611.407 1188.93 644.567 1140.19 645.397C1147.29 720.517 1113.06 790.637 1050.84 833.457C1066.23 873.307 1076.51 913.697 1082.5 957.087C1096.13 978.587 1104.73 1001.51 1108.5 1027.69C1148.1 1053.64 1170.87 1097.33 1160.3 1144.08C1147.21 1201.97 1093.56 1214.41 1035.09 1206.64C1001.17 1224.8 963.445 1227.11 931.375 1200.05C914.835 1219.97 894.345 1231.11 868.845 1232.83C826.715 1235.67 791.755 1216.43 769.455 1177.28L769.435 1177.29ZM1018.43 792.987C1072.4 757.137 1099.34 695.517 1086.54 631.647C1044.17 600.127 1023.3 554.127 1011.6 503.697C1007.78 487.257 1012.99 472.257 1029.75 467.547C1043.78 463.597 1058.02 473.857 1061.87 490.377C1075.44 548.597 1110.18 612.247 1156.58 590.767C1187.79 576.327 1182.88 528.257 1163.44 489.167C1137.74 437.467 1074.31 361.597 1017.34 359.257C1023.72 376.777 1024.83 388.327 1013.49 399.057C1007.11 405.087 989.225 405.807 981.075 397.687C954.015 370.737 925.435 349.487 888.395 336.487C792.665 302.897 684.385 316.797 601.855 375.797C590.185 384.137 580.015 386.527 566.815 380.887C542.685 370.597 516.845 371.447 494.545 386.457C444.325 420.287 405.085 469.797 387.785 528.377C380.895 551.717 378.525 580.357 390.845 600.817C409.665 632.057 452.045 629.997 478.185 606.407C539.595 550.997 515.475 472.867 560.595 476.907C571.225 477.857 585.525 491.137 582.355 505.697C569.055 566.817 546.025 621.117 496.675 658.137C495.605 753.427 574.695 816.597 664.095 835.527C772.455 858.467 926.265 854.177 1018.41 792.967L1018.43 792.987ZM741.865 1065.88C740.725 1049.43 750.635 1037.53 765.725 1036.88C805.775 1035.17 782.155 1091.5 816.235 1154.3C829.715 1179.13 860.475 1190.85 884.805 1174.32C895.045 1167.37 901.115 1147.52 899.775 1134.77L889.125 1033.44C887.525 1018.17 896.945 1005.76 912.015 1002.81C921.765 1000.9 937.805 1010.18 939.255 1022.81L951.265 1127.49C953.645 1148.25 960.775 1166.59 983.725 1168.38C1000.28 1169.68 1020.08 1158.09 1025.22 1136.01C1046.14 1046.21 1037.3 948.627 1006.27 859.407C972.805 872.487 942.725 881.837 909.145 889.667C793.315 907.647 657.865 906.827 552.775 845.927C513.955 892.417 489.685 948.527 480.355 1008.41C469.505 1078.08 490.285 1153.53 560.135 1168.98C604.595 1178.82 650.055 1182.07 695.495 1180.58C711.375 1180.06 721.225 1166.4 717.885 1152.12C707.595 1108.08 648.135 1132.77 654.805 1086.37C659.245 1055.46 646.755 1027.32 620.135 1012C607.675 1004.83 604.075 988.937 609.365 977.827C614.405 967.247 630.195 960.257 641.965 966.017C683.315 986.257 705.915 1028.23 707.745 1073.05L743.805 1093.86L741.865 1065.88ZM429.255 1089.57L424.735 1044.35C377.255 1034.2 346.285 1003.28 324.955 963.167C309.695 1027.2 367.025 1077.26 429.255 1089.57ZM1109.93 1132.42C1115.28 1108.61 1102.53 1089.55 1087.61 1077.78L1074.15 1156.85C1086.47 1157.79 1106.07 1149.56 1109.92 1132.41L1109.93 1132.42Z" fill="black"></path>
|
||||
<path d="M880.694 685.439C871.434 703.129 854.084 713.469 837.524 714.939C805.964 717.739 776.624 692.409 779.844 670.059C783.284 646.109 827.944 633.519 867.964 647.509C883.084 652.799 888.764 670.029 880.694 685.449V685.439Z" fill="black"></path>
|
||||
<path d="M709.804 628.844C709.804 652.204 693.424 668.744 673.304 667.474C653.154 666.204 638.864 648.894 639.564 627.014C640.204 607.024 654.714 590.724 673.244 589.714C693.444 588.614 709.814 605.934 709.814 628.844H709.804Z" fill="black"></path>
|
||||
<path d="M958.968 649.429C935.058 651.479 922.358 630.729 921.718 612.659C921.018 592.709 932.348 573.889 954.428 572.449C975.208 571.099 988.398 588.449 990.878 605.109C993.848 625.049 982.458 647.409 958.968 649.419V649.429Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M938.994 1081.65C905.454 1097.44 868.705 1096.21 842.174 1073.1C806.564 1042.09 832.064 1004.96 838.904 964.065C793.044 952.215 750.275 962.695 708.795 982.815L659.835 1006.56C643.985 1064.93 611.695 1124.82 550.975 1127.33C516.355 1128.76 488.934 1109.44 479.174 1076.54C449.224 1100.57 410.344 1102.82 380.674 1083.01C328.144 1047.94 371.245 979.235 347.855 921.725C317.805 880.295 289.205 839.915 269.045 792.295C258.615 767.655 239.954 756.525 215.454 748.305L140.565 723.205C106.765 711.875 80.3746 685.725 64.2546 654.405C45.0346 617.045 51.5146 578.005 77.0946 544.025L126.355 478.605C132.325 470.675 112.215 408.735 165.335 380.915C193.565 366.135 224.874 371.685 248.944 392.345C311.264 374.305 378.335 378.195 432.235 414.905C465.795 406.525 493.965 420.065 512.545 441.895C533.605 466.645 534.725 495.795 527.485 528.235C541.345 567.625 562.505 608.855 595.375 591.305L663.514 554.925C728.614 520.165 797.465 502.935 871.424 508.325C988.585 516.865 1086.23 589.565 1137.51 693.545C1153.96 726.905 1181.14 755.485 1206.81 780.135C1246.36 818.105 1295.21 830.905 1348.5 827.125C1382.91 824.685 1416.96 838.135 1435.31 866.635C1457 900.315 1446.95 943.685 1415.81 968.575C1345.83 1024.51 1224.45 1003.96 1152.57 943.445C1131.05 1038.4 1090 1132.46 990.415 1126.5C965.195 1123.35 945.905 1108.6 939.005 1081.64L938.994 1081.65ZM905.364 941.425C924.004 955.855 946.394 965.815 970.154 968.795C988.744 971.125 1001.86 985.535 996.935 1006L985.304 1054.24C984.164 1058.97 986.495 1070.37 990.255 1072.73C1011.3 1085.9 1055.11 1060.05 1071.66 1022.72C1099.09 960.865 1115.8 893.565 1113.84 824.995C1110.56 710.145 1041.42 611.875 933.864 574.605C849.404 545.335 760.085 558.735 683.645 603.075L606.255 642.275C581.365 654.885 548.415 648.465 527.525 629.945C509.735 614.175 498.195 589.795 486.085 570.175C471.535 572.405 452.225 573.005 446.835 555.795C442.325 541.395 450.504 529.295 465.614 521.875C484.534 512.585 484.104 484.095 470.514 472.005C455.194 458.385 436.034 462.645 421.764 478.865C413.434 488.325 394.775 488.745 385.295 480.225C377.365 473.085 376.934 459.465 380.654 445.635C307.724 419.155 219.555 439.935 173.345 503.375L123.585 571.675C135.445 573.595 150.464 580.595 152.444 589.315C158.374 615.455 140.514 633.255 114.434 636.175C135.094 671.295 183.705 689.065 225.515 697.735C265.125 705.945 295.124 727.585 313.684 763.495L343.824 821.825C371.254 874.915 414.755 917.495 469.965 943.515C464.905 924.645 466.125 909.435 480.605 901.575C492.745 894.985 510.294 899.925 515.844 915.895C542.914 993.875 516.105 1057.5 535.275 1072.63C551.555 1085.48 582.364 1064.33 596.094 1031.31C609.574 998.905 616.155 965.535 620.975 930.965C623.335 914.065 637.985 905.915 653.225 909.405C665.885 912.305 672.525 925.845 671.565 942.965C747.065 901.965 838.014 889.275 905.364 941.425ZM1390.52 891.045C1378.06 882.585 1360.94 877.025 1344.79 878.275C1277.78 883.465 1216.55 861.645 1167.68 815.035L1164.62 881.035C1188.9 907.345 1220.12 929.615 1255.35 941.645C1319.2 963.455 1412.17 941.345 1390.52 891.035V891.045ZM465.404 999.425L408.185 970.105L403.705 1026.78C403.235 1032.72 412.055 1043.47 417.355 1044.24C441.405 1047.73 455.865 1025.35 465.395 999.425H465.404ZM931.695 1014.81L886.534 992.255C881.904 1003.45 876.575 1020.62 875.735 1033.24C897.955 1048.89 925.885 1034.29 931.695 1014.81Z" fill="black"></path>
|
||||
<path d="M274.764 602.098C260.654 597.768 252.514 580.838 252.674 568.808C252.844 556.158 260.504 540.468 273.094 535.878C296.834 527.238 316.454 544.088 318.054 564.798C319.794 587.408 302.734 610.668 274.764 602.098Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M1010.4 888.934C966.177 954.204 906.647 1002.64 832.737 1030.93C847.707 1088.59 810.957 1139.24 753.887 1150.27C685.697 1161.9 622.517 1122.65 592.337 1061.41C508.417 1047.57 431.157 1016.49 369.727 961.014C248.547 853.454 237.047 699.344 342.267 575.914C400.697 512.634 477.947 473.024 562.877 455.144C589.227 400.054 639.017 361.554 693.347 351.114C757.437 338.794 820.507 360.164 862.387 406.544C889.027 436.054 895.677 474.564 898.407 510.724C942.697 541.684 984.086 574.994 1009.52 621.624C1067.77 568.764 1148.29 538.494 1201.46 590.074C1246.36 633.634 1234.63 705.884 1186.02 755.514C1216.53 786.094 1233.49 826.004 1227.08 869.304C1219.95 917.534 1177.95 949.284 1128.52 945.794C1085.04 942.714 1047.68 921.604 1010.4 888.924V888.934ZM843.707 481.604C833.567 431.344 792.277 406.754 749.557 399.024C702.217 392.464 655.557 408.134 627.397 447.414C703.187 441.894 772.597 456.044 843.707 481.594V481.604ZM958.087 874.114C1013.29 796.704 1008.44 696.864 948.766 623.014C806.596 447.044 483.827 455.624 358.887 637.154C308.267 710.694 309.537 803.594 361.567 876.044C494.687 1061.42 824.377 1061.61 958.087 874.104V874.114ZM1175.64 867.714C1184.66 830.654 1165.05 797.944 1134.37 780.144C1126.21 775.414 1118.33 764.114 1117.67 755.464C1115.82 731.214 1170.01 724.254 1178.78 666.774C1180.97 652.404 1176.39 633.394 1166.52 625.124C1129.98 594.514 1067.57 631.414 1032.96 671.664C1053.77 728.494 1052.02 783.124 1033.78 838.674C1077.87 891.374 1162.92 920.004 1175.64 867.704V867.714ZM745.087 1102.46C773.957 1096.87 790.237 1071.44 783.697 1048.1L654.197 1066.49C677.537 1093.88 711.207 1109.02 745.077 1102.46H745.087Z" fill="black"></path>
|
||||
<path d="M451.798 675.916C475.798 667.606 497.808 684.806 503.198 704.556C509.338 727.046 497.218 749.176 475.568 755.816C454.248 762.346 432.028 750.666 424.668 729.826C417.368 709.166 427.208 684.416 451.788 675.906L451.798 675.916Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M957.553 1126.53C916.423 1121.02 885.323 1098.59 856.833 1069.49C766.863 1077.67 677.423 1083.26 586.113 1076.55L487.143 1064.19C479.983 1090.58 458.133 1113.17 430.793 1116.37C359.923 1124.66 306.213 1084.34 263.723 1032.37L189.533 941.626C128.333 849.796 117.863 740.756 157.013 638.226C250.683 392.926 518.783 362.276 756.053 375.076C851.853 380.246 943.623 394.596 1035.5 420.726C1064.23 385.046 1111.33 373.486 1151.44 392.506C1189.88 410.736 1212.34 452.196 1204.22 496.826C1269.37 542.096 1319.07 601.126 1349.02 672.526C1381.92 750.956 1366.58 837.096 1308.6 899.096C1276.04 933.916 1235.99 958.056 1194.14 979.486C1205.96 1005.61 1206.56 1033.05 1190.94 1056.44C1160.23 1102.44 1090.57 1093.07 1045.1 1049.33C1047.44 1097.99 1007.7 1133.26 957.563 1126.54L957.553 1126.53ZM825.733 1021C823.583 1001.63 829.863 991.086 842.003 985.686C852.593 980.976 868.233 986.506 873.743 998.906C900.073 1058.15 962.803 1091.18 987.163 1069.66C992.023 1065.37 994.973 1048.76 992.223 1042.24L973.013 996.736C966.283 980.796 975.893 964.466 990.263 960.956C1004.63 957.446 1019.52 964.786 1023.56 985.276C1079.78 970.386 1133.79 952.416 1185.83 925.506C1282.96 875.276 1345.01 792.406 1298.03 687.216C1235.34 546.856 1095.96 482.116 948.583 452.306C775.543 417.306 559.473 404.956 394.363 468.386C273.873 514.676 191.193 625.366 186.883 755.526C184.623 823.896 209.903 887.386 252.703 938.596L311.543 1009.01C369.923 1078.86 432.543 1074.57 436.513 1055.07C439.333 1041.22 407.873 1018.41 436.363 997.836C489.383 959.546 451.883 899.616 494.483 898.326C532.643 897.166 526.723 965.266 496.033 1013.17C550.883 1022.11 603.733 1030.07 658.653 1027.83L825.723 1020.99L825.733 1021ZM1149.5 464.166C1140.98 434.706 1115.15 431.706 1095.08 440.556L1149.5 464.166ZM1145.65 1030.32C1152.02 1026.54 1150.82 1006.43 1146.75 1000.43L1092.61 1019.68C1106.02 1033.42 1126.95 1041.41 1145.65 1030.32Z" fill="black"></path>
|
||||
<path d="M913.54 556.115C884.92 578.015 876.16 617.115 894.91 634.185C901.84 640.495 917.68 644.775 926.83 643.525C947.67 640.695 959.75 651.435 959.92 668.935C960.08 685.835 945.86 695.195 927.81 695.465C886.99 696.095 848.24 677.405 837.39 636.365C822.91 581.575 853.02 525.275 904.72 503.325C956.17 481.485 1009.95 509.215 1025.28 562.465C1029.64 577.625 1021.93 593.675 1009 597.345C971.24 608.075 980 557.565 950.81 548.805C938.48 545.105 924.13 548.005 913.53 556.115H913.54Z" fill="black"></path>
|
||||
<path d="M1127.18 738.954C1100.45 739.564 1084.55 715.505 1085.17 693.655C1085.82 670.545 1102.65 647.564 1128.48 649.044C1152.43 650.424 1167.15 671.934 1166.8 693.294C1166.45 714.164 1153.64 738.354 1127.18 738.954Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,7 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M964.546 1062C958.146 1103.67 925.836 1131.53 883.296 1126.43C853.576 1122.87 829.676 1105.27 811.636 1081.21C706.536 1087.06 604.906 1083.8 503.816 1062.65C498.806 1085.86 486.526 1102.98 470.056 1110.76C408.936 1139.61 338.106 1065.89 325.646 990.723C230.896 915.303 202.586 793.053 226.906 675.483C261.406 508.683 403.226 413.474 565.866 385.304C727.576 357.294 891.556 377.403 1042.34 441.394C1053.45 409.254 1076.49 385.883 1109.3 383.883C1145.11 381.703 1175.05 404.924 1188.96 433.164C1204.9 465.524 1197.92 500.674 1176.36 530.424C1208.51 565.134 1235.94 599.524 1255.32 641.664C1310.88 762.474 1275.68 902.434 1167.32 980.194C1179.57 1012.68 1177.02 1045.27 1154.61 1068.06C1133.26 1089.77 1100.5 1096.23 1068.66 1081.64C1053.96 1074.9 1039.77 1059.06 1028.15 1046.78L964.536 1062.03L964.546 1062ZM1193.64 878.393C1242.32 804.763 1239.33 715.073 1195.74 640.353C1125.58 520.083 987.116 463.113 854.556 438.593C866.806 463.073 875.386 483.013 878.836 506.103C881.426 523.453 867.926 535.954 853.446 535.834C817.426 535.544 833.726 484.194 803.486 465.924C787.426 456.224 768.666 467.793 761.046 478.603C751.816 491.693 750.616 510.774 761.706 523.034C782.386 545.904 813.286 550.123 800.326 578.003C796.256 586.753 782.156 594.504 770.976 590.834C728.346 576.854 696.636 534.004 702.256 488.704C705.246 464.604 719.816 441.933 743.906 425.633C611.866 419.013 455.636 445.373 361.046 535.873C277.386 615.913 249.976 739.163 286.856 848.123C306.206 905.303 346.156 947.834 400.066 973.414C514.356 1027.64 659.626 1034.19 783.956 1029.94C785.516 1012.33 793.936 1003.08 805.716 1001.37C836.176 996.963 832.436 1043.48 880.916 1073.87C886.116 1077.13 902.046 1075.58 906.226 1071.09C909.806 1067.24 913.186 1055.9 912.176 1050.24L904.916 1009.73C902.926 998.633 920.546 984.033 930.106 984.843C940.936 985.753 950.636 993.664 955.966 1009.93C1043.38 993.694 1141.68 956.973 1193.65 878.363L1193.64 878.393ZM1136.61 496.383C1147.99 478.203 1147.7 465.503 1141.61 452.723C1137.56 444.213 1123.83 433.744 1111.69 435.694C1098.31 437.834 1089.3 455.483 1090.47 466.853L1136.61 496.383ZM1121.32 1025.09L1121.82 1008.36L1080.3 1028.25C1087.15 1032.14 1095.97 1036.1 1102.9 1037.73C1108.06 1038.95 1121.16 1030.39 1121.32 1025.09ZM454.586 1051.55L400.896 1033.17C407.226 1049.79 420.336 1062.6 441.016 1066.36C446.546 1067.37 456.946 1056.07 454.586 1051.54V1051.55Z" fill="black"></path>
|
||||
<path d="M964.416 701.472C966.256 726.172 950.566 743.932 930.156 744.322C908.376 744.742 890.956 727.182 891.686 703.442C892.336 682.302 906.426 664.992 926.266 664.342C946.106 663.692 962.666 677.952 964.416 701.462V701.472Z" fill="black"></path>
|
||||
<path d="M1177.84 681.755C1180.7 703.305 1169.72 721.675 1151.78 724.385C1131.3 727.465 1115.02 712.985 1112.59 691.345C1110.27 670.665 1119.11 651.615 1140.21 648.825C1157.7 646.515 1174.84 659.135 1177.84 681.755Z" fill="black"></path>
|
||||
<path d="M1097.37 752.186C1108.99 769.816 1087.28 787.756 1073.38 790.006C1059.01 792.326 1031.88 779.116 1037.54 759.776C1043.2 740.436 1086.38 735.506 1097.38 752.186H1097.37Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M794.056 1099.57C731.236 1104.12 668.476 1106.53 608.156 1104.78C594.876 1126.85 574.526 1144.07 553.796 1147.49C523.836 1152.43 498.806 1141.37 478.036 1122.52C458.916 1144.34 433.226 1162.87 401.556 1158.6C346.686 1151.21 329.976 1097.38 334.026 1038.63L289.706 1006.49C263.386 1000.95 242.736 991.398 229.006 974.658C210.246 951.798 211.936 924.388 214.556 898.148C183.776 886.298 161.136 862.008 164.726 827.788C167.566 800.648 181.676 777.238 201.646 755.378C167.306 726.428 163.526 682.028 191.886 648.208C210.246 626.318 236.496 611.908 264.166 598.708C243.126 563.878 251.726 522.248 286.896 502.058C316.116 485.278 348.676 478.628 383.896 474.328C376.676 434.728 399.926 402.968 438.576 395.628C474.996 388.708 511.276 396.138 547.726 406.198C549.886 369.938 578.256 347.188 613.446 348.858C653.616 350.768 689.876 366.508 727.016 387.178C739.786 349.198 776.446 331.268 813.666 345.838C845.476 358.298 870.436 381.378 894.986 407.778C916.796 383.108 948.346 376.808 975.316 393.928C1002.79 411.368 1019.96 438.348 1033.18 470.248C1063.17 452.678 1096.86 462.438 1115.9 491.998C1139.91 529.268 1138.71 577.198 1119.83 620.358C1158.76 676.508 1185.76 744.088 1251.19 752.508C1284.07 747.248 1311.77 752.238 1327.8 781.228C1341.37 806.238 1337.95 840.048 1312.72 859.168C1269.97 949.838 1179.04 998.418 1088.8 1037.44C1103.2 1073.38 1092.22 1115.27 1056.17 1129.97C1023.73 1143.2 989.426 1132.27 961.096 1110.29C954.666 1129.51 942.506 1146.13 921.696 1153.37C891.616 1163.84 855.636 1159.47 832.246 1136.72L794.056 1099.57ZM274.186 945.818C289.956 954.918 314.886 957.458 334.796 957.718C505.366 959.968 721.006 920.318 803.476 761.538C776.916 740.968 765.206 712.948 767.466 682.248C769.446 655.468 784.866 629.778 809.326 613.528C847.126 588.408 895.096 595.668 924.196 629.078L980.336 633.258C1007.67 635.288 1038.2 632.458 1059.32 613.388C1086.62 588.748 1088.24 544.308 1068.27 514.438C1044.56 515.988 1039.8 552.198 1012.69 543.918C983.316 534.948 998.296 473.408 946.636 437.068C923.286 440.878 930.496 480.868 909.016 486.628C897.216 489.788 884.276 484.588 877.886 475.078C852.906 437.878 799.066 378.078 780.966 395.438C764.806 410.938 786.066 444.148 760.166 457.838C750.846 462.758 738.256 459.458 727.876 451.558C692.126 424.368 650.986 401.048 604.886 400.198C586.956 423.428 625.876 448.128 599.496 470.148C591.446 476.868 579.146 476.828 567.516 471.218C515.926 446.328 439.976 434.618 435.626 456.458C431.876 475.278 458.726 491.048 448.376 512.898C434.896 541.348 363.486 509.598 310.396 549.768C298.206 558.988 310.606 578.138 320.956 584.148C331.916 590.508 338.926 604.568 336.806 614.888C330.096 647.578 262.736 635.568 228.276 689.268C212.346 714.088 262.476 719.848 273.186 736.228C278.046 743.668 275.346 761.388 269.396 765.998C240.706 788.218 206.016 822.768 219.986 839.918C231.486 854.028 260.286 844.318 272.986 863.978C286.806 885.378 246.446 929.838 274.176 945.838L274.186 945.818ZM878.156 1103.47C886.386 1107.95 907.656 1107.18 909.416 1097.27C916.736 1056.14 875.756 1015.17 914.686 1002.61C931.156 997.298 944.516 1006.77 950.166 1025.03C1056.99 998.448 1190.14 952.958 1254.4 858.408C1232.94 844.468 1222.57 822.478 1219.69 798.798C1183.38 785.138 1153.37 764.358 1131.63 732.708L1082.31 660.918C1040.37 688.478 994.266 686.318 948.406 683.368C942.596 695.118 932.826 705.298 921.466 704.748C889.856 703.208 898.036 662.758 869.916 652.758C845.946 644.228 825.916 660.998 820.446 682.728C815.606 701.948 828.486 720.918 850.286 728.248C863.306 732.628 873.536 741.988 875.816 753.168C879.166 769.628 862.186 774.948 853.916 783.118C753.016 955.048 574.686 999.168 382.826 1009.92C393.326 1043.02 375.136 1098.68 406.496 1106.45C450.846 1117.44 451.646 994.868 506.076 1041.28C594.046 1054.29 683.916 1056.85 772.556 1048.99C778.576 1038.41 787.406 1029.26 796.416 1028.85C825.976 1027.49 826.856 1075.57 878.156 1103.5V1103.47ZM1039.26 1078.85C1043.92 1075.14 1042.62 1059.32 1040.51 1054.22L996.746 1067.18C1003.21 1081.06 1026.47 1089.04 1039.26 1078.85Z" fill="black"></path>
|
||||
<path d="M1050.23 852.388C1027.01 854.008 1012.71 834.408 1011.01 817.958C1008.77 796.388 1020.87 775.898 1044.24 774.538C1066.51 773.238 1081.52 790.438 1082.79 810.848C1083.87 828.288 1074.21 850.718 1050.23 852.398V852.388Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M388.932 949.466C254.352 934.666 93.7221 846.916 90.2321 707.796C89.0121 659.366 106.352 611.786 139.362 577.056L192.292 521.356C260.832 431.516 371.272 382.286 484.262 401.476C567.762 415.656 638.402 465.026 687.252 534.696C821.762 488.336 988.092 492.665 1096.1 591.665L1140.95 623.006C1157.79 634.776 1183.44 630.405 1196.35 614.405C1225.28 578.565 1212.69 525.116 1171.39 504.286L1115.13 483.865C1090.46 474.915 1069.19 453.886 1072.99 426.346C1077.18 395.916 1102.68 375.456 1132.69 369.066C1210.59 352.466 1289.97 381.516 1343.34 441.446C1384.15 487.276 1403.96 544.326 1408.73 605.836C1418.94 737.406 1357.38 858.486 1250.54 936.226C1267.72 970.196 1271.94 1005.26 1256.15 1036.68C1242.76 1063.33 1216.68 1076.83 1190.78 1079.45C1159.86 1082.57 1134.04 1068.41 1112.78 1044.06C1104.14 1097.75 1067.14 1135.25 1016.49 1135.55C970.012 1135.83 935.772 1105.49 935.532 1059.3C862.472 1070.67 791.002 1067.22 721.152 1055.59C692.142 1117.88 632.962 1153.06 573.672 1125.99C540.582 1110.88 525.002 1079.55 528.992 1040.5C507.262 1062.92 484.052 1075.73 457.392 1076.41C430.302 1077.11 402.882 1066.82 386.542 1042.85C368.162 1015.9 372.092 983.056 388.922 949.456L388.932 949.466ZM558.282 960.786L562.942 931.206C564.972 918.326 578.592 908.826 590.302 910.046C631.472 914.356 612.392 986.426 585.382 1035.58C579.672 1045.98 579.782 1062.52 586.172 1070.88C592.962 1079.78 608.192 1085.37 620.732 1082.89C668.812 1073.38 685.572 1013.56 689.582 962.106C690.772 946.826 701.502 935.406 715.242 935.176C727.392 934.966 742.752 947.515 741.452 961.635L737.522 1004.46C797.692 1014.34 861.632 1016.19 923.512 1007.45L919.862 969.716C918.512 955.756 933.642 943.556 945.782 943.556C979.232 943.546 966.612 984.396 980.112 1000.46C1007.04 1032.52 977.622 1057.59 992.322 1073.64C1001.33 1083.48 1019.18 1084.93 1031.42 1080.95C1068.51 1068.89 1071.77 996.896 1055.31 942.606C1050.58 927.006 1055.27 912.236 1068.12 906.646C1081.87 900.656 1099.41 906.216 1103.77 922.156L1113.63 958.156C1172.72 929.206 1229.15 894.466 1273.96 845.566C1333.44 780.636 1364.19 696.336 1356.81 609.266C1352.04 552.976 1332.17 499.906 1290.32 462.506C1245.81 422.726 1181.24 402.066 1124.44 428.946L1180.41 450.915C1254.19 479.875 1286.69 564.666 1247.2 632.786C1221.13 677.766 1168.32 692.546 1120.77 671.006C1067.84 647.026 1036.32 592.815 951.262 570.905C862.162 547.955 770.472 556.556 685.382 591.806C676.902 595.316 663.092 588.386 658.512 582.336C635.282 551.676 612.122 524.275 582.612 500.905C509.282 442.815 413.842 432.806 330.422 473.966C295.682 491.106 268.242 514.765 241.912 542.875L185.672 602.915C160.272 630.025 144.442 662.746 143.212 700.706C229.332 738.906 347.312 779.476 430.962 744.186C445.932 737.866 460.752 739.585 468.682 753.615C475.092 764.945 471.262 783.126 456.302 789.596C363.002 829.936 256.502 801.466 160.092 764.696C173.782 791.246 193.272 811.766 217.292 830.056C322.942 910.486 437.772 892.046 456.152 904.106C490.842 926.866 522.432 944.846 558.312 960.806L558.282 960.786ZM458.542 1024.38C478.132 1019.41 489.652 1007.14 498.912 992.466L443.862 959.806C433.152 974.896 423.872 991.366 428.142 1010.43C430.032 1018.88 448.832 1026.85 458.542 1024.38ZM1204.79 1020.7C1219.54 1004.43 1213.49 983.626 1206.39 967.426L1148.38 1001.33C1155.03 1011.88 1163.38 1021.75 1172.04 1026.58C1179.76 1030.88 1198.09 1028.09 1204.78 1020.7H1204.79Z" fill="black"></path>
|
||||
<path d="M393.013 692.393C363.833 691.203 347.033 664.993 348.163 641.863C349.443 615.573 370.693 592.103 399.043 594.733C426.263 597.253 442.283 621.303 441.253 645.703C440.273 669.113 422.803 693.603 393.013 692.393Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M427.105 663.149C478.457 650.517 525.022 679.734 536.954 727.423C548.988 775.528 521.107 824.019 471.988 836.933C425.832 849.077 377.38 821.44 363.955 774.082C350.812 727.737 376.382 675.623 427.105 663.149Z" fill="black"></path>
|
||||
<path d="M726.247 663.253C778.102 650.456 825.932 680.2 837.078 729.178C847.792 776.269 820.241 823.636 773.079 836.519C725.445 849.528 676.043 821.6 662.994 773.903C650.213 727.173 675.885 675.68 726.255 663.253H726.247Z" fill="black"></path>
|
||||
<path d="M1105.23 679.211C1146.03 710.857 1149.39 768.096 1120.44 805.032C1089.67 844.271 1033.11 851.204 994.859 821.272C955.667 790.608 946.659 733.699 979.406 693.03C1009.37 655.803 1066.08 648.847 1105.23 679.219V679.211Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 842 B |
@@ -0,0 +1,5 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M870.775 1206.33C838.345 1198.74 815.105 1177.73 809.545 1145.37L690.804 1154.63C676.494 1177.91 659.194 1204.39 632.284 1215.64C588.544 1233.95 542.025 1222.86 515.155 1183.62C486.425 1199.06 457.794 1200.73 429.554 1185.04C388.194 1162.06 379.514 1112.26 395.644 1065.47C341.964 1033.08 302.734 986.544 270.664 933.164C233.124 870.684 223.165 801.654 243.605 730.894C270.375 638.224 331.525 560.884 421.005 520.784C415.235 428.434 443.525 319.134 527.715 282.834C569.245 264.924 615.215 281.834 631.235 325.104C654.835 309.324 678.644 296.734 706.974 295.984C750.404 294.834 784.084 326.824 791.074 369.264C798.284 413.054 786.995 455.194 770.005 496.954C926.375 486.234 1054.03 559.564 1117.36 700.994C1148.18 687.244 1177.73 684.674 1209.63 700.074C1267.01 727.784 1286.78 811.814 1243.01 865.264C1220.51 892.734 1185 908.334 1144.2 902.044C1135.03 964.414 1110.48 1018.93 1075.97 1071.15C1029 1142.21 962.755 1227.85 870.755 1206.33H870.775ZM542.355 485.384C552.575 442.794 568.795 409.704 588.275 374.034C596.525 358.934 583.145 330.434 565.655 328.714C504.645 322.734 466.655 431.164 473.085 500.994L542.355 485.374V485.384ZM819.414 1088.61C825.314 1080.49 832.284 1070.78 837.074 1066.77C848.974 1056.8 868.074 1059.51 875.454 1071.67C891.704 1098.45 847.005 1118.82 863.865 1143.95C883.515 1173.25 944.795 1154.54 982.525 1110.3C1074.01 1003.03 1127.75 881.214 1078.04 742.664C1025.64 596.604 889.214 526.204 738.514 551.974L685.494 612.834C676.994 622.594 658.065 620.184 649.445 613.004C642.085 606.874 637.725 589.034 645.565 580.974C677.375 548.304 705.224 515.304 723.764 473.624C742.214 432.154 753.425 368.784 724.365 351.144C696.525 334.244 652.784 367.554 628.664 406.994C572.504 498.794 598.734 572.324 557.034 567.804C544.684 566.464 535.855 556.664 532.485 540.134C493.985 547.784 456.125 558.614 421.485 578.604C317.865 638.404 251.234 777.114 302.554 881.254C349.574 976.654 408.944 1026.75 508.804 1065.55C514.974 1049.51 527.625 1041.24 542.585 1045.85C577.755 1056.7 545.215 1099.09 556.115 1147.32C559.595 1162.73 575.794 1171.9 588.784 1172.99C628.144 1176.29 649.575 1127.24 659.855 1082.8C664.095 1064.48 677.734 1054.18 696.054 1061.65C708.164 1066.59 714.344 1083.15 707.554 1101.16C743.564 1100.87 781.935 1097.76 819.405 1088.61H819.414ZM1151.42 850.874C1174.09 853.874 1192.3 846.764 1202.83 833.134C1225.54 803.754 1213.98 758.824 1182.45 744.524C1167.58 737.784 1148.76 740.314 1137.03 749.944L1151.43 850.864L1151.42 850.874ZM501.434 1118.7L440.985 1092.96C438.905 1107.35 439.175 1123.38 448.005 1134.92C454.645 1143.6 470.664 1145.76 480.284 1143.24C491.154 1140.38 500.104 1129.73 501.434 1118.7Z" fill="black"></path>
|
||||
<path d="M510.514 757.112C514.014 782.272 497.754 803.112 475.534 804.072C452.804 805.052 436.294 784.132 438.054 759.582C439.484 739.552 452.895 722.902 471.355 721.412C491.185 719.812 507.275 733.882 510.505 757.122L510.514 757.112Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M891.269 731.048C953.509 697.278 1017.79 697.188 1057.91 747.078C1080.05 774.608 1086.13 811.539 1075.43 846.659C1112.25 865.359 1138.65 896.178 1146.07 930.738C1166.11 1024.04 1086.89 1084.82 996.549 1115C855.299 1162.19 702.049 1165.58 557.429 1129.39C468.789 1107.21 366.459 1054.88 352.419 962.888C343.399 903.758 372.509 850.029 426.859 827.689C420.469 786.029 434.779 748.528 463.659 724.738C492.979 700.578 531.569 696.449 574.099 709.129C514.469 596.118 535.829 458.558 649.039 392.068C732.799 342.868 834.659 332.068 926.049 365.318C1029.25 402.858 1095.99 496.838 1049.09 600.618C1082.31 635.118 1120.69 606.658 1129.17 619.818C1131.01 622.678 1131.54 633.179 1129.17 635.639C1123.77 641.269 1108.08 647.259 1099.67 649.679L1106.93 675.879C1107.93 679.488 1099.42 689.159 1095.81 688.379C1082.65 685.549 1082.64 668.448 1063 656.768L1023.7 633.389C980.719 674.009 923.919 686.798 863.739 688.268L891.259 731.028L891.269 731.048ZM717.119 599.258C726.559 591.058 741.129 591.549 751.109 600.679C804.279 649.349 901.969 650.088 965.259 615.968C1016.97 588.088 1031.24 527.369 998.249 477.699C938.879 388.329 796.379 375.828 692.829 423.548C608.389 462.448 568.949 555.479 600.329 643.149C615.419 685.299 639.489 721.648 670.199 754.858C727.299 778.078 788.079 777.358 846.819 753.868L793.599 679.078C744.019 663.208 685.929 626.328 717.119 599.248V599.258ZM1024.05 785.098C1011.67 761.348 981.159 745.578 953.889 758.308L891.479 787.429C805.709 832.079 708.039 828.528 620.939 787.258L549.769 753.528C534.139 746.118 512.659 749.958 498.639 758.988C487.269 766.308 477.359 782.158 474.869 798.258C466.059 855.208 534.579 892.478 590.729 910.728C704.909 947.848 828.889 944.758 941.029 902.478C999.099 880.588 1051.88 838.478 1024.06 785.108L1024.05 785.098ZM1097.13 939.208C1092.07 919.808 1073.59 899.388 1050.55 890.088C1023.19 916.168 994.359 934.568 958.439 948.388C843.389 992.638 716.639 997.718 597.519 964.478C542.549 949.138 478.709 919.058 444.709 874.628C411.399 887.438 392.849 922.098 401.249 958.838C416.019 1023.41 497.019 1062.3 562.649 1079.9C697.189 1115.98 840.459 1113.31 973.089 1071.58C1041.23 1050.14 1114.44 1005.54 1097.13 939.208Z" fill="black"></path>
|
||||
<path d="M849.275 481.647C869.235 472.057 889.865 483.176 897.485 500.486C905.245 518.106 897.005 540.297 879.715 548.437C861.765 556.897 841.725 549.797 832.685 533.197C823.305 515.967 828.185 491.787 849.275 481.657V481.647Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="1500" height="1500" viewBox="0 0 1500 1500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path d="M761.86 995.977C692.87 1001.02 625.31 1002.32 556.32 999.757C547.47 1036.38 533.74 1071.92 500.68 1090.69C455.23 1116.49 394.4 1107.86 356.59 1072.14C324.94 1042.24 320.68 998.507 337.64 957.287C265.65 967.077 175.58 942.977 173.17 878.737C172.38 857.597 184.36 834.747 204.64 822.737L258.69 790.727C250.4 565.747 416.22 390.677 642.81 394.467C784.98 396.847 909.85 472.037 974.79 602.187C1013.34 546.207 1074.01 517.427 1140.37 519.547C1204.43 521.597 1265.18 554.887 1298.87 613.237C1343.35 690.287 1335.03 786.597 1272.43 850.497C1198.99 925.457 1081.79 938.657 976.59 929.867C993.57 960.297 1001.97 991.997 989.11 1026.73C966.33 1088.28 871.2 1116.34 815.78 1075.61C790.3 1056.89 774.52 1029.89 761.86 995.957V995.977ZM956.09 781.187C956.02 731.187 948.02 682.877 928.51 636.967C878.89 520.197 765.35 450.207 638.89 449.927C448.89 449.507 314.9 588.557 313.23 773.127C312.3 875.657 401.59 920.567 496.92 935.647C643.63 958.847 956.33 961.837 956.09 781.187ZM1253.26 786.617C1286.81 726.937 1274.86 650.497 1221.63 606.267C1157.7 553.147 1062.98 567.937 1018.2 636.147C1001.96 659.997 1001.8 684.917 1006.35 712.297C1015.55 767.737 1013.98 822.467 988.27 874.537C1086.64 883.447 1198.1 868.837 1253.27 786.607L1253.26 786.617ZM303.02 904.637C290.51 887.037 281.09 872.277 269.46 848.967C255.58 855.457 236.33 867.217 225.21 878.937C247.17 903.297 272.72 903.807 303.02 904.637ZM849.49 1032.18C878.91 1049.81 923.62 1037.27 937.33 1008.21C948.14 985.307 933.27 960.527 920.46 943.127C887.65 963.057 854.92 975.117 816.67 984.787C822.84 1000.73 831.89 1021.64 849.49 1032.19V1032.18ZM476.34 1040.08C492 1028.59 498.48 1005.5 500.08 992.457C460.22 985.607 428.86 977.127 392.43 965.117C385.24 981.487 376.92 1004.3 386.94 1021.56C403.51 1050.13 447.96 1060.91 476.34 1040.08Z" fill="black"></path>
|
||||
<path d="M1146.57 663.005C1167.96 654.595 1188.25 664.836 1195.24 682.386C1202.41 700.366 1193.77 722.826 1177.48 729.866C1158 738.286 1137.58 730.806 1129.7 715.386C1119.99 696.386 1124.83 671.545 1146.57 663.005Z" fill="black"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -8,6 +8,10 @@
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Tma App</string>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>펫 명함 이미지를 사진 보관함에 저장합니다.</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>우리 아이 프로필 사진을 등록하기 위해 사진 보관함에 접근합니다.</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:tma_app/core/router/app_router.dart';
|
||||
import 'package:tma_app/core/theme/app_theme.dart';
|
||||
import 'package:tma_app/shared/widgets/rup_toast.dart';
|
||||
|
||||
/// 앱 루트 — 테마와 라우터를 연결하고, 모든 화면 위에 토스트 자리를 둔다.
|
||||
class RupApp extends ConsumerWidget {
|
||||
const RupApp({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
return MaterialApp.router(
|
||||
title: 'rup',
|
||||
debugShowCheckedModeBanner: false,
|
||||
theme: AppTheme.light,
|
||||
routerConfig: ref.watch(appRouterProvider),
|
||||
builder: (context, child) => ToastHost(child: child ?? const SizedBox.shrink()),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
/// 에셋 경로 상수 — 문자열 경로를 위젯에 직접 적지 않는다.
|
||||
abstract final class AppAssets {
|
||||
// 스플래시
|
||||
static const String splashBlob = 'assets/images/splash/blob.png';
|
||||
static const String splashObjects = 'assets/images/splash/bg_objects.png';
|
||||
static const String splashLetterR = 'assets/images/splash/letter_r.png';
|
||||
static const String splashLetterU = 'assets/images/splash/letter_u.png';
|
||||
static const String splashLetterP = 'assets/images/splash/letter_p.png';
|
||||
static const String splashDog = 'assets/images/splash/dog.png';
|
||||
|
||||
// 인트로
|
||||
static const String introDog = 'assets/svg/intro/intro_dog.svg';
|
||||
static const String introBall = 'assets/svg/intro/intro_ball.svg';
|
||||
|
||||
// 로그인
|
||||
static const String loginBack = 'assets/svg/login/login_back.svg';
|
||||
static const String loginPaw = 'assets/svg/login/login_paw.svg';
|
||||
static const String loginWand = 'assets/svg/login/login_wand.svg';
|
||||
static const String loginCat = 'assets/images/login/login_cat.png';
|
||||
static const String markNaver = 'assets/svg/login/mark_naver.svg';
|
||||
static const String markKakao = 'assets/svg/login/mark_kakao.svg';
|
||||
static const String markApple = 'assets/images/login/mark_apple.png';
|
||||
|
||||
// 온보딩 — 시안 SVG 를 움직이는 부분(ch/sp)과 배경으로 나눠 래스터화했다
|
||||
static const String onb1Base = 'assets/images/onboarding/onb1_base.png';
|
||||
static const String onb1Character = 'assets/images/onboarding/onb1_ch.png';
|
||||
static const String onb2Base = 'assets/images/onboarding/onb2_base.png';
|
||||
static const String onb2Character = 'assets/images/onboarding/onb2_ch.png';
|
||||
static const String onb3Base = 'assets/images/onboarding/onb3_base.png';
|
||||
static const String onb3Hero = 'assets/images/onboarding/onb3_hero.png';
|
||||
static const String onb3Sparkle1 = 'assets/images/onboarding/onb3_sp1.png';
|
||||
static const String onb3Sparkle2 = 'assets/images/onboarding/onb3_sp2.png';
|
||||
static const String onb3Sparkle3 = 'assets/images/onboarding/onb3_sp3.png';
|
||||
static const String onb4Base = 'assets/images/onboarding/onb4_base.png';
|
||||
static const String onb4Heart = 'assets/images/onboarding/onb4_ch.png';
|
||||
|
||||
// 공통
|
||||
static const String petDefault = 'assets/svg/common/pet_default.svg';
|
||||
static const String personDefault = 'assets/svg/common/person_default.svg';
|
||||
static const String addPhoto = 'assets/svg/common/add_photo.svg';
|
||||
static const String addCard = 'assets/svg/common/add_card.svg';
|
||||
|
||||
/// 마이페이지 통계 줄의 그림 아이콘 — 반려동물 / 명함 관리
|
||||
static const String artRup = 'assets/svg/common/art_rup.svg';
|
||||
static const String artCard = 'assets/svg/common/art_card.svg';
|
||||
|
||||
// 브랜드 로고 (명함 헤더 등)
|
||||
static const String logo = 'assets/images/brand/rup_logo.png';
|
||||
static const String logoWhite = 'assets/images/brand/rup_logo_white.png';
|
||||
|
||||
/// 펫 명함 기본 배경 이미지 4종
|
||||
static const List<String> cardBackgrounds = [
|
||||
'assets/svg/card_bg/bg_1.svg',
|
||||
'assets/svg/card_bg/bg_2.svg',
|
||||
'assets/svg/card_bg/bg_3.svg',
|
||||
'assets/svg/card_bg/bg_4.svg',
|
||||
];
|
||||
|
||||
/// 종 실루엣 아이콘 — [speciesIconKey] 는 dog·cat·… (없으면 other)
|
||||
static String speciesIcon(String speciesIconKey) =>
|
||||
'assets/svg/species/$speciesIconKey.svg';
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
import 'package:flutter/painting.dart';
|
||||
|
||||
/// 시안(.design/styles.css `:root`)의 색상 토큰.
|
||||
/// 표에 없는 색을 새로 쓰기 전에 여기에 먼저 추가한다.
|
||||
abstract final class AppColors {
|
||||
// 브랜드 — primary 파생색은 시안의 color-mix 결과를 계산해 고정했다
|
||||
static const Color primary = Color(0xFFFF7500);
|
||||
static const Color primary600 = Color(0xFFD96200); // mix(primary, #2b0d00 18%)
|
||||
static const Color primary100 = Color(0xFFFFD8B8); // mix(primary, #fff 72%)
|
||||
static const Color primary50 = Color(0xFFFFE9D6); // mix(primary, #fffaf6 87%)
|
||||
static const Color primaryBorder = Color(0xFFE06700); // mix(primary, #000 12%)
|
||||
|
||||
// 건강·긍정(민트), 추억보관함(보라)
|
||||
static const Color accent = Color(0xFF3FB58C);
|
||||
static const Color accent100 = Color(0xFFDBF1E8);
|
||||
static const Color memory = Color(0xFFC084FC);
|
||||
static const Color memory50 = Color(0xFFF4ECFE);
|
||||
|
||||
// 면 · 글자 · 선
|
||||
static const Color bg = Color(0xFFFFFDFB);
|
||||
static const Color surface = Color(0xFFFFFFFF);
|
||||
static const Color surface2 = Color(0xFFFFF7F1);
|
||||
static const Color ink = Color(0xFF1F1F1F);
|
||||
static const Color ink2 = Color(0xFF6E665C);
|
||||
static const Color muted = Color(0xFFA89E92);
|
||||
static const Color line = Color(0xFFEFE6DB);
|
||||
static const Color line2 = Color(0xFFF6EFE7);
|
||||
|
||||
// 일정 분류색 (고정)
|
||||
static const Color catHospital = Color(0xFFFF6B6B);
|
||||
static const Color catVaccine = Color(0xFF4DA6E0);
|
||||
static const Color catGrooming = Color(0xFFB07CF0);
|
||||
static const Color catWalk = Color(0xFF3FB58C);
|
||||
static const Color catFood = Color(0xFFFFAA4D);
|
||||
static const Color catMed = Color(0xFFF2974E);
|
||||
static const Color catEtc = Color(0xFF9AA0A6);
|
||||
|
||||
// 하단 탭바 반투명 배경 — rgba(255,253,250,.86)
|
||||
static const Color tabBarBg = Color(0xDBFFFDFA);
|
||||
|
||||
// 시트·모달 뒤 어둡게 — rgba(40,28,18,.42)
|
||||
static const Color scrim = Color(0x6B281C12);
|
||||
|
||||
// 입력 오류 · 파괴적 동작
|
||||
static const Color error = Color(0xFFE0534F);
|
||||
static const Color danger = Color(0xFFD9503F);
|
||||
|
||||
// 옅은 베이지 면 — 구분 띠·사진 추가 칸·텍스트 다이어리 (#F6F4EF)
|
||||
static const Color sand = Color(0xFFF6F4EF);
|
||||
static const Color sandInk = Color(0xFF8C8170); // 사진 추가 칸 아이콘·문구
|
||||
|
||||
// 빈 명함 슬롯
|
||||
static const Color emptyCardBg = Color(0xFFFEFCFA);
|
||||
static const Color emptyCardBorder = Color(0xFFCDC7C0); // mix(muted, #fff 42%)
|
||||
static const Color emptyCardIcon = Color(0xFFB8AFA6); // mix(muted, #fff 18%)
|
||||
static const Color emptyCardButtonBorder = Color(0xFFFFC594); // mix(primary, #fff 58%)
|
||||
|
||||
// 그림자 — 시안 --shadow-sm / --shadow-md 의 색
|
||||
static const Color shadowWarm = Color(0x0D46321E); // rgba(70,50,30,.05)
|
||||
static const Color shadowWarmSoft = Color(0x0A46321E); // rgba(70,50,30,.04)
|
||||
static const Color shadowMd = Color(0x1450371E); // rgba(80,55,30,.08)
|
||||
static const Color shadowMdSoft = Color(0x0D50371E); // rgba(80,55,30,.05)
|
||||
|
||||
// 진입 화면 전용
|
||||
static const Color splashYellow = Color(0xFFFFDE84);
|
||||
static const Color splashInk = Color(0xFF2B2622);
|
||||
static const Color offWhite = Color(0xFFFDFDFD); // 인트로·온보딩 흰 버튼
|
||||
static const Color onboardingHint = Color(0xFFC8C8C8);
|
||||
|
||||
// 소셜 로그인 브랜드색 — 각 사 가이드 색상
|
||||
static const Color naver = Color(0xFF00D03F);
|
||||
static const Color kakao = Color(0xFFFAE100);
|
||||
static const Color googleBorder = Color(0xFFE8EEF2);
|
||||
static const Color apple = Color(0xFF000000);
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
/// 앱 정보 — 화면에 보이는 버전 표기.
|
||||
/// pubspec.yaml 의 version(빌드 번호 제외)과 맞춘다.
|
||||
const String kAppVersion = '1.0.0';
|
||||
@@ -0,0 +1,36 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
/// 시안 기기 크기 — iPhone 16 Pro(402×874) 기준으로 그려졌다.
|
||||
/// 일러스트 배치처럼 시안 좌표를 그대로 옮기는 곳에서만 쓰고,
|
||||
/// 실제 크기는 [DesignArtBox] 등이 화면 비율로 환산한다.
|
||||
const Size kDesignScreen = Size(402, 874);
|
||||
|
||||
/// 여백·간격 토큰 (시안의 반복 값)
|
||||
abstract final class AppSpacing {
|
||||
static const double xs = 4;
|
||||
static const double sm = 8;
|
||||
static const double md = 12;
|
||||
static const double lg = 16;
|
||||
static const double xl = 20; // 화면 좌우 기본 여백
|
||||
static const double xxl = 24;
|
||||
}
|
||||
|
||||
/// 모서리 반경 토큰
|
||||
abstract final class AppRadius {
|
||||
static const double card = 10; // --radius
|
||||
static const double pill = 999;
|
||||
}
|
||||
|
||||
/// 공통 컨트롤 크기
|
||||
abstract final class AppControlSize {
|
||||
static const double buttonHeight = 46; // 인트로·로그인 pill 버튼
|
||||
static const double navBarHeight = 44; // 상단 내비게이션 바
|
||||
static const double tabIcon = 24;
|
||||
}
|
||||
|
||||
/// 애니메이션 시간
|
||||
abstract final class AppDurations {
|
||||
static const Duration fast = Duration(milliseconds: 150);
|
||||
static const Duration press = Duration(milliseconds: 100);
|
||||
static const Duration fade = Duration(milliseconds: 480);
|
||||
}
|
||||
@@ -0,0 +1,283 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:tma_app/core/constants/app_sizes.dart';
|
||||
import 'package:tma_app/core/router/app_routes.dart';
|
||||
import 'package:tma_app/core/utils/date_format.dart';
|
||||
import 'package:tma_app/features/archive/presentation/pages/archive_list_page.dart';
|
||||
import 'package:tma_app/features/archive/presentation/pages/archived_cards_page.dart';
|
||||
import 'package:tma_app/features/archive/presentation/pages/archived_diaries_page.dart';
|
||||
import 'package:tma_app/features/archive/presentation/pages/archived_pet_info_page.dart';
|
||||
import 'package:tma_app/features/archive/presentation/pages/archived_pet_page.dart';
|
||||
import 'package:tma_app/features/archive/presentation/pages/pet_archive_move_page.dart';
|
||||
import 'package:tma_app/features/auth/presentation/pages/login_page.dart';
|
||||
import 'package:tma_app/features/diary/presentation/pages/diary_compose_page.dart';
|
||||
import 'package:tma_app/features/diary/presentation/pages/diary_page.dart';
|
||||
import 'package:tma_app/features/diary/presentation/pages/diary_settings_page.dart';
|
||||
import 'package:tma_app/features/entry/presentation/providers/entry_provider.dart';
|
||||
import 'package:tma_app/features/home/presentation/pages/home_page.dart';
|
||||
import 'package:tma_app/features/intro/presentation/pages/intro_page.dart';
|
||||
import 'package:tma_app/features/mypage/domain/policy_doc.dart';
|
||||
import 'package:tma_app/features/mypage/presentation/pages/my_page.dart';
|
||||
import 'package:tma_app/features/mypage/presentation/pages/my_pets_page.dart';
|
||||
import 'package:tma_app/features/mypage/presentation/pages/policy_doc_page.dart';
|
||||
import 'package:tma_app/features/mypage/presentation/pages/settings_page.dart';
|
||||
import 'package:tma_app/features/notifications/presentation/pages/notifications_page.dart';
|
||||
import 'package:tma_app/features/onboarding/presentation/pages/onboarding_page.dart';
|
||||
import 'package:tma_app/features/pet/presentation/pages/pet_info_page.dart';
|
||||
import 'package:tma_app/features/pet/presentation/pages/pet_register_page.dart';
|
||||
import 'package:tma_app/features/pet_card/presentation/pages/pet_card_detail_page.dart';
|
||||
import 'package:tma_app/features/pet_card/presentation/pages/pet_card_editor_page.dart';
|
||||
import 'package:tma_app/features/pet_card/presentation/pages/pet_card_manage_page.dart';
|
||||
import 'package:tma_app/features/pet_card/presentation/pages/pet_cards_page.dart';
|
||||
import 'package:tma_app/features/records/presentation/pages/records_page.dart';
|
||||
import 'package:tma_app/features/schedule/presentation/pages/event_editor_page.dart';
|
||||
import 'package:tma_app/features/shell/presentation/pages/main_shell.dart';
|
||||
import 'package:tma_app/features/splash/presentation/pages/splash_page.dart';
|
||||
|
||||
/// 진입 화면 전환 — 시안은 화면을 겹쳐 두고 페이드로 넘긴다
|
||||
CustomTransitionPage<void> _fadePage(GoRouterState state, Widget child) {
|
||||
return CustomTransitionPage<void>(
|
||||
key: state.pageKey,
|
||||
child: child,
|
||||
transitionDuration: AppDurations.fade,
|
||||
reverseTransitionDuration: AppDurations.fade,
|
||||
transitionsBuilder: (context, animation, secondaryAnimation, child) =>
|
||||
FadeTransition(opacity: animation, child: child),
|
||||
);
|
||||
}
|
||||
|
||||
final appRouterProvider = Provider<GoRouter>((ref) {
|
||||
// 진입 상태가 바뀌면(로그인·온보딩 완료·로그아웃) redirect 를 다시 평가한다
|
||||
final refresh = ValueNotifier<int>(0);
|
||||
ref.listen(entryProvider, (previous, next) => refresh.value++);
|
||||
|
||||
// 탭바 위에 덮는 화면(등록 등)은 최상위 내비게이터에 올린다
|
||||
final rootKey = GlobalKey<NavigatorState>();
|
||||
|
||||
final router = GoRouter(
|
||||
navigatorKey: rootKey,
|
||||
initialLocation: AppRoutes.splash,
|
||||
refreshListenable: refresh,
|
||||
redirect: (context, state) => AppRoutes.redirectFor(
|
||||
ref.read(entryProvider).stage,
|
||||
state.matchedLocation,
|
||||
),
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: AppRoutes.splash,
|
||||
pageBuilder: (context, state) => _fadePage(state, const SplashPage()),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.intro,
|
||||
pageBuilder: (context, state) => _fadePage(state, const IntroPage()),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.login,
|
||||
pageBuilder: (context, state) => _fadePage(state, const LoginPage()),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.onboarding,
|
||||
pageBuilder: (context, state) =>
|
||||
_fadePage(state, const OnboardingPage()),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.petRegister,
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) => const PetRegisterPage(),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.petEditPattern,
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) =>
|
||||
PetRegisterPage(petId: state.pathParameters['petId']),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.eventCreatePath,
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) => EventEditorPage.create(
|
||||
date: parseIsoDateOrNull(state.uri.queryParameters['date']) ?? dateOnly(DateTime.now()),
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.eventEditPath,
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) => EventEditorPage.edit(eventId: state.uri.queryParameters['id'] ?? ''),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.notifications,
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) => const NotificationsPage(),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.diaryPattern,
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) => DiaryPage(diaryId: state.pathParameters['diaryId']!),
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: 'write',
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) => DiaryComposePage(diaryId: state.pathParameters['diaryId']!),
|
||||
),
|
||||
GoRoute(
|
||||
path: 'settings',
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) => DiarySettingsPage(diaryId: state.pathParameters['diaryId']!),
|
||||
),
|
||||
],
|
||||
),
|
||||
// 펫 명함 — 경로가 겹치므로 고정 경로(manage·new)를 :cardId 보다 먼저 둔다
|
||||
GoRoute(
|
||||
path: AppRoutes.petCardManage,
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) => const PetCardManagePage(),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.petCardCreatePattern,
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) =>
|
||||
PetCardEditorPage.create(petId: state.pathParameters['petId']!),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.petCardEditPattern,
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) =>
|
||||
PetCardEditorPage.edit(cardId: state.pathParameters['cardId']!),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.petCardDetailPattern,
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) =>
|
||||
PetCardDetailPage(cardId: state.pathParameters['cardId']!),
|
||||
),
|
||||
StatefulShellRoute.indexedStack(
|
||||
pageBuilder: (context, state, navigationShell) =>
|
||||
_fadePage(state, MainShell(navigationShell: navigationShell)),
|
||||
branches: [
|
||||
StatefulShellBranch(
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: AppRoutes.home,
|
||||
builder: (context, state) => const HomePage(),
|
||||
),
|
||||
],
|
||||
),
|
||||
StatefulShellBranch(
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: AppRoutes.records,
|
||||
builder: (context, state) => const RecordsPage(),
|
||||
),
|
||||
],
|
||||
),
|
||||
StatefulShellBranch(
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: AppRoutes.petCards,
|
||||
builder: (context, state) => const PetCardsPage(),
|
||||
),
|
||||
],
|
||||
),
|
||||
StatefulShellBranch(
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: AppRoutes.myPage,
|
||||
builder: (context, state) => const MyPage(),
|
||||
// 탭바를 둔 채 넘어가는 하위 화면
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: 'pets',
|
||||
builder: (context, state) => const MyPetsPage(),
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: ':petId',
|
||||
builder: (context, state) =>
|
||||
PetInfoPage(petId: state.pathParameters['petId']!),
|
||||
routes: [
|
||||
// 추억 보관함으로 옮기기 — 탭바 없이 전체 화면
|
||||
GoRoute(
|
||||
path: 'archive',
|
||||
parentNavigatorKey: rootKey,
|
||||
builder: (context, state) =>
|
||||
PetArchiveMovePage(petId: state.pathParameters['petId']!),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
GoRoute(
|
||||
path: 'archive',
|
||||
builder: (context, state) => const ArchiveListPage(),
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: ':petId',
|
||||
builder: (context, state) =>
|
||||
ArchivedPetPage(petId: state.pathParameters['petId']!),
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: 'info',
|
||||
builder: (context, state) =>
|
||||
ArchivedPetInfoPage(petId: state.pathParameters['petId']!),
|
||||
),
|
||||
GoRoute(
|
||||
path: 'cards',
|
||||
builder: (context, state) =>
|
||||
ArchivedCardsPage(petId: state.pathParameters['petId']!),
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: ':cardId',
|
||||
builder: (context, state) => ArchivedCardDetailPage(
|
||||
petId: state.pathParameters['petId']!,
|
||||
cardId: state.pathParameters['cardId']!,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
GoRoute(
|
||||
path: 'diaries',
|
||||
builder: (context, state) =>
|
||||
ArchivedDiariesPage(petId: state.pathParameters['petId']!),
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: ':diaryId',
|
||||
builder: (context, state) =>
|
||||
DiaryPage(diaryId: state.pathParameters['diaryId']!, archived: true),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
GoRoute(
|
||||
path: 'settings',
|
||||
builder: (context, state) => const SettingsPage(),
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: 'policy/:doc',
|
||||
// 모르는 문서 이름이면 설정으로 돌려보낸다
|
||||
redirect: (context, state) =>
|
||||
PolicyDoc.byName(state.pathParameters['doc']) == null
|
||||
? AppRoutes.settings
|
||||
: null,
|
||||
builder: (context, state) => PolicyDocPage(
|
||||
doc: PolicyDoc.byName(state.pathParameters['doc'])!,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
ref.onDispose(() {
|
||||
router.dispose();
|
||||
refresh.dispose();
|
||||
});
|
||||
return router;
|
||||
});
|
||||
@@ -0,0 +1,91 @@
|
||||
import 'package:tma_app/core/utils/date_format.dart';
|
||||
import 'package:tma_app/features/entry/domain/entry_state.dart';
|
||||
import 'package:tma_app/features/mypage/domain/policy_doc.dart';
|
||||
|
||||
/// 라우트 경로 상수
|
||||
abstract final class AppRoutes {
|
||||
static const String splash = '/splash';
|
||||
static const String intro = '/intro';
|
||||
static const String login = '/login';
|
||||
static const String onboarding = '/onboarding';
|
||||
|
||||
// 하단 탭
|
||||
static const String home = '/home';
|
||||
static const String records = '/records';
|
||||
static const String petCards = '/pet-cards';
|
||||
static const String myPage = '/mypage';
|
||||
|
||||
// 마이페이지 하위 화면 (탭바 유지)
|
||||
static const String myPets = '/mypage/pets';
|
||||
static String petInfo(String petId) => '/mypage/pets/$petId';
|
||||
|
||||
/// 추억 보관함으로 옮기기 — 탭바 없이 전체 화면
|
||||
static String petArchive(String petId) => '/mypage/pets/$petId/archive';
|
||||
|
||||
// 추억 보관함 (탭바 유지)
|
||||
static const String archive = '/mypage/archive';
|
||||
static String archivedPet(String petId) => '/mypage/archive/$petId';
|
||||
static String archivedPetInfo(String petId) => '/mypage/archive/$petId/info';
|
||||
static String archivedPetCards(String petId) => '/mypage/archive/$petId/cards';
|
||||
static String archivedPetCard(String petId, String cardId) => '/mypage/archive/$petId/cards/$cardId';
|
||||
static String archivedPetDiaries(String petId) => '/mypage/archive/$petId/diaries';
|
||||
static String archivedPetDiary(String petId, String diaryId) => '/mypage/archive/$petId/diaries/$diaryId';
|
||||
static const String settings = '/mypage/settings';
|
||||
static String policy(PolicyDoc doc) => '/mypage/settings/policy/${doc.name}';
|
||||
|
||||
// 탭 위에 덮는 화면 (탭바 없음)
|
||||
static const String petRegister = '/pets/new';
|
||||
static const String petEditPattern = '/pets/:petId/edit';
|
||||
static String petEdit(String petId) => '/pets/$petId/edit';
|
||||
|
||||
// 일정 추가·수정 — 반복 일정 id 에 '@' 가 있어 쿼리로 넘긴다
|
||||
static const String eventCreatePath = '/schedule/new';
|
||||
static const String eventEditPath = '/schedule/edit';
|
||||
static String eventCreate(DateTime date) => '$eventCreatePath?date=${toIsoDate(date)}';
|
||||
static String eventEdit(String eventId) => '$eventEditPath?id=${Uri.encodeQueryComponent(eventId)}';
|
||||
|
||||
// 알림 — 홈 종에서 연다 (탭바 없이 전체 화면)
|
||||
static const String notifications = '/notifications';
|
||||
|
||||
// 다이어리 — 열면 탭바 없이 전체 화면
|
||||
static const String diaryPattern = '/diaries/:diaryId';
|
||||
static String diary(String id) => '/diaries/$id';
|
||||
static String diaryWrite(String id) => '/diaries/$id/write';
|
||||
static String diarySettings(String id) => '/diaries/$id/settings';
|
||||
|
||||
static const String petCardManage = '/pet-cards/manage';
|
||||
static const String petCardCreatePattern = '/pet-cards/new/:petId';
|
||||
static const String petCardDetailPattern = '/pet-cards/:cardId';
|
||||
static const String petCardEditPattern = '/pet-cards/:cardId/edit';
|
||||
static String petCardCreate(String petId) => '/pet-cards/new/$petId';
|
||||
static String petCardDetail(String cardId) => '/pet-cards/$cardId';
|
||||
static String petCardEdit(String cardId) => '/pet-cards/$cardId/edit';
|
||||
|
||||
/// 로그인 전에만 머무를 수 있는 화면
|
||||
static const Set<String> _signedOutOnly = {intro, login};
|
||||
|
||||
/// 진입 단계별 첫 화면
|
||||
static String forStage(EntryStage stage) => switch (stage) {
|
||||
EntryStage.intro => intro,
|
||||
EntryStage.login => login,
|
||||
EntryStage.onboarding => onboarding,
|
||||
EntryStage.app => home,
|
||||
};
|
||||
|
||||
/// 진입 단계에 맞지 않는 경로면 보내야 할 경로를, 그대로 두면 null 을 돌려준다.
|
||||
/// 스플래시는 스스로 다음 화면을 정하므로 건드리지 않는다.
|
||||
static String? redirectFor(EntryStage stage, String location) {
|
||||
if (location == splash) return null;
|
||||
switch (stage) {
|
||||
case EntryStage.intro:
|
||||
case EntryStage.login:
|
||||
// 로그인 전에는 인트로 ↔ 로그인 사이만 오갈 수 있다 (로그인의 뒤로가기 = 인트로)
|
||||
return _signedOutOnly.contains(location) ? null : forStage(stage);
|
||||
case EntryStage.onboarding:
|
||||
return location == onboarding ? null : onboarding;
|
||||
case EntryStage.app:
|
||||
final inEntryFlow = _signedOutOnly.contains(location) || location == onboarding;
|
||||
return inEntryFlow ? home : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:gal/gal.dart';
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
|
||||
/// 이미지를 기기 앨범(사진 보관함)에 저장한다 — 테스트에서 바꿔 끼울 수 있게 계약으로 둔다
|
||||
abstract interface class AlbumSaver {
|
||||
/// 저장했으면 true — 권한을 거절했거나 실패하면 false
|
||||
Future<bool> savePng(Uint8List bytes, String name);
|
||||
}
|
||||
|
||||
/// gal 로 앨범에 저장한다. 웹에는 앨범이 없어 파일 내려받기(공유)로 대신한다
|
||||
class GalAlbumSaver implements AlbumSaver {
|
||||
const GalAlbumSaver();
|
||||
|
||||
@override
|
||||
Future<bool> savePng(Uint8List bytes, String name) async {
|
||||
if (kIsWeb) {
|
||||
await SharePlus.instance.share(
|
||||
ShareParams(files: [XFile.fromData(bytes, mimeType: 'image/png', name: '$name.png')]),
|
||||
);
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
if (!await Gal.hasAccess() && !await Gal.requestAccess()) return false;
|
||||
await Gal.putImageBytes(bytes, name: name);
|
||||
return true;
|
||||
} on GalException {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final albumSaverProvider = Provider<AlbumSaver>((ref) => const GalAlbumSaver());
|
||||
@@ -0,0 +1,8 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
/// 앱 전역 SharedPreferences — main() 에서 미리 로드해 override 한다.
|
||||
/// 토큰 같은 민감정보는 여기 저장하지 않는다 (flutter_secure_storage 사용).
|
||||
final sharedPreferencesProvider = Provider<SharedPreferences>((ref) {
|
||||
throw UnimplementedError('main() 에서 sharedPreferencesProvider 를 override 해야 한다');
|
||||
});
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/painting.dart';
|
||||
import 'package:tma_app/core/constants/app_colors.dart';
|
||||
|
||||
/// 시안 그림자 토큰 (--shadow-sm / --shadow-md)
|
||||
abstract final class AppShadows {
|
||||
/// 카드 기본
|
||||
static const List<BoxShadow> sm = [
|
||||
BoxShadow(color: AppColors.shadowWarm, offset: Offset(0, 1), blurRadius: 2),
|
||||
BoxShadow(color: AppColors.shadowWarmSoft, offset: Offset(0, 2), blurRadius: 8),
|
||||
];
|
||||
|
||||
/// 떠 있는 요소 (토스트 등)
|
||||
static const List<BoxShadow> md = [
|
||||
BoxShadow(color: AppColors.shadowMd, offset: Offset(0, 4), blurRadius: 14),
|
||||
BoxShadow(color: AppColors.shadowMdSoft, offset: Offset(0, 1), blurRadius: 4),
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tma_app/core/constants/app_colors.dart';
|
||||
import 'package:tma_app/core/theme/app_typography.dart';
|
||||
|
||||
/// 앱 테마 — 시안은 밝은 단일 테마다(다크 모드 없음).
|
||||
abstract final class AppTheme {
|
||||
static ThemeData get light {
|
||||
final colorScheme = ColorScheme.fromSeed(
|
||||
seedColor: AppColors.primary,
|
||||
primary: AppColors.primary,
|
||||
onPrimary: Colors.white,
|
||||
secondary: AppColors.accent,
|
||||
surface: AppColors.surface,
|
||||
onSurface: AppColors.ink,
|
||||
outline: AppColors.line,
|
||||
);
|
||||
|
||||
return ThemeData(
|
||||
useMaterial3: true,
|
||||
colorScheme: colorScheme,
|
||||
scaffoldBackgroundColor: AppColors.bg,
|
||||
fontFamily: AppFonts.ui,
|
||||
textTheme: AppTypography.textTheme,
|
||||
iconTheme: const IconThemeData(color: AppColors.ink2),
|
||||
// 시안은 물결(ripple) 대신 눌림 축소 효과를 쓴다 — Pressable 참고
|
||||
splashFactory: NoSplash.splashFactory,
|
||||
highlightColor: Colors.transparent,
|
||||
splashColor: Colors.transparent,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tma_app/core/constants/app_colors.dart';
|
||||
|
||||
/// 서체 패밀리 이름 — pubspec.yaml 의 fonts 항목과 일치해야 한다.
|
||||
abstract final class AppFonts {
|
||||
/// 본문(UI) — 시안의 --font-ui
|
||||
static const String ui = 'SUITE';
|
||||
|
||||
/// 제목 — 시안의 --font-display (Bold 컷을 400 으로 등록, 굵게 요청 시 합성)
|
||||
static const String display = 'ChungbukBold';
|
||||
|
||||
/// 제목 서체의 일반 굵기 (펫 명함 이름 등)
|
||||
static const String displayRegular = 'Chungbuk';
|
||||
|
||||
/// 인트로 손글씨
|
||||
static const String handwriting = 'UhBeeKeongKeong';
|
||||
}
|
||||
|
||||
/// 시안 전역 자간 -0.01em
|
||||
double _tracking(double fontSize) => fontSize * -0.01;
|
||||
|
||||
/// 앱 TextTheme — 크기는 시안 px(=논리 픽셀) 값을 그대로 쓴다.
|
||||
/// 화면에서는 `Theme.of(context).textTheme.xxx` 로 꺼내 쓰고, 굵기·색만 copyWith 로 조정한다.
|
||||
abstract final class AppTypography {
|
||||
/// CSS 'line-height: normal' 에 해당하는 줄 높이 — 시안에서 줄 높이를 따로 주지 않은 글자.
|
||||
/// 지정하지 않으면 본문 기본값(bodyMedium 1.6)을 물려받아 시안보다 줄이 커진다.
|
||||
static const double normalHeight = 1.25;
|
||||
|
||||
/// 제목 서체(ChungbukBold)의 normal 줄 높이 — 글자 크기와 거의 같다
|
||||
static const double displayNormalHeight = 1.1;
|
||||
|
||||
static TextStyle _ui(double size, FontWeight weight, {double? height}) =>
|
||||
TextStyle(
|
||||
fontFamily: AppFonts.ui,
|
||||
fontSize: size,
|
||||
fontWeight: weight,
|
||||
height: height,
|
||||
letterSpacing: _tracking(size),
|
||||
color: AppColors.ink,
|
||||
);
|
||||
|
||||
static TextStyle _display(double size, FontWeight weight, {double? height}) =>
|
||||
TextStyle(
|
||||
fontFamily: AppFonts.display,
|
||||
fontSize: size,
|
||||
fontWeight: weight,
|
||||
height: height,
|
||||
letterSpacing: 0,
|
||||
color: AppColors.ink,
|
||||
);
|
||||
|
||||
static final TextTheme textTheme = TextTheme(
|
||||
// 26 — 로그인 인사말 등 큰 제목
|
||||
displaySmall: _display(26, FontWeight.w400),
|
||||
// 24 — 화면 헤더 제목(.rup-head__title)
|
||||
headlineSmall: _display(24, FontWeight.w800),
|
||||
// 20 — 달력 월 표시
|
||||
titleLarge: _display(20, FontWeight.w700),
|
||||
// 17 — 섹션 제목(.rup-section-title h2)
|
||||
titleMedium: _display(17, FontWeight.w700),
|
||||
// 15 — 내비 제목·목록 제목
|
||||
titleSmall: _ui(15, FontWeight.w700),
|
||||
// 14.5 — 본문 강조
|
||||
bodyLarge: _ui(14.5, FontWeight.w400, height: 1.62),
|
||||
// 13.5 — 본문 보조·안내
|
||||
bodyMedium: _ui(13.5, FontWeight.w400, height: 1.6),
|
||||
// 12 — 메타 정보
|
||||
bodySmall: _ui(12, FontWeight.w400),
|
||||
// 15 — 본문 서체 버튼 (로그인·인트로 CTA 처럼 .rup-btn 이 아닌 버튼)
|
||||
labelLarge: _ui(15, FontWeight.w700),
|
||||
// 13 — 작은 버튼·링크
|
||||
labelMedium: _ui(13, FontWeight.w600),
|
||||
// 12 — 하단 탭 라벨 (.rup-tab 은 제목 서체 800)
|
||||
labelSmall: _ui(12, FontWeight.w800),
|
||||
);
|
||||
|
||||
/// `.rup-btn` · 선택 버튼 — 시안은 모든 버튼을 제목 서체 800 으로 통일한다
|
||||
static TextStyle button(double size, {bool thin = false, Color? color}) {
|
||||
// 시안 .rup-btn 은 제목 서체 + line-height normal (브라우저 실측 1.10)
|
||||
return _display(size, thin ? FontWeight.w600 : FontWeight.w800, height: displayNormalHeight)
|
||||
.copyWith(color: color);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
/// 지금 시각 — 테스트에서 특정 시각(예: 저녁 8시)을 재현할 수 있게 주입한다
|
||||
final clockProvider = Provider<DateTime Function()>((ref) => DateTime.now);
|
||||
@@ -0,0 +1,25 @@
|
||||
import 'dart:ui' show Color;
|
||||
|
||||
/// "#RRGGBB" → Color. 형식이 틀리면 null
|
||||
Color? colorFromHex(String? hex) {
|
||||
if (hex == null) return null;
|
||||
final m = RegExp(r'^#?([0-9a-fA-F]{6})$').firstMatch(hex.trim());
|
||||
if (m == null) return null;
|
||||
return Color(0xFF000000 | int.parse(m.group(1)!, radix: 16));
|
||||
}
|
||||
|
||||
/// Color → "#RRGGBB" (대문자)
|
||||
String hexOf(Color c) {
|
||||
final rgb = c.toARGB32() & 0xFFFFFF;
|
||||
return '#${rgb.toRadixString(16).padLeft(6, '0').toUpperCase()}';
|
||||
}
|
||||
|
||||
/// [amount](0~1) 만큼 흰색과 섞어 밝게 — 시안 lightenHex (직접 고른 헤더색의 두 번째 색)
|
||||
Color lighten(Color c, double amount) {
|
||||
int mix(double channel) {
|
||||
final v = (channel * 255).round();
|
||||
return (v + (255 - v) * amount).round();
|
||||
}
|
||||
|
||||
return Color.fromARGB(255, mix(c.r), mix(c.g), mix(c.b));
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
// 날짜 표기 — 시안 app-data.jsx 의 fmtDate · fmtYMD · DOW_KR 과 같은 형식.
|
||||
// 날짜는 시각 없이 "그 날" 로만 다룬다.
|
||||
|
||||
const List<String> _kWeekdaysKo = ['월', '화', '수', '목', '금', '토', '일'];
|
||||
|
||||
String _pad2(int n) => n.toString().padLeft(2, '0');
|
||||
|
||||
/// 시각을 버린 날짜
|
||||
DateTime dateOnly(DateTime d) => DateTime(d.year, d.month, d.day);
|
||||
|
||||
/// 2021.09.14
|
||||
String formatYmd(DateTime d) => '${d.year}.${_pad2(d.month)}.${_pad2(d.day)}';
|
||||
|
||||
/// 2021 . 09 . 14 — 등록 화면 생년월일 칸
|
||||
String formatYmdSpaced(DateTime d) => '${d.year} . ${_pad2(d.month)} . ${_pad2(d.day)}';
|
||||
|
||||
/// 9월 28일
|
||||
String formatMonthDay(DateTime d) => '${d.month}월 ${d.day}일';
|
||||
|
||||
/// 일 · 월 · … · 토 (한 글자)
|
||||
String weekdayKo(DateTime d) => _kWeekdaysKo[d.weekday - 1];
|
||||
|
||||
/// 해당 월의 일 수 (윤년 반영)
|
||||
int daysInMonth(int year, int month) => DateTime(year, month + 1, 0).day;
|
||||
|
||||
/// ISO 날짜 문자열(2021-09-14) ↔ DateTime — 저장·전송용
|
||||
String toIsoDate(DateTime d) => '${d.year}-${_pad2(d.month)}-${_pad2(d.day)}';
|
||||
|
||||
DateTime parseIsoDate(String iso) {
|
||||
final parts = iso.split('-').map(int.parse).toList();
|
||||
return DateTime(parts[0], parts[1], parts[2]);
|
||||
}
|
||||
|
||||
/// 기록한 날 표기 — 오늘 · 어제 · N일 전(일주일 안) · 그 밖은 2026.09.14 (시안 relWhen)
|
||||
String relativeDayLabel(DateTime date, DateTime today) {
|
||||
final diff = DateTime.utc(today.year, today.month, today.day)
|
||||
.difference(DateTime.utc(date.year, date.month, date.day))
|
||||
.inDays;
|
||||
if (diff == 0) return '오늘';
|
||||
if (diff == 1) return '어제';
|
||||
if (diff > 1 && diff < 7) return '$diff일 전';
|
||||
return formatYmd(date);
|
||||
}
|
||||
|
||||
/// 주소 등 바깥에서 받은 값 — 형식이 틀리면 null
|
||||
DateTime? parseIsoDateOrNull(String? iso) {
|
||||
final m = RegExp(r'^(\d{4})-(\d{2})-(\d{2})$').firstMatch(iso ?? '');
|
||||
if (m == null) return null;
|
||||
return DateTime(int.parse(m.group(1)!), int.parse(m.group(2)!), int.parse(m.group(3)!));
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
/// 하루 안의 시각(시·분) — 저장은 24시간제 "HH:mm", 화면은 "오전 9:00"
|
||||
class HourMinute implements Comparable<HourMinute> {
|
||||
const HourMinute(this.hour, this.minute);
|
||||
|
||||
/// 자정부터의 분 → 시각 (하루를 넘으면 다음 날로 돌린다)
|
||||
factory HourMinute.fromMinutes(int minutes) {
|
||||
final m = minutes % _kMinutesPerDay;
|
||||
return HourMinute(m ~/ 60, m % 60);
|
||||
}
|
||||
|
||||
final int hour;
|
||||
final int minute;
|
||||
|
||||
int get totalMinutes => hour * 60 + minute;
|
||||
|
||||
bool get isAm => hour < 12;
|
||||
|
||||
/// 12시간제의 시 (0시·12시 → 12)
|
||||
int get hour12 => hour % 12 == 0 ? 12 : hour % 12;
|
||||
|
||||
/// "09:00" — 저장용
|
||||
String get hhmm => '${_pad(hour)}:${_pad(minute)}';
|
||||
|
||||
/// "오전 9:00" — 화면 표시용 (시안 fmtAP)
|
||||
String get label => '${isAm ? '오전' : '오후'} $hour12:${_pad(minute)}';
|
||||
|
||||
/// "HH:mm" → 시각. 형식이 틀리면 null
|
||||
static HourMinute? tryParse(String? text) {
|
||||
final m = RegExp(r'^(\d{1,2}):(\d{2})$').firstMatch(text?.trim() ?? '');
|
||||
if (m == null) return null;
|
||||
final h = int.parse(m.group(1)!);
|
||||
final min = int.parse(m.group(2)!);
|
||||
if (h > 23 || min > 59) return null;
|
||||
return HourMinute(h, min);
|
||||
}
|
||||
|
||||
@override
|
||||
int compareTo(HourMinute other) => totalMinutes - other.totalMinutes;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) => other is HourMinute && other.totalMinutes == totalMinutes;
|
||||
|
||||
@override
|
||||
int get hashCode => totalMinutes;
|
||||
|
||||
@override
|
||||
String toString() => hhmm;
|
||||
}
|
||||
|
||||
const int _kMinutesPerDay = 24 * 60;
|
||||
|
||||
String _pad(int n) => n.toString().padLeft(2, '0');
|
||||
@@ -0,0 +1,30 @@
|
||||
import 'package:flutter/animation.dart';
|
||||
|
||||
/// 전체 시간축 [elapsed] 에서 [start] 부터 [duration] 동안의 진행률(0~1).
|
||||
/// 시작 전은 0, 끝난 뒤는 1 — CSS `animation-fill-mode: both` 와 같다.
|
||||
double segmentProgress(double elapsed, double start, double duration) {
|
||||
if (duration <= 0) return elapsed >= start ? 1 : 0;
|
||||
return ((elapsed - start) / duration).clamp(0.0, 1.0);
|
||||
}
|
||||
|
||||
/// CSS `@keyframes` 보간. [stops] 는 0~1 오름차순 위치, [values] 는 각 위치의 값이다.
|
||||
/// CSS 와 마찬가지로 [curve] 는 전체가 아니라 **키프레임 구간마다** 적용된다.
|
||||
double keyframeValue(
|
||||
double t,
|
||||
List<double> stops,
|
||||
List<double> values, {
|
||||
Curve curve = Curves.linear,
|
||||
}) {
|
||||
assert(stops.length == values.length && stops.length >= 2);
|
||||
if (t <= stops.first) return values.first;
|
||||
for (var i = 0; i < stops.length - 1; i++) {
|
||||
final from = stops[i];
|
||||
final to = stops[i + 1];
|
||||
if (t <= to) {
|
||||
final local = to == from ? 1.0 : (t - from) / (to - from);
|
||||
final eased = curve.transform(local);
|
||||
return values[i] + (values[i + 1] - values[i]) * eased;
|
||||
}
|
||||
}
|
||||
return values.last;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/// 한글 음절 범위 (가 ~ 힣)
|
||||
const int _kHangulStart = 0xAC00;
|
||||
const int _kHangulEnd = 0xD7A3;
|
||||
const int _kJongseongCount = 28;
|
||||
|
||||
/// 마지막 글자에 받침이 있는지 — 한글이 아니면 false (예: 영문 이름은 '를' 로 붙인다)
|
||||
bool hasFinalConsonant(String word) {
|
||||
if (word.isEmpty) return false;
|
||||
final code = word.runes.last;
|
||||
if (code < _kHangulStart || code > _kHangulEnd) return false;
|
||||
return (code - _kHangulStart) % _kJongseongCount != 0;
|
||||
}
|
||||
|
||||
/// 목적격 조사 — 콩이를 · 초코를 · 보리를 / 루비를 · 사랑을
|
||||
String withObjectParticle(String word) => '$word${hasFinalConsonant(word) ? '을' : '를'}';
|
||||
|
||||
/// 공동격 조사 — 콩이와 / 사랑과
|
||||
String withAndParticle(String word) => '$word${hasFinalConsonant(word) ? '과' : '와'}';
|
||||
|
||||
/// 주격 조사 — 콩이가 / 사랑이
|
||||
String withSubjectParticle(String word) => '$word${hasFinalConsonant(word) ? '이' : '가'}';
|
||||
@@ -0,0 +1,184 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:tma_app/core/constants/app_colors.dart';
|
||||
import 'package:tma_app/core/constants/app_sizes.dart';
|
||||
import 'package:tma_app/core/router/app_routes.dart';
|
||||
import 'package:tma_app/core/theme/app_typography.dart';
|
||||
import 'package:tma_app/core/utils/date_format.dart';
|
||||
import 'package:tma_app/features/archive/presentation/widgets/archive_widgets.dart';
|
||||
import 'package:tma_app/features/diary/presentation/providers/diary_providers.dart';
|
||||
import 'package:tma_app/features/pet/domain/pet.dart';
|
||||
import 'package:tma_app/features/pet/presentation/providers/pet_providers.dart';
|
||||
import 'package:tma_app/features/pet/presentation/widgets/pet_avatar.dart';
|
||||
import 'package:tma_app/shared/widgets/grayscale.dart';
|
||||
import 'package:tma_app/shared/widgets/icons/rup_icon.dart';
|
||||
import 'package:tma_app/shared/widgets/rup_card.dart';
|
||||
import 'package:tma_app/shared/widgets/sub_page_header.dart';
|
||||
import 'package:tma_app/shared/widgets/tab_sub_page.dart';
|
||||
|
||||
const double _kNormal = AppTypography.normalHeight;
|
||||
|
||||
/// 목록의 아이 사진은 조금 더 바랜다 (시안 grayscale(.35) · opacity .92)
|
||||
const double _kRowFade = .35;
|
||||
const double _kRowOpacity = .92;
|
||||
|
||||
/// 추억 보관함 — 보관된 아이 목록
|
||||
class ArchiveListPage extends ConsumerWidget {
|
||||
const ArchiveListPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final pets = (ref.watch(petListProvider).value ?? const <Pet>[]).archived;
|
||||
final book = ref.watch(diaryBookProvider);
|
||||
final textTheme = Theme.of(context).textTheme;
|
||||
|
||||
return TabSubPage(
|
||||
children: [
|
||||
ScreenPadding(
|
||||
child: SubPageHeader(
|
||||
title: '추억 보관함',
|
||||
subtitle: '${pets.length}마리',
|
||||
titleLeading: const MemoryMark(size: 18),
|
||||
bottomGap: AppSpacing.lg,
|
||||
onBack: () => context.pop(),
|
||||
),
|
||||
),
|
||||
ScreenPadding(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(AppSpacing.xs, 0, AppSpacing.xs, 14),
|
||||
child: Text(
|
||||
'먼저 떠난 아이를 삭제하지 않고 보관해요. 아이를 누르면 함께한 다이어리와 펫 명함을 다시 볼 수 있어요.',
|
||||
style: textTheme.bodySmall!.copyWith(fontSize: 12.5, color: AppColors.muted, height: 1.55),
|
||||
),
|
||||
),
|
||||
),
|
||||
ScreenPadding(
|
||||
child: RupCard(
|
||||
child: pets.isEmpty
|
||||
? const _Empty()
|
||||
: Column(
|
||||
children: [
|
||||
for (final (i, p) in pets.indexed)
|
||||
_ArchivedPetRow(
|
||||
pet: p,
|
||||
postCount: book.postCountOf(p.id),
|
||||
first: i == 0,
|
||||
onTap: () => unawaited(context.push(AppRoutes.archivedPet(p.id))),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: AppSpacing.md),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _Empty extends StatelessWidget {
|
||||
const _Empty();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: AppSpacing.xl, vertical: 34),
|
||||
child: Opacity(
|
||||
opacity: .8,
|
||||
child: Column(
|
||||
children: [
|
||||
const Opacity(opacity: .7, child: MemoryMark(size: 30)),
|
||||
const SizedBox(height: AppSpacing.sm),
|
||||
Text(
|
||||
'보관된 아이가 없어요',
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.memory,
|
||||
height: _kNormal,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 보관된 아이 한 줄 — 바랜 사진 · 이름 · 종 · 기록 수 · 함께한 기간
|
||||
class _ArchivedPetRow extends StatelessWidget {
|
||||
const _ArchivedPetRow({required this.pet, required this.postCount, required this.first, required this.onTap});
|
||||
|
||||
final Pet pet;
|
||||
final int postCount;
|
||||
final bool first;
|
||||
final VoidCallback onTap;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final textTheme = Theme.of(context).textTheme;
|
||||
final archive = pet.archive;
|
||||
final kind = pet.breed.isEmpty ? pet.species : '${pet.species} · ${pet.breed}';
|
||||
return Semantics(
|
||||
container: true,
|
||||
button: true,
|
||||
child: GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: AppSpacing.lg, vertical: 13),
|
||||
decoration: BoxDecoration(
|
||||
border: first ? null : const Border(top: BorderSide(color: AppColors.line2)),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Opacity(
|
||||
opacity: _kRowOpacity,
|
||||
child: Grayscale(amount: _kRowFade, child: PetAvatar(pet: pet, size: 46)),
|
||||
),
|
||||
const SizedBox(width: AppSpacing.md),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
pet.name,
|
||||
style: textTheme.titleSmall!.copyWith(fontSize: 15.5, height: _kNormal),
|
||||
),
|
||||
Text(
|
||||
'$kind · 기록 $postCount개',
|
||||
style: textTheme.bodySmall!.copyWith(fontSize: 12.5, color: AppColors.memory, height: _kNormal),
|
||||
),
|
||||
if (archive != null) ...[
|
||||
const SizedBox(height: 3),
|
||||
Row(
|
||||
children: [
|
||||
RupIcon(
|
||||
RupIconName.calendar,
|
||||
size: 12,
|
||||
stroke: 2,
|
||||
color: AppColors.memory.withValues(alpha: .8),
|
||||
),
|
||||
const SizedBox(width: AppSpacing.xs),
|
||||
Flexible(
|
||||
child: Text(
|
||||
'${formatYmd(archive.from)} ~ ${formatYmd(archive.to)}',
|
||||
style: textTheme.bodySmall!.copyWith(color: AppColors.muted, height: _kNormal),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
RupIcon(RupIconName.chevR, size: 17, color: AppColors.memory.withValues(alpha: .7)),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:tma_app/core/constants/app_colors.dart';
|
||||
import 'package:tma_app/core/constants/app_sizes.dart';
|
||||
import 'package:tma_app/core/router/app_routes.dart';
|
||||
import 'package:tma_app/features/archive/presentation/widgets/archive_widgets.dart';
|
||||
import 'package:tma_app/features/pet/presentation/providers/pet_providers.dart';
|
||||
import 'package:tma_app/features/pet_card/presentation/providers/pet_card_providers.dart';
|
||||
import 'package:tma_app/features/pet_card/presentation/widgets/name_card.dart';
|
||||
import 'package:tma_app/features/pet_card/presentation/widgets/pet_id_card.dart';
|
||||
import 'package:tma_app/shared/widgets/rup_card.dart';
|
||||
import 'package:tma_app/shared/widgets/section_title.dart';
|
||||
import 'package:tma_app/shared/widgets/tab_sub_page.dart';
|
||||
|
||||
/// 보관된 아이의 펫 명함 — 간략 명함 목록, 누르면 상세
|
||||
class ArchivedCardsPage extends ConsumerWidget {
|
||||
const ArchivedCardsPage({super.key, required this.petId});
|
||||
|
||||
final String petId;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final pet = ref.watch(petByIdProvider(petId));
|
||||
if (pet == null || !pet.isArchived) return const ArchiveMissingPage();
|
||||
final cards = ref.watch(cardsOfPetProvider(pet.id));
|
||||
|
||||
return TabSubPage(
|
||||
children: [
|
||||
ScreenPadding(
|
||||
child: ArchiveSubHeader(
|
||||
title: '펫 명함',
|
||||
petName: pet.name,
|
||||
// 시안: 안내 문구가 머리 아래 18 에서 8 을 당겨 붙는다
|
||||
bottomGap: cards.isEmpty ? 18 : 18 - AppSpacing.sm,
|
||||
),
|
||||
),
|
||||
if (cards.isEmpty)
|
||||
const ScreenPadding(child: RupCard(child: EmptyMessage('만든 펫 명함이 없어요')))
|
||||
else ...[
|
||||
ScreenPadding(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(AppSpacing.xs, 0, AppSpacing.xs, 14),
|
||||
child: Text(
|
||||
'명함을 누르면 상세 펫 명함을 볼 수 있어요.',
|
||||
style: Theme.of(context).textTheme.bodySmall!.copyWith(
|
||||
fontSize: 12.5,
|
||||
color: AppColors.muted,
|
||||
height: 1.55,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
for (final (i, c) in cards.indexed) ...[
|
||||
if (i > 0) const SizedBox(height: AppSpacing.md),
|
||||
ScreenPadding(
|
||||
child: GestureDetector(
|
||||
onTap: () => unawaited(context.push(AppRoutes.archivedPetCard(pet.id, c.id))),
|
||||
child: NameCard(pet: pet, style: c.style),
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
const SizedBox(height: 14),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 보관된 아이의 펫 명함 상세 — 보기만 한다 (공유·수정·대표 지정 없음)
|
||||
class ArchivedCardDetailPage extends ConsumerWidget {
|
||||
const ArchivedCardDetailPage({super.key, required this.petId, required this.cardId});
|
||||
|
||||
final String petId;
|
||||
final String cardId;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final pet = ref.watch(petByIdProvider(petId));
|
||||
if (pet == null || !pet.isArchived) return const ArchiveMissingPage();
|
||||
final card = ref.watch(cardsOfPetProvider(pet.id)).where((c) => c.id == cardId).firstOrNull;
|
||||
|
||||
return TabSubPage(
|
||||
children: [
|
||||
ScreenPadding(child: ArchiveSubHeader(title: pet.name, petName: pet.name)),
|
||||
if (card == null)
|
||||
const ScreenPadding(child: RupCard(child: EmptyMessage('만든 펫 명함이 없어요')))
|
||||
else
|
||||
ScreenPadding(child: PetIdCard(pet: pet, style: card.style)),
|
||||
const SizedBox(height: 14),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:tma_app/core/router/app_routes.dart';
|
||||
import 'package:tma_app/features/archive/presentation/widgets/archive_widgets.dart';
|
||||
import 'package:tma_app/features/diary/presentation/providers/diary_providers.dart';
|
||||
import 'package:tma_app/features/diary/presentation/widgets/diary_cover.dart';
|
||||
import 'package:tma_app/features/pet/presentation/providers/pet_providers.dart';
|
||||
import 'package:tma_app/shared/widgets/rup_card.dart';
|
||||
import 'package:tma_app/shared/widgets/section_title.dart';
|
||||
import 'package:tma_app/shared/widgets/tab_sub_page.dart';
|
||||
|
||||
/// 보관된 아이와 함께한 다이어리 — 표지를 누르면 읽기 전용 피드
|
||||
class ArchivedDiariesPage extends ConsumerWidget {
|
||||
const ArchivedDiariesPage({super.key, required this.petId});
|
||||
|
||||
final String petId;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final pet = ref.watch(petByIdProvider(petId));
|
||||
if (pet == null || !pet.isArchived) return const ArchiveMissingPage();
|
||||
final book = ref.watch(diaryBookProvider);
|
||||
final diaries = book.diariesOf(pet.id);
|
||||
|
||||
return TabSubPage(
|
||||
children: [
|
||||
ScreenPadding(
|
||||
child: ArchiveSubHeader(
|
||||
title: diaries.isEmpty ? '다이어리' : '다이어리 · ${diaries.length}권',
|
||||
petName: pet.name,
|
||||
),
|
||||
),
|
||||
ScreenPadding(
|
||||
child: diaries.isEmpty
|
||||
? const RupCard(child: EmptyMessage('함께한 다이어리가 없어요'))
|
||||
: DiaryGrid(
|
||||
children: [
|
||||
for (final d in diaries)
|
||||
DiaryCoverTile(
|
||||
diary: d,
|
||||
postCount: book.countOf(d.id),
|
||||
showTargets: false,
|
||||
onTap: () => unawaited(context.push(AppRoutes.archivedPetDiary(pet.id, d.id))),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 14),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:tma_app/core/constants/app_colors.dart';
|
||||
import 'package:tma_app/core/constants/app_sizes.dart';
|
||||
import 'package:tma_app/core/theme/app_typography.dart';
|
||||
import 'package:tma_app/features/archive/presentation/widgets/archive_widgets.dart';
|
||||
import 'package:tma_app/features/pet/presentation/providers/pet_providers.dart';
|
||||
import 'package:tma_app/features/pet/presentation/widgets/pet_avatar.dart';
|
||||
import 'package:tma_app/features/pet/presentation/widgets/pet_info_sections.dart';
|
||||
import 'package:tma_app/shared/widgets/grayscale.dart';
|
||||
import 'package:tma_app/shared/widgets/rup_card.dart';
|
||||
import 'package:tma_app/shared/widgets/tab_sub_page.dart';
|
||||
|
||||
/// 보관된 아이의 원래 정보 — 기본·건강 정보를 읽기 전용으로
|
||||
class ArchivedPetInfoPage extends ConsumerWidget {
|
||||
const ArchivedPetInfoPage({super.key, required this.petId});
|
||||
|
||||
final String petId;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final pet = ref.watch(petByIdProvider(petId));
|
||||
if (pet == null || !pet.isArchived) return const ArchiveMissingPage();
|
||||
|
||||
final textTheme = Theme.of(context).textTheme;
|
||||
return TabSubPage(
|
||||
children: [
|
||||
ScreenPadding(child: ArchiveSubHeader(title: '${pet.name}의 정보', petName: pet.name)),
|
||||
ScreenPadding(
|
||||
child: RupCard(
|
||||
padding: const EdgeInsets.all(18),
|
||||
child: Row(
|
||||
children: [
|
||||
Grayscale(amount: kArchiveFade, child: PetAvatar(pet: pet, size: 64)),
|
||||
const SizedBox(width: 14),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
pet.name,
|
||||
style: const TextStyle(
|
||||
fontFamily: AppFonts.display,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontSize: 22,
|
||||
height: 1,
|
||||
color: AppColors.ink,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 5),
|
||||
Text(
|
||||
pet.breed.isEmpty ? pet.species : '${pet.species} · ${pet.breed}',
|
||||
style: textTheme.bodySmall!.copyWith(
|
||||
fontSize: 13,
|
||||
color: AppColors.muted,
|
||||
height: AppTypography.normalHeight,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
...petInfoSections(pet),
|
||||
const SizedBox(height: AppSpacing.xs),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,412 @@
|
||||
import 'dart:async';
|
||||
import 'dart:ui' show ImageFilter;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:tma_app/core/constants/app_colors.dart';
|
||||
import 'package:tma_app/core/constants/app_sizes.dart';
|
||||
import 'package:tma_app/core/router/app_routes.dart';
|
||||
import 'package:tma_app/core/theme/app_shadows.dart';
|
||||
import 'package:tma_app/core/theme/app_typography.dart';
|
||||
import 'package:tma_app/core/utils/date_format.dart';
|
||||
import 'package:tma_app/features/archive/presentation/providers/archive_actions.dart';
|
||||
import 'package:tma_app/features/archive/presentation/widgets/archive_widgets.dart';
|
||||
import 'package:tma_app/features/pet/domain/pet.dart';
|
||||
import 'package:tma_app/features/pet/domain/pet_archive.dart';
|
||||
import 'package:tma_app/features/pet/presentation/providers/pet_providers.dart';
|
||||
import 'package:tma_app/features/pet_card/presentation/providers/pet_card_providers.dart';
|
||||
import 'package:tma_app/shared/widgets/icons/rup_icon.dart';
|
||||
import 'package:tma_app/shared/widgets/rup_card.dart';
|
||||
import 'package:tma_app/shared/widgets/section_title.dart';
|
||||
import 'package:tma_app/shared/widgets/sub_page_header.dart';
|
||||
import 'package:tma_app/shared/widgets/tab_sub_page.dart';
|
||||
|
||||
const double _kNormal = AppTypography.normalHeight;
|
||||
const double _kHeroMinHeight = 200;
|
||||
|
||||
/// 사진 위 글씨가 읽히게 아래로 갈수록 어두워지는 막 (시안 linear-gradient)
|
||||
const List<Color> _kHeroShade = [Color(0x0D000000), Color(0x6B000000), Color(0xC7000000)];
|
||||
const List<double> _kHeroShadeStops = [.3, .62, 1];
|
||||
const List<Shadow> _kHeroTextShadow = [Shadow(color: Color(0x66000000), blurRadius: 10, offset: Offset(0, 1))];
|
||||
|
||||
/// 보관된 아이 — 메모리얼 사진, 추억 기록, 둘러보기, 다시 불러오기
|
||||
class ArchivedPetPage extends ConsumerWidget {
|
||||
const ArchivedPetPage({super.key, required this.petId});
|
||||
|
||||
final String petId;
|
||||
|
||||
Future<void> _restore(BuildContext context, WidgetRef ref) async {
|
||||
await ref.read(archiveActionsProvider).restore(petId);
|
||||
if (context.mounted) context.go(AppRoutes.archive);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final pet = ref.watch(petByIdProvider(petId));
|
||||
final archive = pet?.archive;
|
||||
if (pet == null || archive == null) return const ArchiveMissingPage();
|
||||
|
||||
final cardCount = ref.watch(cardsOfPetProvider(pet.id)).length;
|
||||
final textTheme = Theme.of(context).textTheme;
|
||||
|
||||
return TabSubPage(
|
||||
children: [
|
||||
ScreenPadding(
|
||||
child: SubPageHeader(
|
||||
title: pet.name,
|
||||
subtitle: '추억 보관함',
|
||||
titleLeading: const MemoryMark(size: 17),
|
||||
onBack: () => context.pop(),
|
||||
),
|
||||
),
|
||||
ScreenPadding(child: _MemorialHero(pet: pet, archive: archive)),
|
||||
const DividerBand(),
|
||||
ScreenPadding(child: _MemoryRecord(archive: archive)),
|
||||
const DividerBand(top: 18),
|
||||
const ScreenPadding(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: AppSpacing.xs),
|
||||
child: SectionTitle(title: '둘러보기'),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
ScreenPadding(
|
||||
child: RupCard(
|
||||
child: Column(
|
||||
children: [
|
||||
_BrowseRow(
|
||||
first: true,
|
||||
icon: const RupIcon(RupIconName.paw, size: 18, color: AppColors.memory),
|
||||
title: '원래 정보',
|
||||
sub: '기본·건강 정보를 다시 봐요.',
|
||||
onTap: () => unawaited(context.push(AppRoutes.archivedPetInfo(pet.id))),
|
||||
),
|
||||
_BrowseRow(
|
||||
icon: const RupGlyphIcon(RupGlyph.petCard, size: 19, color: AppColors.memory),
|
||||
title: '펫 명함',
|
||||
sub: cardCount > 0 ? '함께한 펫 명함 $cardCount개' : '만든 펫 명함이 없어요',
|
||||
onTap: () => unawaited(context.push(AppRoutes.archivedPetCards(pet.id))),
|
||||
),
|
||||
_BrowseRow(
|
||||
icon: const RupGlyphIcon(RupGlyph.diary, size: 17, color: AppColors.memory),
|
||||
title: '다이어리',
|
||||
sub: '함께한 날들을 다시 봐요.',
|
||||
onTap: () => unawaited(context.push(AppRoutes.archivedPetDiaries(pet.id))),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 44),
|
||||
Center(
|
||||
child: Semantics(
|
||||
button: true,
|
||||
child: GestureDetector(
|
||||
onTap: () => unawaited(_restore(context, ref)),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const RupIcon(RupIconName.repeat, size: 17, stroke: 2.2, color: AppColors.memory),
|
||||
const SizedBox(width: 6),
|
||||
Text(
|
||||
'${pet.name} 다시 불러오기',
|
||||
style: textTheme.bodyMedium!.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: AppColors.memory,
|
||||
height: _kNormal,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: AppSpacing.md),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 메모리얼 머리 — 바랜 사진 위에 이름과 함께한 기간
|
||||
class _MemorialHero extends StatelessWidget {
|
||||
const _MemorialHero({required this.pet, required this.archive});
|
||||
|
||||
final Pet pet;
|
||||
final PetArchive archive;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final textTheme = Theme.of(context).textTheme;
|
||||
final kind = pet.breed.isEmpty ? pet.species : '${pet.species} · ${pet.breed}';
|
||||
return Container(
|
||||
constraints: const BoxConstraints(minHeight: _kHeroMinHeight),
|
||||
decoration: BoxDecoration(borderRadius: BorderRadius.circular(AppRadius.card), boxShadow: AppShadows.sm),
|
||||
clipBehavior: Clip.antiAlias,
|
||||
child: Stack(
|
||||
children: [
|
||||
Positioned.fill(child: ArchivedPhoto(pet: pet)),
|
||||
const Positioned.fill(
|
||||
child: DecoratedBox(
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: _kHeroShade,
|
||||
stops: _kHeroShadeStops,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
constraints: const BoxConstraints(minHeight: _kHeroMinHeight),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 20),
|
||||
alignment: Alignment.bottomLeft,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
pet.name,
|
||||
style: const TextStyle(
|
||||
fontFamily: AppFonts.display,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontSize: 25,
|
||||
height: 1.1,
|
||||
color: Colors.white,
|
||||
shadows: _kHeroTextShadow,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: AppSpacing.xs),
|
||||
Text(
|
||||
kind,
|
||||
style: textTheme.bodyMedium!.copyWith(
|
||||
fontSize: 13,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.white.withValues(alpha: .92),
|
||||
height: _kNormal,
|
||||
shadows: const [Shadow(color: Color(0x66000000), blurRadius: 8, offset: Offset(0, 1))],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 9),
|
||||
_GlassChip(text: '${archive.spanLabel} 함께했어요'),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 사진 위의 반투명 알약 (시안 backdrop-filter blur 6)
|
||||
class _GlassChip extends StatelessWidget {
|
||||
const _GlassChip({required this.text});
|
||||
|
||||
final String text;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ClipRRect(
|
||||
borderRadius: BorderRadius.circular(AppRadius.pill),
|
||||
child: BackdropFilter(
|
||||
filter: ImageFilter.blur(sigmaX: 6, sigmaY: 6),
|
||||
child: Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 13, vertical: 6),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white.withValues(alpha: .18),
|
||||
borderRadius: BorderRadius.circular(AppRadius.pill),
|
||||
border: Border.all(color: Colors.white.withValues(alpha: .32)),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const MemoryMark(size: 14, color: Colors.white),
|
||||
const SizedBox(width: 6),
|
||||
Text(
|
||||
text,
|
||||
style: Theme.of(context).textTheme.bodySmall!.copyWith(
|
||||
fontSize: 12.5,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: Colors.white,
|
||||
height: _kNormal,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 추억 기록 — 함께한 기간 · 보호자 메모 (읽기 전용)
|
||||
class _MemoryRecord extends StatelessWidget {
|
||||
const _MemoryRecord({required this.archive});
|
||||
|
||||
final PetArchive archive;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final textTheme = Theme.of(context).textTheme;
|
||||
final value = textTheme.bodyMedium!.copyWith(
|
||||
fontSize: 14.5,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: AppColors.ink,
|
||||
height: _kNormal,
|
||||
);
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: AppSpacing.xs),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
const SectionTitle(title: '추억 기록'),
|
||||
const SizedBox(height: AppSpacing.xs),
|
||||
_InfoRow(
|
||||
first: true,
|
||||
icon: RupIconName.calendar,
|
||||
label: '함께한 기간',
|
||||
child: Text.rich(
|
||||
TextSpan(children: [
|
||||
TextSpan(text: '${formatYmd(archive.from)} '),
|
||||
TextSpan(
|
||||
text: '~',
|
||||
style: value.copyWith(fontWeight: FontWeight.w600, color: AppColors.muted),
|
||||
),
|
||||
TextSpan(text: ' ${formatYmd(archive.to)}'),
|
||||
]),
|
||||
style: value,
|
||||
),
|
||||
),
|
||||
if (archive.memo case final memo?)
|
||||
_InfoRow(
|
||||
icon: RupIconName.text,
|
||||
label: '보호자 메모',
|
||||
child: Text(
|
||||
memo,
|
||||
style: textTheme.bodyMedium!.copyWith(fontWeight: FontWeight.w500, color: AppColors.ink2, height: 1.6),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _InfoRow extends StatelessWidget {
|
||||
const _InfoRow({required this.icon, required this.label, required this.child, this.first = false});
|
||||
|
||||
final RupIconName icon;
|
||||
final String label;
|
||||
final Widget child;
|
||||
final bool first;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(vertical: 13),
|
||||
decoration: BoxDecoration(
|
||||
border: first ? null : const Border(top: BorderSide(color: AppColors.line2)),
|
||||
),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 36,
|
||||
height: 36,
|
||||
decoration: BoxDecoration(
|
||||
// 시안 color-mix(tint, #fff 85%)
|
||||
color: Color.lerp(AppColors.memory, Colors.white, .85),
|
||||
borderRadius: BorderRadius.circular(11),
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: RupIcon(icon, size: 18, stroke: 2, color: AppColors.memory),
|
||||
),
|
||||
const SizedBox(width: AppSpacing.md),
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(top: 1),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
label,
|
||||
style: Theme.of(context).textTheme.bodySmall!.copyWith(
|
||||
fontSize: 11.5,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: AppColors.muted,
|
||||
letterSpacing: .115,
|
||||
height: _kNormal,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 3),
|
||||
child,
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 둘러보기 한 줄 — 보라 타일 아이콘 + 제목 + 설명
|
||||
class _BrowseRow extends StatelessWidget {
|
||||
const _BrowseRow({
|
||||
required this.icon,
|
||||
required this.title,
|
||||
required this.sub,
|
||||
required this.onTap,
|
||||
this.first = false,
|
||||
});
|
||||
|
||||
final Widget icon;
|
||||
final String title;
|
||||
final String sub;
|
||||
final VoidCallback onTap;
|
||||
final bool first;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final textTheme = Theme.of(context).textTheme;
|
||||
return Semantics(
|
||||
container: true,
|
||||
button: true,
|
||||
child: GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: AppSpacing.lg, vertical: 15),
|
||||
decoration: BoxDecoration(
|
||||
border: first ? null : const Border(top: BorderSide(color: AppColors.line2)),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Container(
|
||||
width: 38,
|
||||
height: 38,
|
||||
decoration: BoxDecoration(color: AppColors.memory50, borderRadius: BorderRadius.circular(11)),
|
||||
alignment: Alignment.center,
|
||||
child: icon,
|
||||
),
|
||||
const SizedBox(width: 13),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(title, style: textTheme.titleSmall!.copyWith(fontSize: 15.5, height: _kNormal)),
|
||||
const SizedBox(height: 1),
|
||||
Text(sub, style: textTheme.bodySmall!.copyWith(color: AppColors.muted, height: _kNormal)),
|
||||
],
|
||||
),
|
||||
),
|
||||
const RupIcon(RupIconName.chevR, size: 17, color: AppColors.muted),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,302 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:tma_app/core/constants/app_colors.dart';
|
||||
import 'package:tma_app/core/constants/app_sizes.dart';
|
||||
import 'package:tma_app/core/router/app_routes.dart';
|
||||
import 'package:tma_app/core/theme/app_shadows.dart';
|
||||
import 'package:tma_app/core/theme/app_typography.dart';
|
||||
import 'package:tma_app/core/utils/date_format.dart';
|
||||
import 'package:tma_app/core/utils/korean.dart';
|
||||
import 'package:tma_app/features/archive/presentation/providers/archive_actions.dart';
|
||||
import 'package:tma_app/features/archive/presentation/widgets/archive_widgets.dart';
|
||||
import 'package:tma_app/features/pet/domain/pet.dart';
|
||||
import 'package:tma_app/features/pet/domain/pet_archive.dart';
|
||||
import 'package:tma_app/features/pet/presentation/providers/pet_providers.dart';
|
||||
import 'package:tma_app/shared/widgets/date_picker_sheet.dart';
|
||||
import 'package:tma_app/shared/widgets/icons/rup_icon.dart';
|
||||
import 'package:tma_app/shared/widgets/pressable.dart';
|
||||
import 'package:tma_app/shared/widgets/rup_form_fields.dart';
|
||||
import 'package:tma_app/shared/widgets/rup_toast.dart';
|
||||
import 'package:tma_app/shared/widgets/sub_page_header.dart';
|
||||
|
||||
const double _kNormal = AppTypography.normalHeight;
|
||||
const double _kHeroHeight = 168;
|
||||
const double _kMemoMinHeight = 84;
|
||||
|
||||
/// 바닥 버튼 아래 여백 (시안 padding-bottom 30 — 홈 인디케이터 자리)
|
||||
const double _kBarBottom = 30;
|
||||
|
||||
/// 추억 보관함으로 옮기기 — 함께한 기간과 메모를 남기고 보관한다
|
||||
class PetArchiveMovePage extends ConsumerStatefulWidget {
|
||||
const PetArchiveMovePage({super.key, required this.petId});
|
||||
|
||||
final String petId;
|
||||
|
||||
@override
|
||||
ConsumerState<PetArchiveMovePage> createState() => _PetArchiveMovePageState();
|
||||
}
|
||||
|
||||
class _PetArchiveMovePageState extends ConsumerState<PetArchiveMovePage> {
|
||||
final _memo = TextEditingController();
|
||||
DateTime? _from;
|
||||
late DateTime _to = dateOnly(DateTime.now());
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_memo.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void _alert(String text) => ref.read(toastProvider.notifier).show(text, icon: RupIconName.alert);
|
||||
|
||||
Future<void> _pickFrom(Pet pet, DateTime from) async {
|
||||
final v = await showBirthDatePicker(context, initial: from, title: '${withAndParticle(pet.name)} 함께한 날');
|
||||
if (v == null || !mounted) return;
|
||||
if (v.isAfter(_to)) {
|
||||
_alert('함께한 첫날은 마지막 날보다 늦을 수 없어요');
|
||||
return;
|
||||
}
|
||||
setState(() => _from = v);
|
||||
}
|
||||
|
||||
Future<void> _pickTo(Pet pet, DateTime from) async {
|
||||
final v = await showBirthDatePicker(context, initial: _to, title: '${withObjectParticle(pet.name)} 떠나보낸 날');
|
||||
if (v == null || !mounted) return;
|
||||
if (v.isBefore(from)) {
|
||||
_alert('마지막 날은 함께한 첫날보다 빠를 수 없어요');
|
||||
return;
|
||||
}
|
||||
if (v.isAfter(dateOnly(DateTime.now()))) {
|
||||
_alert('오늘 이후의 날짜는 고를 수 없어요');
|
||||
return;
|
||||
}
|
||||
setState(() => _to = v);
|
||||
}
|
||||
|
||||
Future<void> _submit(Pet pet, DateTime from) async {
|
||||
final memo = _memo.text.trim();
|
||||
await ref.read(archiveActionsProvider).archive(
|
||||
pet.id,
|
||||
PetArchive(from: from, to: _to, archivedAt: DateTime.now(), memo: memo.isEmpty ? null : memo),
|
||||
);
|
||||
if (mounted) context.go(AppRoutes.myPage);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final pet = ref.watch(petByIdProvider(widget.petId));
|
||||
// 이미 보관했거나 지워진 아이 — 옮긴 직후 한 프레임 등
|
||||
if (pet == null || pet.isArchived) return const Scaffold(body: SizedBox.shrink());
|
||||
|
||||
final from = _from ?? pet.birthDate;
|
||||
final textTheme = Theme.of(context).textTheme;
|
||||
final label = textTheme.bodySmall!.copyWith(
|
||||
fontSize: 13,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: AppColors.ink2,
|
||||
height: _kNormal,
|
||||
);
|
||||
|
||||
return Scaffold(
|
||||
body: Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: SafeArea(
|
||||
bottom: false,
|
||||
child: ListView(
|
||||
keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag,
|
||||
padding: const EdgeInsets.fromLTRB(AppSpacing.xl, AppSpacing.xs, AppSpacing.xl, AppSpacing.xl),
|
||||
children: [
|
||||
SubPageHeader(
|
||||
title: '${withObjectParticle(pet.name)} 추억 보관함으로',
|
||||
subtitle: '함께한 시간을 소중히 보관해 둘게요',
|
||||
onBack: () => context.pop(),
|
||||
),
|
||||
Container(
|
||||
height: _kHeroHeight,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(AppRadius.card),
|
||||
boxShadow: AppShadows.sm,
|
||||
),
|
||||
clipBehavior: Clip.antiAlias,
|
||||
child: ArchivedPhoto(pet: pet),
|
||||
),
|
||||
// 시안: 사진 아래 18 + 제목 위 24 (세로 flex 라 겹치지 않는다)
|
||||
const SizedBox(height: 42),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 2),
|
||||
child: Text('${withAndParticle(pet.name)} 함께한 기간을 알려주세요', style: label),
|
||||
),
|
||||
const SizedBox(height: 11),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: _DateButton(
|
||||
label: '함께한 첫날',
|
||||
value: from,
|
||||
onTap: () => unawaited(_pickFrom(pet, from)),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 9),
|
||||
child: Text(
|
||||
'~',
|
||||
style: textTheme.bodyMedium!.copyWith(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: AppColors.muted,
|
||||
height: _kNormal,
|
||||
),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: _DateButton(label: '마지막 날', value: _to, onTap: () => unawaited(_pickTo(pet, from))),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 9),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 2),
|
||||
child: Text(
|
||||
'${withAndParticle(pet.name)} ${togetherSpan(from, _to)} 함께했어요',
|
||||
style: textTheme.bodySmall!.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.memory,
|
||||
height: _kNormal,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 2),
|
||||
child: Text.rich(
|
||||
TextSpan(children: [
|
||||
TextSpan(text: '${withAndParticle(pet.name)} 함께한 시간을 남겨주세요 '),
|
||||
TextSpan(
|
||||
text: '(선택)',
|
||||
style: label.copyWith(fontSize: 12, fontWeight: FontWeight.w600, color: AppColors.muted),
|
||||
),
|
||||
]),
|
||||
style: label,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 9),
|
||||
RupTextField(
|
||||
controller: _memo,
|
||||
multiline: true,
|
||||
minHeight: _kMemoMinHeight,
|
||||
hintText: '고마웠던 순간, 기억하고 싶은 이야기를 자유롭게 적어주세요',
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
const RupIcon(RupIconName.check, size: 15, stroke: 2.2, color: AppColors.accent),
|
||||
const SizedBox(width: 6),
|
||||
Flexible(
|
||||
child: Text(
|
||||
'보관 후에도 추억 보관함에서 언제든 다시 볼 수 있어요',
|
||||
textAlign: TextAlign.center,
|
||||
style: textTheme.bodySmall!.copyWith(color: AppColors.muted, height: 1.5),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
_BottomBar(label: '추억 보관함으로 옮기기', onTap: () => unawaited(_submit(pet, from))),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 날짜 칸 — 작은 제목 + 달력 아이콘 + 날짜
|
||||
class _DateButton extends StatelessWidget {
|
||||
const _DateButton({required this.label, required this.value, required this.onTap});
|
||||
|
||||
final String label;
|
||||
final DateTime value;
|
||||
final VoidCallback onTap;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final textTheme = Theme.of(context).textTheme;
|
||||
return Pressable(
|
||||
onTap: onTap,
|
||||
semanticLabel: '$label ${formatYmd(value)}',
|
||||
child: Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 10),
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.surface,
|
||||
borderRadius: BorderRadius.circular(14),
|
||||
border: Border.all(color: AppColors.line, width: 1.5),
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
label,
|
||||
style: textTheme.bodySmall!.copyWith(
|
||||
fontSize: 11,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: AppColors.muted,
|
||||
height: _kNormal,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 2),
|
||||
Row(
|
||||
children: [
|
||||
const RupIcon(RupIconName.calendar, size: 15, stroke: 2, color: AppColors.memory),
|
||||
const SizedBox(width: 6),
|
||||
Flexible(
|
||||
child: Text(
|
||||
formatYmd(value),
|
||||
maxLines: 1,
|
||||
style: textTheme.bodyMedium!.copyWith(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: AppColors.ink,
|
||||
height: _kNormal,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 화면 바닥에 붙은 주황 버튼 — 모서리 없이 가로 끝까지
|
||||
class _BottomBar extends StatelessWidget {
|
||||
const _BottomBar({required this.label, required this.onTap});
|
||||
|
||||
final String label;
|
||||
final VoidCallback onTap;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final inset = MediaQuery.paddingOf(context).bottom;
|
||||
return Semantics(
|
||||
button: true,
|
||||
child: GestureDetector(
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
color: AppColors.primary,
|
||||
padding: EdgeInsets.only(top: AppSpacing.lg, bottom: inset > _kBarBottom ? inset : _kBarBottom),
|
||||
alignment: Alignment.center,
|
||||
child: Text(label, style: AppTypography.button(16, color: Colors.white)),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:tma_app/features/pet/domain/pet_archive.dart';
|
||||
import 'package:tma_app/features/pet/presentation/providers/pet_providers.dart';
|
||||
import 'package:tma_app/features/schedule/presentation/providers/schedule_providers.dart';
|
||||
import 'package:tma_app/shared/widgets/rup_toast.dart';
|
||||
|
||||
/// 추억 보관함 — 옮기기 / 다시 불러오기
|
||||
class ArchiveActions {
|
||||
ArchiveActions(this._ref);
|
||||
|
||||
final Ref _ref;
|
||||
|
||||
/// 아이를 보관함으로 옮긴다. 일정은 지우고(여러 아이 일정이면 그 아이만 뗀다),
|
||||
/// 다이어리·펫 명함·정보는 그대로 두어 보관함에서 다시 볼 수 있게 한다.
|
||||
Future<void> archive(String petId, PetArchive archive) async {
|
||||
await _ref.read(petListProvider.notifier).archivePet(petId, archive);
|
||||
await _ref.read(scheduleProvider.notifier).dropTarget(petId);
|
||||
_ref.read(toastProvider.notifier).show('추억보관함에 보관했어요.', tone: ToastTone.memory);
|
||||
}
|
||||
|
||||
/// 보관함에서 다시 불러온다 — 지운 일정은 돌아오지 않는다
|
||||
Future<void> restore(String petId) async {
|
||||
await _ref.read(petListProvider.notifier).restorePet(petId);
|
||||
_ref.read(toastProvider.notifier).show('다시 불러왔어요');
|
||||
}
|
||||
}
|
||||
|
||||
final archiveActionsProvider = Provider<ArchiveActions>(ArchiveActions.new);
|
||||
@@ -0,0 +1,90 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:tma_app/core/constants/app_assets.dart';
|
||||
import 'package:tma_app/core/constants/app_colors.dart';
|
||||
import 'package:tma_app/core/router/app_routes.dart';
|
||||
import 'package:tma_app/features/pet/domain/pet.dart';
|
||||
import 'package:tma_app/features/pet/presentation/widgets/pet_photo_image.dart';
|
||||
import 'package:tma_app/shared/widgets/grayscale.dart';
|
||||
import 'package:tma_app/shared/widgets/icons/rup_icon.dart';
|
||||
import 'package:tma_app/shared/widgets/section_title.dart';
|
||||
import 'package:tma_app/shared/widgets/sub_page_header.dart';
|
||||
import 'package:tma_app/shared/widgets/tab_sub_page.dart';
|
||||
|
||||
/// 보관된 아이 사진의 빛바램 (시안 grayscale(.3))
|
||||
const double kArchiveFade = .3;
|
||||
|
||||
/// 사진이 없을 때 칸 바탕 (시안 rgba(0,0,0,.04))
|
||||
const Color _kEmptyPhotoTint = Color(0x0A000000);
|
||||
|
||||
/// 추억 보관함 표시 — 보라 구름
|
||||
class MemoryMark extends StatelessWidget {
|
||||
const MemoryMark({super.key, required this.size, this.color = AppColors.memory});
|
||||
|
||||
final double size;
|
||||
final Color color;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => RupGlyphIcon(RupGlyph.memory, size: size, color: color);
|
||||
}
|
||||
|
||||
/// 보관된 아이의 하위 화면 머리 — 부제에 "콩이 · 추억 보관함"
|
||||
class ArchiveSubHeader extends StatelessWidget {
|
||||
const ArchiveSubHeader({super.key, required this.title, required this.petName, this.onBack, this.bottomGap = 18});
|
||||
|
||||
final String title;
|
||||
final String petName;
|
||||
|
||||
/// 없으면 한 단계 뒤로
|
||||
final VoidCallback? onBack;
|
||||
final double bottomGap;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SubPageHeader(
|
||||
title: title,
|
||||
subtitle: '$petName · 추억 보관함',
|
||||
subtitleLeading: const MemoryMark(size: 12),
|
||||
onBack: onBack ?? () => context.pop(),
|
||||
bottomGap: bottomGap,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 보관된 아이 사진을 가득 채워 빛바래게 — 사진이 없으면 기본 그림
|
||||
class ArchivedPhoto extends StatelessWidget {
|
||||
const ArchivedPhoto({super.key, required this.pet});
|
||||
|
||||
final Pet pet;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final photo = pet.photoPath;
|
||||
return Grayscale(
|
||||
amount: kArchiveFade,
|
||||
child: photo == null
|
||||
? ColoredBox(
|
||||
// 시안 image-slot: 화면 바탕 위에 rgba(0,0,0,.04)
|
||||
color: Color.alphaBlend(_kEmptyPhotoTint, AppColors.bg),
|
||||
child: SvgPicture.asset(AppAssets.petDefault, fit: BoxFit.cover),
|
||||
)
|
||||
: PetPhotoImage(path: photo),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 보관함에서 찾는 아이가 없을 때 — 다시 불러왔거나 잘못된 주소
|
||||
class ArchiveMissingPage extends StatelessWidget {
|
||||
const ArchiveMissingPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return TabSubPage(
|
||||
children: [
|
||||
ScreenPadding(child: SubPageHeader(title: '추억 보관함', onBack: () => context.go(AppRoutes.archive))),
|
||||
const EmptyMessage('보관된 아이가 없어요', padding: 60),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:tma_app/core/storage/preferences_provider.dart';
|
||||
import 'package:tma_app/features/auth/domain/social_provider.dart';
|
||||
|
||||
/// 로그인 세션 관리 계약.
|
||||
/// 실제 구현은 소셜 SDK 로 받은 토큰을 백엔드 인증 API 에 넘기고,
|
||||
/// 발급받은 JWT 를 flutter_secure_storage(kJwtTokenKey)에 저장한다.
|
||||
abstract interface class AuthRepository {
|
||||
/// 저장된 세션이 있는지 (앱 시작 시 진입 화면 결정에 쓴다)
|
||||
bool get hasSession;
|
||||
|
||||
/// 인사말에 쓰는 이름 — 소셜 계정 프로필에서 받는다. 모르면 null
|
||||
String? get nickname;
|
||||
|
||||
/// 로그인한 소셜 계정 종류 — 로그인 전이면 null
|
||||
SocialProvider? get provider;
|
||||
|
||||
Future<void> signIn(SocialProvider provider);
|
||||
|
||||
Future<void> signOut();
|
||||
}
|
||||
|
||||
const String _kDemoSessionKey = 'auth.demoSession';
|
||||
|
||||
/// 임시 구현 — 백엔드 인증 API 와 소셜 SDK(앱 키 필요)가 준비되기 전까지
|
||||
/// 버튼을 누르면 곧바로 로그인된 것으로 처리한다. 토큰은 만들지 않는다.
|
||||
class DemoAuthRepository implements AuthRepository {
|
||||
DemoAuthRepository(this._prefs);
|
||||
|
||||
final SharedPreferences _prefs;
|
||||
|
||||
@override
|
||||
bool get hasSession => _prefs.containsKey(_kDemoSessionKey);
|
||||
|
||||
/// 소셜 프로필을 받지 않으므로 이름을 알 수 없다
|
||||
@override
|
||||
String? get nickname => null;
|
||||
|
||||
@override
|
||||
SocialProvider? get provider =>
|
||||
SocialProvider.values.asNameMap()[_prefs.getString(_kDemoSessionKey)];
|
||||
|
||||
@override
|
||||
Future<void> signIn(SocialProvider provider) async {
|
||||
await _prefs.setString(_kDemoSessionKey, provider.name);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> signOut() async {
|
||||
await _prefs.remove(_kDemoSessionKey);
|
||||
}
|
||||
}
|
||||
|
||||
final authRepositoryProvider = Provider<AuthRepository>((ref) {
|
||||
return DemoAuthRepository(ref.watch(sharedPreferencesProvider));
|
||||
});
|
||||
@@ -0,0 +1,12 @@
|
||||
/// 지원하는 소셜 로그인 제공자
|
||||
enum SocialProvider {
|
||||
naver('네이버'),
|
||||
kakao('카카오'),
|
||||
google('구글'),
|
||||
apple('Apple');
|
||||
|
||||
const SocialProvider(this.label);
|
||||
|
||||
/// 화면 표기 — "카카오 계정으로 로그인했어요"
|
||||
final String label;
|
||||
}
|
||||
@@ -0,0 +1,181 @@
|
||||
import 'dart:math' as math;
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:tma_app/core/api/api_exception.dart';
|
||||
import 'package:tma_app/core/constants/app_assets.dart';
|
||||
import 'package:tma_app/core/constants/app_colors.dart';
|
||||
import 'package:tma_app/core/constants/app_sizes.dart';
|
||||
import 'package:tma_app/core/router/app_routes.dart';
|
||||
import 'package:tma_app/features/auth/domain/social_provider.dart';
|
||||
import 'package:tma_app/features/auth/presentation/widgets/social_login_button.dart';
|
||||
import 'package:tma_app/features/entry/presentation/providers/entry_provider.dart';
|
||||
import 'package:tma_app/shared/widgets/design_art_box.dart';
|
||||
import 'package:tma_app/shared/widgets/pressable.dart';
|
||||
|
||||
/// 일러스트 묶음 — 낚싯대(50,358) · 고양이(218,435)
|
||||
const Size _kArtSize = Size(327, 179);
|
||||
|
||||
/// 인사말과 버튼 사이 남는 공간에서 묶음이 놓이는 위치 (시안 좌표에서 역산)
|
||||
const Alignment _kArtAlignment = Alignment(.33, .68);
|
||||
|
||||
/// 시안: 버튼 묶음은 화면 아래에서 76 (홈 인디케이터 34 포함)
|
||||
/// 시안: 인사말은 화면 위에서 96, 버튼 묶음은 화면 아래에서 76 (.rup-login__head / __btns)
|
||||
const double _kHeadTop = 96;
|
||||
const double _kButtonsBottom = 76;
|
||||
const double _kButtonGap = 15;
|
||||
|
||||
/// 로그인 — 소셜 계정으로 가입/로그인한다.
|
||||
/// 성공하면 진입 상태가 바뀌고 라우터가 온보딩(첫 로그인) 또는 홈으로 보낸다.
|
||||
class LoginPage extends ConsumerStatefulWidget {
|
||||
const LoginPage({super.key});
|
||||
|
||||
@override
|
||||
ConsumerState<LoginPage> createState() => _LoginPageState();
|
||||
}
|
||||
|
||||
class _LoginPageState extends ConsumerState<LoginPage> {
|
||||
/// 진행 중인 로그인 — 중복 탭을 막는다
|
||||
SocialProvider? _pending;
|
||||
|
||||
Future<void> _signIn(SocialProvider provider) async {
|
||||
if (_pending != null) return;
|
||||
setState(() => _pending = provider);
|
||||
try {
|
||||
await ref.read(entryProvider.notifier).signIn(provider);
|
||||
} on DioException catch (e) {
|
||||
// 문구는 에러 사전(ApiException.message)에서만 온다 — 여기서 새로 만들지 않는다.
|
||||
// 전역 알림(토스트)을 도입하면 그쪽에서 띄우고, 화면은 code 로만 분기한다.
|
||||
if (e.error is! ApiException) rethrow;
|
||||
} finally {
|
||||
if (mounted) setState(() => _pending = null);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final textTheme = Theme.of(context).textTheme;
|
||||
final insets = MediaQuery.paddingOf(context);
|
||||
// 화면 가장자리 기준 위치를 따르되, 상태바·홈 인디케이터가 크면 그만큼 비켜 준다
|
||||
final headGap = math.max(_kHeadTop - insets.top - AppControlSize.navBarHeight, AppSpacing.xxl);
|
||||
final buttonsBottom = math.max(_kButtonsBottom, insets.bottom + AppSpacing.xl);
|
||||
return AnnotatedRegion<SystemUiOverlayStyle>(
|
||||
value: SystemUiOverlayStyle.dark,
|
||||
child: Scaffold(
|
||||
backgroundColor: AppColors.surface,
|
||||
body: SafeArea(
|
||||
bottom: false,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
_LoginNavBar(onBack: () => context.go(AppRoutes.intro)),
|
||||
Padding(
|
||||
padding: EdgeInsets.fromLTRB(AppSpacing.xl, headGap, AppSpacing.xl, 0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(AppAssets.loginPaw, width: 22, height: 22),
|
||||
const SizedBox(width: 9),
|
||||
Text('반가워요, 집사님!', style: textTheme.displaySmall),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 14),
|
||||
Text(
|
||||
'계속 이용하시려면 로그인이 필요해요.\n3초면 충분해요!',
|
||||
style: textTheme.bodyLarge!.copyWith(fontWeight: FontWeight.w700),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const Expanded(
|
||||
child: Align(alignment: _kArtAlignment, child: _LoginArt()),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.fromLTRB(AppSpacing.xl, AppSpacing.lg, AppSpacing.xl, buttonsBottom),
|
||||
child: Column(
|
||||
children: [
|
||||
for (final provider in SocialProvider.values) ...[
|
||||
if (provider != SocialProvider.values.first)
|
||||
const SizedBox(height: _kButtonGap),
|
||||
SocialLoginButton(
|
||||
provider: provider,
|
||||
onPressed: _pending == null ? () => _signIn(provider) : null,
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 상단 바 — 뒤로(인트로) + 가운데 제목
|
||||
class _LoginNavBar extends StatelessWidget {
|
||||
const _LoginNavBar({required this.onBack});
|
||||
|
||||
final VoidCallback onBack;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SizedBox(
|
||||
height: AppControlSize.navBarHeight,
|
||||
child: Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
Positioned(
|
||||
left: AppSpacing.md,
|
||||
child: Pressable(
|
||||
onTap: onBack,
|
||||
pressedScale: .9,
|
||||
semanticLabel: '뒤로',
|
||||
child: SizedBox.square(
|
||||
dimension: 36,
|
||||
child: Center(
|
||||
child: SvgPicture.asset(AppAssets.loginBack, width: 12, height: 12),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Text('로그인', style: Theme.of(context).textTheme.titleSmall),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _LoginArt extends StatelessWidget {
|
||||
const _LoginArt();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DesignArtBox(
|
||||
designSize: _kArtSize,
|
||||
children: [
|
||||
Positioned(
|
||||
left: 0,
|
||||
top: 0,
|
||||
width: 143,
|
||||
height: 103,
|
||||
child: SvgPicture.asset(AppAssets.loginWand),
|
||||
),
|
||||
Positioned(
|
||||
left: 168,
|
||||
top: 77,
|
||||
width: 159,
|
||||
height: 102,
|
||||
child: Image.asset(AppAssets.loginCat, fit: BoxFit.contain),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:tma_app/features/auth/data/repositories/auth_repository.dart';
|
||||
import 'package:tma_app/features/auth/domain/social_provider.dart';
|
||||
import 'package:tma_app/features/entry/presentation/providers/entry_provider.dart';
|
||||
import 'package:tma_app/features/mypage/data/profile_repository.dart';
|
||||
|
||||
/// 이름을 모를 때 부르는 호칭 — 로그인 화면의 "반가워요, 집사님!" 과 맞춘다
|
||||
const String kDefaultNickname = '집사';
|
||||
|
||||
/// 인사말에 쓰는 사용자 이름 — 앱에서 바꾼 닉네임 > 소셜 계정 이름 > 기본 호칭
|
||||
final userNicknameProvider = Provider<String>((ref) {
|
||||
ref.watch(entryProvider.select((s) => s.signedIn));
|
||||
return ref.watch(profileProvider).nickname ??
|
||||
ref.watch(authRepositoryProvider).nickname ??
|
||||
kDefaultNickname;
|
||||
});
|
||||
|
||||
/// 로그인한 소셜 계정 종류
|
||||
final signedInProviderProvider = Provider<SocialProvider?>((ref) {
|
||||
ref.watch(entryProvider.select((s) => s.signedIn));
|
||||
return ref.watch(authRepositoryProvider).provider;
|
||||
});
|
||||
@@ -0,0 +1,124 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:tma_app/core/constants/app_assets.dart';
|
||||
import 'package:tma_app/core/constants/app_colors.dart';
|
||||
import 'package:tma_app/core/constants/app_sizes.dart';
|
||||
import 'package:tma_app/features/auth/domain/social_provider.dart';
|
||||
import 'package:tma_app/shared/widgets/pressable.dart';
|
||||
|
||||
/// 시안 GoogleMark — 구글 4색 공식 마크
|
||||
const String _kGoogleMark = '''
|
||||
<svg viewBox="0 0 20 20"><path fill="#4285F4" d="M18 10.2c0-.6-.05-1.05-.16-1.52H10v2.87h4.55c-.09.76-.59 1.9-1.68 2.66l-.02.1 2.44 1.87.17.02C16.99 14.8 18 12.75 18 10.2Z"/><path fill="#34A853" d="M10 18c2.22 0 4.08-.72 5.46-1.96l-2.6-2c-.7.48-1.63.81-2.86.81a4.9 4.9 0 0 1-4.64-3.34l-.1.01-2.5 1.92-.03.09A9 9 0 0 0 10 18Z"/><path fill="#FBBC05" d="M5.36 11.51A5.4 5.4 0 0 1 5.06 10c0-.53.1-1.04.29-1.51l-.01-.1L2.8 6.44l-.08.04A8.9 8.9 0 0 0 1.8 10c0 1.28.32 2.48.92 3.52l2.64-2.01Z"/><path fill="#EA4335" d="M10 5.15c1.55 0 2.6.66 3.19 1.21l2.33-2.24C14.07 2.79 12.22 2 10 2a9 9 0 0 0-8.2 5.1l2.63 2.02A4.92 4.92 0 0 1 10 5.15Z"/></svg>
|
||||
''';
|
||||
|
||||
/// 로고 마크를 버튼 왼쪽 17 지점에 세로 가운데로 둔다 (.rup-login__mark)
|
||||
const double _kMarkInset = 17;
|
||||
const double _kMarkSize = 22;
|
||||
|
||||
/// 제공자별 버튼 모양 — 시안 .rup-login__btn--{naver,kakao,google,apple}
|
||||
class _SocialStyle {
|
||||
const _SocialStyle({
|
||||
required this.label,
|
||||
required this.background,
|
||||
required this.foreground,
|
||||
required this.mark,
|
||||
this.border,
|
||||
});
|
||||
|
||||
final String label;
|
||||
final Color background;
|
||||
final Color foreground;
|
||||
final Color? border;
|
||||
final Widget mark;
|
||||
}
|
||||
|
||||
_SocialStyle _styleOf(SocialProvider provider) {
|
||||
return switch (provider) {
|
||||
SocialProvider.naver => _SocialStyle(
|
||||
label: '네이버로 로그인',
|
||||
background: AppColors.naver,
|
||||
foreground: Colors.white,
|
||||
mark: SvgPicture.asset(AppAssets.markNaver, width: 17.1, height: 15),
|
||||
),
|
||||
SocialProvider.kakao => _SocialStyle(
|
||||
label: '카카오로 3초만에 시작하기',
|
||||
background: AppColors.kakao,
|
||||
foreground: AppColors.ink,
|
||||
mark: SvgPicture.asset(AppAssets.markKakao, width: 24, height: 20.63),
|
||||
),
|
||||
SocialProvider.google => _SocialStyle(
|
||||
label: '구글로 로그인',
|
||||
background: Colors.white,
|
||||
foreground: AppColors.ink,
|
||||
border: AppColors.googleBorder,
|
||||
mark: SvgPicture.string(
|
||||
_kGoogleMark,
|
||||
width: _kMarkSize,
|
||||
height: _kMarkSize,
|
||||
),
|
||||
),
|
||||
SocialProvider.apple => _SocialStyle(
|
||||
label: 'Apple로 로그인',
|
||||
background: AppColors.apple,
|
||||
foreground: Colors.white,
|
||||
mark: Image.asset(
|
||||
AppAssets.markApple,
|
||||
width: _kMarkSize,
|
||||
height: _kMarkSize,
|
||||
),
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
/// 소셜 로그인 버튼 — 높이 46 pill, 제공자 브랜드색
|
||||
class SocialLoginButton extends StatelessWidget {
|
||||
const SocialLoginButton({
|
||||
super.key,
|
||||
required this.provider,
|
||||
required this.onPressed,
|
||||
});
|
||||
|
||||
final SocialProvider provider;
|
||||
final VoidCallback? onPressed;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final style = _styleOf(provider);
|
||||
return Pressable(
|
||||
onTap: onPressed,
|
||||
pressedScale: 1,
|
||||
pressedBrightness: .95,
|
||||
semanticLabel: style.label,
|
||||
child: Container(
|
||||
height: AppControlSize.buttonHeight,
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: style.background,
|
||||
borderRadius: BorderRadius.circular(AppControlSize.buttonHeight / 2),
|
||||
border: style.border == null
|
||||
? null
|
||||
: Border.all(color: style.border!),
|
||||
),
|
||||
child: Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
Positioned(
|
||||
left: _kMarkInset,
|
||||
top: 0,
|
||||
bottom: 0,
|
||||
child: Center(child: style.mark),
|
||||
),
|
||||
Text(
|
||||
style.label,
|
||||
maxLines: 1,
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.labelLarge!
|
||||
.copyWith(color: style.foreground),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||