|
| 1 | +--- |
| 2 | +layout: default |
| 3 | +--- |
| 4 | +<!-- Ambient Background --> |
| 5 | +<div class="pointer-events-none fixed top-0 left-0 -z-10 h-full w-full overflow-hidden"> |
| 6 | + <div |
| 7 | + class="bg-primary/10 absolute top-[-10%] right-[20%] h-[500px] w-[500px] rounded-full opacity-40 blur-[120px]" |
| 8 | + ></div> |
| 9 | + <div |
| 10 | + class="bg-secondary/10 absolute bottom-[20%] left-[-10%] h-[400px] w-[400px] rounded-full opacity-30 blur-[100px]" |
| 11 | + ></div> |
| 12 | +</div> |
| 13 | + |
| 14 | +<main class="min-h-screen pt-24 pb-16 lg:pt-32 lg:pb-32"> |
| 15 | + <article class="container mx-auto max-w-5xl px-4"> |
| 16 | + <!-- Project Header --> |
| 17 | + <header class="mb-12 animate-[fadeIn_1s_ease-out] text-center"> |
| 18 | + <div |
| 19 | + class="text-secondary/80 font-momo mb-6 flex items-center justify-center gap-4 text-sm font-bold tracking-widest uppercase" |
| 20 | + > |
| 21 | + <span class="badge badge-outline badge-primary"> |
| 22 | + {{ page.date | localize: '%-d %B %Y' }} |
| 23 | + </span> |
| 24 | + {% if page.status %} |
| 25 | + <span class="badge badge-ghost">{{ page.status }}</span> |
| 26 | + {% endif %} |
| 27 | + </div> |
| 28 | + |
| 29 | + <h1 |
| 30 | + class="font-anton from-base-content to-base-content/60 mb-6 bg-gradient-to-br bg-clip-text text-5xl leading-tight text-transparent md:text-7xl lg:text-8xl" |
| 31 | + > |
| 32 | + {{ page.title | escape }} |
| 33 | + </h1> |
| 34 | + |
| 35 | + {% if page.description %} |
| 36 | + <p class="text-base-content/70 font-roboto mx-auto max-w-2xl text-lg leading-relaxed font-light md:text-xl"> |
| 37 | + {{ page.description }} |
| 38 | + </p> |
| 39 | + {% endif %} |
| 40 | + |
| 41 | + {% if page.technologies %} |
| 42 | + <div class="mt-8 flex flex-wrap justify-center gap-2"> |
| 43 | + {% for tech in page.technologies %} |
| 44 | + <span class="badge badge-lg badge-secondary badge-outline font-mono">{{ tech }}</span> |
| 45 | + {% endfor %} |
| 46 | + </div> |
| 47 | + {% endif %} |
| 48 | + |
| 49 | + {% if page.repo or page.demo %} |
| 50 | + <div class="mt-8 flex items-center justify-center gap-4"> |
| 51 | + {% if page.repo %} |
| 52 | + <a |
| 53 | + href="{{ page.repo }}" |
| 54 | + target="_blank" |
| 55 | + rel="noopener noreferrer" |
| 56 | + class="btn btn-primary btn-outline group gap-2" |
| 57 | + > |
| 58 | + <svg |
| 59 | + xmlns="http://www.w3.org/2000/svg" |
| 60 | + width="20" |
| 61 | + height="20" |
| 62 | + viewBox="0 0 24 24" |
| 63 | + fill="none" |
| 64 | + stroke="currentColor" |
| 65 | + stroke-width="2" |
| 66 | + stroke-linecap="round" |
| 67 | + stroke-linejoin="round" |
| 68 | + class="transition-transform group-hover:scale-110" |
| 69 | + > |
| 70 | + <path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path> |
| 71 | + </svg> |
| 72 | + GitHub |
| 73 | + </a> |
| 74 | + {% endif %} |
| 75 | + {% if page.demo %} |
| 76 | + <a href="{{ page.demo }}" target="_blank" rel="noopener noreferrer" class="btn btn-secondary group gap-2"> |
| 77 | + <svg |
| 78 | + xmlns="http://www.w3.org/2000/svg" |
| 79 | + width="20" |
| 80 | + height="20" |
| 81 | + viewBox="0 0 24 24" |
| 82 | + fill="none" |
| 83 | + stroke="currentColor" |
| 84 | + stroke-width="2" |
| 85 | + stroke-linecap="round" |
| 86 | + stroke-linejoin="round" |
| 87 | + class="transition-transform group-hover:scale-110" |
| 88 | + > |
| 89 | + <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line> |
| 90 | + </svg> |
| 91 | + Live Demo |
| 92 | + </a> |
| 93 | + {% endif %} |
| 94 | + </div> |
| 95 | + {% endif %} |
| 96 | + |
| 97 | + <!-- Author --> |
| 98 | + {% assign author_id = page.author %} |
| 99 | + {% assign author = site.authors | where: 'short_name', author_id | first %} |
| 100 | + <div class="text-base-content/60 mt-8 flex items-center justify-center gap-3 text-sm"> |
| 101 | + {% if author %} |
| 102 | + <div class="avatar ring-primary ring-offset-base-100 h-8 w-8 rounded-full ring ring-offset-1"> |
| 103 | + <img src="/assets/avatars/{{ author.avatar }}" alt="{{ author.name }}"> |
| 104 | + </div> |
| 105 | + <span |
| 106 | + >Developed by <span class="text-base-content font-bold">{{ author.name }}</span></span |
| 107 | + > |
| 108 | + {% elsif page.author %} |
| 109 | + <span |
| 110 | + >Developed by <span class="text-base-content font-bold">{{ page.author }}</span></span |
| 111 | + > |
| 112 | + {% endif %} |
| 113 | + </div> |
| 114 | + </header> |
| 115 | + |
| 116 | + <!-- Visual Element --> |
| 117 | + {% if page.lottie or page.image %} |
| 118 | + <div class="rounded-box bg-base-200/50 border-base-content/5 mb-16 overflow-hidden border shadow-2xl"> |
| 119 | + {% if page.lottie %} |
| 120 | + <script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js"></script> |
| 121 | + <div class="flex items-center justify-center p-8 md:p-12"> |
| 122 | + <lottie-player |
| 123 | + src="{{ page.lottie }}" |
| 124 | + background="transparent" |
| 125 | + speed="1" |
| 126 | + style="width: 100%; max-width: 600px; height: auto;" |
| 127 | + loop |
| 128 | + autoplay |
| 129 | + ></lottie-player> |
| 130 | + </div> |
| 131 | + {% elsif page.image %} |
| 132 | + <img src="{{ page.image }}" alt="{{ page.title }}" class="h-auto w-full object-cover"> |
| 133 | + {% endif %} |
| 134 | + </div> |
| 135 | + {% endif %} |
| 136 | + |
| 137 | + <!-- Divider --> |
| 138 | + <div class="via-base-content/10 mb-12 h-px w-full bg-gradient-to-r from-transparent to-transparent"></div> |
| 139 | + |
| 140 | + <!-- Content --> |
| 141 | + <div |
| 142 | + class=" |
| 143 | + prose prose-lg md:prose-xl prose-headings:font-anton |
| 144 | + prose-headings:text-base-content prose-p:text-base-content/80 |
| 145 | + prose-p:leading-relaxed prose-p:font-light prose-a:text-primary |
| 146 | + prose-a:no-underline hover:prose-a:underline prose-strong:text-secondary |
| 147 | + prose-strong:font-bold prose-code:text-accent |
| 148 | + prose-code:bg-base-200 prose-code:px-1 prose-code:rounded prose-blockquote:border-l-primary |
| 149 | + prose-blockquote:bg-base-200/50 prose-blockquote:p-4 prose-blockquote:rounded-r-lg prose-img:rounded-2xl |
| 150 | + prose-img:shadow-2xl mx-auto |
| 151 | + " |
| 152 | + > |
| 153 | + {{ content }} |
| 154 | + </div> |
| 155 | + </article> |
| 156 | +</main> |
0 commit comments