Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
2efc88a
✨ Add keyframe animations for shine and spin; refactor EAP banner and…
HassanZahirnia Apr 9, 2025
50e6b76
✨ Enhance version 1 announcement button with accessibility attributes…
HassanZahirnia Apr 9, 2025
992c1cb
✨ Add v1 announcement alert component and update navigation with anno…
HassanZahirnia Apr 10, 2025
2e381e0
✨ Add animated dots to v1 announcement alert for enhanced visual effects
HassanZahirnia Apr 10, 2025
f5aa421
✨ Add accessibility attributes to announcement alert dots for improve…
HassanZahirnia Apr 10, 2025
960e868
✨ Update blue and white circle styles in v1 announcement alert for im…
HassanZahirnia Apr 10, 2025
569219e
✨ Add blog route and create blog view with hero section and articles …
HassanZahirnia Apr 10, 2025
8e1e2ac
✨ Refactor blog articles section for improved accessibility and seman…
HassanZahirnia Apr 10, 2025
f9b44ef
✨ Implement article card component for improved article display and r…
HassanZahirnia Apr 10, 2025
7af169b
✨ Add pagination navigation to blog articles section for improved use…
HassanZahirnia Apr 10, 2025
6b3859e
✨ Adjust pagination button padding for improved touch target size and…
HassanZahirnia Apr 10, 2025
96fe026
✨ Add article view and implement article layout with animations for i…
HassanZahirnia Apr 10, 2025
6aaf906
✨ Update article layout for improved structure and readability
HassanZahirnia Apr 10, 2025
b7e1a06
✨ Update article accessibility attributes and improve semantic structure
HassanZahirnia Apr 10, 2025
fcb175d
✨ Adjust heading and date padding for improved layout; add animation …
HassanZahirnia Apr 10, 2025
cb8e6e6
✨ Update decorative elements and improve article card styles for enha…
HassanZahirnia Apr 10, 2025
2d2c6bc
✨ Adjust heading margin for improved layout; update article card blur…
HassanZahirnia Apr 10, 2025
6497dba
✨ Update previous page link opacity for improved visibility
HassanZahirnia Apr 10, 2025
d6a6ce7
✨ Update navigation bar announcement background color for improved vi…
HassanZahirnia Apr 10, 2025
1cfad78
✨ Update dark mode background color for enhanced visual consistency i…
HassanZahirnia Apr 10, 2025
eab99cb
✨ Add decorative blurred circle to enhance visual depth in article he…
HassanZahirnia Apr 10, 2025
4e3ccc5
✨ Update blurred circle background opacity for improved visual consis…
HassanZahirnia Apr 10, 2025
913c6e4
Tweaks
simonhamp Apr 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions resources/css/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,21 @@
}
}

@keyframes shine {
0% {
background-position: 200% 50%;
}
100% {
background-position: 0% 50%;
}
}

@keyframes spin {
to {
transform: rotate(360deg);
}
}

/* Scrollbar width */
::-webkit-scrollbar {
height: 8px;
Expand Down
217 changes: 217 additions & 0 deletions resources/views/article.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
<x-layout title="Blog">
{{-- Hero --}}
<section
class="mx-auto mt-10 w-full max-w-3xl px-5 md:mt-14"
aria-labelledby="article-title"
>
<header class="relative grid place-items-center text-center">
{{-- Blurred circle - Decorative --}}
<div
class="absolute right-1/2 top-0 -z-30 h-60 w-60 translate-x-1/2 rounded-full blur-[150px] md:w-80 dark:bg-slate-500/50"
aria-hidden="true"
></div>

{{-- Back button --}}
<div
x-init="
() => {
motion.inView($el, (element) => {
motion.animate(
$el,
{
opacity: [0, 1],
x: [5, 0],
},
{
duration: 0.7,
ease: motion.easeOut,
},
)
})
}
"
>
<a
href="{{ route('blog') }}"
class="inline-flex items-center gap-2 opacity-60 transition duration-200 will-change-transform hover:-translate-x-0.5 hover:opacity-100"
aria-label="Return to blog listing"
>
<x-icons.right-arrow
class="size-3 shrink-0 -scale-x-100"
aria-hidden="true"
/>
<div class="text-sm">Blog</div>
</a>
</div>

{{-- Primary Heading --}}
<h1
id="article-title"
x-init="
() => {
motion.inView($el, (element) => {
motion.animate(
$el,
{
opacity: [0, 1],
x: [-5, 0],
},
{
duration: 0.7,
ease: motion.easeOut,
},
)
})
}
"
class="mt-8 text-3xl font-extrabold will-change-transform sm:text-4xl"
>
NativePHP for desktop v1 is finally here!
</h1>

{{-- Date --}}
<div
class="inline-flex items-center gap-1.5 pt-4 opacity-60"
aria-label="Publication date"
>
<x-icons.date
class="size-5 shrink-0"
aria-hidden="true"
/>
<time
datetime="2025-04-09"
class="text-sm"
>
April 9, 2025
</time>
</div>
</header>

{{-- Divider --}}
<div
x-init="
() => {
motion.inView($el, (element) => {
motion.animate(
$el,
{
opacity: [0, 1],
x: [5, 0],
},
{
duration: 0.7,
ease: motion.easeOut,
},
)
})
}
"
class="flex items-center pb-3 pt-3.5 will-change-transform"
aria-hidden="true"
>
<div
class="size-1.5 rotate-45 bg-gray-200/90 dark:bg-[#242734]"
></div>
<div class="h-0.5 w-full bg-gray-200/90 dark:bg-[#242734]"></div>
<div
class="size-1.5 rotate-45 bg-gray-200/90 dark:bg-[#242734]"
></div>
</div>

{{-- Content --}}
<article
x-init="
() => {
motion.inView($el, (element) => {
motion.animate(
$el,
{
opacity: [0, 1],
y: [5, 0],
},
{
duration: 0.7,
ease: motion.easeOut,
},
)
})
}
"
class="prose mt-2 max-w-none text-gray-600 will-change-transform dark:text-gray-400"
aria-labelledby="article-title"
>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Pariatur
facere dolore praesentium eius amet ex suscipit quam quibusdam
rerum, ratione, veritatis quidem, repudiandae ipsum in. Dolore
voluptatibus iusto saepe cum. Maiores tenetur nobis aliquid
recusandae hic, illo, aliquam laudantium aspernatur iste commodi
temporibus vero maxime, deserunt consequuntur fugiat animi dicta
debitis alias quos amet facere repellendus? Nesciunt, fugiat? Vel,
harum. Eos magnam, totam blanditiis nemo facilis culpa voluptate sed
dolores delectus alias velit, deleniti ex id quasi. Maiores
laboriosam repellendus vitae aliquam voluptas delectus deserunt
provident. Saepe, ullam. Error, ipsam. Facere dolore ullam
reprehenderit debitis et aperiam exercitationem numquam deserunt?
Temporibus asperiores exercitationem commodi vel? Autem, optio?
Tempora, dicta, pariatur dolores repudiandae corrupti beatae
voluptate dignissimos omnis consectetur ratione rerum.
Exercitationem eligendi, sint necessitatibus cumque voluptatum
corrupti incidunt inventore natus cupiditate, obcaecati nisi unde
nesciunt commodi! Eveniet itaque nihil ducimus repellendus et atque
laborum quos? Nostrum, aperiam aut. Ratione, earum! Voluptate
deleniti labore dolor quod nobis atque nam repellendus? Fugiat,
aliquam voluptatum quam cum, veniam mollitia, autem consequatur
officiis dolorem assumenda tempore. Distinctio officiis numquam
omnis quos aperiam minima voluptatibus? Magnam laborum nesciunt eos
qui sed repellendus tenetur harum, id, mollitia a provident
accusantium sint architecto, laudantium sit dolore quia. Vel impedit
quasi nam necessitatibus accusantium saepe praesentium laudantium
ut. Sit dolor voluptas dignissimos doloremque qui atque dolorum.
Aperiam eaque sapiente dicta nulla error laborum eius ex illum
harum, dolor quae illo praesentium ad hic at dolorem iusto
recusandae unde. Ipsa alias tenetur magni reprehenderit nam
consequuntur pariatur consequatur quas aspernatur cumque harum ullam
asperiores corporis distinctio consectetur dicta iusto, iure rem
quos nobis laboriosam eos nulla accusamus et. Similique. Consectetur
hic vel explicabo id assumenda, dolores quos neque asperiores ut,
aperiam a blanditiis est, ullam officia cum error eligendi delectus!
Cupiditate iusto est ad. Magni porro blanditiis quo delectus!
Possimus quis repellat aliquam, quia repudiandae deserunt ipsum
laudantium quaerat impedit veniam quibusdam rerum libero! Nam
laboriosam qui blanditiis nihil soluta, magnam ut fuga voluptatem
voluptatibus doloremque aut, aliquam velit? Soluta in esse dolorem
harum excepturi incidunt qui omnis quidem perferendis, alias culpa
ipsa quaerat delectus quam dolores nulla inventore dicta rerum enim
obcaecati. Officia esse nostrum voluptate mollitia corporis. Numquam
exercitationem fuga debitis soluta. Accusantium a voluptatum
reprehenderit, perferendis dolorum sequi ab consequatur molestiae
necessitatibus consequuntur asperiores expedita? Corporis vel fugiat
distinctio sint magnam eveniet facilis. Corrupti, quisquam
perferendis. Architecto recusandae dolores aspernatur eligendi
laborum iure libero sit vitae optio error cupiditate illo magnam
harum quam, porro debitis repellendus quis iusto nemo, atque nobis
aliquam consequatur? Quo, saepe repudiandae. Rem nostrum quos illo
eos cupiditate culpa eum dolorem debitis odit accusantium quibusdam
eligendi ea quisquam, nam beatae, nihil vitae mollitia totam laborum
necessitatibus veritatis porro error molestias. Exercitationem,
soluta. Eaque suscipit amet impedit illum hic rerum nesciunt. Totam
culpa, quia fuga at blanditiis dolorum rerum iusto ipsa quae
distinctio a placeat dolorem omnis praesentium libero obcaecati
molestiae porro aliquid. Accusantium itaque rerum nobis, quam, non
numquam animi qui cupiditate repellendus repellat veritatis pariatur
expedita debitis veniam beatae rem dicta vel vitae, eaque eos
placeat. Consequatur, facilis commodi. Soluta, incidunt. Beatae
nobis nesciunt quis reiciendis? Velit voluptatum et placeat
accusantium illo suscipit id dolorum cupiditate rem fugiat! Libero
esse, ad dolorum commodi officiis incidunt enim corrupti, fuga
beatae aspernatur expedita? Earum rerum laborum dolore architecto?
Culpa vitae at ipsum sapiente? Labore aliquid, dolor optio voluptas
mollitia recusandae quas sequi tempora corporis. Ipsa voluptate
fugiat omnis perferendis deserunt, itaque quos perspiciatis.
Asperiores explicabo dolore, molestiae, consequatur sint soluta
vitae quae iure reprehenderit hic officia aliquid omnis reiciendis
voluptatibus tempora provident veniam in magni eum et exercitationem
doloribus ullam. Neque, culpa temporibus.
</article>
</section>
</x-layout>
Loading