diff --git a/assets/css/custom.css b/assets/css/custom.css
index 789132e..3d745a7 100644
--- a/assets/css/custom.css
+++ b/assets/css/custom.css
@@ -1,403 +1,793 @@
+ :root {
+ --bg: #0d0f11;
+ --surface: rgba(20, 24, 28, 0.82);
+ --surface-strong: rgba(28, 33, 38, 0.95);
+ --surface-soft: rgba(16, 19, 22, 0.92);
+ --border: rgba(255, 255, 255, 0.1);
+ --text: #f4f3ef;
+ --muted: #a9aeb6;
+ --accent: #c7a66f;
+ --accent-soft: rgba(199, 166, 111, 0.14);
+ --accent-strong: #f0d8ad;
+ --shadow: 0 28px 70px rgba(0, 0, 0, 0.38);
+ --shadow-soft: 0 18px 45px rgba(0, 0, 0, 0.22);
+ --radius-sm: 8px;
+ --radius-md: 12px;
+ --radius-lg: 18px;
+}
+
+html {
+ scroll-behavior: smooth;
+}
+
body {
- background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
- background-size: 400% 400%;
- animation: gradient 15s ease infinite;
- color: #212529;
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
- font-size: 14px;
- margin: 0;
- min-height: 100vh;
+ font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
+ background:
+ radial-gradient(circle at top left, rgba(199, 166, 111, 0.15), transparent 30%),
+ radial-gradient(circle at 85% 12%, rgba(111, 137, 199, 0.12), transparent 26%),
+ linear-gradient(180deg, #111418 0%, #0d0f11 44%, #0a0b0d 100%);
+ color: var(--text);
+ line-height: 1.6;
+ letter-spacing: -0.01em;
+ overflow-x: hidden;
}
-.main-wrapper {
- display: flex;
- align-items: center;
- justify-content: center;
- min-height: 100vh;
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- position: relative;
- z-index: 1;
-}
-
-@keyframes gradient {
- 0% {
- background-position: 0% 50%;
- }
- 50% {
- background-position: 100% 50%;
- }
- 100% {
- background-position: 0% 50%;
- }
-}
-
-.chat-container {
- width: 100%;
- max-width: 600px;
- background: rgba(255, 255, 255, 0.85);
- border: 1px solid rgba(255, 255, 255, 0.3);
- border-radius: 20px;
- display: flex;
- flex-direction: column;
- height: 85vh;
- box-shadow: 0 20px 40px rgba(0,0,0,0.2);
- backdrop-filter: blur(15px);
- -webkit-backdrop-filter: blur(15px);
- overflow: hidden;
-}
-
-.chat-header {
- padding: 1.5rem;
- border-bottom: 1px solid rgba(0, 0, 0, 0.05);
- background: rgba(255, 255, 255, 0.5);
- font-weight: 700;
- font-size: 1.1rem;
- display: flex;
- justify-content: space-between;
- align-items: center;
-}
-
-.chat-messages {
- flex: 1;
- overflow-y: auto;
- padding: 1.5rem;
- display: flex;
- flex-direction: column;
- gap: 1.25rem;
-}
-
-/* Custom Scrollbar */
-::-webkit-scrollbar {
- width: 6px;
-}
-
-::-webkit-scrollbar-track {
- background: transparent;
-}
-
-::-webkit-scrollbar-thumb {
- background: rgba(255, 255, 255, 0.3);
- border-radius: 10px;
-}
-
-::-webkit-scrollbar-thumb:hover {
- background: rgba(255, 255, 255, 0.5);
-}
-
-.message {
- max-width: 85%;
- padding: 0.85rem 1.1rem;
- border-radius: 16px;
- line-height: 1.5;
- font-size: 0.95rem;
- box-shadow: 0 4px 15px rgba(0,0,0,0.05);
- animation: fadeIn 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-}
-
-@keyframes fadeIn {
- from { opacity: 0; transform: translateY(20px) scale(0.95); }
- to { opacity: 1; transform: translateY(0) scale(1); }
-}
-
-.message.visitor {
- align-self: flex-end;
- background: linear-gradient(135deg, #212529 0%, #343a40 100%);
- color: #fff;
- border-bottom-right-radius: 4px;
-}
-
-.message.bot {
- align-self: flex-start;
- background: #ffffff;
- color: #212529;
- border-bottom-left-radius: 4px;
-}
-
-.chat-input-area {
- padding: 1.25rem;
- background: rgba(255, 255, 255, 0.5);
- border-top: 1px solid rgba(0, 0, 0, 0.05);
-}
-
-.chat-input-area form {
- display: flex;
- gap: 0.75rem;
-}
-
-.chat-input-area input {
- flex: 1;
- border: 1px solid rgba(0, 0, 0, 0.1);
- border-radius: 12px;
- padding: 0.75rem 1rem;
- outline: none;
- background: rgba(255, 255, 255, 0.9);
- transition: all 0.3s ease;
-}
-
-.chat-input-area input:focus {
- border-color: #23a6d5;
- box-shadow: 0 0 0 3px rgba(35, 166, 213, 0.2);
-}
-
-.chat-input-area button {
- background: #212529;
- color: #fff;
- border: none;
- padding: 0.75rem 1.5rem;
- border-radius: 12px;
- cursor: pointer;
- font-weight: 600;
- transition: all 0.3s ease;
-}
-
-.chat-input-area button:hover {
- background: #000;
- transform: translateY(-2px);
- box-shadow: 0 5px 15px rgba(0,0,0,0.2);
-}
-
-/* Background Animations */
-.bg-animations {
+body.page-cinematic::before,
+body.page-cinematic::after {
+ content: "";
position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- z-index: 0;
- overflow: hidden;
+ inset: 0;
+ pointer-events: none;
+ z-index: -1;
+}
+
+body.page-cinematic::before {
+ background:
+ radial-gradient(circle at 20% 10%, rgba(255, 214, 150, 0.14), transparent 20%),
+ radial-gradient(circle at 80% 18%, rgba(120, 160, 255, 0.08), transparent 24%),
+ radial-gradient(circle at 50% 120%, rgba(255, 255, 255, 0.05), transparent 34%);
+ filter: blur(8px);
+}
+
+body.page-cinematic::after {
+ opacity: 0.08;
+ background-image:
+ linear-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px),
+ linear-gradient(90deg, rgba(255, 255, 255, 0.04) 1px, transparent 1px);
+ background-size: 160px 160px;
+ mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.55), transparent 90%);
+}
+
+a {
+ color: inherit;
+}
+
+img {
+ display: block;
+}
+
+.section-shell {
+ padding: 4.8rem 0;
+ position: relative;
+}
+
+.section-shell::before {
+ content: "";
+ position: absolute;
+ inset: 0;
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent 18%, transparent 82%, rgba(255, 255, 255, 0.018));
pointer-events: none;
}
-.blob {
- position: absolute;
- width: 500px;
- height: 500px;
- background: rgba(255, 255, 255, 0.2);
- border-radius: 50%;
- filter: blur(80px);
- animation: move 20s infinite alternate cubic-bezier(0.45, 0, 0.55, 1);
+.section-border-top {
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
}
-.blob-1 {
- top: -10%;
- left: -10%;
- background: rgba(238, 119, 82, 0.4);
+.site-header {
+ background: rgba(10, 12, 14, 0.72);
+ backdrop-filter: blur(18px);
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.22);
}
-.blob-2 {
- bottom: -10%;
- right: -10%;
- background: rgba(35, 166, 213, 0.4);
- animation-delay: -7s;
- width: 600px;
- height: 600px;
+.navbar {
+ padding: 0.9rem 0;
}
-.blob-3 {
- top: 40%;
- left: 30%;
- background: rgba(231, 60, 126, 0.3);
- animation-delay: -14s;
- width: 450px;
- height: 450px;
+.brand-mark {
+ display: inline-flex;
+ width: 2.35rem;
+ height: 2.35rem;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid rgba(255, 255, 255, 0.14);
+ border-radius: 10px;
+ background: var(--surface);
+ color: var(--accent);
+ font-size: 0.88rem;
+ font-weight: 700;
+ letter-spacing: 0.08em;
}
-@keyframes move {
- 0% { transform: translate(0, 0) rotate(0deg) scale(1); }
- 33% { transform: translate(150px, 100px) rotate(120deg) scale(1.1); }
- 66% { transform: translate(-50px, 200px) rotate(240deg) scale(0.9); }
- 100% { transform: translate(0, 0) rotate(360deg) scale(1); }
+.brand-title {
+ font-size: 0.95rem;
+ font-weight: 600;
+ color: var(--text);
}
-.header-link {
- font-size: 14px;
- color: #fff;
- text-decoration: none;
- background: rgba(0, 0, 0, 0.2);
- padding: 0.5rem 1rem;
+.brand-subtitle {
+ font-size: 0.74rem;
+ color: var(--muted);
+}
+
+.nav-link {
+ color: var(--muted);
+ font-size: 0.95rem;
+ padding: 0.55rem 0.75rem !important;
border-radius: 8px;
- transition: all 0.3s ease;
}
-.header-link:hover {
- background: rgba(0, 0, 0, 0.4);
- text-decoration: none;
+.nav-link:hover,
+.nav-link.active {
+ color: var(--text);
+ background: rgba(255, 255, 255, 0.06);
}
-/* Admin Styles */
-.admin-container {
- max-width: 900px;
- margin: 3rem auto;
- padding: 2.5rem;
- background: rgba(255, 255, 255, 0.85);
- backdrop-filter: blur(20px);
- -webkit-backdrop-filter: blur(20px);
+.scene-label {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.55rem;
+ margin-bottom: 1rem;
+ padding: 0.38rem 0.78rem;
+ border-radius: 999px;
+ border: 1px solid rgba(255, 255, 255, 0.12);
+ background: rgba(255, 255, 255, 0.04);
+ color: var(--text);
+ font-size: 0.76rem;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+}
+
+.scene-label::before {
+ content: "";
+ width: 0.45rem;
+ height: 0.45rem;
+ border-radius: 50%;
+ background: linear-gradient(135deg, var(--accent), var(--accent-strong));
+ box-shadow: 0 0 18px rgba(199, 166, 111, 0.75);
+}
+
+.hero-section {
+ padding-top: 5.6rem;
+ padding-bottom: 4.5rem;
+}
+
+.hero-stage {
+ min-height: calc(100vh - 76px);
+ display: flex;
+ align-items: center;
+}
+
+.hero-stage::before {
+ content: "";
+ position: absolute;
+ inset: 2rem 0 auto;
+ height: 32rem;
+ background:
+ radial-gradient(circle at 16% 25%, rgba(240, 216, 173, 0.22), transparent 22%),
+ radial-gradient(circle at 82% 16%, rgba(92, 113, 168, 0.18), transparent 20%),
+ linear-gradient(90deg, rgba(255, 255, 255, 0.03), transparent 28%, transparent 72%, rgba(255, 255, 255, 0.03));
+ filter: blur(10px);
+ pointer-events: none;
+}
+
+.eyebrow,
+.list-label,
+.modal-eyebrow,
+.moment-kicker,
+.timeline-year {
+ text-transform: uppercase;
+ letter-spacing: 0.12em;
+ font-size: 0.73rem;
+ color: var(--accent);
+}
+
+.display-hero {
+ font-size: clamp(3rem, 6.4vw, 5.8rem);
+ line-height: 0.92;
+ letter-spacing: -0.06em;
+ margin: 0.8rem 0 1.25rem;
+ max-width: 10.5ch;
+ text-wrap: balance;
+}
+
+.hero-lead,
+.section-heading p,
+.content-panel p,
+.timeline-card p,
+.moment-card p,
+.gallery-body p,
+.quote-card footer,
+.footer-copy,
+.modal-copy,
+.filter-status {
+ color: var(--muted);
+}
+
+.hero-lead {
+ max-width: 42rem;
+ font-size: 1.06rem;
+}
+
+.hero-actions {
+ margin-top: 1.75rem;
+ margin-bottom: 1.9rem;
+}
+
+.btn {
+ border-radius: 999px;
+ padding: 0.88rem 1.2rem;
+ font-weight: 600;
+ box-shadow: none !important;
+ transition: transform 0.22s ease, box-shadow 0.22s ease, background 0.22s ease, border-color 0.22s ease;
+}
+
+.btn:hover,
+.btn:focus-visible {
+ transform: translateY(-1px);
+}
+
+.btn-accent {
+ background: linear-gradient(135deg, var(--accent-strong), var(--accent));
+ border: 1px solid rgba(240, 216, 173, 0.85);
+ color: #101113;
+ box-shadow: 0 16px 34px rgba(199, 166, 111, 0.22) !important;
+}
+
+.btn-accent:hover,
+.btn-accent:focus {
+ background: #c4ad88;
+ border-color: #c4ad88;
+ color: #101113;
+}
+
+.btn-outline-light {
+ border-color: rgba(255, 255, 255, 0.18);
+ background: rgba(255, 255, 255, 0.03);
+}
+
+.btn-outline-light:hover,
+.btn-outline-light:focus {
+ background: rgba(255, 255, 255, 0.08);
+ border-color: rgba(255, 255, 255, 0.2);
+}
+
+.hero-meta {
+ max-width: 44rem;
+}
+
+.stat-card,
+.content-panel,
+.timeline-card,
+.moment-card,
+.quote-card,
+.gallery-card,
+.gallery-modal-content,
+.modal-image-frame {
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.01)), var(--surface);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-lg);
+ box-shadow: var(--shadow-soft);
+ backdrop-filter: blur(14px);
+}
+
+.stat-card {
+ padding: 1rem 1rem 0.95rem;
+ min-height: 100%;
+ position: relative;
+ overflow: hidden;
+}
+
+.stat-card::after {
+ content: "";
+ position: absolute;
+ inset: auto -12% -46% auto;
+ width: 7rem;
+ height: 7rem;
+ border-radius: 50%;
+ background: radial-gradient(circle, rgba(199, 166, 111, 0.24), transparent 70%);
+}
+
+.stat-value {
+ display: block;
+ font-size: 1.05rem;
+ font-weight: 700;
+ color: var(--text);
+}
+
+.stat-label {
+ display: block;
+ margin-top: 0.25rem;
+ font-size: 0.82rem;
+ color: var(--muted);
+}
+
+.hero-media {
+ max-width: 30rem;
+ margin-inline: auto;
+ position: relative;
+}
+
+.media-frame {
+ position: relative;
+ overflow: hidden;
border-radius: 24px;
- box-shadow: 0 20px 50px rgba(0,0,0,0.15);
- border: 1px solid rgba(255, 255, 255, 0.4);
+ border: 1px solid rgba(255, 255, 255, 0.12);
+ background: #0c0d0e;
+ box-shadow: var(--shadow);
+}
+
+.media-frame::after {
+ content: "";
+ position: absolute;
+ inset: 0;
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.03), transparent 28%, rgba(0, 0, 0, 0.28) 100%);
+ pointer-events: none;
+}
+
+.media-frame-badge {
+ position: absolute;
+ top: 1rem;
+ left: 1rem;
+ z-index: 2;
+ padding: 0.45rem 0.8rem;
+ border-radius: 999px;
+ background: rgba(7, 8, 10, 0.62);
+ border: 1px solid rgba(255, 255, 255, 0.14);
+ color: var(--text);
+ font-size: 0.78rem;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ backdrop-filter: blur(10px);
+}
+
+.media-frame img {
+ width: 100%;
+ height: auto;
+ aspect-ratio: 4 / 5;
+ object-fit: cover;
+ filter: saturate(0.88) contrast(1.06) brightness(0.92);
+ transform: scale(1.02);
+}
+
+.image-caption {
+ margin-top: 0.85rem;
+ color: var(--muted);
+ font-size: 0.86rem;
+}
+
+.section-heading {
+ max-width: 46rem;
+ margin-bottom: 2.2rem;
+}
+
+.section-heading h2 {
+ font-size: clamp(2rem, 4vw, 3.25rem);
+ line-height: 1.02;
+ margin: 0.65rem 0 0.9rem;
+ letter-spacing: -0.05em;
+}
+
+.content-panel,
+.moment-card,
+.quote-card {
+ padding: 1.35rem;
+}
+
+.content-panel h3,
+.timeline-card h3,
+.moment-card h3,
+.gallery-body h3 {
+ font-size: 1.15rem;
+ margin-bottom: 0.7rem;
+}
+
+.detail-list li {
+ display: flex;
+ flex-direction: column;
+ gap: 0.2rem;
+ padding: 0.9rem 0;
+ border-top: 1px solid rgba(255, 255, 255, 0.07);
+}
+
+.detail-list li:first-child {
+ border-top: 0;
+ padding-top: 0.2rem;
+}
+
+.detail-list span {
+ color: var(--muted);
+ font-size: 0.83rem;
+ text-transform: uppercase;
+ letter-spacing: 0.12em;
+}
+
+.detail-list strong {
+ font-size: 0.98rem;
+ font-weight: 600;
+}
+
+.timeline-grid {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 1rem;
+}
+
+.timeline-card {
+ padding: 1.4rem;
+}
+
+.timeline-card ul {
+ margin: 1rem 0 0;
+ padding-left: 1.1rem;
+ color: var(--muted);
+}
+
+.timeline-card li + li {
+ margin-top: 0.5rem;
+}
+
+.moment-card {
+ min-height: 100%;
+}
+
+.gallery-toolbar {
+ display: flex;
+ gap: 1rem;
+ justify-content: space-between;
+ align-items: center;
+ flex-wrap: wrap;
+ margin-bottom: 1.5rem;
+}
+
+.btn-filter {
+ background: transparent;
+ border: 1px solid var(--border);
+ color: var(--muted);
+ padding: 0.68rem 0.95rem;
+}
+
+.btn-filter:hover,
+.btn-filter:focus,
+.btn-filter.active {
+ background: var(--accent-soft);
+ border-color: rgba(184, 160, 122, 0.45);
+ color: var(--text);
+}
+
+.gallery-card {
+ width: 100%;
+ padding: 0;
+ color: inherit;
+ overflow: hidden;
+ transition: transform 0.24s ease, border-color 0.24s ease, background 0.24s ease;
+}
+
+.gallery-card:hover,
+.gallery-card:focus-visible {
+ transform: translateY(-4px);
+ border-color: rgba(184, 160, 122, 0.45);
+ background: var(--surface-strong);
+}
+
+.gallery-image-wrap {
+ background: #0d0f11;
+ overflow: hidden;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
+}
+
+.gallery-image {
+ width: 100%;
+ height: 21rem;
+ object-fit: cover;
+ filter: grayscale(0.08);
+}
+
+.gallery-body {
+ padding: 1rem 1rem 1.1rem;
+}
+
+.gallery-meta {
+ display: flex;
+ justify-content: space-between;
+ gap: 1rem;
+ font-size: 0.75rem;
+ text-transform: uppercase;
+ letter-spacing: 0.12em;
+ color: var(--accent);
+ margin-bottom: 0.7rem;
+}
+
+.gallery-item.is-hidden {
+ display: none;
+}
+
+.quote-card p {
+ font-size: 1.28rem;
+ line-height: 1.3;
+ letter-spacing: -0.03em;
+ margin-bottom: 1rem;
+}
+
+.site-footer {
+ padding: 2rem 0 2.6rem;
+ background: #0f1113;
+}
+
+.footer-title {
+ font-weight: 600;
+ margin-bottom: 0.25rem;
+}
+
+.gallery-modal-content {
+ background: var(--surface-soft);
+}
+
+.modal-image-frame {
+ padding: 0.6rem;
+ background: #0c0d0e;
+}
+
+.modal-image-frame img {
+ width: 100%;
+ height: auto;
+ border-radius: 10px;
+ object-fit: cover;
+}
+
+.modal-copy {
+ padding: 1rem 0;
+}
+
+.toast {
+ border-radius: 12px;
+}
+
+.reveal {
+ opacity: 0;
+ transform: translateY(24px);
+ transition: opacity 0.8s ease, transform 0.8s ease;
+ will-change: transform, opacity;
+}
+
+.reveal.is-visible {
+ opacity: 1;
+ transform: translateY(0);
+}
+
+.reveal-delay-1 { transition-delay: 0.08s; }
+.reveal-delay-2 { transition-delay: 0.16s; }
+.reveal-delay-3 { transition-delay: 0.24s; }
+
+:focus-visible {
+ outline: 2px solid var(--accent);
+ outline-offset: 2px;
+}
+
+@media (max-width: 991.98px) {
+ .timeline-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .timeline-grid::before {
+ display: none;
+ }
+
+ .hero-section {
+ padding-top: 3.8rem;
+ }
+
+ .hero-floating-note {
+ right: 1rem;
+ bottom: 1rem;
+ }
+}
+
+@media (max-width: 767.98px) {
+ .section-shell {
+ padding: 3.4rem 0;
+ }
+
+ .display-hero {
+ max-width: 12ch;
+ }
+
+ .gallery-image {
+ height: 18rem;
+ }
+
+ .section-heading {
+ margin-bottom: 1.4rem;
+ }
+
+ .hero-marquee {
+ gap: 0.55rem;
+ letter-spacing: 0.12em;
+ }
+
+ .hero-floating-note {
+ position: static;
+ width: 100%;
+ margin-top: 1rem;
+ }
+}
+
+
+.hero-copy {
position: relative;
z-index: 1;
}
-.admin-container h1 {
- margin-top: 0;
- color: #212529;
- font-weight: 800;
-}
-
-.table {
- width: 100%;
- border-collapse: separate;
- border-spacing: 0 8px;
- margin-top: 1.5rem;
-}
-
-.table th {
- background: transparent;
- border: none;
- padding: 1rem;
- color: #6c757d;
- font-weight: 600;
- text-transform: uppercase;
- font-size: 0.75rem;
- letter-spacing: 1px;
-}
-
-.table td {
- background: #fff;
- padding: 1rem;
- border: none;
-}
-
-.table tr td:first-child { border-radius: 12px 0 0 12px; }
-.table tr td:last-child { border-radius: 0 12px 12px 0; }
-
-.form-group {
+.hero-roles {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.6rem;
margin-bottom: 1.25rem;
}
-.form-group label {
+.hero-roles span {
+ padding: 0.42rem 0.78rem;
+ border-radius: 999px;
+ border: 1px solid rgba(255, 255, 255, 0.09);
+ background: rgba(255, 255, 255, 0.03);
+ color: var(--muted);
+ font-size: 0.8rem;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+}
+
+.hero-marquee {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.85rem;
+ margin-top: 1.4rem;
+ color: rgba(244, 243, 239, 0.72);
+ font-size: 0.85rem;
+ letter-spacing: 0.18em;
+ text-transform: uppercase;
+}
+
+.hero-marquee span {
+ position: relative;
+ padding-right: 1rem;
+}
+
+.hero-marquee span::after {
+ content: "•";
+ position: absolute;
+ right: 0;
+ color: rgba(199, 166, 111, 0.7);
+}
+
+.hero-marquee span:last-child::after {
+ display: none;
+}
+
+
+.hero-floating-note {
+ position: absolute;
+ right: -1.2rem;
+ bottom: 2.4rem;
+ width: min(15rem, 72%);
+ padding: 1rem 1.05rem;
+ border-radius: 18px;
+ border: 1px solid rgba(255, 255, 255, 0.12);
+ background: rgba(12, 14, 16, 0.78);
+ box-shadow: var(--shadow-soft);
+ backdrop-filter: blur(12px);
+}
+
+.floating-kicker {
display: block;
- margin-bottom: 0.5rem;
- font-weight: 600;
- font-size: 0.9rem;
+ margin-bottom: 0.35rem;
+ color: var(--accent);
+ font-size: 0.74rem;
+ text-transform: uppercase;
+ letter-spacing: 0.14em;
}
-.form-control {
- width: 100%;
- padding: 0.75rem 1rem;
- border: 1px solid rgba(0, 0, 0, 0.1);
- border-radius: 12px;
- background: #fff;
- transition: all 0.3s ease;
- box-sizing: border-box;
+.hero-floating-note strong {
+ display: block;
+ font-size: 0.96rem;
+ line-height: 1.45;
}
-.form-control:focus {
- outline: none;
- border-color: #23a6d5;
- box-shadow: 0 0 0 3px rgba(35, 166, 213, 0.1);
+
+.content-panel,
+.timeline-card,
+.moment-card,
+.quote-card,
+.gallery-card {
+ transition: transform 0.28s ease, border-color 0.28s ease, box-shadow 0.28s ease, background 0.28s ease;
}
-.header-container {
- display: flex;
- justify-content: space-between;
- align-items: center;
+.content-panel:hover,
+.timeline-card:hover,
+.moment-card:hover,
+.quote-card:hover,
+.gallery-card:hover {
+ transform: translateY(-4px);
+ border-color: rgba(199, 166, 111, 0.28);
+ box-shadow: var(--shadow);
}
-.header-links {
- display: flex;
- gap: 1rem;
+.timeline-grid {
+ position: relative;
}
-.admin-card {
- background: rgba(255, 255, 255, 0.6);
- padding: 2rem;
- border-radius: 20px;
- border: 1px solid rgba(255, 255, 255, 0.5);
- margin-bottom: 2.5rem;
- box-shadow: 0 10px 30px rgba(0,0,0,0.05);
+.timeline-grid::before {
+ content: "";
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0.9rem;
+ height: 1px;
+ background: linear-gradient(90deg, transparent, rgba(199, 166, 111, 0.4), transparent);
}
-.admin-card h3 {
- margin-top: 0;
- margin-bottom: 1.5rem;
- font-weight: 700;
+.timeline-card {
+ position: relative;
+ padding: 1.45rem;
}
-.btn-delete {
- background: #dc3545;
- color: white;
- border: none;
- padding: 0.25rem 0.5rem;
- border-radius: 4px;
- cursor: pointer;
+.timeline-card::before {
+ content: "";
+ position: absolute;
+ top: -0.5rem;
+ left: 1.45rem;
+ width: 0.7rem;
+ height: 0.7rem;
+ border-radius: 50%;
+ background: linear-gradient(135deg, var(--accent-strong), var(--accent));
+ box-shadow: 0 0 0 6px rgba(199, 166, 111, 0.12);
}
-.btn-add {
- background: #212529;
- color: white;
- border: none;
- padding: 0.5rem 1rem;
- border-radius: 4px;
- cursor: pointer;
- margin-top: 1rem;
+.quote-card {
+ position: relative;
+ overflow: hidden;
}
-.btn-save {
- background: #0088cc;
- color: white;
- border: none;
- padding: 0.8rem 1.5rem;
- border-radius: 12px;
- cursor: pointer;
- font-weight: 600;
- width: 100%;
- transition: all 0.3s ease;
+.quote-card::before {
+ content: "";
+ position: absolute;
+ top: -1.6rem;
+ right: 0.9rem;
+ font-size: 8rem;
+ line-height: 1;
+ color: rgba(255, 255, 255, 0.04);
+ font-family: Georgia, serif;
}
-.webhook-url {
- font-size: 0.85em;
- color: #555;
- margin-top: 0.5rem;
+.gallery-image-wrap {
+ position: relative;
}
-.history-table-container {
- overflow-x: auto;
- background: rgba(255, 255, 255, 0.4);
- padding: 1rem;
- border-radius: 12px;
- border: 1px solid rgba(255, 255, 255, 0.3);
+.gallery-image-wrap::after {
+ content: "";
+ position: absolute;
+ inset: 0;
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent 30%, rgba(0, 0, 0, 0.38));
+ pointer-events: none;
}
-.history-table {
- width: 100%;
+.gallery-card:hover .gallery-image,
+.gallery-card:focus-visible .gallery-image {
+ transform: scale(1.05);
}
-.history-table-time {
- width: 15%;
- white-space: nowrap;
- font-size: 0.85em;
- color: #555;
+.gallery-image {
+ transition: transform 0.5s ease;
}
-.history-table-user {
- width: 35%;
- background: rgba(255, 255, 255, 0.3);
- border-radius: 8px;
- padding: 8px;
+.site-footer {
+ background: linear-gradient(180deg, rgba(11, 13, 15, 0.92), #090a0b);
}
-
-.history-table-ai {
- width: 50%;
- background: rgba(255, 255, 255, 0.5);
- border-radius: 8px;
- padding: 8px;
-}
-
-.no-messages {
- text-align: center;
- color: #777;
-}
\ No newline at end of file
diff --git a/assets/js/main.js b/assets/js/main.js
index d349598..510629f 100644
--- a/assets/js/main.js
+++ b/assets/js/main.js
@@ -1,39 +1,122 @@
document.addEventListener('DOMContentLoaded', () => {
- const chatForm = document.getElementById('chat-form');
- const chatInput = document.getElementById('chat-input');
- const chatMessages = document.getElementById('chat-messages');
+ const toastElement = document.getElementById('pageToast');
+ const toastBody = document.getElementById('pageToastBody');
+ const pageToast = toastElement ? new bootstrap.Toast(toastElement, { delay: 2200 }) : null;
- const appendMessage = (text, sender) => {
- const msgDiv = document.createElement('div');
- msgDiv.classList.add('message', sender);
- msgDiv.textContent = text;
- chatMessages.appendChild(msgDiv);
- chatMessages.scrollTop = chatMessages.scrollHeight;
+ const showToast = (message) => {
+ if (!pageToast || !toastBody || !message) return;
+ toastBody.textContent = message;
+ pageToast.show();
};
- chatForm.addEventListener('submit', async (e) => {
- e.preventDefault();
- const message = chatInput.value.trim();
- if (!message) return;
-
- appendMessage(message, 'visitor');
- chatInput.value = '';
-
- try {
- const response = await fetch('api/chat.php', {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({ message })
- });
- const data = await response.json();
-
- // Artificial delay for realism
- setTimeout(() => {
- appendMessage(data.reply, 'bot');
- }, 500);
- } catch (error) {
- console.error('Error:', error);
- appendMessage("Sorry, something went wrong. Please try again.", 'bot');
- }
+ document.querySelectorAll('[data-toast-message]').forEach((link) => {
+ link.addEventListener('click', () => showToast(link.getAttribute('data-toast-message')));
});
+
+ const revealItems = document.querySelectorAll('.reveal');
+ if ('IntersectionObserver' in window && revealItems.length) {
+ const revealObserver = new IntersectionObserver((entries) => {
+ entries.forEach((entry) => {
+ if (entry.isIntersecting) {
+ entry.target.classList.add('is-visible');
+ revealObserver.unobserve(entry.target);
+ }
+ });
+ }, { threshold: 0.16 });
+
+ revealItems.forEach((item) => revealObserver.observe(item));
+ } else {
+ revealItems.forEach((item) => item.classList.add('is-visible'));
+ }
+
+ const filterButtons = document.querySelectorAll('.btn-filter');
+ const galleryItems = document.querySelectorAll('.gallery-item');
+ const filterStatus = document.getElementById('filterStatus');
+
+ filterButtons.forEach((button) => {
+ button.addEventListener('click', () => {
+ const filter = button.dataset.filter || 'all';
+ filterButtons.forEach((btn) => btn.classList.remove('active'));
+ button.classList.add('active');
+
+ let visibleCount = 0;
+ galleryItems.forEach((item) => {
+ const matches = filter === 'all' || item.dataset.era === filter;
+ item.classList.toggle('is-hidden', !matches);
+ if (matches) visibleCount += 1;
+ });
+
+ const statusText = filter === 'all'
+ ? `Showing all ${visibleCount} images.`
+ : `Showing ${visibleCount} ${filter} image${visibleCount === 1 ? '' : 's'}.`;
+
+ if (filterStatus) filterStatus.textContent = statusText;
+ showToast(statusText);
+ });
+ });
+
+ const galleryModal = document.getElementById('galleryModal');
+ if (galleryModal) {
+ const modalLabel = document.getElementById('galleryModalLabel');
+ const modalMeta = document.getElementById('galleryModalMeta');
+ const modalImage = document.getElementById('galleryModalImage');
+ const modalCaption = document.getElementById('galleryModalCaption');
+
+ galleryModal.addEventListener('show.bs.modal', (event) => {
+ const trigger = event.relatedTarget;
+ if (!trigger) return;
+
+ const title = trigger.getAttribute('data-title') || 'Gallery image';
+ const eraLabel = trigger.getAttribute('data-era-label') || 'Archive';
+ const year = trigger.getAttribute('data-year') || '';
+ const caption = trigger.getAttribute('data-caption') || '';
+ const image = trigger.getAttribute('data-image') || '';
+ const alt = trigger.getAttribute('data-alt') || title;
+
+ if (modalLabel) modalLabel.textContent = title;
+ if (modalMeta) modalMeta.textContent = `${eraLabel} · ${year}`;
+ if (modalCaption) modalCaption.textContent = caption;
+ if (modalImage) {
+ modalImage.src = image;
+ modalImage.alt = alt;
+ }
+ });
+ }
+
+ const sections = document.querySelectorAll('main section[id]');
+ const navLinks = document.querySelectorAll('#mainNav .nav-link');
+ const setActiveLink = () => {
+ let currentId = '';
+ sections.forEach((section) => {
+ const top = section.getBoundingClientRect().top;
+ if (top <= 140) currentId = section.id;
+ });
+
+ navLinks.forEach((link) => {
+ const href = link.getAttribute('href');
+ link.classList.toggle('active', href === `#${currentId}`);
+ });
+ };
+
+ setActiveLink();
+ document.addEventListener('scroll', setActiveLink, { passive: true });
+
+
+ const parallaxItems = document.querySelectorAll('[data-parallax]');
+ if (parallaxItems.length && !window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
+ const updateParallax = () => {
+ parallaxItems.forEach((item) => {
+ const rect = item.getBoundingClientRect();
+ const centerOffset = (window.innerHeight * 0.5 - rect.top) / window.innerHeight;
+ const depth = item.dataset.parallax === 'media' ? 16 : 10;
+ const translateY = Math.max(-depth, Math.min(depth, centerOffset * depth));
+ item.style.transform = `translate3d(0, ${translateY}px, 0)`;
+ });
+ };
+
+ updateParallax();
+ window.addEventListener('scroll', updateParallax, { passive: true });
+ window.addEventListener('resize', updateParallax);
+ }
+
});
diff --git a/index.php b/index.php
index 7205f3d..00e6593 100644
--- a/index.php
+++ b/index.php
@@ -1,150 +1,429 @@
'bodybuilding',
+ 'year' => '1974',
+ 'title' => "Prime competition form",
+ 'caption' => "A defining bodybuilding-era image from the run that made him one of the sport's most recognizable figures.",
+ 'image' => 'https://upload.wikimedia.org/wikipedia/commons/0/05/Arnold_Schwarzenegger_1974.jpg',
+ 'alt' => 'Arnold Schwarzenegger posing during his bodybuilding career in 1974.'
+ ],
+ [
+ 'era' => 'acting',
+ 'year' => '2003',
+ 'title' => "Cannes red carpet presence",
+ 'caption' => 'An image from Cannes that reflects the global star power he carried well beyond action cinema.',
+ 'image' => 'https://upload.wikimedia.org/wikipedia/commons/e/ed/Arnold_Schwarzenegger_2003.jpg',
+ 'alt' => 'Arnold Schwarzenegger at the 2003 Cannes Film Festival.'
+ ],
+ [
+ 'era' => 'politics',
+ 'year' => '2004',
+ 'title' => "Governor-era portrait",
+ 'caption' => "A formal public image from the period when he served as California's 38th governor.",
+ 'image' => 'https://upload.wikimedia.org/wikipedia/commons/b/bb/Arnold_Schwarzenegger_2004-01-30.jpg',
+ 'alt' => 'Arnold Schwarzenegger during his time as governor of California.'
+ ],
+ [
+ 'era' => 'acting',
+ 'year' => '2017',
+ 'title' => "Festival circuit return",
+ 'caption' => "A later public appearance that reinforces how durable his public image remained decades after the first breakthrough.",
+ 'image' => 'https://upload.wikimedia.org/wikipedia/commons/c/cc/Arnold_Schwarzenegger_2012.jpg',
+ 'alt' => 'Arnold Schwarzenegger at a public appearance in 2012.'
+ ],
+ [
+ 'era' => 'legacy',
+ 'year' => '2019',
+ 'title' => "Public figure, decades later",
+ 'caption' => "A contemporary portrait that captures the elder-statesman phase of his public life.",
+ 'image' => 'https://upload.wikimedia.org/wikipedia/commons/6/6e/Arnold_Schwarzenegger-2019.jpg',
+ 'alt' => 'Arnold Schwarzenegger in 2019.'
+ ],
+ [
+ 'era' => 'politics',
+ 'year' => '2003',
+ 'title' => "Service and visibility",
+ 'caption' => "An image from a military support context, reflecting the civic and ceremonial side of his public role.",
+ 'image' => 'https://upload.wikimedia.org/wikipedia/commons/b/b3/Arnold_Schwarzenegger_Enduring_Freedom.jpg',
+ 'alt' => 'Arnold Schwarzenegger visiting service members during a public service event.'
+ ],
+];
?>
-
-
- New Style
-
-
-
-
-
-
-
-
-
+
+
+ = htmlspecialchars($projectName) ?>
+
+
+
+
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
Analyzing your requirements and generating your website…
-
- Loading…
+
+
+
+
+
+
+
+
+
+
+
+
Cinematic profile
+
Public editorial landing page
+
A career built in three unmistakable acts.
+
From elite bodybuilding to blockbuster cinema to the governor's office, Arnold Schwarzenegger's career stands out because each chapter felt larger than the one before it.
+
+ Athlete
+ Actor
+ Governor
+
+
+
+
+ Discipline
+ Reinvention
+ Screen myth
+ Executive power
+
+
+
+
+
+
+
+
+
+
+
+
Overview
+
Why this career arc still feels singular.
+
Arnold Schwarzenegger's public image works because it never stayed fixed. He emerged as a bodybuilding phenomenon, crossed into Hollywood at full scale, then converted celebrity into an executive political role.
+
+
+
+
+ Three chapters, one through-line
+ The through-line is discipline. In bodybuilding, it meant obsessive repetition and visual presence. In film, it became physical charisma and instantly readable screen identity. In politics, it turned into a different kind of public performance: broad messaging, visibility, and executive symbolism.
+ This landing page is designed as a clean, scroll-first story: fewer distractions, stronger typography, restrained color, and image-led pacing.
+
+
+
+
+ Fast read
+
+ Bodybuilding Mr. Universe at 20, then seven Olympia titles
+ Acting From cult appearances to action-star permanence
+ Politics California governor with a highly visible public brand
+ Legacy Still active in media, fitness, and civic advocacy
+
+
+
+
+
+
+
+
+
+
+
Timeline
+
A compressed career timeline.
+
The page highlights the milestones most visitors care about first: arrival, breakthrough, cultural dominance, and reinvention.
+
+
+
+ 1968–1975
+ Bodybuilding dominance
+ He moved from Austria to the United States, became the youngest Mr. Universe at age 20, and built a run that culminated in seven Mr. Olympia victories.
+
+ Rapid rise through international competition
+ Visual identity tied to discipline and spectacle
+ Pumping Iron helped widen his audience
+
+
+
+ 1976–2002
+ Hollywood scale
+ He converted physique into screen presence, then screen presence into a durable action-movie persona that became global pop culture.
+
+ Conan the Barbarian announced him as a leading man
+ The Terminator made the persona unforgettable
+ Comedy and family films broadened the image
+
+
+
+ 2003–today
+ Politics, advocacy, and legacy
+ His election as California's 38th governor marked a rare shift from entertainment fame to statewide executive power, later followed by a return to media and public advocacy.
+
+ Governor of California from 2003 to 2011
+ Fitness, climate, and civic messaging remain part of the brand
+ Public legacy now spans sport, entertainment, and politics
+
+
+
+
+
+
+
+
+
+
Signature moments
+
Milestones that define the public narrative.
+
Rather than listing everything, this section isolates the moments that best explain why the career still reads as unusually expansive.
+
+
+
+
+ Sport
+ Mr. Universe at 20
+ Early proof of exceptional ambition and stage presence.
+
+
+
+
+ Film
+ Action-star permanence
+ Blockbuster roles turned a niche celebrity into a mass-market icon.
+
+
+
+
+ Award
+ Golden Globe win
+ Stay Hungry signaled early crossover potential in film.
+
+
+
+
+ Public office
+ Governor of California
+ A rare leap from celebrity scale to executive political office.
+
+
+
+
+
+
+
+
+
+
Gallery
+
Browse the career through images.
+
Use the filters to move between bodybuilding, acting, politics, and the broader legacy chapter. Each card opens a larger image view.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ = htmlspecialchars(ucfirst($item['era'])) ?>
+ = htmlspecialchars($item['year']) ?>
+
+
= htmlspecialchars($item['title']) ?>
+
= htmlspecialchars($item['caption']) ?>
+
+
+
+
+
+
+
+
+
+
+
+
Notable quotes
+
Lines people still associate with the persona.
+
Some lines became larger than the films themselves, helping cement the screen character and public mythology.
+
+
+
+
+ “I'll be back.”
+ — Screen line that became part of pop culture shorthand
+
+
+
+
+ “Strength does not come from winning.”
+ — A line often linked to his discipline-first public image
+
+
+
+
+ “What is the point of being on this Earth if you are going to be like everyone else?”
+ — A quote that mirrors the scale of his career ambitions
+
+
+
+
+
-
- Page updated: = htmlspecialchars($now) ?> (UTC)
+
+
+
+
+
+
+
+
+