:root{--navy:#0b1f38;--blue:#1f6feb;--light:#f4f7fb;--white:#fff;--text:#172033;--muted:#6f7b8a;--border:#dfe6ef}*{box-sizing:border-box}body{margin:0;font-family:Arial,Helvetica,sans-serif;background:var(--light);color:var(--text)}a{text-decoration:none}.button{display:inline-block;background:var(--blue);color:#fff;padding:14px 22px;border-radius:10px;border:none;font-weight:700}.button.small{padding:10px 16px}.button.full{width:100%}.landing-nav{display:flex;justify-content:space-between;align-items:center;padding:22px 6%;background:#fff;border-bottom:1px solid var(--border)}.logo{display:flex;align-items:center;gap:12px;color:var(--navy)}.logo span,.brand-symbol{width:42px;height:42px;border-radius:12px;background:linear-gradient(135deg,var(--blue),var(--navy));color:#fff;display:grid;place-items:center;font-weight:800}.logo.centered{justify-content:center}.nav-actions{display:flex;align-items:center;gap:14px}.nav-actions a{color:var(--navy)}.hero{min-height:calc(100vh - 87px);display:grid;grid-template-columns:1.4fr 1fr;align-items:center;gap:60px;padding:8%;background:radial-gradient(circle at top right,rgba(31,111,235,.15),transparent 35%)}.hero h1{font-size:58px;line-height:1.05;margin:14px 0 20px;max-width:800px}.eyebrow{color:var(--blue);font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.12em}.hero-text{font-size:20px;line-height:1.6;color:var(--muted);max-width:680px}.hero-card{background:#fff;border:1px solid var(--border);border-radius:24px;padding:26px;box-shadow:0 25px 60px rgba(11,31,56,.12)}.mini-stat{display:flex;justify-content:space-between;padding:20px 0;border-bottom:1px solid var(--border)}.login-shell{min-height:100vh;display:grid;place-items:center;padding:24px}.login-panel{width:min(430px,100%);background:#fff;border:1px solid var(--border);border-radius:22px;padding:34px;box-shadow:0 25px 60px rgba(11,31,56,.12)}.subtitle{text-align:center;color:var(--muted);font-size:13px}.login-panel h1{text-align:center}.login-panel label{display:block;margin:16px 0 8px;font-weight:700}.login-panel input{width:100%;padding:13px;border:1px solid var(--border);border-radius:10px}.language-row{display:flex;justify-content:center;gap:16px;margin-top:22px}.alert{background:#fee2e2;color:#991b1b;padding:12px;border-radius:10px}.sidebar{position:fixed;inset:0 auto 0 0;width:280px;background:var(--navy);color:#fff;padding:24px 18px;display:flex;flex-direction:column}.brand{display:flex;gap:12px;align-items:center;margin-bottom:28px}.brand strong,.brand small{display:block}.brand small{opacity:.65;font-size:11px;max-width:180px}.sidebar nav{display:flex;flex-direction:column;gap:6px}.sidebar nav a{color:rgba(255,255,255,.76);padding:12px 14px;border-radius:10px}.sidebar nav a.active,.sidebar nav a:hover{background:rgba(255,255,255,.1);color:#fff}.sidebar-bottom{margin-top:auto;display:flex;justify-content:space-between}.sidebar-bottom a{color:#fff}.languages{display:flex;gap:10px}.dashboard-content{margin-left:280px;padding:32px}.dashboard-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:28px}.date-chip{background:#fff;border:1px solid var(--border);padding:10px 14px;border-radius:10px}.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.stats-grid article,.panel{background:#fff;border:1px solid var(--border);border-radius:16px;padding:22px}.stats-grid span{display:block;color:var(--muted)}.stats-grid strong{display:block;font-size:32px}.content-grid{display:grid;grid-template-columns:2fr 1fr;gap:18px;margin:18px 0}.panel-title{display:flex;justify-content:space-between}.badge{background:#e8f7ef;color:#137a44;padding:6px 10px;border-radius:999px}.status-line{display:flex;gap:12px;align-items:center}.status-line span{width:14px;height:14px;border-radius:50%;background:#2fa66d}.empty-state{text-align:center;color:var(--muted);padding:34px;border:1px dashed var(--border);border-radius:12px}@media(max-width:900px){.hero{grid-template-columns:1fr}.hero h1{font-size:44px}.sidebar{width:220px}.dashboard-content{margin-left:220px}.stats-grid{grid-template-columns:repeat(2,1fr)}.content-grid{grid-template-columns:1fr}}@media(max-width:650px){.sidebar{position:static;width:100%}.dashboard-content{margin-left:0;padding:20px}.stats-grid{grid-template-columns:1fr}.hero{padding:50px 22px}.hero h1{font-size:38px}}

/* Media Sources – professional layout */

.sources-layout {
    display: grid;
    grid-template-columns: minmax(320px, 420px) minmax(0, 1fr);
    gap: 24px;
    align-items: start;
}

.source-form-panel,
.source-list-panel {
    padding: 28px;
}

.source-form-panel h2,
.source-list-panel h2 {
    margin: 0 0 22px;
    font-size: 24px;
}

.source-form {
    display: grid;
    grid-template-columns: 1fr;
    gap: 8px;
}

.source-form label {
    display: block;
    margin: 10px 0 0;
    font-size: 13px;
    font-weight: 700;
    color: var(--text);
}

.source-form input,
.source-form select {
    display: block;
    width: 100%;
    min-height: 46px;
    padding: 11px 13px;
    border: 1px solid var(--border);
    border-radius: 10px;
    background: #ffffff;
    color: var(--text);
    font-family: inherit;
    font-size: 14px;
}

.source-form input::placeholder {
    color: #9aa5b1;
}

.source-form input:focus,
.source-form select:focus {
    border-color: var(--blue);
    outline: 0;
    box-shadow: 0 0 0 4px rgba(31, 111, 235, 0.11);
}

.source-form-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
}

.source-checkbox {
    display: flex !important;
    align-items: center;
    gap: 9px;
    margin: 14px 0 0 !important;
    font-weight: 600 !important;
}

.source-checkbox input {
    width: 18px;
    min-height: 18px;
    height: 18px;
    margin: 0;
}

.source-form-actions {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-top: 18px;
}

.source-form-actions .button {
    min-width: 120px;
    cursor: pointer;
}

.source-list-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 18px;
}

.source-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 36px;
    height: 36px;
    padding: 0 12px;
    border-radius: 999px;
    background: #e8f0ff;
    color: var(--blue);
    font-weight: 800;
}

.source-table-wrapper {
    width: 100%;
    overflow-x: auto;
}

.source-table {
    width: 100%;
    border-collapse: collapse;
}

.source-table th {
    padding: 12px;
    border-bottom: 1px solid var(--border);
    color: var(--muted);
    font-size: 11px;
    letter-spacing: 0.07em;
    text-align: left;
    text-transform: uppercase;
}

.source-table td {
    padding: 16px 12px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
}

.source-table tbody tr:hover {
    background: #f8fafc;
}

.source-url {
    display: block;
    max-width: 260px;
    margin-top: 5px;
    overflow: hidden;
    color: var(--blue);
    font-size: 12px;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.source-alert {
    margin-bottom: 20px;
    padding: 14px 16px;
    border-radius: 10px;
    font-weight: 700;
}

.source-form-panel {
    position: sticky;
    top: 24px;
}

@media (max-width: 1150px) {
    .sources-layout {
        grid-template-columns: 1fr;
    }

    .source-form-panel {
        position: static;
    }
}

@media (max-width: 650px) {
    .source-form-grid {
        grid-template-columns: 1fr;
    }

    .source-form-panel,
    .source-list-panel {
        padding: 20px;
    }
}
<?php
declare(strict_types=1);

require_once __DIR__ . '/includes/auth.php';
require_login();
require_once __DIR__ . '/config/db.php';

$currentLang = current_language();

$texts = [
    'sq' => [
        'title' => 'Rrjeti i Sigurimit të Depozitave',
        'subtitle' => 'IADI, EFDI dhe institucionet e sigurimit të depozitave në Ballkan.',
        'international' => 'Organizata ndërkombëtare',
        'balkan' => 'Fondet e sigurimit të depozitave',
        'website' => 'Faqja zyrtare',
        'country' => 'Shteti',
        'membership' => 'Anëtarësimi',
        'active' => 'Aktiv',
        'no_data' => 'Nuk ka institucione të regjistruara.',
    ],
    'mk' => [
        'title' => 'Мрежа за осигурување на депозити',
        'subtitle' => 'IADI, EFDI и институциите за осигурување на депозити на Балканот.',
        'international' => 'Меѓународни организации',
        'balkan' => 'Фондови за осигурување на депозити',
        'website' => 'Официјална страница',
        'country' => 'Држава',
        'membership' => 'Членство',
        'active' => 'Активно',
        'no_data' => 'Нема регистрирани институции.',
    ],
    'en' => [
        'title' => 'Deposit Insurance Network',
        'subtitle' => 'IADI, EFDI and deposit insurance institutions across the Balkans.',
        'international' => 'International organizations',
        'balkan' => 'Deposit insurance institutions',
        'website' => 'Official website',
        'country' => 'Country',
        'membership' => 'Membership',
        'active' => 'Active',
        'no_data' => 'No institutions are registered.',
    ],
];

$pageText = $texts[$currentLang] ?? $texts['sq'];

$stmt = $pdo->query(
    "SELECT *
     FROM sources
     WHERE institution_type IN ('international', 'deposit_fund')
     ORDER BY
       CASE WHEN institution_type = 'international' THEN 0 ELSE 1 END,
       country_name ASC,
       name ASC"
);

$rows = $stmt->fetchAll();
$international = [];
$funds = [];

foreach ($rows as $row) {
    if (($row['institution_type'] ?? '') === 'international') {
        $international[] = $row;
    } else {
        $funds[] = $row;
    }
}

require __DIR__ . '/includes/header.php';
?>
<div class="app-layout">
    <?php require __DIR__ . '/includes/sidebar.php'; ?>

    <main class="dashboard-content">
        <header class="dashboard-header">
            <div>
                <p class="eyebrow">DEPOSIT INSURANCE NETWORK</p>
                <h1><?= e($pageText['title']) ?></h1>
                <p class="page-description"><?= e($pageText['subtitle']) ?></p>
            </div>
        </header>

        <section class="network-summary">
            <article class="network-summary-card">
                <span><?= e($pageText['international']) ?></span>
                <strong><?= count($international) ?></strong>
            </article>
            <article class="network-summary-card">
                <span><?= e($pageText['balkan']) ?></span>
                <strong><?= count($funds) ?></strong>
            </article>
            <article class="network-summary-card">
                <span>IADI</span>
                <strong><?= count(array_filter($funds, fn($x) => (int)$x['member_iadi'] === 1)) ?></strong>
            </article>
            <article class="network-summary-card">
                <span>EFDI</span>
                <strong><?= count(array_filter($funds, fn($x) => (int)$x['member_efdi'] === 1)) ?></strong>
            </article>
        </section>

        <section class="panel network-section">
            <div class="network-section-head">
                <h2><?= e($pageText['international']) ?></h2>
            </div>

            <div class="network-grid">
                <?php foreach ($international as $item): ?>
                    <article class="network-card featured">
                        <div class="network-card-top">
                            <div class="network-logo"><?= e((string)($item['acronym'] ?? 'DI')) ?></div>
                            <span class="source-status active"><?= e($pageText['active']) ?></span>
                        </div>

                        <h3><?= e((string)$item['name']) ?></h3>
                        <p><?= e((string)($item['country_name'] ?? 'International')) ?></p>

                        <a href="<?= e((string)$item['base_url']) ?>" target="_blank" rel="noopener noreferrer">
                            <?= e($pageText['website']) ?>
                        </a>
                    </article>
                <?php endforeach; ?>
            </div>
        </section>

        <section class="panel network-section">
            <div class="network-section-head">
                <h2><?= e($pageText['balkan']) ?></h2>
                <span class="source-count"><?= count($funds) ?></span>
            </div>

            <?php if (!$funds): ?>
                <div class="empty-state"><?= e($pageText['no_data']) ?></div>
            <?php else: ?>
                <div class="network-grid">
                    <?php foreach ($funds as $item): ?>
                        <article class="network-card">
                            <div class="network-card-top">
                                <div class="network-logo"><?= e((string)($item['acronym'] ?? 'DI')) ?></div>
                                <span class="source-status active"><?= e($pageText['active']) ?></span>
                            </div>

                            <span class="network-country"><?= e((string)($item['country_name'] ?? '')) ?></span>
                            <h3><?= e((string)$item['name']) ?></h3>

                            <div class="membership-row">
                                <?php if ((int)$item['member_iadi'] === 1): ?>
                                    <span>IADI</span>
                                <?php endif; ?>
                                <?php if ((int)$item['member_efdi'] === 1): ?>
                                    <span>EFDI</span>
                                <?php endif; ?>
                            </div>

                            <a href="<?= e((string)$item['base_url']) ?>" target="_blank" rel="noopener noreferrer">
                                <?= e($pageText['website']) ?>
                            </a>
                        </article>
                    <?php endforeach; ?>
                </div>
            <?php endif; ?>
        </section>
    </main>
</div>
<?php require __DIR__ . '/includes/footer.php'; ?>
/* PROFESSIONAL SOURCES PAGE */

.sources-topbar{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:20px;
    margin-bottom:24px;
}

.sources-topbar h1{
    margin:6px 0 0;
    font-size:36px;
}

.sources-stats{
    display:grid;
    grid-template-columns:repeat(4,minmax(0,1fr));
    gap:18px;
    margin-bottom:18px;
}

.sources-stats article{
    background:#fff;
    border:1px solid var(--border);
    border-radius:16px;
    padding:22px;
    box-shadow:0 8px 24px rgba(11,31,56,.04);
}

.sources-stats span{
    display:block;
    color:var(--muted);
    font-size:13px;
}

.sources-stats strong{
    display:block;
    margin-top:8px;
    font-size:30px;
}

.sources-panel{
    padding:0;
    overflow:hidden;
}

.sources-filterbar{
    display:grid;
    grid-template-columns:minmax(220px,1.4fr) repeat(4,minmax(140px,.8fr)) auto auto;
    gap:10px;
    padding:18px;
    border-bottom:1px solid var(--border);
    background:#fff;
}

.sources-filterbar input,
.sources-filterbar select{
    width:100%;
    min-height:44px;
    border:1px solid var(--border);
    border-radius:10px;
    padding:10px 12px;
    background:#fff;
    color:var(--text);
    font:inherit;
}

.sources-filterbar input:focus,
.sources-filterbar select:focus{
    border-color:var(--blue);
    outline:none;
    box-shadow:0 0 0 3px rgba(31,111,235,.1);
}

.sources-filter-button{
    min-height:44px;
    padding:10px 16px;
}

.sources-clear{
    display:flex;
    align-items:center;
    justify-content:center;
    min-height:44px;
    padding:0 14px;
    border:1px solid var(--border);
    border-radius:10px;
    color:var(--muted);
    font-weight:700;
}

.source-table.professional{
    width:100%;
    border-collapse:collapse;
}

.source-table.professional th{
    padding:14px 16px;
    background:#f8fafc;
    border-bottom:1px solid var(--border);
    color:var(--muted);
    font-size:11px;
    text-align:left;
    text-transform:uppercase;
    letter-spacing:.06em;
}

.source-table.professional td{
    padding:15px 16px;
    border-bottom:1px solid var(--border);
    vertical-align:middle;
}

.source-table.professional tbody tr:hover{
    background:#fbfdff;
}

.source-main-cell{
    display:flex;
    align-items:center;
    gap:12px;
    min-width:290px;
}

.source-main-cell strong{
    display:block;
    line-height:1.35;
}

.source-main-cell a{
    display:block;
    max-width:320px;
    margin-top:4px;
    overflow:hidden;
    color:var(--blue);
    font-size:12px;
    text-overflow:ellipsis;
    white-space:nowrap;
}

.source-avatar{
    flex:0 0 42px;
    width:42px;
    height:42px;
    display:grid;
    place-items:center;
    border:1px solid #d8e2ef;
    border-radius:12px;
    background:linear-gradient(135deg,#f7faff,#edf4ff);
    color:var(--navy);
    font-size:11px;
    font-weight:800;
}

.source-badge{
    display:inline-flex;
    align-items:center;
    padding:6px 10px;
    border-radius:999px;
    font-size:11px;
    font-weight:800;
}

.source-badge.type{
    background:#eaf2ff;
    color:#1f5fc4;
}

.source-badge.language{
    background:#f1f5f9;
    color:#475569;
}

.source-rss{
    font-size:12px;
    font-weight:800;
}

.source-rss.yes{
    color:#15803d;
}

.source-rss.no{
    color:#94a3b8;
}

.source-status{
    display:inline-flex;
    align-items:center;
    padding:6px 10px;
    border-radius:999px;
    font-size:11px;
    font-weight:800;
}

.source-status.active{
    background:#e8f7ef;
    color:#137a44;
}

.source-status.inactive{
    background:#f1f5f9;
    color:#64748b;
}

.source-actions{
    display:flex;
    align-items:center;
    gap:8px;
}

.source-action{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    min-height:34px;
    padding:0 10px;
    border:1px solid var(--border);
    border-radius:8px;
    background:#fff;
    font:inherit;
    font-size:12px;
    font-weight:800;
    cursor:pointer;
}

.source-action.edit{
    color:var(--blue);
}

.source-action.delete{
    color:#dc2626;
}

.source-alert{
    margin-bottom:18px;
    padding:13px 15px;
    border-radius:10px;
    font-weight:700;
}

.source-alert-success{
    background:#e8f7ef;
    color:#137a44;
}

.source-alert-error{
    background:#fee2e2;
    color:#991b1b;
}

/* Modal */

.source-modal{
    position:fixed;
    inset:0;
    z-index:9999;
    display:none;
    align-items:center;
    justify-content:center;
    padding:20px;
}

.source-modal.show{
    display:flex;
}

.source-modal-backdrop{
    position:absolute;
    inset:0;
    background:rgba(11,31,56,.58);
    backdrop-filter:blur(3px);
}

.source-modal-dialog{
    position:relative;
    width:min(680px,100%);
    max-height:90vh;
    overflow:auto;
    background:#fff;
    border-radius:18px;
    box-shadow:0 30px 80px rgba(0,0,0,.25);
}

.source-modal-header{
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:22px 24px;
    border-bottom:1px solid var(--border);
}

.source-modal-header h2{
    margin:0;
}

.source-modal-header button{
    width:38px;
    height:38px;
    border:none;
    border-radius:10px;
    background:#f1f5f9;
    color:var(--text);
    font-size:24px;
    cursor:pointer;
}

.source-modal-form{
    display:grid;
    gap:10px;
    padding:24px;
}

.source-modal-form label{
    margin-top:8px;
    font-size:13px;
    font-weight:700;
}

.source-modal-form input,
.source-modal-form select{
    width:100%;
    min-height:46px;
    padding:11px 13px;
    border:1px solid var(--border);
    border-radius:10px;
    background:#fff;
    color:var(--text);
    font:inherit;
}

.source-modal-grid{
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:14px;
}

.source-checkbox{
    display:flex !important;
    align-items:center;
    gap:9px;
    margin-top:12px !important;
}

.source-checkbox input{
    width:18px;
    min-height:18px;
    height:18px;
}

.source-modal-actions{
    display:flex;
    align-items:center;
    gap:12px;
    margin-top:14px;
}

.source-modal-cancel{
    min-height:44px;
    padding:0 18px;
    border:1px solid var(--border);
    border-radius:10px;
    background:#fff;
    color:var(--muted);
    font-weight:700;
    cursor:pointer;
}

@media(max-width:1200px){
    .sources-filterbar{
        grid-template-columns:repeat(3,minmax(0,1fr));
    }

    .sources-stats{
        grid-template-columns:repeat(2,minmax(0,1fr));
    }
}

@media(max-width:700px){
    .sources-topbar{
        align-items:flex-start;
        flex-direction:column;
    }

    .sources-stats,
    .sources-filterbar,
    .source-modal-grid{
        grid-template-columns:1fr;
    }

    .source-table-wrapper{
        overflow-x:auto;
    }
}
/* RSS & Articles */

.article-filter-form{
    display:grid;
    grid-template-columns:minmax(240px,1fr) 260px auto;
    gap:12px;
}

.article-filter-form input,
.article-filter-form select{
    width:100%;
    min-height:46px;
    padding:11px 13px;
    border:1px solid var(--border);
    border-radius:10px;
    background:#fff;
    color:var(--text);
    font:inherit;
}

.articles-grid{
    display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:18px;
}

.article-card{
    background:#fff;
    border:1px solid var(--border);
    border-radius:16px;
    padding:22px;
    box-shadow:0 8px 22px rgba(11,31,56,.04);
}

.article-meta{
    display:flex;
    justify-content:space-between;
    gap:12px;
    color:var(--muted);
    font-size:12px;
    margin-bottom:12px;
}

.article-card h2{
    margin:0 0 12px;
    font-size:21px;
    line-height:1.35;
}

.article-card p{
    color:var(--muted);
    line-height:1.6;
}

.article-footer{
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:12px;
    margin-top:18px;
}

.article-footer a{
    color:var(--blue);
    font-weight:700;
}

.article-tag{
    display:inline-block;
    padding:5px 9px;
    border-radius:999px;
    background:#f1f5f9;
    color:#475569;
    font-size:11px;
    font-weight:700;
    text-transform:capitalize;
}

.article-tag.important{
    background:#fff1f2;
    color:#be123c;
}

@media(max-width:900px){
    .articles-grid{
        grid-template-columns:1fr;
    }

    .article-filter-form{
        grid-template-columns:1fr;
    }
}


