diff --git a/.gitignore b/.gitignore index 6d0d6a3..2fa4d78 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /sky_phone/source/html +.pnpm-store/ diff --git a/frontend/.gitignore b/frontend/.gitignore index 5d3c6e3..b482045 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -1,4 +1,6 @@ node_modules/ dist/ +.vite/ *.local +dev-server*.log diff --git a/frontend/eslint.config.ts b/frontend/eslint.config.ts index 2279af8..faefcab 100644 --- a/frontend/eslint.config.ts +++ b/frontend/eslint.config.ts @@ -5,7 +5,7 @@ import pluginVue from 'eslint-plugin-vue' export default defineConfigWithVueTs( { files: ['**/*.{ts,mts,tsx,vue}'], name: 'app/files-to-lint' }, - globalIgnores(['**/dist/**', 'testserver/**', 'build.cjs']), + globalIgnores(['**/.vite/**', '**/dist/**', 'testserver/**', 'build.cjs']), pluginVue.configs['flat/essential'], vueTsConfigs.recommended, skipFormatting, diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css index 42df43f..11569c8 100644 --- a/frontend/src/assets/main.css +++ b/frontend/src/assets/main.css @@ -1202,54 +1202,26 @@ button { opacity: 0.2; } -.banking-header { +.banking-navbar { + --k-safe-area-top: 46px; position: absolute; z-index: 5; top: 0; right: 0; left: 0; - display: flex; - align-items: center; - justify-content: space-between; - padding: 54px 22px 13px; - background: linear-gradient(to bottom, rgb(7 13 29 / 85%), transparent); -} - -.banking-header > div { - min-width: 0; -} - -.banking-header span { - display: block; - color: rgb(208 220 248 / 64%); - font-size: 11px; - letter-spacing: 0.03em; -} - -.banking-header h1 { - overflow: hidden; - margin: 2px 0 0; - font-size: 17px; - font-weight: 650; - letter-spacing: -0.02em; - text-overflow: ellipsis; - white-space: nowrap; + color: #fff; } .banking-profile { position: relative; display: grid; - width: 42px; - height: 42px; + width: 36px; + height: 36px; flex: 0 0 auto; place-items: center; - border: 1px solid rgb(255 255 255 / 16%); - border-radius: 15px; - background: linear-gradient(145deg, rgb(65 130 255 / 42%), rgb(19 35 78 / 48%)); - box-shadow: inset 0 1px rgb(255 255 255 / 18%), 0 9px 28px rgb(0 0 0 / 22%); + border-radius: 50%; + background: transparent; color: #dce9ff; - backdrop-filter: blur(18px) saturate(145%); - -webkit-backdrop-filter: blur(18px) saturate(145%); } .banking-profile .banking-spin { @@ -1297,30 +1269,8 @@ button { } .banking-balance { - position: relative; - overflow: hidden; padding: 22px 20px 20px; - border: 1px solid rgb(135 178 255 / 22%); border-radius: 27px; - background: - linear-gradient(145deg, rgb(50 106 218 / 38%), rgb(15 29 67 / 36%)), - rgb(255 255 255 / 3%); - box-shadow: inset 0 1px rgb(255 255 255 / 16%), 0 22px 52px rgb(0 0 0 / 26%); - backdrop-filter: blur(26px) saturate(150%); - -webkit-backdrop-filter: blur(26px) saturate(150%); -} - -.banking-balance::after { - position: absolute; - width: 150px; - height: 150px; - top: -92px; - right: -24px; - border-radius: 50%; - background: var(--bank-blue); - box-shadow: 0 0 68px 25px rgb(45 118 255 / 48%); - content: ''; - opacity: 0.25; } .banking-balance__label { @@ -1361,47 +1311,67 @@ button { .banking-actions { display: grid; - grid-template-columns: repeat(3, 1fr); + grid-template-columns: repeat(2, 1fr); gap: 9px; margin: 13px 0 18px; } -.banking-actions button { +.banking-action { display: flex; align-items: center; - flex-direction: column; - gap: 7px; - padding: 12px 5px 10px; - border: 1px solid rgb(255 255 255 / 10%); + justify-content: center; + gap: 8px; + min-height: 64px; + padding: 11px 12px; border-radius: 19px; - background: rgb(255 255 255 / 5.5%); - box-shadow: inset 0 1px rgb(255 255 255 / 9%); color: rgb(237 243 255 / 82%); font-size: 10px; - backdrop-filter: blur(17px); - -webkit-backdrop-filter: blur(17px); } -.banking-actions button span { +.banking-action__icon { display: grid; - width: 38px; - height: 38px; + width: 34px; + height: 34px; + flex: 0 0 auto; place-items: center; - border-radius: 13px; + border-radius: 11px; background: linear-gradient(145deg, rgb(60 129 255 / 34%), rgb(25 54 115 / 25%)); color: #8fb8ff; } +.banking-action b { + font-size: 11px; + font-weight: 610; +} + +.banking-action--primary { + grid-column: 1 / -1; + justify-content: flex-start; + min-height: 58px; + padding: 10px 13px; + color: #fff; +} + +.banking-action--primary .banking-action__icon { + background: rgb(255 255 255 / 15%); + color: #fff; +} + +.banking-action--primary svg:last-child { + margin-left: auto; + opacity: 0.78; +} + +.banking-action--secondary { + justify-content: flex-start; +} + .banking-card { margin: 0 0 18px !important; - padding: 16px !important; - border: 1px solid rgb(255 255 255 / 10%) !important; - border-radius: 24px !important; - background: linear-gradient(145deg, rgb(255 255 255 / 8%), rgb(255 255 255 / 3%)) !important; - box-shadow: inset 0 1px rgb(255 255 255 / 9%), 0 18px 38px rgb(0 0 0 / 18%) !important; - color: #fff !important; - backdrop-filter: blur(24px) saturate(140%); - -webkit-backdrop-filter: blur(24px) saturate(140%); +} + +.banking-transaction-card { + overflow: hidden; } .banking-section-title { @@ -1425,140 +1395,22 @@ button { font-size: 10px; } -.banking-account-row { - display: flex; - align-items: center; - gap: 12px; - padding: 12px; - border-radius: 17px; +.banking-account-list, +.banking-transaction-list { + margin: 0 !important; } -.banking-account-row + .banking-account-row { margin-top: 7px; } - -.banking-account-row--primary { - position: relative; - overflow: hidden; - border: 1px solid rgb(125 174 255 / 17%); - background: linear-gradient(120deg, rgb(37 103 230 / 38%), rgb(36 72 143 / 15%)); -} - -.banking-account-row > span:first-child { - display: grid; - width: 36px; - height: 36px; - flex: 0 0 auto; - place-items: center; - border-radius: 12px; - background: rgb(255 255 255 / 9%); - color: #9fc0ff; -} - -.banking-account-row div { - display: flex; - min-width: 0; - flex: 1; - flex-direction: column; -} - -.banking-account-row small { - color: rgb(216 227 250 / 54%); - font-size: 9px; -} - -.banking-account-row strong { - margin-top: 2px; - font-size: 16px; - font-weight: 620; -} - -.banking-card-mark { - position: relative; - width: 32px !important; - background: transparent !important; -} - -.banking-card-mark::before, -.banking-card-mark::after { - position: absolute; - width: 20px; - height: 20px; - top: 8px; - border-radius: 50%; - background: rgb(255 255 255 / 64%); - content: ''; -} - -.banking-card-mark::before { left: 0; } -.banking-card-mark::after { right: 0; background: rgb(120 164 255 / 65%); } - .banking-transactions { padding: 0 3px; } .banking-transactions--all { margin-top: 18px; } -.banking-transaction-list { - overflow: hidden; - border: 1px solid rgb(255 255 255 / 8%); - border-radius: 22px; - background: rgb(255 255 255 / 3.5%); - backdrop-filter: blur(18px); - -webkit-backdrop-filter: blur(18px); -} - -.banking-transaction { - display: flex; - align-items: center; - gap: 11px; - padding: 12px; -} - -.banking-transaction + .banking-transaction { - border-top: 1px solid rgb(255 255 255 / 6%); -} - -.banking-transaction > span { - display: grid; - width: 36px; - height: 36px; - flex: 0 0 auto; - place-items: center; - border-radius: 12px; - background: rgb(255 106 120 / 10%); - color: #ff8793; -} - -.banking-transaction > span.is-incoming { - background: rgb(78 230 164 / 10%); - color: var(--bank-green); -} - -.banking-transaction > div { - display: flex; - min-width: 0; - flex: 1; - flex-direction: column; -} - -.banking-transaction strong { - overflow: hidden; - font-size: 11px; - font-weight: 570; - text-overflow: ellipsis; - white-space: nowrap; -} - -.banking-transaction small { - margin-top: 2px; - color: rgb(210 221 245 / 43%); - font-size: 8px; -} - -.banking-transaction b { +.banking-transaction-list b { flex: 0 0 auto; color: #f2a0a8; font-size: 11px; font-weight: 620; } -.banking-transaction b.is-incoming { color: var(--bank-green); } +.banking-transaction-list b.is-incoming { color: var(--bank-green); } .banking-no-transactions { padding: 24px 12px; @@ -1570,39 +1422,6 @@ button { text-align: center; } -.banking-tabbar { - position: absolute; - z-index: 10; - right: 16px; - bottom: 22px; - left: 16px; - width: auto; - padding: 0; -} - -.banking-tabbar__background { - border: 1px solid rgb(255 255 255 / 13%); - border-radius: 24px; - background: rgb(14 22 45 / 72%); - box-shadow: inset 0 1px rgb(255 255 255 / 12%), 0 16px 48px rgb(0 0 0 / 48%); - backdrop-filter: blur(30px) saturate(165%); - -webkit-backdrop-filter: blur(30px) saturate(165%); -} - -.banking-tabbar__inner { - gap: 4px; - padding: 7px; -} - -.banking-tabbar .k-link { - color: rgb(210 222 247 / 48%); - font-size: 10px; -} - -.banking-tabbar .k-tabbar-link-active { - color: #93b9ff; -} - .banking-activity-hero { display: flex; align-items: center; @@ -1693,30 +1512,10 @@ button { font-size: 8px; } -.banking-modal-backdrop { - position: absolute; - z-index: 30; - inset: 0; - display: flex; - align-items: flex-end; - padding: 14px 14px 20px; - background: rgb(0 3 12 / 58%); - backdrop-filter: blur(9px); - -webkit-backdrop-filter: blur(9px); -} - -.banking-modal { +.banking-sheet__content { position: relative; width: 100%; padding: 22px 18px 18px; - border: 1px solid rgb(255 255 255 / 14%); - border-radius: 29px; - background: - radial-gradient(circle at 16% 0%, rgb(47 117 255 / 24%), transparent 42%), - rgb(13 22 45 / 92%); - box-shadow: inset 0 1px rgb(255 255 255 / 14%), 0 24px 70px rgb(0 0 0 / 55%); - backdrop-filter: blur(34px) saturate(165%); - -webkit-backdrop-filter: blur(34px) saturate(165%); } .banking-modal__close { @@ -1742,75 +1541,30 @@ button { box-shadow: 0 12px 28px rgb(22 76 196 / 36%), inset 0 1px rgb(255 255 255 / 28%); } -.banking-modal h2 { +.banking-sheet__content h2 { margin: 14px 0 4px; font-size: 20px; letter-spacing: -0.035em; } -.banking-modal > p { +.banking-sheet__content > p { margin: 0 0 15px; color: rgb(213 225 248 / 52%); font-size: 10px; line-height: 1.45; } -.banking-modal label { - display: block; - margin-top: 11px; -} +.banking-form-list { margin: 12px 0 0 !important; } -.banking-modal label > span { - display: block; - margin: 0 0 6px 4px; - color: rgb(218 229 251 / 62%); - font-size: 9px; -} - -.banking-modal input { - width: 100%; - height: 48px; - padding: 0 14px; - border: 1px solid rgb(255 255 255 / 10%); - border-radius: 15px; - outline: none; - background: rgb(255 255 255 / 5%); - color: #fff; - font-size: 14px; -} - -.banking-modal input:focus { - border-color: rgb(72 137 255 / 62%); - box-shadow: 0 0 0 3px rgb(45 118 255 / 11%); -} - -.banking-amount-input { position: relative; } - -.banking-amount-input i { - position: absolute; - top: 50%; - left: 14px; - color: #7faaff; - font-size: 15px; - font-style: normal; - transform: translateY(-50%); -} - -.banking-amount-input input { padding-left: 31px; } - -.banking-modal .banking-form-error { +.banking-sheet__content .banking-form-error { margin: 10px 3px 0; color: #ff8b98; font-size: 9px; } -.banking-modal > button:last-child { - margin-top: 15px; - background: linear-gradient(135deg, #397fff, #1a55d1) !important; - box-shadow: 0 12px 28px rgb(25 78 190 / 30%); -} +.banking-sheet__content > button:last-child { margin-top: 15px; } -.banking-modal > button:last-child > span { +.banking-sheet__content > button:last-child > span { display: flex; align-items: center; justify-content: center; diff --git a/frontend/src/views/apps/BankingApp.vue b/frontend/src/views/apps/BankingApp.vue index 14d020f..c9c7fc4 100644 --- a/frontend/src/views/apps/BankingApp.vue +++ b/frontend/src/views/apps/BankingApp.vue @@ -2,10 +2,18 @@ import { kButton, kCard, + kGlass, + kIcon, + kList, + kListInput, + kListItem, + kNavbar, kPage, kPreloader, + kSheet, kTabbar, kTabbarLink, + kToolbarPane, } from 'konsta/vue' import { ArrowDownLeft, @@ -162,27 +170,29 @@ onMounted(() => void banking.load()) - + diff --git a/sky_phone/source/html/index.html b/sky_phone/source/html/index.html index 4ee8e94..6bc38b4 100644 --- a/sky_phone/source/html/index.html +++ b/sky_phone/source/html/index.html @@ -4,8 +4,8 @@ Sky Phone - - + +