From aba7dd99e80ffaad04361792df550b2ac39f4a67 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:52:57 +0200 Subject: [PATCH] ENH - redesign sky flappy glider --- .../src/assets/img/app-icons/sky-flappy.svg | 14 ++++++++++++++ .../src/assets/img/app-icons/sky-flappy.webp | Bin 7064 -> 7378 bytes .../games/sky-flappy/SkyFlappyGlider.vue | 15 +++++++++++++++ frontend/src/views/apps/SkyFlappyApp.vue | 9 +++++---- sky_phone/source/html/index.html | 2 +- 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 frontend/src/assets/img/app-icons/sky-flappy.svg create mode 100644 frontend/src/features/games/sky-flappy/SkyFlappyGlider.vue diff --git a/frontend/src/assets/img/app-icons/sky-flappy.svg b/frontend/src/assets/img/app-icons/sky-flappy.svg new file mode 100644 index 0000000..3a8cc0d --- /dev/null +++ b/frontend/src/assets/img/app-icons/sky-flappy.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/frontend/src/assets/img/app-icons/sky-flappy.webp b/frontend/src/assets/img/app-icons/sky-flappy.webp index 7c21f26cb013c4dc8d29615b20ecf0a8e430be24..5d304692e14f965def0b7e3986a41a9851b6fa75 100644 GIT binary patch literal 7378 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 literal 7064 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 + + diff --git a/frontend/src/views/apps/SkyFlappyApp.vue b/frontend/src/views/apps/SkyFlappyApp.vue index befce7d..c179efa 100644 --- a/frontend/src/views/apps/SkyFlappyApp.vue +++ b/frontend/src/views/apps/SkyFlappyApp.vue @@ -3,6 +3,7 @@ import { ChevronLeft, Pause, Play, RotateCcw, Volume2, VolumeX, Wind } from 'luc import { computed, onBeforeUnmount, ref, watch, type CSSProperties } from 'vue' import { playSkyFlappySound } from '@/features/games/sky-flappy/audio' +import SkyFlappyGlider from '@/features/games/sky-flappy/SkyFlappyGlider.vue' import { useSkyFlappyStore } from '@/features/games/sky-flappy/store' import type { SkyFlappyDesign, SkyFlappyObstacle } from '@/features/games/sky-flappy/types' import { usePhoneStore } from '@/stores/phone' @@ -113,7 +114,7 @@ onBeforeUnmount(() => {
- + {{ phone.t('Apps.skyFlappy.firstTap') }} @@ -159,7 +160,7 @@ onBeforeUnmount(() => { .flappy-app { --sky-a:#53c9ed;--sky-b:#7970df;--tower:#645bd1; position:absolute;inset:0;overflow:hidden;padding:52px 16px 27px;color:#fff;background:linear-gradient(160deg,#19375e,#433b80);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;user-select:none;touch-action:manipulation; } .flappy-app--neon { --sky-a:#1b1e58;--sky-b:#7b258c;--tower:#23cbd1; }.flappy-app--storm { --sky-a:#526779;--sky-b:#24354e;--tower:#b06f64; } .flappy-header{height:55px;display:flex;align-items:center;justify-content:space-between}.flappy-header span{display:block;color:#c3d7ef;font-size:9px;font-weight:850;letter-spacing:1.1px;text-transform:uppercase}.flappy-header h1{margin:0;font-size:24px;line-height:1}.flappy-header button,.flappy-toolbar button{width:36px;height:36px;display:grid;place-items:center;padding:0;border:1px solid #ffffff1c;border-radius:12px;color:#fff;background:#ffffff12} -.flappy-menu{height:calc(100% - 55px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center}.flappy-menu__hero{position:relative;width:220px;height:210px;overflow:hidden;border-radius:28px;background:linear-gradient(var(--sky-a),var(--sky-b));box-shadow:0 18px 32px #101b3b66}.flappy-menu__tower{position:absolute;top:0;bottom:0;width:50px;background:repeating-linear-gradient(180deg,var(--tower) 0 42px,#ffffff2b 43px 48px);box-shadow:inset -7px 0 12px #0003}.flappy-menu__tower--left{left:0}.flappy-menu__tower--right{right:0}.flappy-menu__trail{position:absolute;top:103px;left:45px;width:72px;height:10px;border-radius:50%;background:#ffe381;filter:blur(5px);animation:flappy-trail 1s ease-in-out infinite}.sky-glider{position:absolute;z-index:4;width:48px;height:38px;border-radius:48% 54% 48% 52%;background:linear-gradient(145deg,#48e0db,#087f9d);box-shadow:inset -5px -7px 8px #064f7066,0 0 16px #7bfff0}.sky-glider::after{position:absolute;top:10px;right:7px;width:15px;height:15px;border-radius:50%;background:#ffd75f;box-shadow:inset 3px 0 0 #fff5bf;content:""}.sky-glider i,.sky-glider span{position:absolute;left:-13px;width:24px;height:12px;border-radius:70% 20%;background:#ffbd52;transform-origin:right}.sky-glider i{top:5px;transform:rotate(20deg)}.sky-glider span{bottom:4px;transform:rotate(-18deg)}.sky-glider b{position:absolute;right:0;bottom:3px;width:9px;height:6px;border-radius:50%;background:#ff765e}.sky-glider--hero{top:83px;left:84px;animation:flappy-hero 1.1s ease-in-out infinite alternate}.flappy-menu__copy>span{color:#ffda70;font-size:9px;font-weight:900;letter-spacing:1px;text-transform:uppercase}.flappy-menu__copy h2{margin:3px 0 5px;font-size:21px}.flappy-menu__copy p{max-width:275px;margin:0;color:#c0c8df;font-size:10px;line-height:1.4}.flappy-record{width:100%;display:flex;align-items:center;justify-content:space-between;padding:9px 14px;border:1px solid #ffffff14;border-radius:13px;background:#ffffff0c}.flappy-record span{color:#bdc8df;font-size:9px;font-weight:800;text-transform:uppercase}.flappy-record strong{font-size:19px}.flappy-designs{width:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.flappy-designs button{display:grid;place-items:center;gap:3px;padding:7px 3px;border:1px solid #ffffff12;border-radius:12px;color:#ccd4e9;background:#ffffff0a;font-size:8px}.flappy-designs button.active{border-color:#ffdd72;color:#fff;background:#ffffff1b}.flappy-designs i{width:26px;height:13px;border-radius:8px}.flappy-designs__dawn{background:linear-gradient(90deg,#58d6ee,#ff9b80)}.flappy-designs__neon{background:linear-gradient(90deg,#24255f,#ef55ca)}.flappy-designs__storm{background:linear-gradient(90deg,#71899b,#253750)}.flappy-primary,.flappy-secondary{width:100%;min-height:43px;display:flex;align-items:center;justify-content:center;gap:7px;border-radius:14px;font-size:11px;font-weight:850}.flappy-primary{border:0;color:#173353;background:linear-gradient(135deg,#ffe16c,#ff9d68)}.flappy-secondary{border:1px solid #ffffff18;color:#fff;background:#ffffff0b}.flappy-menu>p,.flappy-game__hint{margin:0;color:#aeb9d2;font-size:9px} +.flappy-menu{height:calc(100% - 55px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center}.flappy-menu__hero{position:relative;width:220px;height:210px;overflow:hidden;border-radius:28px;background:linear-gradient(var(--sky-a),var(--sky-b));box-shadow:0 18px 32px #101b3b66}.flappy-menu__tower{position:absolute;top:0;bottom:0;width:50px;background:repeating-linear-gradient(180deg,var(--tower) 0 42px,#ffffff2b 43px 48px);box-shadow:inset -7px 0 12px #0003}.flappy-menu__tower--left{left:0}.flappy-menu__tower--right{right:0}.flappy-menu__trail{position:absolute;top:103px;left:45px;width:72px;height:10px;border-radius:50%;background:#ffe381;filter:blur(5px);animation:flappy-trail 1s ease-in-out infinite}.sky-glider{position:absolute;z-index:4;width:58px;height:40px;overflow:visible;filter:drop-shadow(0 4px 5px #071d3e66) drop-shadow(0 0 7px #72fff088)}.sky-glider :deep(path){stroke-linejoin:round}.sky-glider :deep(.sky-flappy-glider__trail){fill:#ffb14a}.sky-glider :deep(.sky-flappy-glider__lower-wing){fill:#0aa2b7;stroke:#063653;stroke-width:2}.sky-glider :deep(.sky-flappy-glider__upper-wing){fill:#62f4e8;stroke:#063653;stroke-width:2}.sky-glider :deep(.sky-flappy-glider__body){fill:#20d7d2;stroke:#063653;stroke-width:2}.sky-glider :deep(.sky-flappy-glider__cockpit){fill:#fff0a6;stroke:#063653;stroke-width:1.5}.sky-glider :deep(.sky-flappy-glider__keel){fill:#087b98;stroke:#063653;stroke-width:2}.sky-glider--hero{top:84px;left:81px;animation:flappy-hero 1.1s ease-in-out infinite alternate}.sky-glider--hero :deep(.sky-flappy-glider__upper-wing),.sky-glider--hero :deep(.sky-flappy-glider__lower-wing){transform-box:fill-box;transform-origin:center;animation:flappy-glider-wing 1.1s ease-in-out infinite alternate}.flappy-menu__copy>span{color:#ffda70;font-size:9px;font-weight:900;letter-spacing:1px;text-transform:uppercase}.flappy-menu__copy h2{margin:3px 0 5px;font-size:21px}.flappy-menu__copy p{max-width:275px;margin:0;color:#c0c8df;font-size:10px;line-height:1.4}.flappy-record{width:100%;display:flex;align-items:center;justify-content:space-between;padding:9px 14px;border:1px solid #ffffff14;border-radius:13px;background:#ffffff0c}.flappy-record span{color:#bdc8df;font-size:9px;font-weight:800;text-transform:uppercase}.flappy-record strong{font-size:19px}.flappy-designs{width:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.flappy-designs button{display:grid;place-items:center;gap:3px;padding:7px 3px;border:1px solid #ffffff12;border-radius:12px;color:#ccd4e9;background:#ffffff0a;font-size:8px}.flappy-designs button.active{border-color:#ffdd72;color:#fff;background:#ffffff1b}.flappy-designs i{width:26px;height:13px;border-radius:8px}.flappy-designs__dawn{background:linear-gradient(90deg,#58d6ee,#ff9b80)}.flappy-designs__neon{background:linear-gradient(90deg,#24255f,#ef55ca)}.flappy-designs__storm{background:linear-gradient(90deg,#71899b,#253750)}.flappy-primary,.flappy-secondary{width:100%;min-height:43px;display:flex;align-items:center;justify-content:center;gap:7px;border-radius:14px;font-size:11px;font-weight:850}.flappy-primary{border:0;color:#173353;background:linear-gradient(135deg,#ffe16c,#ff9d68)}.flappy-secondary{border:1px solid #ffffff18;color:#fff;background:#ffffff0b}.flappy-menu>p,.flappy-game__hint{margin:0;color:#aeb9d2;font-size:9px} .flappy-game{position:relative;height:calc(100% - 55px)}.flappy-toolbar{height:47px;display:grid;grid-template-columns:36px 1fr 1fr 36px;align-items:center;gap:7px}.flappy-toolbar div{display:grid;justify-items:center}.flappy-toolbar span{color:#bac9df;font-size:8px;font-weight:850;text-transform:uppercase}.flappy-toolbar strong{font-size:16px}.flappy-stage{position:relative;width:100%;height:500px;display:block;overflow:hidden;padding:0;border:1px solid #ffffff1c;border-radius:22px;background:linear-gradient(var(--sky-a),var(--sky-b));box-shadow:inset 0 0 35px #15244c55,0 16px 30px #10193477;touch-action:manipulation}.flappy-clouds i{position:absolute;width:80px;height:24px;border-radius:50%;background:#ffffff30;filter:blur(1px);animation:cloud-drift 7s linear infinite}.flappy-clouds i:nth-child(1){top:10%;left:15%}.flappy-clouds i:nth-child(2){top:25%;left:65%;animation-delay:-2s}.flappy-clouds i:nth-child(3){top:45%;left:35%;animation-delay:-4s}.flappy-clouds i:nth-child(4){top:68%;left:78%}.flappy-clouds i:nth-child(5){top:78%;left:4%;animation-delay:-3s}.flappy-obstacle{position:absolute;z-index:2;top:0;bottom:0}.flappy-obstacle span{position:absolute;right:0;left:0;background:linear-gradient(90deg,color-mix(in srgb,var(--tower),white 20%),var(--tower));box-shadow:inset -6px 0 8px #0003,0 0 13px #17204e55}.flappy-obstacle span::after{position:absolute;right:-4px;left:-4px;height:14px;border-radius:6px;background:color-mix(in srgb,var(--tower),white 10%);box-shadow:inset 0 3px 0 #ffffff25;content:""}.flappy-obstacle__top{top:0;border-radius:0 0 7px 7px}.flappy-obstacle__top::after{bottom:0}.flappy-obstacle__bottom{bottom:0;border-radius:7px 7px 0 0}.flappy-obstacle__bottom::after{top:0}.sky-glider--player{left:23%;animation:flappy-wing .2s ease-out}.flappy-ready{position:absolute;z-index:6;top:36%;left:50%;padding:9px 15px;border-radius:17px;background:#15284fbb;font-size:11px;transform:translateX(-50%)}.flappy-horizon{position:absolute;z-index:3;right:0;bottom:0;left:0;height:12px;background:#263a62;box-shadow:0 -5px 14px #ffffff26}.flappy-stage--crashed{animation:flappy-crash .55s ease-out}.flappy-game__hint{margin-top:8px;text-align:center}.flappy-overlay{position:absolute;z-index:12;inset:47px 0 25px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;padding:28px;border-radius:22px;background:#101a38dc;backdrop-filter:blur(7px);text-align:center}.flappy-overlay>svg{color:#ffdc71}.flappy-overlay>span{color:#ffad78;font-size:9px;font-weight:900;letter-spacing:1px;text-transform:uppercase}.flappy-overlay h2{margin:0 0 5px;font-size:26px} -@keyframes flappy-hero{from{transform:translateY(7px) rotate(-5deg)}to{transform:translateY(-8px) rotate(7deg)}}@keyframes flappy-trail{0%,100%{opacity:.25;transform:scaleX(.6)}50%{opacity:.9;transform:scaleX(1)}}@keyframes flappy-wing{from{filter:brightness(1.5);scale:1.08}to{filter:brightness(1);scale:1}}@keyframes cloud-drift{from{translate:90px 0}to{translate:-160px 0}}@keyframes flappy-crash{0%,100%{transform:translate(0)}25%{transform:translate(-5px,3px)}50%{transform:translate(5px,-2px)}75%{transform:translate(-3px,1px)}}button:active{transform:scale(.97)}@media(prefers-reduced-motion:reduce){.sky-glider,.flappy-menu__trail,.flappy-clouds i,.flappy-stage{animation:none}} +@keyframes flappy-hero{from{transform:translateY(7px) rotate(-5deg)}to{transform:translateY(-8px) rotate(7deg)}}@keyframes flappy-trail{0%,100%{opacity:.25;transform:scaleX(.6)}50%{opacity:.9;transform:scaleX(1)}}@keyframes flappy-wing{from{filter:brightness(1.5) drop-shadow(0 4px 5px #071d3e66);scale:1.1}to{filter:brightness(1) drop-shadow(0 4px 5px #071d3e66);scale:1}}@keyframes flappy-glider-wing{from{transform:scaleY(.72)}to{transform:scaleY(1.08)}}@keyframes cloud-drift{from{translate:90px 0}to{translate:-160px 0}}@keyframes flappy-crash{0%,100%{transform:translate(0)}25%{transform:translate(-5px,3px)}50%{transform:translate(5px,-2px)}75%{transform:translate(-3px,1px)}}button:active{transform:scale(.97)}@media(prefers-reduced-motion:reduce){.sky-glider,.sky-glider :deep(path),.flappy-menu__trail,.flappy-clouds i,.flappy-stage{animation:none}} diff --git a/sky_phone/source/html/index.html b/sky_phone/source/html/index.html index ba95d5e..fe78b85 100644 --- a/sky_phone/source/html/index.html +++ b/sky_phone/source/html/index.html @@ -4,7 +4,7 @@ Sky Phone - +