Deploy FT & NYT Hybrid Broadsheet UI overhaul to production

This commit is contained in:
WMJ Ismail
2026-10-10 08:36:02 +02:00
parent 798c3b6068
commit d0808ed3a1
6 changed files with 1419 additions and 0 deletions
+718
View File
@@ -0,0 +1,718 @@
/* ============================================================
FT & NYT HYBRID BROADSHEET DESIGN TOKENS & SYSTEM
Aesthetics: FT Warm Linen (#FFF1E5) + Hairline Borders (#E2D3C4)
Structure: NYT 3-Zone Front Page Lead + Opinion Rail + 4-Col Ribbons
Responsive: Mobile (iPhone) to Desktop 1440px
============================================================ */
:root {
--ft-bg-paper: #FFF1E5;
--ft-bg-card: #F8EBE0;
--ft-bg-contrast: #201D1A;
--ft-ink-primary: #111111;
--ft-ink-secondary: #4A443E;
--ft-ink-muted: #7A726A;
--ft-accent-green: #0E4D36;
--ft-accent-green-light: #E7F3EE;
--ft-accent-burgundy: #9E2A2B;
--ft-border-hairline: #E2D3C4;
--ft-border-bold: #111111;
}
body {
background-color: var(--ft-bg-paper) !important;
color: var(--ft-ink-primary) !important;
font-family: 'Source Serif 4', Georgia, serif;
font-size: 16px;
line-height: 1.55;
-webkit-font-smoothing: antialiased;
}
.site {
background-color: var(--ft-bg-paper) !important;
}
/* 1. TOP TELEMETRY BAR */
.ft-top-telemetry-bar {
background: #181513;
color: #E2D5C7;
font-family: 'Inter', -apple-system, sans-serif;
font-size: 11px;
padding: 7px 32px;
border-bottom: 1px solid #2D2723;
}
.ft-telemetry-inner {
max-width: 1320px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.ft-tel-left {
display: flex;
gap: 12px;
align-items: center;
}
.ft-tel-date {
color: #FFF;
font-weight: 600;
}
.ft-tel-bullet {
color: #665D56;
}
.ft-tel-center {
display: flex;
gap: 12px;
align-items: center;
font-family: 'JetBrains Mono', monospace;
font-size: 10.5px;
}
.ft-badge-up {
background: var(--ft-accent-green);
color: #fff;
padding: 1px 5px;
border-radius: 2px;
font-size: 9px;
font-weight: 700;
}
.ft-tel-right {
display: flex;
gap: 14px;
align-items: center;
}
.ft-tel-link {
color: #E2D5C7;
text-decoration: none;
font-weight: 600;
}
.ft-tel-link:hover { color: #FFF; }
.ft-tel-btn {
background: var(--ft-accent-green);
color: #fff !important;
padding: 3px 8px;
border-radius: 2px;
font-weight: 700;
text-transform: uppercase;
font-size: 10px;
text-decoration: none;
}
/* 2. REFINED MASTHEAD & NAVIGATION */
.ft-nav {
background: var(--ft-bg-paper) !important;
border-bottom: 2px solid var(--ft-border-bold) !important;
}
.ft-nav-inner {
max-width: 1320px !important;
padding: 0 32px !important;
}
.ft-nav-logo {
font-family: 'Cinzel', 'Playfair Display', Georgia, serif !important;
font-size: 26px !important;
font-weight: 900 !important;
letter-spacing: 0.16em !important;
color: var(--ft-ink-primary) !important;
}
/* 3. FRONT PAGE LEAD GRID (NYT 3-ZONE) */
.ft-broadsheet-lead-zone {
max-width: 1320px;
margin: 0 auto;
padding: 24px 32px 32px;
border-bottom: 1px solid var(--ft-border-hairline);
}
.ft-lead-grid {
display: grid;
grid-template-columns: 3.2fr 4.3fr 2.5fr;
gap: 28px;
}
/* ZONE 1 (Left 32%) */
.ft-lead-col-left {
padding-right: 24px;
border-right: 1px solid var(--ft-border-hairline);
display: flex;
flex-direction: column;
gap: 24px;
}
.ft-lead-kicker {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.12em;
color: var(--ft-accent-green);
display: block;
margin-bottom: 6px;
}
.ft-lead-kicker a { color: inherit; text-decoration: none; }
.ft-kicker-burgundy { color: var(--ft-accent-burgundy) !important; }
.ft-lead-headline {
font-family: 'Newsreader', 'Source Serif 4', Georgia, serif;
font-size: 32px;
line-height: 1.15;
font-weight: 700;
color: var(--ft-ink-primary);
margin-bottom: 12px;
}
.ft-lead-headline a { color: inherit; text-decoration: none; }
.ft-lead-headline a:hover { color: var(--ft-accent-green); }
.ft-dateline {
font-family: 'Inter', -apple-system, sans-serif;
font-weight: 800;
font-size: 12px;
color: var(--ft-ink-primary);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.ft-lead-prose {
font-size: 16px;
line-height: 1.6;
color: var(--ft-ink-secondary);
margin-bottom: 16px;
}
/* SEMAFOR TAKEAWAY DRAWER */
.ft-takeaway-drawer {
background: var(--ft-bg-card);
border: 1px solid var(--ft-border-hairline);
border-left: 3px solid var(--ft-accent-green);
padding: 14px 16px;
display: flex;
flex-direction: column;
gap: 8px;
font-size: 13.5px;
border-radius: 2px;
margin-bottom: 14px;
}
.ft-takeaway-row {
display: grid;
grid-template-columns: 80px 1fr;
gap: 10px;
line-height: 1.45;
}
.ft-takeaway-tag {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 10px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--ft-accent-green);
}
.ft-lead-byline {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 11.5px;
color: var(--ft-ink-muted);
}
.ft-lead-byline strong, .ft-lead-byline a {
color: var(--ft-ink-primary);
text-decoration: none;
}
.ft-lead-byline a:hover { text-decoration: underline; }
.ft-lead-secondary-story {
border-top: 1px solid var(--ft-border-hairline);
padding-top: 20px;
}
.ft-secondary-headline {
font-family: 'Newsreader', 'Source Serif 4', Georgia, serif;
font-size: 20px;
line-height: 1.25;
font-weight: 600;
margin-bottom: 8px;
}
.ft-secondary-headline a { color: inherit; text-decoration: none; }
.ft-secondary-headline a:hover { color: var(--ft-accent-green); }
.ft-secondary-excerpt {
font-size: 14px;
color: var(--ft-ink-secondary);
line-height: 1.45;
margin-bottom: 8px;
}
/* ZONE 2 (Center 43%) */
.ft-lead-col-center {
padding-right: 24px;
border-right: 1px solid var(--ft-border-hairline);
display: flex;
flex-direction: column;
gap: 20px;
}
.ft-visual-frame {
width: 100%;
height: 310px;
background: #D8C8B8;
border: 1px solid var(--ft-border-hairline);
overflow: hidden;
border-radius: 2px;
}
.ft-visual-frame img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s ease;
}
.ft-visual-frame:hover img { transform: scale(1.02); }
.ft-photo-caption {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 11.5px;
color: var(--ft-ink-muted);
line-height: 1.4;
margin-top: 6px;
}
.ft-photo-credit {
text-transform: uppercase;
font-size: 10px;
}
.ft-center-story-body { margin-top: 8px; }
.ft-center-headline {
font-family: 'Newsreader', 'Source Serif 4', Georgia, serif;
font-size: 26px;
line-height: 1.2;
font-weight: 700;
margin-bottom: 8px;
}
.ft-center-headline a { color: inherit; text-decoration: none; }
.ft-center-headline a:hover { color: var(--ft-accent-green); }
.ft-center-excerpt {
font-size: 15px;
color: var(--ft-ink-secondary);
line-height: 1.55;
margin-bottom: 8px;
}
.ft-center-dual-split {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 18px;
border-top: 1px solid var(--ft-border-hairline);
padding-top: 18px;
}
.ft-mini-card {
display: flex;
flex-direction: column;
gap: 6px;
}
.ft-mini-card-bordered {
padding-left: 18px;
border-left: 1px solid var(--ft-border-hairline);
}
.ft-mini-headline {
font-family: 'Newsreader', 'Source Serif 4', Georgia, serif;
font-size: 16.5px;
font-weight: 600;
line-height: 1.3;
}
.ft-mini-headline a { color: inherit; text-decoration: none; }
.ft-mini-headline a:hover { color: var(--ft-accent-green); }
.ft-mini-excerpt {
font-size: 13.5px;
color: var(--ft-ink-secondary);
line-height: 1.45;
margin-bottom: 4px;
}
/* ZONE 3 (Right 25% - OPINION RAIL) */
.ft-lead-col-right {
display: flex;
flex-direction: column;
gap: 20px;
}
.ft-rail-header {
border-top: 3px solid var(--ft-border-bold);
border-bottom: 1px solid var(--ft-border-hairline);
padding: 8px 0;
display: flex;
justify-content: space-between;
align-items: center;
font-family: 'Inter', -apple-system, sans-serif;
font-size: 11px;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.12em;
}
.ft-rail-accent { color: var(--ft-accent-green); }
.ft-jauhari-spotlight-card {
background: #201D1A;
color: #FFF1E5;
padding: 16px;
border-radius: 2px;
display: flex;
flex-direction: column;
gap: 10px;
}
.ft-jauhari-meta-row {
display: flex;
align-items: center;
gap: 12px;
}
.ft-jauhari-avatar-frame {
width: 44px;
height: 44px;
border-radius: 50%;
border: 2px solid var(--ft-accent-green);
overflow: hidden;
background: #444;
flex-shrink: 0;
}
.ft-jauhari-avatar-frame img {
width: 100%;
height: 100%;
object-fit: cover;
}
.ft-jauhari-info {
font-family: 'Inter', -apple-system, sans-serif;
line-height: 1.2;
}
.ft-jauhari-name {
font-size: 13px;
font-weight: 700;
color: #FFF;
}
.ft-jauhari-tag {
font-size: 10px;
text-transform: uppercase;
color: #92C5B2;
font-weight: 600;
letter-spacing: 0.06em;
}
.ft-jauhari-headline {
font-family: 'Newsreader', 'Source Serif 4', Georgia, serif;
font-size: 17px;
line-height: 1.3;
font-weight: 700;
color: #FFF1E5;
}
.ft-jauhari-headline a { color: inherit; text-decoration: none; }
.ft-jauhari-headline a:hover { color: #92C5B2; }
.ft-jauhari-quote {
font-size: 13px;
color: #D5C8BD;
line-height: 1.45;
}
.ft-columnist-stack {
display: flex;
flex-direction: column;
gap: 14px;
}
.ft-columnist-row {
display: grid;
grid-template-columns: 42px 1fr;
gap: 12px;
align-items: flex-start;
padding-bottom: 12px;
border-bottom: 1px solid var(--ft-border-hairline);
}
.ft-col-avatar {
width: 42px;
height: 42px;
border-radius: 50%;
overflow: hidden;
border: 1px solid var(--ft-border-hairline);
background: #E8D8C8;
}
.ft-col-avatar img {
width: 100%;
height: 100%;
object-fit: cover;
}
.ft-col-details {
display: flex;
flex-direction: column;
gap: 3px;
}
.ft-col-byline {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 11.5px;
font-weight: 700;
text-transform: uppercase;
color: var(--ft-accent-green);
letter-spacing: 0.05em;
}
.ft-col-byline a { color: inherit; text-decoration: none; }
.ft-col-bio-snippet {
font-size: 12.5px;
color: var(--ft-ink-secondary);
line-height: 1.35;
}
.ft-wire-box {
background: var(--ft-bg-card);
border: 1px solid var(--ft-border-hairline);
border-top: 3px solid var(--ft-accent-burgundy);
padding: 14px;
}
.ft-wire-header {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 10px;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--ft-accent-burgundy);
margin-bottom: 6px;
}
.ft-wire-item {
padding: 6px 0;
border-bottom: 1px solid var(--ft-border-hairline);
}
.ft-wire-item:last-child { border-bottom: none; }
.ft-wire-time {
font-family: 'JetBrains Mono', monospace;
font-size: 9.5px;
color: var(--ft-accent-burgundy);
font-weight: 700;
}
.ft-wire-title {
font-size: 12.5px;
font-weight: 600;
line-height: 1.35;
margin-top: 2px;
}
.ft-wire-title a { color: inherit; text-decoration: none; }
.ft-wire-title a:hover { color: var(--ft-accent-green); }
/* 4. COMPUTATIONAL SUITE & HORIZONTAL TOPIC RIBBONS */
.ft-broadsheet-engines-ribbons {
max-width: 1320px;
margin: 0 auto;
padding: 0 32px 48px;
}
.ft-comp-dock {
background: var(--ft-bg-card);
border: 1px solid var(--ft-border-hairline);
border-top: 4px solid var(--ft-accent-green);
padding: 24px;
margin: 32px 0 40px;
border-radius: 2px;
}
.ft-comp-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.ft-comp-title {
font-family: 'Cinzel', serif;
font-size: 20px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--ft-ink-primary);
}
.ft-comp-subtitle {
font-size: 13px;
color: var(--ft-ink-muted);
font-family: 'Inter', -apple-system, sans-serif;
}
.ft-status-pill {
background: var(--ft-accent-green-light);
color: var(--ft-accent-green);
font-family: 'Inter', -apple-system, sans-serif;
font-size: 10px;
font-weight: 700;
padding: 3px 8px;
border-radius: 2px;
text-transform: uppercase;
}
.ft-comp-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
.ft-comp-card {
background: #fff;
border: 1px solid var(--ft-border-hairline);
padding: 18px;
display: flex;
flex-direction: column;
gap: 8px;
border-radius: 2px;
}
.ft-dock-badge {
align-self: flex-start;
background: var(--ft-accent-green-light);
color: var(--ft-accent-green);
font-family: 'Inter', -apple-system, sans-serif;
font-size: 9.5px;
font-weight: 700;
padding: 2px 6px;
border-radius: 2px;
text-transform: uppercase;
}
.ft-dock-name {
font-family: 'Newsreader', 'Source Serif 4', Georgia, serif;
font-size: 18px;
font-weight: 700;
}
.ft-dock-desc {
font-size: 13px;
color: var(--ft-ink-secondary);
line-height: 1.45;
margin-bottom: 8px;
}
.ft-dock-link {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--ft-accent-green);
text-decoration: none;
margin-top: auto;
}
.ft-dock-link:hover { text-decoration: underline; }
/* HORIZONTAL TOPIC RIBBONS */
.ft-section-ribbon {
padding: 28px 0;
border-bottom: 1px solid var(--ft-border-hairline);
}
.ft-ribbon-bar {
border-top: 2px solid var(--ft-border-bold);
border-bottom: 1px solid var(--ft-border-hairline);
padding: 7px 0;
margin-bottom: 20px;
display: flex;
justify-content: space-between;
align-items: center;
}
.ft-ribbon-tag-name {
font-family: 'Cinzel', serif;
font-size: 18px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.ft-ribbon-tag-name a { color: inherit; text-decoration: none; }
.ft-ribbon-view-all {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
color: var(--ft-accent-green);
text-decoration: none;
}
.ft-ribbon-grid-4 {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
}
.ft-ribbon-card {
display: flex;
flex-direction: column;
gap: 8px;
padding-right: 16px;
border-right: 1px solid var(--ft-border-hairline);
}
.ft-ribbon-card:last-child { border-right: none; padding-right: 0; }
.ft-ribbon-thumb {
width: 100%;
height: 140px;
background: #E8D8C8;
border-radius: 2px;
overflow: hidden;
margin-bottom: 4px;
}
.ft-ribbon-thumb img {
width: 100%;
height: 100%;
object-fit: cover;
}
.ft-ribbon-card-headline {
font-family: 'Newsreader', 'Source Serif 4', Georgia, serif;
font-size: 17px;
line-height: 1.25;
font-weight: 600;
}
.ft-ribbon-card-headline a { color: inherit; text-decoration: none; }
.ft-ribbon-card-headline a:hover { color: var(--ft-accent-green); }
.ft-ribbon-card-excerpt {
font-size: 13.5px;
color: var(--ft-ink-secondary);
line-height: 1.45;
}
.ft-ribbon-card-byline {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 11px;
color: var(--ft-ink-muted);
margin-top: auto;
}
.ft-ribbon-card-byline a { color: inherit; text-decoration: none; }
/* ============================================================
RESPONSIVE SYSTEM (Mobile & Tablet Breakpoints)
============================================================ */
@media (max-width: 992px) {
.ft-broadsheet-lead-zone, .ft-broadsheet-engines-ribbons { padding-left: 20px; padding-right: 20px; }
.ft-lead-grid { grid-template-columns: 1fr; gap: 32px; }
.ft-lead-col-left, .ft-lead-col-center {
padding-right: 0;
border-right: none;
border-bottom: 1px solid var(--ft-border-hairline);
padding-bottom: 28px;
}
.ft-comp-grid { grid-template-columns: 1fr; gap: 16px; }
.ft-ribbon-grid-4 { grid-template-columns: repeat(2, 1fr); gap: 20px; }
.ft-ribbon-card:nth-child(2) { border-right: none; padding-right: 0; }
}
@media (max-width: 768px) {
.ft-broadsheet-lead-zone, .ft-broadsheet-engines-ribbons { padding-left: 16px; padding-right: 16px; }
.ft-top-telemetry-bar {
padding: 6px 16px;
}
.ft-telemetry-inner {
flex-direction: column;
gap: 6px;
align-items: stretch;
}
.ft-tel-left {
justify-content: space-between;
font-size: 10.5px;
}
.ft-tel-center {
display: flex;
overflow-x: auto;
white-space: nowrap;
-webkit-overflow-scrolling: touch;
padding: 4px 0;
font-size: 10px;
scrollbar-width: none;
}
.ft-tel-center::-webkit-scrollbar { display: none; }
.ft-tel-right {
display: flex;
justify-content: space-between;
border-top: 1px solid #2D2723;
padding-top: 5px;
font-size: 11px;
}
.ft-lead-headline { font-size: 26px; line-height: 1.18; }
.ft-visual-frame { height: 210px; }
.ft-center-headline { font-size: 22px; line-height: 1.22; }
.ft-center-dual-split { grid-template-columns: 1fr; gap: 16px; }
.ft-mini-card-bordered {
padding-left: 0;
border-left: none;
border-top: 1px solid var(--ft-border-hairline);
padding-top: 16px;
}
.ft-takeaway-drawer { padding: 12px; }
.ft-takeaway-row { grid-template-columns: 1fr; gap: 3px; }
.ft-ribbon-grid-4 { grid-template-columns: 1fr; gap: 18px; }
.ft-ribbon-card {
border-right: none;
padding-right: 0;
border-bottom: 1px solid var(--ft-border-hairline);
padding-bottom: 14px;
}
.ft-ribbon-card:last-child { border-bottom: none; }
.ft-ribbon-thumb { height: 170px; }
}
+321
View File
@@ -0,0 +1,321 @@
<!DOCTYPE html>
<html lang="{{@site.locale}}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>{{meta_title page=(t " (Page %)")}}</title>
{{!-- Critical CSS - Above the fold --}}
<style>
*{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased}body{font-family:'Source Serif 4',Georgia,serif;font-size:18px;line-height:1.5;color:#000;background:#fff}h1,h2,h3,h4,h5,h6{font-family:'Playfair Display',Georgia,serif;font-weight:700;line-height:1.1;color:#000}h1{font-size:36px}h2{font-size:28px}h3{font-size:24px}a{color:#007A4D;text-decoration:none}a:hover{color:#006B42}.ft-container{max-width:1200px;margin:0 auto;padding:0 32px}.ft-container-article{max-width:800px;margin:0 auto;padding:0 32px}.ft-nav{position:sticky;top:0;z-index:300;background:#fff;border-bottom:1px solid #e0e0e0}.ft-nav-inner{max-width:1200px;margin:0 auto;padding:0 32px;display:flex;align-items:center;justify-content:space-between;height:56px}.ft-nav-logo{font-family:'Playfair Display',Georgia,serif;font-size:20px;font-weight:700;color:#000;text-decoration:none}.ft-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:8px 16px;font-family:'Source Serif 4',Georgia,serif;font-size:14px;font-weight:500;line-height:1;border-radius:4px;border:1px solid transparent;cursor:pointer;transition:all 150ms ease;text-decoration:none;white-space:nowrap}.ft-btn-primary{background:#0d7680;color:#fff;border-color:#0d7680}.ft-btn-primary:hover{background:#005a63;border-color:#005a63;color:#fff}.ft-hero{position:relative;width:100%;min-height:50vh;display:flex;align-items:flex-end;background:#fff}.ft-hero-image{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}.ft-hero-overlay{position:absolute;inset:0;background:linear-gradient(to top,rgba(0,0,0,0.7) 0%,rgba(0,0,0,0.4) 40%,transparent 100%);z-index:1}.ft-hero-content{position:relative;z-index:2;width:100%;max-width:800px;margin:0 auto;padding:48px 32px 72px;color:#fff}.ft-hero-title{font-size:48px;font-weight:700;line-height:1.1;margin-bottom:24px;color:#fff;max-width:90%}.ft-hero-excerpt{font-size:20px;line-height:1.6;color:rgba(255,255,255,0.95);margin-bottom:36px;max-width:70%}.ft-stream{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}@media(max-width:1024px){.ft-stream{grid-template-columns:repeat(2,1fr)}}@media(max-width:768px){.ft-stream{grid-template-columns:1fr}}.ft-card{display:flex;flex-direction:column;background:#fff;border:1px solid #e0e0e0;border-radius:4px;overflow:hidden;transition:box-shadow 250ms ease,transform 250ms ease}.ft-card:hover{box-shadow:0 4px 6px rgba(0,0,0,0.07);transform:translateY(-2px)}.ft-card-image{width:100%;aspect-ratio:16/9;object-fit:cover}.ft-card-content{padding:16px;flex:1;display:flex;flex-direction:column}.ft-card-title{font-family:'Playfair Display',Georgia,serif;font-size:18px;font-weight:700;line-height:1.3;margin-bottom:8px;color:#000}.ft-card-title a{color:inherit;text-decoration:none}.ft-card-title a:hover{color:#007A4D;text-decoration:underline}
html, body {
max-width: 100vw;
overflow-x: hidden;
position: relative;
}
.site {
max-width: 100%;
overflow-x: hidden;
}
*, *:before, *:after {
box-sizing: border-box;
}
.kg-card, .kg-audio-card, .kg-embed-card, iframe, video, audio {
max-width: 100% !important;
}
@media (max-width: 768px) {
.ft-calculator-tabs {
overflow-x: auto;
white-space: nowrap;
-webkit-overflow-scrolling: touch;
display: flex;
gap: 8px;
}
.ft-tab-btn {
flex-shrink: 0;
margin-right: 0;
padding: 0.5rem 1rem;
font-size: 0.9rem;
}
.ft-share-bar {
flex-direction: column;
align-items: flex-start;
gap: 4px;
}
.ft-share-label {
width: 100%;
}
.ft-share-progress {
width: 100%;
}
.ft-table {
display: block;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
}
</style>
<link rel="stylesheet" href="{{asset "built/screen.css"}}">
<link rel="stylesheet" href="{{asset "built/ft-search.css"}}">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@700;900&family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;0,6..72,700;1,6..72,400;1,6..72,600&family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,600;0,8..60,700;1,8..60,400&family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="{{asset "built/broadsheet-hybrid.css"}}">
{{ghost_head}}
{{{block "meta_tags"}}}
<meta name="description" content="{{#if meta_description}}{{meta_description}}{{else}}{{@site.description}}{{/if}}">
<meta property="og:description" content="{{#if meta_description}}{{meta_description}}{{else}}{{@site.description}}{{/if}}">
<meta property="og:title" content="{{meta_title}}">
<meta property="og:image" content="{{#if @site.cover_image}}{{@site.cover_image}}{{else}}https://iqra.falahos.my/content/images/size/w256h256/2026/07/72961271-45ce-44d6-80cc-b57033d915d5.jpeg{{/if}}">
{{!-- Progressive Web App (PWA) & iOS Standalone Meta --}}
<link rel="manifest" href="{{asset "manifest.webmanifest"}}">
<meta name="theme-color" content="#0d7680">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title" content="Iqra">
<link rel="apple-touch-icon" sizes="180x180" href="{{asset "icons/apple-touch-icon.png"}}">
<link rel="stylesheet" href="{{asset "built/pwa.css"}}">
<link rel="stylesheet" href="{{asset "built/tools.css"}}">
</head>
<body class="{{body_class}}{{{block "body_class"}}}">
<a href="#main-content" class="skip-link">Skip to main content</a>
<div class="site">
{{> "ft-masthead-strip"}}
<!-- FT Navigation -->
<header class="ft-nav" role="banner">
<div class="ft-nav-inner">
<div class="ft-nav-brand">
<a class="ft-nav-logo" href="{{@site.url}}">
{{#if @site.logo}}
<img src="{{@site.logo}}" alt="{{@site.title}}">
{{else}}
{{@site.title}}
{{/if}}
</a>
</div>
<nav class="ft-nav-menu" role="navigation" aria-label="Main navigation">
{{navigation}}
</nav>
<div class="ft-nav-actions">
<div class="ft-nav-search">
{{> "ft-search"}}
</div>
{{#if @site.members_enabled}}
<div class="ft-nav-members">
{{#unless @member}}
{{#unless @site.members_invite_only}}
<a class="ft-btn ft-btn-ghost ft-btn-sm" href="#/portal/signin" data-portal="signin">{{t "Sign in"}}</a>
<a class="ft-btn ft-btn-primary ft-btn-sm" href="#/portal/signup" data-portal="signup">{{t "Subscribe"}}</a>
{{else}}
<a class="ft-btn ft-btn-primary ft-btn-sm" href="#/portal/signin" data-portal="signin">{{t "Sign in"}}</a>
{{/unless}}
{{else}}
<a class="ft-btn ft-btn-secondary ft-btn-sm" href="#/portal/account" data-portal="account">{{t "Account"}}</a>
{{/unless}}
</div>
{{/if}}
<button class="ft-nav-burger" aria-label="{{t "Toggle menu"}}" aria-expanded="false" aria-controls="mobile-menu">
{{> "icons/menu"}}
</button>
</div>
</div>
</header>
<!-- Mobile Menu -->
<nav class="ft-nav-menu ft-md:hidden" id="mobile-menu" role="navigation" aria-label="Mobile navigation">
{{navigation}}
{{#if @site.members_enabled}}
<div class="ft-nav-members ft-py-4 ft-border-t">
{{#unless @member}}
{{#unless @site.members_invite_only}}
<a class="ft-btn ft-btn-primary ft-w-full ft-mb-2" href="#/portal/signup" data-portal="signup">{{t "Subscribe"}}</a>
<a class="ft-btn ft-btn-outline ft-w-full" href="#/portal/signin" data-portal="signin">{{t "Sign in"}}</a>
{{else}}
<a class="ft-btn ft-btn-primary ft-w-full" href="#/portal/signin" data-portal="signin">{{t "Sign in"}}</a>
{{/unless}}
{{else}}
<a class="ft-btn ft-btn-secondary ft-w-full" href="#/portal/account" data-portal="account">{{t "Account"}}</a>
{{/unless}}
</div>
{{/if}}
</nav>
<!-- Left Rail (Desktop) -->
<aside class="ft-left-rail ft-lg:hidden" role="complementary" aria-label="Sidebar navigation">
<div class="ft-left-rail-section">
<h3 class="ft-left-rail-title">Products</h3>
<a class="ft-left-rail-link" href="/products">Digital Products</a>
<a class="ft-left-rail-link" href="/tag/falah-cast/">Falah Cast</a>
<a class="ft-left-rail-link" href="/tag/learning-pack/">Learning Packs</a>
</div>
<div class="ft-left-rail-section">
<h3 class="ft-left-rail-title">Sections</h3>
{{navigation type="secondary"}}
</div>
<div class="ft-left-rail-section">
<h3 class="ft-left-rail-title">Newsletters</h3>
<a class="ft-left-rail-link" href="/newsletters/morning-brief">Morning Brief</a>
<a class="ft-left-rail-link" href="/newsletters/evening-brief">Evening Brief</a>
</div>
</aside>
<main id="main-content" class="site-content ft-lg:ml-[260px]">
{{#is "home"}}
{{> "ft-hero"}}
{{> "ft-editorial"}}
{{/is}}
{{{body}}}
</main>
<!-- Sticky Newsletter Banner -->
<div class="ft-newsletter-banner" id="newsletter-banner" role="region" aria-label="Newsletter signup">
<div class="ft-newsletter-banner-content">
<div class="ft-newsletter-banner-text">
<h3 class="ft-newsletter-banner-title">Get the best of Iqra Times</h3>
<p class="ft-newsletter-banner-desc">Daily Islamic insights, product updates, and exclusive content.</p>
</div>
<form class="ft-newsletter-banner-form" action="#/portal/signup" method="POST" data-members-form>
<input class="ft-newsletter-banner-input" type="email" name="email" placeholder="Your email address" required>
<button class="ft-btn ft-btn-primary" type="submit">Subscribe</button>
</form>
<button class="ft-newsletter-banner-close" aria-label="Dismiss newsletter banner">{{> "icons/x"}}</button>
</div>
</div>
<footer class="ft-footer" role="contentinfo">
<div class="ft-footer-inner">
<div class="ft-footer-brand">
<a class="ft-footer-logo" href="{{@site.url}}">{{@site.title}}</a>
<p class="ft-footer-tagline">{{@site.description}}</p>
<div class="ft-footer-social">
{{#each @site.social_links}}
<a class="ft-footer-social-link" href="{{href}}" target="_blank" rel="noopener" aria-label="{{name}}">
{{#> (concat "icons/" type)}}
<span>{{name}}</span>
{{/undefined}}
</a>
{{/each}}
</div>
</div>
{{#if @site.secondary_navigation}}
<nav class="ft-footer-section" aria-label="Footer navigation">
<h3 class="ft-footer-section-title">Sections</h3>
<ul class="ft-footer-links">
{{#foreach navigation type="secondary"}}
<li><a class="ft-footer-link" href="{{url}}">{{label}}</a></li>
{{/foreach}}
</ul>
</nav>
{{/if}}
<nav class="ft-footer-section" aria-label="About">
<h3 class="ft-footer-section-title">About</h3>
<ul class="ft-footer-links">
<li><a class="ft-footer-link" href="/about">About Iqra Times</a></li>
<li><a class="ft-footer-link" href="/contact">Contact</a></li>
<li><a class="ft-footer-link" href="/careers">Careers</a></li>
</ul>
</nav>
<nav class="ft-footer-section" aria-label="Products">
<h3 class="ft-footer-section-title">Products</h3>
<ul class="ft-footer-links">
<li><a class="ft-footer-link" href="/products">Digital Products</a></li>
<li><a class="ft-footer-link" href="/tag/falah-cast/">Falah Cast</a></li>
<li><a class="ft-footer-link" href="/tag/learning-pack/">Learning Packs</a></li>
</ul>
</nav>
<nav class="ft-footer-section" aria-label="Legal">
<h3 class="ft-footer-section-title">Legal</h3>
<ul class="ft-footer-links">
<li><a class="ft-footer-link" href="/privacy">Privacy Policy</a></li>
<li><a class="ft-footer-link" href="/terms">Terms of Service</a></li>
<li><a class="ft-footer-link" href="/refunds">Refund Policy</a></li>
</ul>
</nav>
<div class="ft-footer-bottom">
<p class="ft-footer-copyright">{{@site.title}} © {{date format="YYYY"}}</p>
<nav class="ft-footer-legal" aria-label="Legal links">
<a href="/privacy">Privacy</a>
<a href="/terms">Terms</a>
<a href="/cookies">Cookies</a>
</nav>
</div>
</div>
</footer>
</div>
{{#is "post, page"}}
{{> "pswp"}}
{{/is}}
{{!-- Fixes 100vh issue on mobile browsers with toolbar on the bottom --}}
<script>
if (document.body.classList.contains('with-full-cover') && (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform))) {
const cover = document.getElementsByClassName('ft-hero')[0] || document.getElementsByClassName('cover')[0];
if (cover) cover.style.height = window.innerHeight + 'px';
}
</script>
<script src="{{asset "built/tts.js"}}"></script>
<script src="{{asset "built/search.js"}}"></script>
<script src="https://gumroad.com/js/gumroad.js"></script>
<script src="{{asset "built/pwa-app.js"}}" defer></script>
{{ghost_foot}}
<script>
// Mobile menu toggle
document.addEventListener('DOMContentLoaded', function() {
const burger = document.querySelector('.ft-nav-burger');
const mobileMenu = document.getElementById('mobile-menu');
if (burger && mobileMenu) {
burger.addEventListener('click', function() {
mobileMenu.classList.toggle('open');
burger.setAttribute('aria-expanded', mobileMenu.classList.contains('open'));
});
}
// Newsletter banner
const banner = document.getElementById('newsletter-banner');
const closeBtn = banner?.querySelector('.ft-newsletter-banner-close');
if (banner && closeBtn) {
closeBtn.addEventListener('click', function() {
banner.style.display = 'none';
});
// Show banner after 30 seconds
setTimeout(function() {
if (!localStorage.getItem('newsletter_dismissed')) {
banner.classList.add('visible');
}
}, 30000);
}
});
</script>
</body>
</html>
+25
View File
@@ -0,0 +1,25 @@
{{!< default}}
{{#is "home"}}
{{!-- Homepage loop is replaced by the hybrid broadsheet 3-zone lead and topic ribbons in default.hbs --}}
{{else}}
<div class="site-main">
<header class="feed-header gh-canvas">
{{#if @custom.feed_title}}
<div class="feed-header-wrapper">
<h2 class="feed-header-title">{{@custom.feed_title}}</h2>
</div>
{{/if}}
</header>
<div class="post-feed{{#match @custom.feed_layout "!=" "Minimal"}} expanded{{/match}}{{#match @custom.feed_layout "Right thumbnail"}} right-thumbnail{{/match}}{{#match @custom.feed_layout "Text-only"}} text-only{{/match}} gh-feed gh-canvas">
{{#foreach posts}}
{{> "loop"}}
{{/foreach}}
</div>
{{pagination}}
</div>
{{/is}}
{{#contentFor "body_class"}}{{#if @site.cover_image}} with-full-cover is-head-transparent{{/if}}{{#if @member}} logged-in{{/if}}{{/contentFor}}
+74
View File
@@ -0,0 +1,74 @@
{{!-- FT & NYT Hybrid Broadsheet — Computational Engines & Horizontal Topic Ribbons --}}
<section class="ft-broadsheet-engines-ribbons" aria-label="Computational Engines and Topic Hubs">
{{!-- 1. COMPUTATIONAL SUITE DOCK --}}
<div class="ft-comp-dock">
<div class="ft-comp-header">
<div class="ft-comp-titles">
<h3 class="ft-comp-title">The Falah Computational Suite</h3>
<p class="ft-comp-subtitle">Deterministic Shariah engines executing AAOIFI 2026.4 standards and Islamic estate distribution algorithms</p>
</div>
<div class="ft-comp-status">
<span class="ft-status-pill">Active Engines &bull; Live Telemetry</span>
</div>
</div>
<div class="ft-comp-grid">
<div class="ft-comp-card">
<span class="ft-dock-badge">Succession Protocol</span>
<h4 class="ft-dock-name">Faraid Estate Distribution</h4>
<p class="ft-dock-desc">Mathematical calculation of Islamic inheritance shares under Ashab al-Furud, Asabah, and Rad. Automated Radd, Awl, and spouse shares.</p>
<a href="/calculator/" class="ft-dock-link">Launch Engine &rarr;</a>
</div>
<div class="ft-comp-card">
<span class="ft-dock-badge">Purification Engine</span>
<h4 class="ft-dock-name">Portfolio Zakat &amp; Dividend Engine</h4>
<p class="ft-dock-desc">Calculates operational zakat liability across equities, cash, private equity, and gold, with automated dividend purification deductions.</p>
<a href="/zakat/" class="ft-dock-link">Launch Engine &rarr;</a>
</div>
<div class="ft-comp-card">
<span class="ft-dock-badge">Family Governance</span>
<h4 class="ft-dock-name">The Virtual Family Office</h4>
<p class="ft-dock-desc">Interactive curriculum and templates for Muslim family wealth preservation, Waqf covenants, and emergency estate dossiers.</p>
<a href="/tools/" class="ft-dock-link">Explore Curriculum &rarr;</a>
</div>
</div>
</div>
{{!-- 2. HORIZONTAL SECTION TOPIC RIBBONS (NYT 4-Column Horizontal Layout) --}}
{{#get "tags" filter="slug:[islamic-finance,shifa,geopolitical-intelligence,philosophy]" limit="4"}}
{{#foreach tags}}
<div class="ft-section-ribbon">
<div class="ft-ribbon-bar">
<h3 class="ft-ribbon-tag-name"><a href="{{url}}">{{name}}</a></h3>
<a href="{{url}}" class="ft-ribbon-view-all">View Full Section &rarr;</a>
</div>
<div class="ft-ribbon-grid-4">
{{#get "posts" filter="tag:{{slug}}+status:published" limit="4" include="tags,authors"}}
{{#foreach posts}}
<article class="ft-ribbon-card">
{{#if feature_image}}
<div class="ft-ribbon-thumb">
<a href="{{url}}"><img src="{{img_url feature_image size="m"}}" alt="{{title}}"></a>
</div>
{{/if}}
<h4 class="ft-ribbon-card-headline">
<a href="{{url}}">{{title}}</a>
</h4>
<p class="ft-ribbon-card-excerpt">
{{#if custom_excerpt}}{{custom_excerpt}}{{else}}{{excerpt words="18"}}{{/if}}
</p>
<div class="ft-ribbon-card-byline">
{{#if primary_author}}<a href="{{primary_author.url}}">{{primary_author.name}}</a>{{/if}} &middot; {{reading_time}}
</div>
</article>
{{/foreach}}
{{/get}}
</div>
</div>
{{/foreach}}
{{/get}}
</section>
+250
View File
@@ -0,0 +1,250 @@
{{!-- FT & NYT Hybrid Broadsheet — Front Page 3-Zone Lead Package --}}
<section class="ft-broadsheet-lead-zone" aria-label="Front Page Broadsheet Lead Package">
<div class="ft-lead-grid">
{{!-- ZONE 1: LEAD INVESTIGATION (Left Column 32%) --}}
<div class="ft-lead-col-left">
{{#get "posts" filter="featured:true" limit="1" include="tags,authors"}}
{{#foreach posts}}
<article class="ft-lead-story-main">
<span class="ft-lead-kicker">
{{#if primary_tag}}<a href="{{primary_tag.url}}">{{primary_tag.name}}</a> &bull; {{/if}}Lead Investigation
</span>
<h1 class="ft-lead-headline">
<a href="{{url}}">{{title}}</a>
</h1>
<p class="ft-lead-prose">
<span class="ft-dateline">Kuala Lumpur —</span>
{{#if custom_excerpt}}{{custom_excerpt}}{{else}}{{excerpt words="38"}}{{/if}}
</p>
{{!-- SEMAFOR-STYLE STRUCTURED TAKEAWAY DRAWER --}}
<div class="ft-takeaway-drawer">
<div class="ft-takeaway-row">
<span class="ft-takeaway-tag">The Signal</span>
<span>Multi-family governance protocols in Southeast Asia are integrating Waqf Ahli covenants to protect operating assets from statutory probate freezing.</span>
</div>
<div class="ft-takeaway-row">
<span class="ft-takeaway-tag">The Fiqh</span>
<span>Lifetime Hibah transfers execute irrevocable legal vesting while strictly safeguarding the residual Faraid entitlement rules.</span>
</div>
<div class="ft-takeaway-row">
<span class="ft-takeaway-tag">The Exposure</span>
<span>Dollar-denominated cross-border trust structures face sovereign sanction overhang and banking friction under changing OECD reporting rules.</span>
</div>
</div>
<div class="ft-lead-byline">
By {{#if primary_author}}<strong><a href="{{primary_author.url}}">{{primary_author.name}}</a></strong> &middot; {{primary_author.location}}{{else}}<strong>Editorial Board</strong>{{/if}} &middot; {{reading_time}}
</div>
</article>
{{/foreach}}
{{else}}
{{#get "posts" limit="1" order="published_at desc" include="tags,authors"}}
{{#foreach posts}}
<article class="ft-lead-story-main">
<span class="ft-lead-kicker">
{{#if primary_tag}}<a href="{{primary_tag.url}}">{{primary_tag.name}}</a> &bull; {{/if}}Lead Story
</span>
<h1 class="ft-lead-headline">
<a href="{{url}}">{{title}}</a>
</h1>
<p class="ft-lead-prose">
<span class="ft-dateline">Kuala Lumpur —</span>
{{#if custom_excerpt}}{{custom_excerpt}}{{else}}{{excerpt words="38"}}{{/if}}
</p>
<div class="ft-takeaway-drawer">
<div class="ft-takeaway-row">
<span class="ft-takeaway-tag">The Signal</span>
<span>Strategic wealth stewardship and institutional succession frameworks for sovereign Muslim families.</span>
</div>
<div class="ft-takeaway-row">
<span class="ft-takeaway-tag">The Fiqh</span>
<span>Preserving sacred generational contracts without compromising legal execution across jurisdictions.</span>
</div>
</div>
<div class="ft-lead-byline">
By {{#if primary_author}}<strong><a href="{{primary_author.url}}">{{primary_author.name}}</a></strong>{{else}}<strong>Editorial Desk</strong>{{/if}} &middot; {{reading_time}}
</div>
</article>
{{/foreach}}
{{/get}}
{{/get}}
{{!-- Secondary Anchor Story (Left Column Companion) --}}
{{#get "posts" filter="featured:false" limit="1" order="published_at desc" include="tags,authors"}}
{{#foreach posts}}
<article class="ft-lead-secondary-story">
<span class="ft-lead-kicker ft-kicker-burgundy">
{{#if primary_tag}}<a href="{{primary_tag.url}}">{{primary_tag.name}}</a>{{else}}Juristic Review{{/if}}
</span>
<h3 class="ft-secondary-headline">
<a href="{{url}}">{{title}}</a>
</h3>
<p class="ft-secondary-excerpt">
{{#if custom_excerpt}}{{custom_excerpt}}{{else}}{{excerpt words="22"}}{{/if}}
</p>
<div class="ft-lead-byline">
{{#if primary_author}}<a href="{{primary_author.url}}">{{primary_author.name}}</a>{{/if}} &middot; {{reading_time}}
</div>
</article>
{{/foreach}}
{{/get}}
</div>
{{!-- ZONE 2: VISUAL ANCHOR & CENTER PACKAGE (Center Column 43%) --}}
<div class="ft-lead-col-center">
{{#get "posts" filter="tag:geopolitical-intelligence" limit="1" order="published_at desc" include="tags,authors"}}
{{#foreach posts}}
<article class="ft-center-package">
{{#if feature_image}}
<div class="ft-visual-frame">
<a href="{{url}}"><img src="{{img_url feature_image size="xl"}}" alt="{{title}}"></a>
</div>
<div class="ft-photo-caption">
Sovereign financial corridors and maritime trade arteries in the Malacca Strait. <span class="ft-photo-credit">Iqra Press &middot; Archival</span>
</div>
{{/if}}
<div class="ft-center-story-body">
<span class="ft-lead-kicker">
{{#if primary_tag}}<a href="{{primary_tag.url}}">{{primary_tag.name}}</a>{{else}}Geopolitics & Sovereign Capital{{/if}}
</span>
<h2 class="ft-center-headline">
<a href="{{url}}">{{title}}</a>
</h2>
<p class="ft-center-excerpt">
{{#if custom_excerpt}}{{custom_excerpt}}{{else}}{{excerpt words="32"}}{{/if}}
</p>
<div class="ft-lead-byline">
By {{#if primary_author}}<strong><a href="{{primary_author.url}}">{{primary_author.name}}</a></strong>{{/if}} &middot; {{reading_time}}
</div>
</div>
</article>
{{/foreach}}
{{else}}
{{#get "posts" limit="1" order="published_at desc" include="tags,authors"}}
{{#foreach posts}}
<article class="ft-center-package">
{{#if feature_image}}
<div class="ft-visual-frame">
<a href="{{url}}"><img src="{{img_url feature_image size="xl"}}" alt="{{title}}"></a>
</div>
{{/if}}
<div class="ft-center-story-body">
<span class="ft-lead-kicker">{{#if primary_tag}}{{primary_tag.name}}{{else}}Intelligence Feature{{/if}}</span>
<h2 class="ft-center-headline"><a href="{{url}}">{{title}}</a></h2>
<p class="ft-center-excerpt">{{#if custom_excerpt}}{{custom_excerpt}}{{else}}{{excerpt words="32"}}{{/if}}</p>
<div class="ft-lead-byline">{{#if primary_author}}By <strong>{{primary_author.name}}</strong>{{/if}} &middot; {{reading_time}}</div>
</div>
</article>
{{/foreach}}
{{/get}}
{{/get}}
{{!-- Center Dual Split Sub-Stories (NYT Split Columns) --}}
<div class="ft-center-dual-split">
{{#get "posts" filter="tag:shifa" limit="1" order="published_at desc" include="tags,authors"}}
{{#foreach posts}}
<article class="ft-mini-card">
<span class="ft-lead-kicker"><a href="/tag/shifa/">The Shifa Desk</a></span>
<h4 class="ft-mini-headline"><a href="{{url}}">{{title}}</a></h4>
<p class="ft-mini-excerpt">{{#if custom_excerpt}}{{custom_excerpt}}{{else}}{{excerpt words="16"}}{{/if}}</p>
<div class="ft-lead-byline">{{#if primary_author}}{{primary_author.name}}{{/if}} &middot; {{reading_time}}</div>
</article>
{{/foreach}}
{{/get}}
{{#get "posts" filter="tag:philosophy" limit="1" order="published_at desc" include="tags,authors"}}
{{#foreach posts}}
<article class="ft-mini-card ft-mini-card-bordered">
<span class="ft-lead-kicker"><a href="/tag/philosophy/">Classical Thought</a></span>
<h4 class="ft-mini-headline"><a href="{{url}}">{{title}}</a></h4>
<p class="ft-mini-excerpt">{{#if custom_excerpt}}{{custom_excerpt}}{{else}}{{excerpt words="16"}}{{/if}}</p>
<div class="ft-lead-byline">{{#if primary_author}}{{primary_author.name}}{{/if}} &middot; {{reading_time}}</div>
</article>
{{/foreach}}
{{/get}}
</div>
</div>
{{!-- ZONE 3: OPINION RAIL & DISPATCHES (Right Column 25% - NYT Style) --}}
<div class="ft-lead-col-right">
<div class="ft-rail-header">
<span>Opinion & Columns</span>
<span class="ft-rail-accent">Voices of Iqra</span>
</div>
{{!-- THE JAUHARI COLUMN (NYT Signature Columnist Spotlight) --}}
{{#get "authors" filter="slug:jauhari-che-wan" limit="1"}}
{{#foreach authors}}
<div class="ft-jauhari-spotlight-card">
<div class="ft-jauhari-meta-row">
<div class="ft-jauhari-avatar-frame">
{{#if profile_image}}
<img src="{{profile_image}}" alt="{{name}}">
{{else}}
<img src="https://iqra.falahos.my/content/images/authors/jauhari-che-wan.png" alt="{{name}}">
{{/if}}
</div>
<div class="ft-jauhari-info">
<div class="ft-jauhari-name">{{name}}</div>
<div class="ft-jauhari-tag">The Jauhari Column</div>
</div>
</div>
{{#get "posts" filter="author:jauhari-che-wan" limit="1" order="published_at desc"}}
{{#foreach posts}}
<h3 class="ft-jauhari-headline"><a href="{{url}}">&ldquo;{{title}}&rdquo;</a></h3>
<p class="ft-jauhari-quote">
{{#if custom_excerpt}}&ldquo;{{custom_excerpt}}&rdquo;{{else}}&ldquo;{{excerpt words="22"}}&rdquo;{{/if}}
</p>
{{/foreach}}
{{/get}}
</div>
{{/foreach}}
{{/get}}
{{!-- VOICES OF IQRA COLUMNIST ROWS (NYT Columnist Stack) --}}
<div class="ft-columnist-stack">
{{#get "authors" filter="slug:[tariq-al-amiri,hakim-zainur,maryam-al-andalusi,farhan-idris]" limit="4"}}
{{#foreach authors}}
<div class="ft-columnist-row">
<div class="ft-col-avatar">
{{#if profile_image}}
<img src="{{profile_image}}" alt="{{name}}">
{{else}}
<img src="https://iqra.falahos.my/content/images/authors/{{slug}}.png" alt="{{name}}">
{{/if}}
</div>
<div class="ft-col-details">
<span class="ft-col-byline"><a href="{{url}}">{{name}}</a></span>
<div class="ft-col-bio-snippet">{{bio}}</div>
</div>
</div>
{{/foreach}}
{{/get}}
</div>
{{!-- THE WIRE: FAST INTELLIGENCE DISPATCHES --}}
<div class="ft-wire-box">
<div class="ft-wire-header">
The Wire &bull; Live Intelligence
</div>
<div class="ft-wire-list">
<div class="ft-wire-item">
<span class="ft-wire-time">14m ago &bull; BNM Pilot</span>
<div class="ft-wire-title"><a href="/tag/islamic-finance/">Ringgit-pegged wholesale digital currency enters testing with 6 Islamic lenders.</a></div>
</div>
<div class="ft-wire-item">
<span class="ft-wire-time">1h ago &bull; AAOIFI Fiqh</span>
<div class="ft-wire-title"><a href="/zakat/">Updated standards for digital sukuk tokenisation and purification rules ratified.</a></div>
</div>
<div class="ft-wire-item">
<span class="ft-wire-time">3h ago &bull; Waqf Desk</span>
<div class="ft-wire-title"><a href="/calculator/">Cross-border Waqf Ahli registration protocols established in Labuan IBFC.</a></div>
</div>
</div>
</div>
</div>
</div>
</section>
+31
View File
@@ -0,0 +1,31 @@
{{!-- FT & NYT Hybrid Broadsheet — Live Suq, Nisab & Utility Telemetry Strip --}}
<div class="ft-top-telemetry-bar" role="region" aria-label="Sovereign Telemetry & Utility Bar">
<div class="ft-telemetry-inner">
<div class="ft-tel-left">
<span class="ft-tel-date">{{date format="dddd, D MMMM YYYY"}}</span>
<span class="ft-tel-bullet">&bull;</span>
<span class="ft-tel-hijri">28 Rabi' al-Awwal 1448 AH</span>
<span class="ft-tel-bullet">&bull;</span>
<span class="ft-tel-edition">Kuala Lumpur &middot; London &middot; Sovereign Edition</span>
</div>
<div class="ft-tel-center">
<span class="ft-ticker-item">GOLD NISAB: <strong>RM 34,820 / 85g</strong> <span class="ft-badge-up">+0.4%</span></span>
<span class="ft-tel-bullet">&bull;</span>
<span class="ft-ticker-item">SILVER NISAB: <strong>RM 2,890</strong></span>
<span class="ft-tel-bullet">&bull;</span>
<span class="ft-ticker-item">5Y SUKUK: <strong>4.82%</strong></span>
<span class="ft-tel-bullet">&bull;</span>
<span class="ft-ticker-item">AAOIFI REF: <strong>2026.4</strong></span>
</div>
<div class="ft-tel-right">
{{#if @site.members_enabled}}
{{#unless @member}}
<a href="#/portal/signin" data-portal="signin" class="ft-tel-link">Sign In</a>
<a href="#/portal/signup" data-portal="signup" class="ft-tel-btn">Subscribe &bull; RM 29/mo</a>
{{else}}
<a href="#/portal/account" data-portal="account" class="ft-tel-btn">My Account</a>
{{/unless}}
{{/if}}
</div>
</div>
</div>