diff --git a/README.md b/README.md index ec2fe8d..428972a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # sky_phone -Standalone FiveM phone built with Vue 3, TypeScript, Pinia, Vue Router, Konsta UI 5, and Tailwind CSS 4. Each non-stackable `sky_phone` item receives a unique 15-digit IMEI and owns its server-persisted device state. The phone opens through the usable item; `/phone` is disabled unless `Config.Phone.DevelopmentCommand` is enabled explicitly. +Standalone FiveM phone built with Vue 3, TypeScript, Pinia, Vue Router, Konsta UI 5, and Tailwind CSS 4. Each non-stackable `phone` item receives a unique 15-digit IMEI and owns its server-persisted device state. The phone opens through the usable item; `/phone` is disabled unless `Config.Phone.DevelopmentCommand` is enabled explicitly. An iFruit account is optional. Unlinked devices retain local settings, alarms, media, apps, notes, contacts, and recent calls. Linking from Mail or Settings moves local data into an empty cloud account; an existing cloud dataset wins over local contacts and recents. Signing out keeps an editable local snapshot without deleting cloud data. @@ -8,7 +8,7 @@ An iFruit account is optional. Unlinked devices retain local settings, alarms, m - ESX Legacy (`es_extended`), Qbox (`qbx_core`), or QBCore (`qb-core`). The bridge selects a running supported framework when `Config.Bridge.Framework` is set to `"auto"`. - A supported inventory: `ox_inventory`, `qb-inventory`, `lj-inventory`, `qs-inventory`, `codem-inventory`, `core_inventory`, `mf-inventory`, or `smx-inventory`. The bridge auto-detects a running provider and normalizes metadata, slots, counts, item mutations, and usable-item callbacks. `mf-inventory` and `smx-inventory` require ESX. Because SMX stores standard ESX items as stacks, its adapter persists one active Phone/SIM metadata record per player and item type in ESX player metadata. -- A non-stackable inventory item named `sky_phone`. +- A non-stackable inventory item named `phone`. - Two unique, non-stackable inventory items named `sky_phone_sim_registered` and `sky_phone_sim_anonymous`. Their metadata is initialized automatically on first use, so shops and crafting recipes add plain items without supplying a number. - `oxmysql` with MySQL/MariaDB. - `pma-voice` when `Config.Calls.VoiceProvider` is set to `"pma"`. @@ -49,7 +49,7 @@ For `ox_inventory`, configure all three items with `stack = false` and `consume Example `ox_inventory/data/items.lua` entries: ```lua -["sky_phone"] = { +["phone"] = { label = "iFruit Phone", weight = 200, stack = false, diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css index cc0bbb3..bfede2a 100644 --- a/frontend/src/assets/main.css +++ b/frontend/src/assets/main.css @@ -627,7 +627,9 @@ button { color: #fff !important; --status-bar-color: #fff; } -.app-icon--darkchat { background: #050507; } +.app-icon--darkchat { + background: #050507; +} .darkchat-page { --dc-purple: #8b5cf6; --dc-purple-dark: #5b21b6; @@ -642,18 +644,29 @@ button { overflow: hidden; background: #000; color: #f5f5f7; - font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", sans-serif; + font-family: + -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', sans-serif; } .darkchat-page button, .darkchat-page input, .darkchat-page textarea, -.darkchat-page select { font: inherit; } -.darkchat-page button { color: inherit; } +.darkchat-page select { + font: inherit; +} +.darkchat-page button { + color: inherit; +} .darkchat-page input, .darkchat-page textarea, -.darkchat-page select { color: #f5f5f7; } -.darkchat-page button:disabled { opacity: .34; } -.darkchat-page button:active:not(:disabled) { transform: scale(.96); } +.darkchat-page select { + color: #f5f5f7; +} +.darkchat-page button:disabled { + opacity: 0.34; +} +.darkchat-page button:active:not(:disabled) { + transform: scale(0.96); +} .darkchat-round { width: 39px; height: 39px; @@ -664,10 +677,18 @@ button { border: 1px solid var(--dc-border); border-radius: 50%; background: var(--dc-surface); - transition: transform .14s ease, background .2s ease; + transition: + transform 0.14s ease, + background 0.2s ease; +} +.darkchat-round--large { + width: 43px; + height: 43px; +} +.darkchat-round.active { + background: var(--dc-purple); + border-color: var(--dc-purple); } -.darkchat-round--large { width: 43px; height: 43px; } -.darkchat-round.active { background: var(--dc-purple); border-color: var(--dc-purple); } .darkchat-glass-action { width: 44px; height: 44px; @@ -678,9 +699,12 @@ button { border-radius: 50%; color: #f5f5f7; line-height: 0; - transition: transform .14s ease; + transition: transform 0.14s ease; +} +.darkchat-glass-action--large { + width: 48px; + height: 48px; } -.darkchat-glass-action--large { width: 48px; height: 48px; } .darkchat-glass-action--pill { width: 68px; border-radius: 22px; @@ -693,11 +717,16 @@ button { height: 46px; border-color: #3a3a3c; background: linear-gradient(145deg, rgb(44 44 46 / 96%), rgb(28 28 30 / 92%)); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 9%), 0 5px 18px rgb(0 0 0 / 42%); + box-shadow: + inset 0 1px 0 rgb(255 255 255 / 9%), + 0 5px 18px rgb(0 0 0 / 42%); color: #fff; line-height: 0; } -.darkchat-back svg { display: block; margin: 0; } +.darkchat-back svg { + display: block; + margin: 0; +} .darkchat-pill { width: 54px; min-width: 54px; @@ -727,9 +756,21 @@ button { background: linear-gradient(145deg, var(--dc-purple), var(--dc-purple-dark)); box-shadow: 0 18px 45px rgb(91 33 182 / 40%); } -.darkchat-gate h1 { margin: 21px 0 8px; font-size: 27px; } -.darkchat-gate p { margin: 0; color: #d1d1d6; font-size: 14px; line-height: 1.45; } -.darkchat-gate small { margin-top: 13px; color: var(--dc-muted); font-size: 11px; } +.darkchat-gate h1 { + margin: 21px 0 8px; + font-size: 27px; +} +.darkchat-gate p { + margin: 0; + color: #d1d1d6; + font-size: 14px; + line-height: 1.45; +} +.darkchat-gate small { + margin-top: 13px; + color: var(--dc-muted); + font-size: 11px; +} .darkchat-loader { width: 27px; height: 27px; @@ -737,13 +778,24 @@ button { border: 3px solid rgb(139 92 246 / 25%); border-top-color: var(--dc-purple); border-radius: 50%; - animation: darkchat-spin .7s linear infinite; + animation: darkchat-spin 0.7s linear infinite; +} +.darkchat-loader--small { + width: 17px; + height: 17px; + border-width: 2px; } -.darkchat-loader--small { width: 17px; height: 17px; border-width: 2px; } .darkchat-inbox, .darkchat-sheet-page, -.darkchat-thread { height: 100%; padding: 44px 0 25px; box-sizing: border-box; } -.darkchat-inbox { display: flex; flex-direction: column; } +.darkchat-thread { + height: 100%; + padding: 44px 0 25px; + box-sizing: border-box; +} +.darkchat-inbox { + display: flex; + flex-direction: column; +} .darkchat-inbox__header, .darkchat-sheet-page > header, .darkchat-thread__header { @@ -756,9 +808,15 @@ button { background: #000; } .darkchat-inbox__header > strong, -.darkchat-sheet-page > header > strong { font-size: 17px; font-weight: 720; letter-spacing: -.2px; } +.darkchat-sheet-page > header > strong { + font-size: 17px; + font-weight: 720; + letter-spacing: -0.2px; +} .darkchat-inbox__header > :last-child, -.darkchat-sheet-page > header > :last-child { justify-self: end; } +.darkchat-sheet-page > header > :last-child { + justify-self: end; +} .darkchat-security-strip { height: 32px; margin: 0 15px 4px; @@ -772,9 +830,22 @@ button { color: #b9a3ff; font-size: 11px; } -.darkchat-security-strip span { flex: 1; } -.darkchat-security-strip button { padding: 0; border: 0; background: transparent; color: #b9a3ff; font-size: 10px; } -.darkchat-conversations { min-height: 0; flex: 1; padding: 3px 12px 76px; overflow-y: auto; } +.darkchat-security-strip span { + flex: 1; +} +.darkchat-security-strip button { + padding: 0; + border: 0; + background: transparent; + color: #b9a3ff; + font-size: 10px; +} +.darkchat-conversations { + min-height: 0; + flex: 1; + padding: 3px 12px 76px; + overflow-y: auto; +} .darkchat-conversation { position: relative; width: 100%; @@ -788,7 +859,7 @@ button { text-align: left; } .darkchat-conversation::after { - content: ""; + content: ''; position: absolute; right: 0; bottom: 0; @@ -818,19 +889,85 @@ button { font-weight: 800; text-shadow: 0 1px 7px rgb(0 0 0 / 35%); } -.darkchat-avatar--small { width: 37px; height: 37px; font-size: 18px; } -.darkchat-avatar--header { width: 39px; height: 39px; font-size: 18px; } -.darkchat-conversation__body { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 3px; } -.darkchat-conversation__body > span { display: flex; align-items: center; gap: 4px; } -.darkchat-conversation__body strong { min-width: 0; flex: 1; overflow: hidden; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; } -.darkchat-conversation__body time { color: var(--dc-muted); font-size: 11px; } -.darkchat-conversation__body svg { color: #636366; } -.darkchat-conversation__body small { overflow: hidden; color: var(--dc-muted); font-size: 13px; line-height: 1.3; text-overflow: ellipsis; white-space: nowrap; } -.darkchat-timer-icon { position: absolute; right: 4px; bottom: 7px; color: #a78bfa; } -.darkchat-empty { flex: 1; padding: 15px 40px 80px; display: flex; align-items: center; justify-content: center; flex-direction: column; text-align: center; } -.darkchat-empty > span { width: 57px; height: 57px; display: grid; place-items: center; border-radius: 20px; background: var(--dc-surface); color: var(--dc-purple); } -.darkchat-empty h2 { margin: 14px 0 5px; font-size: 18px; } -.darkchat-empty p { margin: 0; color: var(--dc-muted); font-size: 12px; line-height: 1.4; } +.darkchat-avatar--small { + width: 37px; + height: 37px; + font-size: 18px; +} +.darkchat-avatar--header { + width: 39px; + height: 39px; + font-size: 18px; +} +.darkchat-conversation__body { + min-width: 0; + flex: 1; + display: flex; + flex-direction: column; + gap: 3px; +} +.darkchat-conversation__body > span { + display: flex; + align-items: center; + gap: 4px; +} +.darkchat-conversation__body strong { + min-width: 0; + flex: 1; + overflow: hidden; + font-size: 15px; + text-overflow: ellipsis; + white-space: nowrap; +} +.darkchat-conversation__body time { + color: var(--dc-muted); + font-size: 11px; +} +.darkchat-conversation__body svg { + color: #636366; +} +.darkchat-conversation__body small { + overflow: hidden; + color: var(--dc-muted); + font-size: 13px; + line-height: 1.3; + text-overflow: ellipsis; + white-space: nowrap; +} +.darkchat-timer-icon { + position: absolute; + right: 4px; + bottom: 7px; + color: #a78bfa; +} +.darkchat-empty { + flex: 1; + padding: 15px 40px 80px; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + text-align: center; +} +.darkchat-empty > span { + width: 57px; + height: 57px; + display: grid; + place-items: center; + border-radius: 20px; + background: var(--dc-surface); + color: var(--dc-purple); +} +.darkchat-empty h2 { + margin: 14px 0 5px; + font-size: 18px; +} +.darkchat-empty p { + margin: 0; + color: var(--dc-muted); + font-size: 12px; + line-height: 1.4; +} .darkchat-inbox__toolbar { position: absolute; z-index: 5; @@ -853,16 +990,70 @@ button { background: rgb(28 28 30 / 94%); backdrop-filter: blur(22px); } -.darkchat-inbox__toolbar input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; font-size: 14px; } -.darkchat-sheet-page { overflow-y: auto; padding-right: 15px; padding-left: 15px; } -.darkchat-sheet-page > header { position: sticky; z-index: 4; top: -1px; margin: 0 -15px; } -.darkchat-new-hero { padding: 14px 23px 19px; text-align: center; } -.darkchat-new-hero > span { width: 59px; height: 59px; margin: auto; display: grid; place-items: center; border-radius: 20px; background: linear-gradient(145deg, var(--dc-purple), var(--dc-purple-dark)); } -.darkchat-new-hero h2 { margin: 12px 0 4px; font-size: 19px; } -.darkchat-new-hero p { margin: 0; color: var(--dc-muted); font-size: 11px; line-height: 1.4; } -.darkchat-input { margin: 9px 0; padding: 9px 12px; display: flex; flex-direction: column; gap: 5px; border: 1px solid var(--dc-border); border-radius: 12px; background: var(--dc-surface); } -.darkchat-input span { color: var(--dc-muted); font-size: 9px; text-transform: uppercase; letter-spacing: .5px; } -.darkchat-input input { border: 0; outline: 0; background: transparent; font-size: 13px; } +.darkchat-inbox__toolbar input { + min-width: 0; + flex: 1; + border: 0; + outline: 0; + background: transparent; + font-size: 14px; +} +.darkchat-sheet-page { + overflow-y: auto; + padding-right: 15px; + padding-left: 15px; +} +.darkchat-sheet-page > header { + position: sticky; + z-index: 4; + top: -1px; + margin: 0 -15px; +} +.darkchat-new-hero { + padding: 14px 23px 19px; + text-align: center; +} +.darkchat-new-hero > span { + width: 59px; + height: 59px; + margin: auto; + display: grid; + place-items: center; + border-radius: 20px; + background: linear-gradient(145deg, var(--dc-purple), var(--dc-purple-dark)); +} +.darkchat-new-hero h2 { + margin: 12px 0 4px; + font-size: 19px; +} +.darkchat-new-hero p { + margin: 0; + color: var(--dc-muted); + font-size: 11px; + line-height: 1.4; +} +.darkchat-input { + margin: 9px 0; + padding: 9px 12px; + display: flex; + flex-direction: column; + gap: 5px; + border: 1px solid var(--dc-border); + border-radius: 12px; + background: var(--dc-surface); +} +.darkchat-input span { + color: var(--dc-muted); + font-size: 9px; + text-transform: uppercase; + letter-spacing: 0.5px; +} +.darkchat-input input { + border: 0; + outline: 0; + background: transparent; + font-size: 13px; +} .darkchat-primary, .darkchat-danger { width: 100%; @@ -878,8 +1069,17 @@ button { font-size: 13px; font-weight: 700; } -.darkchat-danger { background: rgb(255 69 58 / 14%); color: var(--dc-red) !important; } -.darkchat-sheet-page h3 { margin: 17px 5px 5px; color: var(--dc-muted); font-size: 10px; text-transform: uppercase; letter-spacing: .5px; } +.darkchat-danger { + background: rgb(255 69 58 / 14%); + color: var(--dc-red) !important; +} +.darkchat-sheet-page h3 { + margin: 17px 5px 5px; + color: var(--dc-muted); + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.5px; +} .darkchat-contact-row { width: 100%; min-height: 54px; @@ -892,28 +1092,151 @@ button { background: transparent; text-align: left; } -.darkchat-contact-row > span:nth-child(2) { min-width: 0; flex: 1; display: flex; flex-direction: column; } -.darkchat-contact-row strong { font-size: 13px; } -.darkchat-contact-row small { color: var(--dc-muted); font-size: 9px; } -.darkchat-contact-row svg { color: var(--dc-muted); } -.darkchat-qr-card { margin: 18px 0 6px; padding: 15px; display: grid; grid-template-columns: 72px 1fr; align-items: center; gap: 12px; border: 1px solid var(--dc-border); border-radius: 18px; background: var(--dc-surface); } -.darkchat-faux-qr { width: 72px; height: 72px; display: grid; place-items: center; border-radius: 10px; background: #fff; color: #111; } -.darkchat-qr-card > span { min-width: 0; display: flex; flex-direction: column; gap: 3px; } -.darkchat-qr-card > span strong { overflow: hidden; font-size: 12px; text-overflow: ellipsis; } -.darkchat-qr-card > span small { color: var(--dc-muted); font-size: 9px; } -.darkchat-qr-card > button { grid-column: 1 / -1; height: 35px; display: flex; align-items: center; justify-content: center; gap: 6px; border: 0; border-radius: 10px; background: rgb(139 92 246 / 16%); color: #c4b5fd; font-size: 11px; } -.darkchat-thread { display: flex; flex-direction: column; padding-bottom: 79px; } -.darkchat-thread--panel { padding-bottom: 342px; } -.darkchat-thread__header { position: relative; flex: none; grid-template-columns: 50px 1fr 50px; } -.darkchat-thread__identity { min-width: 0; padding: 0; display: flex; align-items: center; justify-content: center; gap: 8px; border: 0; background: transparent; } -.darkchat-thread__identity > span:nth-child(2) { min-width: 0; display: flex; flex-direction: column; align-items: flex-start; } -.darkchat-thread__identity strong { max-width: 142px; overflow: hidden; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; } -.darkchat-thread__identity small { color: var(--dc-muted); font-size: 10px; } -.darkchat-thread__identity svg { color: var(--dc-muted); } -.darkchat-thread__meta { height: 25px; flex: none; display: flex; align-items: center; justify-content: center; gap: 4px; border-bottom: 1px solid #1b1b1d; color: var(--dc-muted); font-size: 10px; } -.darkchat-thread__messages { min-height: 0; padding: 14px 15px 20px; flex: 1; display: flex; flex-direction: column; align-items: flex-start; gap: 7px; overflow-y: auto; } -.darkchat-day { align-self: center; margin: 5px 0 9px; color: var(--dc-muted); font-size: 11px; font-weight: 600; } -.darkchat-system { max-width: 86%; margin: 8px auto; display: flex; align-items: center; gap: 5px; color: var(--dc-muted); font-size: 10px; text-align: center; } +.darkchat-contact-row > span:nth-child(2) { + min-width: 0; + flex: 1; + display: flex; + flex-direction: column; +} +.darkchat-contact-row strong { + font-size: 13px; +} +.darkchat-contact-row small { + color: var(--dc-muted); + font-size: 9px; +} +.darkchat-contact-row svg { + color: var(--dc-muted); +} +.darkchat-qr-card { + margin: 18px 0 6px; + padding: 15px; + display: grid; + grid-template-columns: 72px 1fr; + align-items: center; + gap: 12px; + border: 1px solid var(--dc-border); + border-radius: 18px; + background: var(--dc-surface); +} +.darkchat-faux-qr { + width: 72px; + height: 72px; + display: grid; + place-items: center; + border-radius: 10px; + background: #fff; + color: #111; +} +.darkchat-qr-card > span { + min-width: 0; + display: flex; + flex-direction: column; + gap: 3px; +} +.darkchat-qr-card > span strong { + overflow: hidden; + font-size: 12px; + text-overflow: ellipsis; +} +.darkchat-qr-card > span small { + color: var(--dc-muted); + font-size: 9px; +} +.darkchat-qr-card > button { + grid-column: 1 / -1; + height: 35px; + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + border: 0; + border-radius: 10px; + background: rgb(139 92 246 / 16%); + color: #c4b5fd; + font-size: 11px; +} +.darkchat-thread { + display: flex; + flex-direction: column; + padding-bottom: 79px; +} +.darkchat-thread--panel { + padding-bottom: 342px; +} +.darkchat-thread__header { + position: relative; + flex: none; + grid-template-columns: 50px 1fr 50px; +} +.darkchat-thread__identity { + min-width: 0; + padding: 0; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + border: 0; + background: transparent; +} +.darkchat-thread__identity > span:nth-child(2) { + min-width: 0; + display: flex; + flex-direction: column; + align-items: flex-start; +} +.darkchat-thread__identity strong { + max-width: 142px; + overflow: hidden; + font-size: 15px; + text-overflow: ellipsis; + white-space: nowrap; +} +.darkchat-thread__identity small { + color: var(--dc-muted); + font-size: 10px; +} +.darkchat-thread__identity svg { + color: var(--dc-muted); +} +.darkchat-thread__meta { + height: 25px; + flex: none; + display: flex; + align-items: center; + justify-content: center; + gap: 4px; + border-bottom: 1px solid #1b1b1d; + color: var(--dc-muted); + font-size: 10px; +} +.darkchat-thread__messages { + min-height: 0; + padding: 14px 15px 20px; + flex: 1; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 7px; + overflow-y: auto; +} +.darkchat-day { + align-self: center; + margin: 5px 0 9px; + color: var(--dc-muted); + font-size: 11px; + font-weight: 600; +} +.darkchat-system { + max-width: 86%; + margin: 8px auto; + display: flex; + align-items: center; + gap: 5px; + color: var(--dc-muted); + font-size: 10px; + text-align: center; +} .darkchat-message { position: relative; max-width: 86%; @@ -928,125 +1251,686 @@ button { line-height: 1.32; text-align: left; overflow-wrap: anywhere; - animation: darkchat-message-in .28s cubic-bezier(.32,.72,0,1) both; + animation: darkchat-message-in 0.28s cubic-bezier(0.32, 0.72, 0, 1) both; +} +.darkchat-message--sent { + align-self: flex-end; + background: linear-gradient(145deg, #8b5cf6, #6d28d9); } -.darkchat-message--sent { align-self: flex-end; background: linear-gradient(145deg, #8b5cf6, #6d28d9); } .darkchat-message--received::before, -.darkchat-message--sent::after { content: ""; position: absolute; bottom: 0; width: 9px; height: 11px; } -.darkchat-message--received::before { left: -5px; border-bottom-right-radius: 10px; background: var(--dc-surface-2); } -.darkchat-message--sent::after { right: -5px; border-bottom-left-radius: 10px; background: #6d28d9; } -.darkchat-message > small { align-self: flex-end; color: rgb(255 255 255 / 57%); font-size: 9px; white-space: nowrap; } -.darkchat-message--received > small { color: var(--dc-muted); } -.darkchat-message--failed { outline: 1px solid var(--dc-red); } +.darkchat-message--sent::after { + content: ''; + position: absolute; + bottom: 0; + width: 9px; + height: 11px; +} +.darkchat-message--received::before { + left: -5px; + border-bottom-right-radius: 10px; + background: var(--dc-surface-2); +} +.darkchat-message--sent::after { + right: -5px; + border-bottom-left-radius: 10px; + background: #6d28d9; +} +.darkchat-message > small { + align-self: flex-end; + color: rgb(255 255 255 / 57%); + font-size: 9px; + white-space: nowrap; +} +.darkchat-message--received > small { + color: var(--dc-muted); +} +.darkchat-message--failed { + outline: 1px solid var(--dc-red); +} .darkchat-message > img, -.darkchat-message > video { width: min(228px, 74vw); max-height: 240px; margin: -7px -10px 2px; border-radius: 14px; object-fit: cover; } -.darkchat-message > video { background: #000; } -.darkchat-reply-preview { padding: 5px 7px; display: flex; align-items: center; gap: 5px; overflow: hidden; border-left: 2px solid #c4b5fd; border-radius: 5px; background: rgb(0 0 0 / 18%); color: rgb(255 255 255 / 72%); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; } -.darkchat-reactions { position: absolute; right: 4px; bottom: -15px; z-index: 2; padding: 1px 5px; border: 2px solid #000; border-radius: 9px; background: #343438; font-size: 9px; white-space: nowrap; } -.darkchat-message:has(.darkchat-reactions) { margin-bottom: 12px; } -.darkchat-replying { position: absolute; z-index: 6; right: 55px; bottom: 72px; left: 55px; min-height: 39px; padding: 5px 8px; display: flex; align-items: center; gap: 7px; border: 1px solid var(--dc-border); border-radius: 11px; background: rgb(28 28 30 / 96%); color: #c4b5fd; } -.darkchat-replying > span { min-width: 0; flex: 1; display: flex; flex-direction: column; } -.darkchat-replying small { font-size: 9px; text-transform: uppercase; } -.darkchat-replying strong { overflow: hidden; color: #fff; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } -.darkchat-replying button { width: 25px; height: 25px; display: grid; place-items: center; border: 0; border-radius: 50%; background: #343438; } -.darkchat-composer { position: absolute; z-index: 7; right: 12px; bottom: 28px; left: 12px; display: flex; align-items: flex-end; gap: 8px; } -.darkchat-composer > label { min-height: 47px; padding: 7px 7px 7px 14px; flex: 1; display: flex; align-items: center; gap: 6px; border: 1px solid var(--dc-border); border-radius: 24px; background: var(--dc-surface); } -.darkchat-composer textarea { min-height: 21px; max-height: 76px; min-width: 0; padding: 2px 0; flex: 1; resize: none; border: 0; outline: 0; background: transparent; font-size: 14px; line-height: 19px; } -.darkchat-composer label button { width: 32px; height: 32px; padding: 0; display: grid; place-items: center; border: 0; border-radius: 50%; background: transparent; color: #a78bfa; } -.darkchat-actions-bubbles { position: absolute; z-index: 8; bottom: 76px; left: 14px; display: flex; flex-direction: column-reverse; align-items: flex-start; gap: 6px; } -.darkchat-actions-bubbles button { min-height: 40px; padding: 4px 13px 4px 5px; display: flex; align-items: center; gap: 9px; border: 1px solid var(--dc-border); border-radius: 20px; background: var(--dc-surface); font-size: 12px; box-shadow: 0 7px 19px rgb(0 0 0 / 45%); animation: darkchat-bubble-in .23s cubic-bezier(.32,.72,0,1) both; } -.darkchat-actions-bubbles button > span { width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%; background: rgb(139 92 246 / 18%); color: #c4b5fd; font-size: 18px; } +.darkchat-message > video { + width: min(228px, 74vw); + max-height: 240px; + margin: -7px -10px 2px; + border-radius: 14px; + object-fit: cover; +} +.darkchat-message > video { + background: #000; +} +.darkchat-reply-preview { + padding: 5px 7px; + display: flex; + align-items: center; + gap: 5px; + overflow: hidden; + border-left: 2px solid #c4b5fd; + border-radius: 5px; + background: rgb(0 0 0 / 18%); + color: rgb(255 255 255 / 72%); + font-size: 10px; + text-overflow: ellipsis; + white-space: nowrap; +} +.darkchat-reactions { + position: absolute; + right: 4px; + bottom: -15px; + z-index: 2; + padding: 1px 5px; + border: 2px solid #000; + border-radius: 9px; + background: #343438; + font-size: 9px; + white-space: nowrap; +} +.darkchat-message:has(.darkchat-reactions) { + margin-bottom: 12px; +} +.darkchat-replying { + position: absolute; + z-index: 6; + right: 55px; + bottom: 72px; + left: 55px; + min-height: 39px; + padding: 5px 8px; + display: flex; + align-items: center; + gap: 7px; + border: 1px solid var(--dc-border); + border-radius: 11px; + background: rgb(28 28 30 / 96%); + color: #c4b5fd; +} +.darkchat-replying > span { + min-width: 0; + flex: 1; + display: flex; + flex-direction: column; +} +.darkchat-replying small { + font-size: 9px; + text-transform: uppercase; +} +.darkchat-replying strong { + overflow: hidden; + color: #fff; + font-size: 11px; + text-overflow: ellipsis; + white-space: nowrap; +} +.darkchat-replying button { + width: 25px; + height: 25px; + display: grid; + place-items: center; + border: 0; + border-radius: 50%; + background: #343438; +} +.darkchat-composer { + position: absolute; + z-index: 7; + right: 12px; + bottom: 28px; + left: 12px; + display: flex; + align-items: flex-end; + gap: 8px; +} +.darkchat-composer > label { + min-height: 47px; + padding: 7px 7px 7px 14px; + flex: 1; + display: flex; + align-items: center; + gap: 6px; + border: 1px solid var(--dc-border); + border-radius: 24px; + background: var(--dc-surface); +} +.darkchat-composer textarea { + min-height: 21px; + max-height: 76px; + min-width: 0; + padding: 2px 0; + flex: 1; + resize: none; + border: 0; + outline: 0; + background: transparent; + font-size: 14px; + line-height: 19px; +} +.darkchat-composer label button { + width: 32px; + height: 32px; + padding: 0; + display: grid; + place-items: center; + border: 0; + border-radius: 50%; + background: transparent; + color: #a78bfa; +} +.darkchat-actions-bubbles { + position: absolute; + z-index: 8; + bottom: 76px; + left: 14px; + display: flex; + flex-direction: column-reverse; + align-items: flex-start; + gap: 6px; +} +.darkchat-actions-bubbles button { + min-height: 40px; + padding: 4px 13px 4px 5px; + display: flex; + align-items: center; + gap: 9px; + border: 1px solid var(--dc-border); + border-radius: 20px; + background: var(--dc-surface); + font-size: 12px; + box-shadow: 0 7px 19px rgb(0 0 0 / 45%); + animation: darkchat-bubble-in 0.23s cubic-bezier(0.32, 0.72, 0, 1) both; +} +.darkchat-actions-bubbles button > span { + width: 30px; + height: 30px; + display: grid; + place-items: center; + border-radius: 50%; + background: rgb(139 92 246 / 18%); + color: #c4b5fd; + font-size: 18px; +} .darkchat-gif-panel, -.darkchat-page .messages-full-emoji-picker { position: absolute; z-index: 8; right: 0; bottom: 0; left: 0; height: 285px; border-top: 1px solid var(--dc-border); background: rgb(20 20 22 / 97%); color: #fff; backdrop-filter: blur(25px); } -.darkchat-gif-panel > header { height: 37px; padding: 0 13px; display: flex; align-items: center; justify-content: space-between; } -.darkchat-gif-panel > header strong { font-size: 13px; } -.darkchat-gif-panel > header button { border: 0; background: transparent; color: #a78bfa; font-size: 11px; } -.darkchat-gif-panel > label { height: 31px; margin: 0 9px 6px; padding: 0 9px; display: flex; align-items: center; gap: 6px; border-radius: 16px; background: #2c2c2e; color: var(--dc-muted); } -.darkchat-gif-panel > label input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; font-size: 10px; } -.darkchat-gif-panel > div { height: 175px; padding: 0 9px; display: grid; grid-template-columns: repeat(2, 1fr); gap: 5px; overflow-y: auto; } -.darkchat-gif-panel > div button { min-height: 80px; padding: 0; overflow: hidden; border: 0; border-radius: 9px; background: #2c2c2e; } -.darkchat-gif-panel > div img { width: 100%; height: 100%; object-fit: cover; } -.darkchat-load-more { width: calc(100% - 18px); height: 28px; margin: 4px 9px; border: 0; border-radius: 9px; background: #2c2c2e; color: #a78bfa !important; font-size: 10px; } -.darkchat-page .messages-full-emoji-picker { animation: darkchat-panel-in .28s cubic-bezier(.32,.72,0,1) both; } +.darkchat-page .messages-full-emoji-picker { + position: absolute; + z-index: 8; + right: 0; + bottom: 0; + left: 0; + height: 285px; + border-top: 1px solid var(--dc-border); + background: rgb(20 20 22 / 97%); + color: #fff; + backdrop-filter: blur(25px); +} +.darkchat-gif-panel > header { + height: 37px; + padding: 0 13px; + display: flex; + align-items: center; + justify-content: space-between; +} +.darkchat-gif-panel > header strong { + font-size: 13px; +} +.darkchat-gif-panel > header button { + border: 0; + background: transparent; + color: #a78bfa; + font-size: 11px; +} +.darkchat-gif-panel > label { + height: 31px; + margin: 0 9px 6px; + padding: 0 9px; + display: flex; + align-items: center; + gap: 6px; + border-radius: 16px; + background: #2c2c2e; + color: var(--dc-muted); +} +.darkchat-gif-panel > label input { + min-width: 0; + flex: 1; + border: 0; + outline: 0; + background: transparent; + font-size: 10px; +} +.darkchat-gif-panel > div { + height: 175px; + padding: 0 9px; + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 5px; + overflow-y: auto; +} +.darkchat-gif-panel > div button { + min-height: 80px; + padding: 0; + overflow: hidden; + border: 0; + border-radius: 9px; + background: #2c2c2e; +} +.darkchat-gif-panel > div img { + width: 100%; + height: 100%; + object-fit: cover; +} +.darkchat-load-more { + width: calc(100% - 18px); + height: 28px; + margin: 4px 9px; + border: 0; + border-radius: 9px; + background: #2c2c2e; + color: #a78bfa !important; + font-size: 10px; +} +.darkchat-page .messages-full-emoji-picker { + animation: darkchat-panel-in 0.28s cubic-bezier(0.32, 0.72, 0, 1) both; +} .darkchat-page .messages-full-emoji-picker > header button, .darkchat-page .messages-full-emoji-picker__search, -.darkchat-page .messages-full-emoji-picker nav button.active { background: #2c2c2e; color: #fff; } -.darkchat-page .messages-full-emoji-picker__search input { color: #fff; } -.darkchat-page .messages-full-emoji-picker nav { border-color: var(--dc-border); } -.darkchat-recorder { position: absolute; z-index: 9; right: 12px; bottom: 28px; left: 12px; height: 43px; padding: 0 7px; display: flex; align-items: center; gap: 6px; border: 1px solid var(--dc-border); border-radius: 22px; background: var(--dc-surface); } -.darkchat-recorder > button { width: 29px; height: 29px; display: grid; place-items: center; border: 0; border-radius: 50%; background: #2c2c2e; } -.darkchat-recorder > button:last-child { color: #a78bfa; } -.darkchat-recorder > i { width: 7px; height: 7px; border-radius: 50%; background: var(--dc-red); animation: messages-record-pulse 1s ease infinite; } -.darkchat-recorder time { font-size: 10px; } -.darkchat-recorder > span { height: 26px; min-width: 0; flex: 1; display: flex; align-items: center; justify-content: center; gap: 1px; overflow: hidden; } -.darkchat-recorder > span b { width: 2px; flex: none; border-radius: 2px; background: #a78bfa; } -.darkchat-voice { min-width: 197px; display: flex; align-items: center; gap: 8px; } -.darkchat-voice > button { width: 30px; height: 30px; display: grid; place-items: center; padding: 0; flex: none; border: 0; border-radius: 50%; background: rgb(255 255 255 / 17%); } -.darkchat-voice > div { min-width: 0; flex: 1; } -.darkchat-voice__wave { height: 27px; display: flex; align-items: center; gap: 1px; } -.darkchat-voice__wave i { width: 2px; border-radius: 2px; background: rgb(255 255 255 / 38%); } -.darkchat-voice__wave i.active { background: #fff; } -.darkchat-voice > div small { display: block; font-size: 9px; } -.darkchat-voice .darkchat-voice__speed { width: 30px; color: #fff; font-size: 9px; font-weight: 800; } -.darkchat-profile-hero { padding: 15px 0 17px; display: flex; align-items: center; flex-direction: column; } -.darkchat-profile-hero .darkchat-avatar { width: 67px; height: 67px; font-size: 30px; box-shadow: 0 13px 32px rgb(91 33 182 / 32%); } -.darkchat-profile-hero h2 { margin: 10px 0 3px; font-size: 20px; } -.darkchat-profile-hero button { padding: 5px 9px; display: flex; align-items: center; gap: 5px; border: 0; border-radius: 11px; background: var(--dc-surface); color: #c4b5fd; font-size: 11px; } -.darkchat-profile-hero small { margin-top: 6px; color: var(--dc-muted); font-size: 10px; } +.darkchat-page .messages-full-emoji-picker nav button.active { + background: #2c2c2e; + color: #fff; +} +.darkchat-page .messages-full-emoji-picker__search input { + color: #fff; +} +.darkchat-page .messages-full-emoji-picker nav { + border-color: var(--dc-border); +} +.darkchat-recorder { + position: absolute; + z-index: 9; + right: 12px; + bottom: 28px; + left: 12px; + height: 43px; + padding: 0 7px; + display: flex; + align-items: center; + gap: 6px; + border: 1px solid var(--dc-border); + border-radius: 22px; + background: var(--dc-surface); +} +.darkchat-recorder > button { + width: 29px; + height: 29px; + display: grid; + place-items: center; + border: 0; + border-radius: 50%; + background: #2c2c2e; +} +.darkchat-recorder > button:last-child { + color: #a78bfa; +} +.darkchat-recorder > i { + width: 7px; + height: 7px; + border-radius: 50%; + background: var(--dc-red); + animation: messages-record-pulse 1s ease infinite; +} +.darkchat-recorder time { + font-size: 10px; +} +.darkchat-recorder > span { + height: 26px; + min-width: 0; + flex: 1; + display: flex; + align-items: center; + justify-content: center; + gap: 1px; + overflow: hidden; +} +.darkchat-recorder > span b { + width: 2px; + flex: none; + border-radius: 2px; + background: #a78bfa; +} +.darkchat-voice { + min-width: 197px; + display: flex; + align-items: center; + gap: 8px; +} +.darkchat-voice > button { + width: 30px; + height: 30px; + display: grid; + place-items: center; + padding: 0; + flex: none; + border: 0; + border-radius: 50%; + background: rgb(255 255 255 / 17%); +} +.darkchat-voice > div { + min-width: 0; + flex: 1; +} +.darkchat-voice__wave { + height: 27px; + display: flex; + align-items: center; + gap: 1px; +} +.darkchat-voice__wave i { + width: 2px; + border-radius: 2px; + background: rgb(255 255 255 / 38%); +} +.darkchat-voice__wave i.active { + background: #fff; +} +.darkchat-voice > div small { + display: block; + font-size: 9px; +} +.darkchat-voice .darkchat-voice__speed { + width: 30px; + color: #fff; + font-size: 9px; + font-weight: 800; +} +.darkchat-profile-hero { + padding: 15px 0 17px; + display: flex; + align-items: center; + flex-direction: column; +} +.darkchat-profile-hero .darkchat-avatar { + width: 67px; + height: 67px; + font-size: 30px; + box-shadow: 0 13px 32px rgb(91 33 182 / 32%); +} +.darkchat-profile-hero h2 { + margin: 10px 0 3px; + font-size: 20px; +} +.darkchat-profile-hero button { + padding: 5px 9px; + display: flex; + align-items: center; + gap: 5px; + border: 0; + border-radius: 11px; + background: var(--dc-surface); + color: #c4b5fd; + font-size: 11px; +} +.darkchat-profile-hero small { + margin-top: 6px; + color: var(--dc-muted); + font-size: 10px; +} .darkchat-settings-group, -.darkchat-danger-group { margin: 10px 0; overflow: hidden; border: 1px solid var(--dc-border); border-radius: 13px; background: var(--dc-surface); } -.darkchat-settings-group { overflow: visible; } +.darkchat-danger-group { + margin: 10px 0; + overflow: hidden; + border: 1px solid var(--dc-border); + border-radius: 13px; + background: var(--dc-surface); +} +.darkchat-settings-group { + overflow: visible; +} .darkchat-settings-group label, .darkchat-settings-group .darkchat-select, -.darkchat-danger-group button { width: 100%; min-height: 50px; padding: 0 13px; display: flex; align-items: center; justify-content: space-between; gap: 9px; border: 0; border-bottom: 1px solid var(--dc-border); background: transparent; font-size: 13px; } +.darkchat-danger-group button { + width: 100%; + min-height: 50px; + padding: 0 13px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 9px; + border: 0; + border-bottom: 1px solid var(--dc-border); + background: transparent; + font-size: 13px; +} .darkchat-settings-group label:last-child, .darkchat-settings-group .darkchat-select:last-child, -.darkchat-danger-group button:last-child { border-bottom: 0; } +.darkchat-danger-group button:last-child { + border-bottom: 0; +} .darkchat-settings-group label > span, .darkchat-settings-group .darkchat-select > span, -.darkchat-danger-group button { justify-content: flex-start; } +.darkchat-danger-group button { + justify-content: flex-start; +} .darkchat-settings-group label > span, -.darkchat-settings-group .darkchat-select > span { display: flex; align-items: center; gap: 8px; } +.darkchat-settings-group .darkchat-select > span { + display: flex; + align-items: center; + gap: 8px; +} .darkchat-settings-group label > span svg, -.darkchat-settings-group .darkchat-select > span svg { color: #a78bfa; } -.darkchat-settings-group input[type="checkbox"] { width: 36px; height: 21px; accent-color: var(--dc-purple); } -.darkchat-select { position: relative; z-index: 2; } -.darkchat-danger-group button { color: var(--dc-red); text-align: left; } -.darkchat-save { padding: 7px; border: 0; background: transparent; color: #a78bfa !important; font-size: 13px; } -.darkchat-privacy-note { margin: 14px 4px 4px; display: flex; align-items: flex-start; gap: 7px; color: var(--dc-muted); font-size: 11px; line-height: 1.45; } -.darkchat-privacy-note svg { flex: none; color: #a78bfa; } -.darkchat-modal-backdrop { position: absolute; z-index: 40; inset: 0; padding: 44px 18px 27px; display: flex; align-items: center; justify-content: center; background: rgb(0 0 0 / 67%); backdrop-filter: blur(10px); } +.darkchat-settings-group .darkchat-select > span svg { + color: #a78bfa; +} +.darkchat-settings-group input[type='checkbox'] { + width: 36px; + height: 21px; + accent-color: var(--dc-purple); +} +.darkchat-select { + position: relative; + z-index: 2; +} +.darkchat-danger-group button { + color: var(--dc-red); + text-align: left; +} +.darkchat-save { + padding: 7px; + border: 0; + background: transparent; + color: #a78bfa !important; + font-size: 13px; +} +.darkchat-privacy-note { + margin: 14px 4px 4px; + display: flex; + align-items: flex-start; + gap: 7px; + color: var(--dc-muted); + font-size: 11px; + line-height: 1.45; +} +.darkchat-privacy-note svg { + flex: none; + color: #a78bfa; +} +.darkchat-modal-backdrop { + position: absolute; + z-index: 40; + inset: 0; + padding: 44px 18px 27px; + display: flex; + align-items: center; + justify-content: center; + background: rgb(0 0 0 / 67%); + backdrop-filter: blur(10px); +} .darkchat-modal, -.darkchat-message-menu { width: 100%; padding: 17px; display: flex; align-items: stretch; flex-direction: column; border: 1px solid var(--dc-border); border-radius: 21px; background: rgb(28 28 30 / 98%); box-shadow: 0 24px 70px rgb(0 0 0 / 60%); animation: darkchat-modal-in .3s cubic-bezier(.32,.72,0,1) both; } -.darkchat-modal { text-align: center; } -.darkchat-modal__icon { width: 52px; height: 52px; margin: 0 auto; display: grid; place-items: center; border-radius: 17px; background: rgb(139 92 246 / 16%); color: #a78bfa; } -.darkchat-modal__icon--danger { background: rgb(255 69 58 / 14%); color: var(--dc-red); } -.darkchat-modal h2 { margin: 11px 0 6px; font-size: 18px; } -.darkchat-modal p { margin: 0 0 10px; color: var(--dc-muted); font-size: 12px; line-height: 1.45; } -.darkchat-modal > strong { margin-bottom: 12px; color: #c4b5fd; font-size: 12px; } -.darkchat-modal > button:not(.darkchat-primary):not(.darkchat-danger) { min-height: 40px; border: 0; background: transparent; color: var(--dc-muted); font-size: 13px; } +.darkchat-message-menu { + width: 100%; + padding: 17px; + display: flex; + align-items: stretch; + flex-direction: column; + border: 1px solid var(--dc-border); + border-radius: 21px; + background: rgb(28 28 30 / 98%); + box-shadow: 0 24px 70px rgb(0 0 0 / 60%); + animation: darkchat-modal-in 0.3s cubic-bezier(0.32, 0.72, 0, 1) both; +} +.darkchat-modal { + text-align: center; +} +.darkchat-modal__icon { + width: 52px; + height: 52px; + margin: 0 auto; + display: grid; + place-items: center; + border-radius: 17px; + background: rgb(139 92 246 / 16%); + color: #a78bfa; +} +.darkchat-modal__icon--danger { + background: rgb(255 69 58 / 14%); + color: var(--dc-red); +} +.darkchat-modal h2 { + margin: 11px 0 6px; + font-size: 18px; +} +.darkchat-modal p { + margin: 0 0 10px; + color: var(--dc-muted); + font-size: 12px; + line-height: 1.45; +} +.darkchat-modal > strong { + margin-bottom: 12px; + color: #c4b5fd; + font-size: 12px; +} +.darkchat-modal > button:not(.darkchat-primary):not(.darkchat-danger) { + min-height: 40px; + border: 0; + background: transparent; + color: var(--dc-muted); + font-size: 13px; +} .darkchat-modal select, -.darkchat-modal textarea { margin-bottom: 8px; padding: 9px; border: 1px solid var(--dc-border); border-radius: 10px; outline: 0; background: #2c2c2e; font-size: 11px; } -.darkchat-report-select { width: 100%; margin-bottom: 8px; } +.darkchat-modal textarea { + margin-bottom: 8px; + padding: 9px; + border: 1px solid var(--dc-border); + border-radius: 10px; + outline: 0; + background: #2c2c2e; + font-size: 11px; +} +.darkchat-report-select { + width: 100%; + margin-bottom: 8px; +} .darkchat-report-select .darkchat-choice__trigger, -.darkchat-report-select .darkchat-choice__menu { width: 100%; } -.darkchat-modal textarea { min-height: 65px; resize: none; } -.darkchat-message-menu { padding: 7px; } -.darkchat-message-menu > button { min-height: 46px; padding: 0 12px; display: flex; align-items: center; gap: 10px; border: 0; border-bottom: 1px solid var(--dc-border); background: transparent; font-size: 13px; text-align: left; } -.darkchat-message-menu > button:last-child { justify-content: center; border-bottom: 0; color: var(--dc-muted); } -.darkchat-message-menu > button.danger { color: var(--dc-red); } -.darkchat-reaction-row { margin: -30px 4px 8px; padding: 8px 5px; display: flex; justify-content: space-around; border: 1px solid var(--dc-border); border-radius: 20px; background: #2c2c2e; box-shadow: 0 7px 20px rgb(0 0 0 / 35%); } -.darkchat-reaction-row button { width: 34px; height: 31px; padding: 0; border: 0; border-radius: 13px; background: transparent; font-size: 18px; } -.darkchat-toast { position: absolute; z-index: 60; bottom: 95px; left: 50%; max-width: 80%; padding: 8px 13px; transform: translateX(-50%); border: 1px solid var(--dc-border); border-radius: 14px; background: rgb(44 44 46 / 96%); box-shadow: 0 8px 30px rgb(0 0 0 / 45%); font-size: 10px; text-align: center; } +.darkchat-report-select .darkchat-choice__menu { + width: 100%; +} +.darkchat-modal textarea { + min-height: 65px; + resize: none; +} +.darkchat-message-menu { + padding: 7px; +} +.darkchat-message-menu > button { + min-height: 46px; + padding: 0 12px; + display: flex; + align-items: center; + gap: 10px; + border: 0; + border-bottom: 1px solid var(--dc-border); + background: transparent; + font-size: 13px; + text-align: left; +} +.darkchat-message-menu > button:last-child { + justify-content: center; + border-bottom: 0; + color: var(--dc-muted); +} +.darkchat-message-menu > button.danger { + color: var(--dc-red); +} +.darkchat-reaction-row { + margin: -30px 4px 8px; + padding: 8px 5px; + display: flex; + justify-content: space-around; + border: 1px solid var(--dc-border); + border-radius: 20px; + background: #2c2c2e; + box-shadow: 0 7px 20px rgb(0 0 0 / 35%); +} +.darkchat-reaction-row button { + width: 34px; + height: 31px; + padding: 0; + border: 0; + border-radius: 13px; + background: transparent; + font-size: 18px; +} +.darkchat-toast { + position: absolute; + z-index: 60; + bottom: 95px; + left: 50%; + max-width: 80%; + padding: 8px 13px; + transform: translateX(-50%); + border: 1px solid var(--dc-border); + border-radius: 14px; + background: rgb(44 44 46 / 96%); + box-shadow: 0 8px 30px rgb(0 0 0 / 45%); + font-size: 10px; + text-align: center; +} .darkchat-toast-enter-active, -.darkchat-toast-leave-active { transition: opacity .2s ease, transform .2s ease; } +.darkchat-toast-leave-active { + transition: + opacity 0.2s ease, + transform 0.2s ease; +} .darkchat-toast-enter-from, -.darkchat-toast-leave-to { opacity: 0; transform: translate(-50%, 8px); } -@keyframes darkchat-spin { to { transform: rotate(360deg); } } -@keyframes darkchat-message-in { from { opacity: 0; transform: translateY(8px) scale(.94); } } -@keyframes darkchat-bubble-in { from { opacity: 0; transform: translate(-8px, 6px) scale(.8); } } -@keyframes darkchat-panel-in { from { transform: translateY(100%); } } -@keyframes darkchat-modal-in { from { opacity: 0; transform: translateY(18px) scale(.92); } } +.darkchat-toast-leave-to { + opacity: 0; + transform: translate(-50%, 8px); +} +@keyframes darkchat-spin { + to { + transform: rotate(360deg); + } +} +@keyframes darkchat-message-in { + from { + opacity: 0; + transform: translateY(8px) scale(0.94); + } +} +@keyframes darkchat-bubble-in { + from { + opacity: 0; + transform: translate(-8px, 6px) scale(0.8); + } +} +@keyframes darkchat-panel-in { + from { + transform: translateY(100%); + } +} +@keyframes darkchat-modal-in { + from { + opacity: 0; + transform: translateY(18px) scale(0.92); + } +} .springboard-track { height: 100%; display: flex; @@ -1144,6 +2028,7 @@ button { overflow: visible; } .app-icon { + --app-icon-scale: 1; width: 56px; height: 56px; border-radius: 13px; @@ -1155,6 +2040,40 @@ button { 0 4px 13px #0004, inset 0 1px 1px #ffffff55; } +.app-icon--calendar { + background: linear-gradient(180deg, #fff 0%, #f8f8f8 72%, #ededed 100%); + color: #111; + box-shadow: + 0 4px 13px #0004, + inset 0 0 0 1px #ffffffcc, + inset 0 -1px 2px #00000018; +} +.app-icon-calendar { + width: 100%; + height: 100%; + padding-top: calc(2px * var(--app-icon-scale)); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: linear-gradient(180deg, #fff, #f4f4f4); + text-shadow: none; +} +.app-icon-calendar strong { + color: #e54842; + font-size: calc(11px * var(--app-icon-scale)); + font-weight: 750; + line-height: 1; + letter-spacing: -0.2px; +} +.app-icon-calendar b { + margin-top: calc(1px * var(--app-icon-scale)); + color: #151515; + font-size: calc(31px * var(--app-icon-scale)); + font-weight: 350; + line-height: 0.98; + letter-spacing: calc(-1.8px * var(--app-icon-scale)); +} .app-icon-badge { position: absolute; z-index: 2; @@ -1563,6 +2482,7 @@ button { gap: 18px 10px; } .app-icon-button--compact .app-icon { + --app-icon-scale: 0.7857; width: 44px; height: 44px; border-radius: 11px; @@ -1573,6 +2493,7 @@ button { } } .app-library-group .app-icon-button--compact .app-icon { + --app-icon-scale: 1; width: 56px; height: 56px; border-radius: 13px; @@ -1788,7 +2709,9 @@ button { scrollbar-width: none; } -.banking-scroll::-webkit-scrollbar { display: none; } +.banking-scroll::-webkit-scrollbar { + display: none; +} .banking-pull-refresh { position: absolute; @@ -1805,7 +2728,9 @@ button { transform 0.16s ease; } -.banking-pull-refresh.is-visible { opacity: 1; } +.banking-pull-refresh.is-visible { + opacity: 1; +} .banking-loading, .banking-empty { @@ -1893,7 +2818,11 @@ button { flex: 0 0 auto; place-items: center; border-radius: 11px; - background: linear-gradient(145deg, rgb(60 129 255 / 34%), rgb(25 54 115 / 25%)); + background: linear-gradient( + 145deg, + rgb(60 129 255 / 34%), + rgb(25 54 115 / 25%) + ); color: #8fb8ff; } @@ -1947,7 +2876,9 @@ button { letter-spacing: -0.025em; } -.banking-section-title > svg { color: rgb(220 232 255 / 43%); } +.banking-section-title > svg { + color: rgb(220 232 255 / 43%); +} .banking-section-title button { color: #7ca8ff; @@ -1959,8 +2890,12 @@ button { margin: 0 !important; } -.banking-transactions { padding: 0 3px; } -.banking-transactions--all { margin-top: 18px; } +.banking-transactions { + padding: 0 3px; +} +.banking-transactions--all { + margin-top: 18px; +} .banking-transaction-list b { flex: 0 0 auto; @@ -1969,7 +2904,9 @@ button { font-weight: 620; } -.banking-transaction-list b.is-incoming { color: var(--bank-green); } +.banking-transaction-list b.is-incoming { + color: var(--bank-green); +} .banking-no-transactions { padding: 24px 12px; @@ -2007,7 +2944,9 @@ button { font-size: 9px; } -.banking-chart-card { padding: 18px 14px 15px !important; } +.banking-chart-card { + padding: 18px 14px 15px !important; +} .banking-chart-legend { display: flex; @@ -2017,7 +2956,11 @@ button { font-size: 8px; } -.banking-chart-legend span { display: flex; align-items: center; gap: 4px; } +.banking-chart-legend span { + display: flex; + align-items: center; + gap: 4px; +} .banking-chart-legend i { width: 6px; @@ -2026,7 +2969,9 @@ button { background: #58647f; } -.banking-chart-legend i.is-incoming { background: var(--bank-blue); } +.banking-chart-legend i.is-incoming { + background: var(--bank-blue); +} .banking-chart { display: grid; @@ -2097,7 +3042,9 @@ button { place-items: center; border-radius: 15px; background: linear-gradient(145deg, #3c83ff, #1849b6); - box-shadow: 0 12px 28px rgb(22 76 196 / 36%), inset 0 1px rgb(255 255 255 / 28%); + box-shadow: + 0 12px 28px rgb(22 76 196 / 36%), + inset 0 1px rgb(255 255 255 / 28%); } .banking-sheet__content h2 { @@ -2113,7 +3060,9 @@ button { line-height: 1.45; } -.banking-form-list { margin: 12px 0 0 !important; } +.banking-form-list { + margin: 12px 0 0 !important; +} .banking-contact-picker { margin-top: 12px; @@ -2144,7 +3093,9 @@ button { font-size: 9px; } -.banking-sheet__content > button:last-child { margin-top: 15px; } +.banking-sheet__content > button:last-child { + margin-top: 15px; +} .banking-sheet__content > button:last-child > span { display: flex; @@ -3056,7 +4007,9 @@ button { place-items: center; border-radius: 50%; color: #181818; - transition: background 0.18s ease, color 0.18s ease; + transition: + background 0.18s ease, + color 0.18s ease; } .messages-inbox-header > button.active { background: #e8f4ff; @@ -3391,7 +4344,9 @@ button { height: 58px; margin-bottom: 7px; border: 2px solid #fff; - box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 8px 22px rgb(0 0 0 / 12%); + box-shadow: + 0 0 0 1px rgb(0 0 0 / 5%), + 0 8px 22px rgb(0 0 0 / 12%); } .messages-avatar--header .messages-avatar__glyph { padding-top: 7px; @@ -3562,7 +4517,8 @@ button { flex-direction: column; align-items: flex-start; gap: 7px; - animation: messages-action-menu-in 0.28s cubic-bezier(0.22, 1.25, 0.36, 1) both; + animation: messages-action-menu-in 0.28s cubic-bezier(0.22, 1.25, 0.36, 1) + both; } .messages-attachment-menu > button { height: 39px; @@ -3632,7 +4588,12 @@ button { .messages-media-picker > header strong { font-size: 14px; } -.messages-media-picker > header small { margin-left: auto; color: #8e8e93; font-size: 9px; font-weight: 650; } +.messages-media-picker > header small { + margin-left: auto; + color: #8e8e93; + font-size: 9px; + font-weight: 650; +} .messages-media-picker > header button { border: 0; background: transparent; @@ -3716,8 +4677,13 @@ button { border-radius: 50%; background: rgb(255 255 255 / 20%); } -.messages-media-picker__videos strong { font-size: 12px; } -.messages-media-picker__videos small { font-size: 10px; opacity: 0.8; } +.messages-media-picker__videos strong { + font-size: 12px; +} +.messages-media-picker__videos small { + font-size: 10px; + opacity: 0.8; +} .messages-emoji-picker { position: fixed; z-index: 41; @@ -3941,7 +4907,12 @@ button { content: ''; position: absolute; inset: -20%; - background: linear-gradient(115deg, transparent 30%, rgb(255 255 255 / 20%), transparent 70%); + background: linear-gradient( + 115deg, + transparent 30%, + rgb(255 255 255 / 20%), + transparent 70% + ); transform: translateX(-70%); } .messages-attachment--video.playing::before { @@ -4035,7 +5006,9 @@ button { margin: 10px 0 2px; font-size: 20px; } -.messages-contact-details__hero small { color: #8e8e93; } +.messages-contact-details__hero small { + color: #8e8e93; +} .messages-contact-details__actions { padding: 0 45px 16px; display: grid; @@ -4069,7 +5042,9 @@ button { gap: 2px; border-bottom: 1px solid #e5e5e8; } -.messages-contact-details__fields label:last-child { border-bottom: 0; } +.messages-contact-details__fields label:last-child { + border-bottom: 0; +} .messages-contact-details__fields span { color: #8e8e93; font-size: 9px; @@ -4081,7 +5056,9 @@ button { color: #111; font-size: 13px; } -.messages-contact-details__fields input:not([readonly]) { color: #007aff; } +.messages-contact-details__fields input:not([readonly]) { + color: #007aff; +} .messages-contact-details__primary, .messages-contact-details__delete { width: calc(100% - 22px); @@ -4097,7 +5074,9 @@ button { color: #007aff; font-size: 13px; } -.messages-contact-details__delete { color: #ff3b30; } +.messages-contact-details__delete { + color: #ff3b30; +} @keyframes messages-send-in { from { opacity: 0; @@ -4112,18 +5091,34 @@ button { } } @keyframes messages-action-menu-in { - from { opacity: 0; transform: translate(-8px, 18px) scale(0.84); } - to { opacity: 1; transform: none; } + from { + opacity: 0; + transform: translate(-8px, 18px) scale(0.84); + } + to { + opacity: 1; + transform: none; + } } @keyframes messages-gif-bounce { - to { transform: translateY(-5px) rotate(4deg) scale(1.05); } + to { + transform: translateY(-5px) rotate(4deg) scale(1.05); + } } @keyframes messages-video-play { - to { transform: translateX(70%); } + to { + transform: translateX(70%); + } } @keyframes messages-contact-in { - from { opacity: 0; transform: translateX(35%); } - to { opacity: 1; transform: none; } + from { + opacity: 0; + transform: translateX(35%); + } + to { + opacity: 1; + transform: none; + } } /* iOS 26-style Liquid Glass refinements and complete media pickers. */ .phone-app:has(.messages-page) { @@ -4136,7 +5131,11 @@ button { .messages-chat-header, .messages-contact-details > header { border-bottom: 1px solid rgb(60 60 67 / 10%); - background: linear-gradient(180deg, rgb(255 255 255 / 82%), rgb(248 248 252 / 62%)); + background: linear-gradient( + 180deg, + rgb(255 255 255 / 82%), + rgb(248 248 252 / 62%) + ); box-shadow: inset 0 1px 0 var(--ios-glass-border); backdrop-filter: blur(30px) saturate(190%); -webkit-backdrop-filter: blur(30px) saturate(190%); @@ -4144,8 +5143,14 @@ button { .messages-chat-header__back, .messages-messagebar__tools button { border: 1px solid rgb(255 255 255 / 78%); - background: linear-gradient(145deg, rgb(255 255 255 / 90%), rgb(236 238 244 / 68%)); - box-shadow: inset 0 1px 0 #fff, 0 5px 16px rgb(32 40 60 / 11%); + background: linear-gradient( + 145deg, + rgb(255 255 255 / 90%), + rgb(236 238 244 / 68%) + ); + box-shadow: + inset 0 1px 0 #fff, + 0 5px 16px rgb(32 40 60 / 11%); backdrop-filter: blur(22px) saturate(175%); -webkit-backdrop-filter: blur(22px) saturate(175%); } @@ -4154,41 +5159,118 @@ button { .messages-messagebar, .messages-chat-header__name { border-color: rgb(255 255 255 / 74%); - background: linear-gradient(145deg, rgb(255 255 255 / 88%), rgb(242 243 248 / 69%)); - box-shadow: inset 0 1px 0 #fff, 0 7px 24px rgb(24 31 50 / 10%); + background: linear-gradient( + 145deg, + rgb(255 255 255 / 88%), + rgb(242 243 248 / 69%) + ); + box-shadow: + inset 0 1px 0 #fff, + 0 7px 24px rgb(24 31 50 / 10%); backdrop-filter: blur(30px) saturate(185%); -webkit-backdrop-filter: blur(30px) saturate(185%); } .messages-conversation { - transition: transform 160ms cubic-bezier(.2,.8,.2,1), background 160ms ease; + transition: + transform 160ms cubic-bezier(0.2, 0.8, 0.2, 1), + background 160ms ease; +} +.messages-conversation:active { + transform: scale(0.985); } -.messages-conversation:active { transform: scale(.985); } .messages-attachment-menu > button { border-color: rgb(255 255 255 / 78%); - background: linear-gradient(145deg, rgb(255 255 255 / 91%), rgb(239 241 247 / 73%)); - box-shadow: inset 0 1px 0 #fff, 0 8px 24px rgb(22 30 48 / 15%); + background: linear-gradient( + 145deg, + rgb(255 255 255 / 91%), + rgb(239 241 247 / 73%) + ); + box-shadow: + inset 0 1px 0 #fff, + 0 8px 24px rgb(22 30 48 / 15%); backdrop-filter: blur(28px) saturate(190%); -webkit-backdrop-filter: blur(28px) saturate(190%); } -.messages-attachment-menu > button:active { transform: scale(.96); } +.messages-attachment-menu > button:active { + transform: scale(0.96); +} .messages-attachment-menu > button[aria-disabled='true'] { - opacity: .48; + opacity: 0.48; cursor: default; } -.messages-attachment-menu > button[aria-disabled='true']:active { transform: none; } -.messages-thread-page--emoji { padding-bottom: 392px !important; } -.messages-media-picker { height: 310px; background: rgb(247 247 251 / 82%); backdrop-filter: blur(32px) saturate(180%); -webkit-backdrop-filter: blur(32px) saturate(180%); } +.messages-attachment-menu > button[aria-disabled='true']:active { + transform: none; +} +.messages-thread-page--emoji { + padding-bottom: 392px !important; +} +.messages-media-picker { + height: 310px; + background: rgb(247 247 251 / 82%); + backdrop-filter: blur(32px) saturate(180%); + -webkit-backdrop-filter: blur(32px) saturate(180%); +} .messages-media-picker__photos, .messages-media-picker__gifs, -.messages-media-picker__videos { height: 270px; } -.messages-media-picker__photos button { background-position: center !important; background-size: cover !important; } -.messages-media-picker__empty { grid-column: 1 / -1; margin: auto; padding: 25px; color: #8e8e93; font-size: 12px; text-align: center; } -.messages-gif-search { grid-column: 1 / -1; position: sticky; z-index: 2; top: 0; height: 34px; padding: 0 11px; display: flex; align-items: center; gap: 6px; border-radius: 17px; background: rgb(118 118 128 / 12%); color: #8e8e93; } -.messages-gif-search input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; font-size: 12px; } -.messages-media-picker__gifs button { min-height: 92px; overflow: hidden; padding: 0; background: #e9e9ed; } -.messages-media-picker__gifs button img { width: 100%; height: 100%; object-fit: cover; } -.messages-media-picker__gifs .messages-gif-more { min-height: 36px; grid-column: 1 / -1; color: var(--ios-blue); font-size: 12px; font-weight: 650; } -.messages-gif-loading { grid-column: 1 / -1; justify-self: center; } +.messages-media-picker__videos { + height: 270px; +} +.messages-media-picker__photos button { + background-position: center !important; + background-size: cover !important; +} +.messages-media-picker__empty { + grid-column: 1 / -1; + margin: auto; + padding: 25px; + color: #8e8e93; + font-size: 12px; + text-align: center; +} +.messages-gif-search { + grid-column: 1 / -1; + position: sticky; + z-index: 2; + top: 0; + height: 34px; + padding: 0 11px; + display: flex; + align-items: center; + gap: 6px; + border-radius: 17px; + background: rgb(118 118 128 / 12%); + color: #8e8e93; +} +.messages-gif-search input { + min-width: 0; + flex: 1; + border: 0; + outline: 0; + background: transparent; + font-size: 12px; +} +.messages-media-picker__gifs button { + min-height: 92px; + overflow: hidden; + padding: 0; + background: #e9e9ed; +} +.messages-media-picker__gifs button img { + width: 100%; + height: 100%; + object-fit: cover; +} +.messages-media-picker__gifs .messages-gif-more { + min-height: 36px; + grid-column: 1 / -1; + color: var(--ios-blue); + font-size: 12px; + font-weight: 650; +} +.messages-gif-loading { + grid-column: 1 / -1; + justify-self: center; +} .messages-gif-error { grid-column: 1 / -1; min-height: 150px; @@ -4201,7 +5283,11 @@ button { color: #8e8e93; text-align: center; } -.messages-gif-error strong { max-width: 220px; font-size: 12px; font-weight: 550; } +.messages-gif-error strong { + max-width: 220px; + font-size: 12px; + font-weight: 550; +} .messages-media-picker__gifs .messages-gif-error button { min-height: 32px; padding: 0 14px; @@ -4212,10 +5298,34 @@ button { font-size: 12px; font-weight: 650; } -.messages-media-picker__videos button { position: relative; overflow: hidden; min-height: 92px; padding: 0; grid-template-columns: 1fr; } -.messages-media-picker__videos button video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; } -.messages-media-picker__videos button > span { position: relative; z-index: 1; justify-self: center; } -.messages-media-picker__videos button small { position: absolute; z-index: 1; right: 7px; bottom: 6px; padding: 2px 6px; border-radius: 9px; background: rgb(0 0 0 / 48%); } +.messages-media-picker__videos button { + position: relative; + overflow: hidden; + min-height: 92px; + padding: 0; + grid-template-columns: 1fr; +} +.messages-media-picker__videos button video { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + object-fit: cover; +} +.messages-media-picker__videos button > span { + position: relative; + z-index: 1; + justify-self: center; +} +.messages-media-picker__videos button small { + position: absolute; + z-index: 1; + right: 7px; + bottom: 6px; + padding: 2px 6px; + border-radius: 9px; + background: rgb(0 0 0 / 48%); +} .messages-full-emoji-picker { position: fixed; z-index: 47; @@ -4227,29 +5337,115 @@ button { border-top: 1px solid rgb(255 255 255 / 76%); background: rgb(247 247 251 / 84%); box-shadow: 0 -10px 34px rgb(20 26 43 / 13%); - animation: messages-panel-in .32s cubic-bezier(.32,.72,0,1) both; + animation: messages-panel-in 0.32s cubic-bezier(0.32, 0.72, 0, 1) both; backdrop-filter: blur(34px) saturate(190%); -webkit-backdrop-filter: blur(34px) saturate(190%); } -.messages-full-emoji-picker > header { height: 38px; padding: 0 12px 0 16px; display: flex; align-items: center; justify-content: space-between; } -.messages-full-emoji-picker > header strong { font-size: 14px; } -.messages-full-emoji-picker > header button { width: 28px; height: 28px; display: grid; place-items: center; border: 0; border-radius: 50%; background: rgb(118 118 128 / 13%); color: #5d5d62; } -.messages-full-emoji-picker__search { height: 31px; margin: 0 10px 4px; padding: 0 10px; display: flex; align-items: center; gap: 6px; border-radius: 16px; background: rgb(118 118 128 / 13%); color: #8e8e93; } -.messages-full-emoji-picker__search input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; font-size: 12px; } -.messages-full-emoji-picker nav { height: 34px; padding: 1px 7px 4px; display: flex; gap: 1px; overflow-x: auto; border-bottom: 1px solid rgb(60 60 67 / 10%); } -.messages-full-emoji-picker nav i { width: 1px; height: 21px; margin: 4px 4px; flex: none; background: rgb(60 60 67 / 16%); } -.messages-full-emoji-picker nav button { min-width: 32px; height: 29px; border: 0; border-radius: 9px; background: transparent; filter: grayscale(.55); } -.messages-full-emoji-picker nav button.active { background: rgb(118 118 128 / 14%); filter: none; } -.messages-full-emoji-picker__grid { height: 211px; padding: 7px 9px 18px; display: grid; grid-template-columns: repeat(7,1fr); grid-auto-rows: 38px; overflow-y: auto; } -.messages-full-emoji-picker__grid button { display: grid; place-items: center; border: 0; background: transparent; font-family: 'Apple Color Emoji','Segoe UI Emoji',sans-serif; font-size: 24px; transition: transform .12s ease; } -.messages-full-emoji-picker__grid button:active { transform: scale(1.35); } -.messages-attachment--image { padding: 0; } +.messages-full-emoji-picker > header { + height: 38px; + padding: 0 12px 0 16px; + display: flex; + align-items: center; + justify-content: space-between; +} +.messages-full-emoji-picker > header strong { + font-size: 14px; +} +.messages-full-emoji-picker > header button { + width: 28px; + height: 28px; + display: grid; + place-items: center; + border: 0; + border-radius: 50%; + background: rgb(118 118 128 / 13%); + color: #5d5d62; +} +.messages-full-emoji-picker__search { + height: 31px; + margin: 0 10px 4px; + padding: 0 10px; + display: flex; + align-items: center; + gap: 6px; + border-radius: 16px; + background: rgb(118 118 128 / 13%); + color: #8e8e93; +} +.messages-full-emoji-picker__search input { + min-width: 0; + flex: 1; + border: 0; + outline: 0; + background: transparent; + font-size: 12px; +} +.messages-full-emoji-picker nav { + height: 34px; + padding: 1px 7px 4px; + display: flex; + gap: 1px; + overflow-x: auto; + border-bottom: 1px solid rgb(60 60 67 / 10%); +} +.messages-full-emoji-picker nav i { + width: 1px; + height: 21px; + margin: 4px 4px; + flex: none; + background: rgb(60 60 67 / 16%); +} +.messages-full-emoji-picker nav button { + min-width: 32px; + height: 29px; + border: 0; + border-radius: 9px; + background: transparent; + filter: grayscale(0.55); +} +.messages-full-emoji-picker nav button.active { + background: rgb(118 118 128 / 14%); + filter: none; +} +.messages-full-emoji-picker__grid { + height: 211px; + padding: 7px 9px 18px; + display: grid; + grid-template-columns: repeat(7, 1fr); + grid-auto-rows: 38px; + overflow-y: auto; +} +.messages-full-emoji-picker__grid button { + display: grid; + place-items: center; + border: 0; + background: transparent; + font-family: 'Apple Color Emoji', 'Segoe UI Emoji', sans-serif; + font-size: 24px; + transition: transform 0.12s ease; +} +.messages-full-emoji-picker__grid button:active { + transform: scale(1.35); +} +.messages-attachment--image { + padding: 0; +} .messages-attachment--image img, .messages-attachment--gif img, -.messages-attachment--video video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; } +.messages-attachment--video video { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + object-fit: cover; +} .messages-attachment--video > span, -.messages-attachment--video small { z-index: 2; } -.messages-attachment--gif:has(img) { background: #e9e9ed; } +.messages-attachment--video small { + z-index: 2; +} +.messages-attachment--gif:has(img) { + background: #e9e9ed; +} /* Konsta's k-app dark state drives the complete iOS Messages palette. */ .phone-app.dark:has(.messages-page) { @@ -4258,7 +5454,9 @@ button { --ios-glass-border: rgb(255 255 255 / 12%); color-scheme: dark; } -.phone-app.dark:has(.messages-page)::before { background: #000; } +.phone-app.dark:has(.messages-page)::before { + background: #000; +} .phone-app.dark:has(.messages-page) .phone-status-bar { color: #fff; text-shadow: none; @@ -4289,7 +5487,9 @@ button { .phone-app.dark .messages-attachment-menu > button { border-color: rgb(255 255 255 / 10%); background: linear-gradient(145deg, rgb(58 58 60 / 92%), rgb(28 28 30 / 78%)); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 10%), 0 7px 22px rgb(0 0 0 / 32%); + box-shadow: + inset 0 1px 0 rgb(255 255 255 / 10%), + 0 7px 22px rgb(0 0 0 / 32%); color: #f5f5f7; } .phone-app.dark .messages-conversation::after, @@ -4299,12 +5499,16 @@ button { border-color: rgb(84 84 88 / 55%); } .phone-app.dark .messages-conversation:active, -.phone-app.dark .messages-conversation--selected { background: #1c1c1e; } +.phone-app.dark .messages-conversation--selected { + background: #1c1c1e; +} .phone-app.dark .messages-conversation__selection { border-color: #636366; background: #1c1c1e; } -.phone-app.dark .messages-conversation--selected .messages-conversation__selection { +.phone-app.dark + .messages-conversation--selected + .messages-conversation__selection { border-color: #0a84ff; background: #0a84ff; } @@ -4323,7 +5527,9 @@ button { .phone-app.dark .messages-chat-header__name { border-color: rgb(255 255 255 / 11%); background: linear-gradient(145deg, rgb(48 48 50 / 92%), rgb(28 28 30 / 80%)); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 10%), 0 8px 26px rgb(0 0 0 / 32%); + box-shadow: + inset 0 1px 0 rgb(255 255 255 / 10%), + 0 8px 26px rgb(0 0 0 / 32%); } .phone-app.dark .messages-inbox-toolbar input, .phone-app.dark .messages-messagebar textarea, @@ -4335,7 +5541,9 @@ button { background: #2c2c2e !important; color: #fff !important; } -.phone-app.dark .messages-bubbles .k-message:not(.self-end) > div > div::after { background: #2c2c2e; } +.phone-app.dark .messages-bubbles .k-message:not(.self-end) > div > div::after { + background: #2c2c2e; +} .phone-app.dark .messages-media-picker, .phone-app.dark .messages-full-emoji-picker, .phone-app.dark .messages-emoji-picker { @@ -4350,7 +5558,9 @@ button { .phone-app.dark .messages-full-emoji-picker nav button.active { background: rgb(118 118 128 / 28%); } -.phone-app.dark .messages-media-picker__gifs button { background: #2c2c2e; } +.phone-app.dark .messages-media-picker__gifs button { + background: #2c2c2e; +} .phone-app.dark .messages-media-picker__gifs .messages-gif-more, .phone-app.dark .messages-media-picker__gifs .messages-gif-error button { background: rgb(10 132 255 / 20%); @@ -4361,14 +5571,18 @@ button { background: rgb(36 36 38 / 94%); color: #f5f5f7; } -.phone-app.dark .messages-contact-details { background: #000; } +.phone-app.dark .messages-contact-details { + background: #000; +} .phone-app.dark .messages-contact-details__actions button, .phone-app.dark .messages-contact-details__fields, .phone-app.dark .messages-contact-details__primary, .phone-app.dark .messages-contact-details__delete { background: #1c1c1e; } -.phone-app.dark .messages-avatar--header { border-color: #2c2c2e; } +.phone-app.dark .messages-avatar--header { + border-color: #2c2c2e; +} /* Native iOS Messages thread treatment shared by light and dark appearances. */ .messages-thread-page { @@ -4408,7 +5622,9 @@ button { display: block; margin: 0; } -.messages-thread-page .messages-chat-header__contact { top: 4px; } +.messages-thread-page .messages-chat-header__contact { + top: 4px; +} .messages-thread-page .messages-avatar--header { width: 64px; height: 64px; @@ -4474,16 +5690,26 @@ button { font-size: 16px; line-height: 1.28; } -.messages-thread-page .messages-bubbles .k-message { max-width: 86% !important; } +.messages-thread-page .messages-bubbles .k-message { + max-width: 86% !important; +} .messages-thread-page .messages-bubbles .k-message:not(.self-end) > div > div { background: var(--messages-thread-received) !important; color: var(--messages-thread-primary) !important; } -.messages-thread-page .messages-bubbles .k-message:not(.self-end) > div > div::after { +.messages-thread-page + .messages-bubbles + .k-message:not(.self-end) + > div + > div::after { background: var(--messages-thread-received); } -.messages-thread-page .messages-thread-timestamp { color: var(--messages-thread-secondary); } -.messages-thread-page .messages-message--failed { position: relative; } +.messages-thread-page .messages-thread-timestamp { + color: var(--messages-thread-secondary); +} +.messages-thread-page .messages-message--failed { + position: relative; +} .messages-thread-page .messages-message--failed.self-end::after { content: '!'; position: absolute; @@ -4510,7 +5736,9 @@ button { background: var(--messages-thread-field); box-shadow: var(--messages-thread-control-shadow); } -.messages-thread-page .messages-messagebar textarea { color: var(--messages-thread-primary) !important; } +.messages-thread-page .messages-messagebar textarea { + color: var(--messages-thread-primary) !important; +} .messages-thread-page .messages-messagebar__tools button { padding: 0; display: grid; @@ -4539,7 +5767,9 @@ button { background: var(--messages-thread-control); box-shadow: none; } -.phone-app.dark .messages-thread-page .messages-chat-header { background: #000; } +.phone-app.dark .messages-thread-page .messages-chat-header { + background: #000; +} .phone-app.dark .messages-thread-page .messages-avatar--unknown { border-color: #000; background: linear-gradient(145deg, #625c79, #3f3a55) !important; @@ -4554,7 +5784,9 @@ button { backdrop-filter: none; -webkit-backdrop-filter: none; } -.messages-thread-page .messages-messagebar > .k-toolbar { background: transparent; } +.messages-thread-page .messages-messagebar > .k-toolbar { + background: transparent; +} .messages-thread-page .messages-messagebar > .k-toolbar > div:nth-child(2) { position: relative; width: 100%; @@ -4564,7 +5796,11 @@ button { align-items: center; gap: 10px !important; } -.messages-thread-page .messages-messagebar > .k-toolbar > div:nth-child(2) > div:first-child, +.messages-thread-page + .messages-messagebar + > .k-toolbar + > div:nth-child(2) + > div:first-child, .messages-thread-page .messages-messagebar__tools, .messages-thread-page .messages-messagebar__tools button { width: 46px; @@ -4595,7 +5831,11 @@ button { display: block; margin: 0; } -.messages-thread-page .messages-messagebar > .k-toolbar > div:nth-child(2) > .k-glass { +.messages-thread-page + .messages-messagebar + > .k-toolbar + > div:nth-child(2) + > .k-glass { width: 100%; height: 46px; grid-column: 2; @@ -4604,7 +5844,11 @@ button { background: var(--messages-thread-field) !important; box-shadow: var(--messages-thread-control-shadow) !important; } -.messages-thread-page .messages-messagebar > .k-toolbar > div:nth-child(2) > div:last-child { +.messages-thread-page + .messages-messagebar + > .k-toolbar + > div:nth-child(2) + > div:last-child { position: absolute; z-index: 2; top: 50%; @@ -4615,8 +5859,18 @@ button { place-items: center; transform: translateY(-50%); } -.messages-thread-page .messages-messagebar > .k-toolbar > div:nth-child(2) > div:last-child .k-toolbar-pane, -.messages-thread-page .messages-messagebar > .k-toolbar > div:nth-child(2) > div:last-child .k-link { +.messages-thread-page + .messages-messagebar + > .k-toolbar + > div:nth-child(2) + > div:last-child + .k-toolbar-pane, +.messages-thread-page + .messages-messagebar + > .k-toolbar + > div:nth-child(2) + > div:last-child + .k-link { width: 34px !important; height: 34px !important; padding: 0 !important; @@ -4624,7 +5878,12 @@ button { place-items: center !important; line-height: 0; } -.messages-thread-page .messages-messagebar > .k-toolbar > div:nth-child(2) > div:last-child svg { +.messages-thread-page + .messages-messagebar + > .k-toolbar + > div:nth-child(2) + > div:last-child + svg { display: block; margin: 0; transform: none; @@ -4699,7 +5958,9 @@ button { display: block; transform: translateY(1px); } -.messages-inbox-page .messages-conversation-list { padding: 4px 14px 18px; } +.messages-inbox-page .messages-conversation-list { + padding: 4px 14px 18px; +} .messages-inbox-page .messages-conversation { min-height: 88px; padding: 10px 0 10px 8px; @@ -4712,7 +5973,11 @@ button { } .messages-inbox-page .messages-conversation:active, .messages-inbox-page .messages-conversation--selected { - background: color-mix(in srgb, var(--messages-inbox-control) 86%, #0a84ff 14%); + background: color-mix( + in srgb, + var(--messages-inbox-control) 86%, + #0a84ff 14% + ); } .messages-inbox-page .messages-conversation__dot { left: -9px; @@ -4728,7 +5993,9 @@ button { padding-top: 6px; font-size: 34px; } -.messages-inbox-page .messages-conversation__body { gap: 3px; } +.messages-inbox-page .messages-conversation__body { + gap: 3px; +} .messages-inbox-page .messages-conversation__headline { grid-template-columns: minmax(0, 1fr) auto 16px; gap: 5px; @@ -4738,7 +6005,10 @@ button { font-size: 17px; font-weight: 650; } -.messages-inbox-page .messages-conversation--unread .messages-conversation__headline strong { +.messages-inbox-page + .messages-conversation--unread + .messages-conversation__headline + strong { font-weight: 780; } .messages-inbox-page .messages-conversation__headline time, @@ -4746,7 +6016,9 @@ button { .messages-inbox-page .messages-conversation__preview { color: var(--messages-inbox-secondary); } -.messages-inbox-page .messages-conversation__headline time { font-size: 13px; } +.messages-inbox-page .messages-conversation__headline time { + font-size: 13px; +} .messages-inbox-page .messages-conversation__headline svg { width: 16px; height: 16px; @@ -4800,7 +6072,10 @@ button { display: block; flex: none; } -.messages-inbox-page .messages-inbox-header > button:not(.messages-inbox-header__edit) svg, +.messages-inbox-page + .messages-inbox-header + > button:not(.messages-inbox-header__edit) + svg, .messages-inbox-page .messages-inbox-toolbar > button svg { transform: translateY(1px); } @@ -4818,7 +6093,9 @@ button { background: var(--messages-inbox-control); box-shadow: none; } -.phone-app.dark .messages-inbox-page .messages-inbox-header { background: #000; } +.phone-app.dark .messages-inbox-page .messages-inbox-header { + background: #000; +} .phone-app.dark .messages-inbox-page .messages-avatar--unknown { border-color: #000; background: linear-gradient(145deg, #625c79, #3f3a55) !important; diff --git a/frontend/src/components/AppIcon.vue b/frontend/src/components/AppIcon.vue index 25e3df5..b6b6ca0 100644 --- a/frontend/src/components/AppIcon.vue +++ b/frontend/src/components/AppIcon.vue @@ -1,7 +1,7 @@ @@ -200,10 +216,17 @@ onBeforeUnmount(() => {