<?php

declare(strict_types=1);

require_once dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'fate_ui_settings.php';
require_once dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'fate_template.php';
$fateBrand = fate_public_site_branding();

$fatePageTitle = isset($fatePageTitle) && is_string($fatePageTitle) && $fatePageTitle !== ''
    ? $fatePageTitle
    : ($fateBrand['title_main'] . ' — ' . $fateBrand['title_sub']);
$fateIncludeStoreMap = isset($fateIncludeStoreMap) && $fateIncludeStoreMap;
$fateHtmlClass = trim((string) ($fateHtmlClass ?? '') . ' ' . fate_theme_html_class());
?>
<!DOCTYPE html>
<html lang="zh-Hant"<?= $fateHtmlClass !== '' ? ' class="' . htmlspecialchars(trim($fateHtmlClass), ENT_QUOTES, 'UTF-8') . '"' : '' ?>>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <?php
    require_once dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'fate_favicon.php';
    fate_favicon_head_links();
    ?>
    <title><?= htmlspecialchars($fatePageTitle, ENT_QUOTES, 'UTF-8') ?></title>
    <?php
    require_once dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'fate_seo.php';
    $fateSeoContext = isset($fateSeoContext) && is_array($fateSeoContext) ? $fateSeoContext : null;
    fate_seo_render($fateSeoContext, $fatePageTitle);
    ?>
    <?php
    fate_template_render_adsense_head();
    ?>
    <style>
        :root {
            --bg: #0a0c10;
            --bg2: #12151c;
            --fg: #e9ebf0;
            --muted: #868c9a;
            --accent: #7ab8ff;
            --accent2: #9d7ae8;
            --ok: #7ee787;
            --line: rgba(255,255,255,0.065);
            --card: rgba(255,255,255,0.035);
            --radius: 14px;
            --shadow-sm: 0 1px 0 rgba(255,255,255,0.04) inset, 0 8px 28px rgba(0,0,0,0.35);
        }
        * { box-sizing: border-box; margin: 0; padding: 0; }
        body {
            font-family: "Segoe UI", "Noto Sans TC", system-ui, sans-serif;
            background: radial-gradient(1100px 520px at 85% -8%, rgba(122,184,255,.1), transparent 58%),
                        radial-gradient(780px 460px at -8% 28%, rgba(157,122,232,.09), transparent 52%),
                        var(--bg);
            color: var(--fg);
            min-height: 100vh;
            letter-spacing: 0.01em;
        }
        .topbar {
            border-bottom: 1px solid var(--line);
            background: rgba(12,14,18,.75);
            backdrop-filter: blur(10px);
            position: sticky;
            top: 0;
            z-index: 10;
        }
        .topbar-inner {
            max-width: 72rem;
            margin: 0 auto;
            padding: 0.72rem 1.25rem;
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 0.55rem 1.1rem;
        }
        .brand {
            font-weight: 700;
            letter-spacing: 0.14em;
            font-size: 0.95rem;
            text-decoration: none;
            color: var(--fg);
        }
        .brand span { color: var(--accent); }
        nav { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; align-items: center; margin-left: auto; font-size: 0.88rem; }
        nav a { color: var(--accent); text-decoration: none; }
        nav a:hover { text-decoration: underline; }

        :root {
            --fate-topbar-sticky-offset: 3.15rem;
        }
        .layout-shell {
            max-width: 72rem;
            margin: 0 auto;
            padding: 0 1.25rem 0.35rem;
        }
        .layout {
            display: grid;
            grid-template-columns: minmax(0, 1fr) var(--sidebar, 17.75rem);
            gap: 1.35rem;
            align-items: start;
            padding-top: 0.85rem;
        }
        .layout-main { min-width: 0; max-width: 100%; }
        .layout-sidebar {
            position: sticky;
            top: calc(var(--fate-topbar-sticky-offset) + 0.45rem);
            display: flex;
            flex-direction: column;
            gap: 1rem;
        }
        .sidebar-card {
            background: var(--card);
            border: 1px solid var(--line);
            border-radius: var(--radius);
            padding: 1rem 1.05rem;
        }
        .sidebar-member-head {
            display: flex;
            align-items: center;
            gap: 0.65rem;
            margin-bottom: 0.65rem;
        }
        .sidebar-avatar {
            width: 44px;
            height: 44px;
            border-radius: 50%;
            object-fit: cover;
            border: 1px solid var(--line);
            flex-shrink: 0;
            background: var(--bg2);
        }
        .sidebar-member-head__text {
            min-width: 0;
            flex: 1;
        }
        .sidebar-member-head__text .sidebar-user-meta {
            margin-bottom: 0;
        }
        .sidebar-user-name {
            display: flex;
            flex-wrap: wrap;
            align-items: baseline;
            gap: 0.35rem 0.5rem;
            font-size: 1rem;
            font-weight: 600;
            margin: 0 0 0.25rem;
            line-height: 1.35;
        }
        .sidebar-user-ncoin {
            font-size: 0.82rem;
            font-weight: 600;
            white-space: nowrap;
        }
        .sidebar-user-ncoin__label {
            color: var(--muted);
            font-weight: 500;
            margin-right: 0.15rem;
        }
        .sidebar-user-ncoin__amount {
            color: var(--accent);
            font-variant-numeric: tabular-nums;
        }
        .sidebar-title {
            font-size: 0.72rem;
            text-transform: uppercase;
            letter-spacing: 0.08em;
            color: var(--muted);
            margin: 0 0 0.65rem;
            font-weight: 600;
        }
        .sidebar-user-meta {
            font-size: 0.82rem;
            color: var(--muted);
            margin: 0 0 0.85rem;
            word-break: break-all;
        }
        .sidebar-actions {
            display: flex;
            flex-wrap: wrap;
            gap: 0.5rem;
        }
        .sidebar-btn {
            display: inline-block;
            padding: 0.4rem 0.75rem;
            border-radius: 8px;
            border: 1px solid var(--line);
            font-size: 0.86rem;
            cursor: pointer;
            text-decoration: none;
            text-align: center;
            background: rgba(121, 192, 255, 0.14);
            color: var(--accent);
        }
        .sidebar-btn:hover { background: rgba(121, 192, 255, 0.24); }
        .sidebar-btn--ghost {
            background: transparent;
            color: var(--muted);
        }
        .sidebar-btn--ghost:hover {
            border-color: rgba(121, 192, 255, 0.35);
            color: var(--accent);
        }
        .sidebar-actions--blog {
            margin-top: 0.65rem;
        }
        .sidebar-announce-empty {
            margin: 0 0 0.5rem;
            font-size: 0.84rem;
            color: var(--muted);
            line-height: 1.45;
        }
        .sidebar-announce-list {
            list-style: none;
            margin: 0;
            padding: 0;
            display: grid;
            gap: 0.35rem;
        }
        .sidebar-announce-list__link {
            display: flex;
            align-items: baseline;
            justify-content: space-between;
            gap: 0.55rem;
            padding: 0.42rem 0.5rem;
            margin: 0 -0.5rem;
            border-radius: 8px;
            text-decoration: none;
            color: var(--fg);
            line-height: 1.35;
        }
        .sidebar-announce-list__link:hover {
            background: rgba(121, 192, 255, 0.1);
            color: var(--accent);
        }
        .sidebar-announce-list__title {
            min-width: 0;
            flex: 1;
            font-size: 0.88rem;
            font-weight: 500;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }
        .sidebar-announce-list__date {
            flex-shrink: 0;
            font-size: 0.72rem;
            color: var(--muted);
            font-variant-numeric: tabular-nums;
        }
        .sidebar-search-label {
            display: block;
            font-size: 0.78rem;
            color: var(--muted);
            margin-bottom: 0.35rem;
        }
        .sidebar-search-row {
            display: flex;
            gap: 0.45rem;
            align-items: stretch;
        }
        .sidebar-search {
            flex: 1;
            min-width: 0;
            padding: 0.45rem 0.55rem;
            border-radius: 8px;
            border: 1px solid var(--line);
            background: var(--bg2);
            color: var(--fg);
            font-size: 0.88rem;
        }
        .sidebar-submit {
            padding: 0.45rem 0.65rem;
            border-radius: 8px;
            border: 1px solid var(--line);
            background: rgba(121, 192, 255, 0.18);
            color: var(--accent);
            font-size: 0.82rem;
            cursor: pointer;
            flex-shrink: 0;
        }
        .sidebar-submit:hover { background: rgba(121, 192, 255, 0.28); }
        .sidebar-hint {
            font-size: 0.74rem;
            color: var(--muted);
            margin: 0.55rem 0 0;
            line-height: 1.45;
        }
        .sidebar-hint--search {
            margin-top: 0.65rem;
        }
        .sidebar-hint--search strong,
        .sidebar-hint strong {
            color: var(--fg);
            font-weight: 600;
        }
        .sidebar-hint--fuzzy {
            color: #fde68a;
            font-weight: 700;
        }
        .sidebar-user-hint { margin-bottom: 0.75rem; }
        .text-accent-link { color: var(--accent); text-decoration: none; }
        .text-accent-link:hover { text-decoration: underline; }

        @media (max-width: 960px) {
            .layout {
                grid-template-columns: 1fr;
            }
            .layout-sidebar {
                position: static;
            }
        }

        .hero {
            max-width: none;
            margin: 0 auto;
            padding: 0.85rem 0 0.65rem;
        }
        .hero p.lead {
            color: var(--muted);
            font-size: 0.92rem;
            max-width: 42rem;
            line-height: 1.6;
            margin: 0 0 0.75rem;
        }
        .fate-search-summary {
            margin: 0 0 0.85rem;
            padding: 0.85rem 1rem;
            border: 1px solid rgba(121, 192, 255, 0.28);
            border-radius: 12px;
            background: linear-gradient(135deg, rgba(121, 192, 255, 0.08), rgba(121, 192, 255, 0.02));
        }
        .fate-search-summary__title {
            margin: 0 0 0.35rem;
            font-size: 1.05rem;
            font-weight: 600;
            letter-spacing: 0.02em;
        }
        .fate-search-summary__meta {
            margin: 0;
            color: var(--muted);
            font-size: 0.92rem;
            line-height: 1.55;
        }
        .fate-search-summary__kw,
        .fate-search-summary__count {
            color: var(--fg);
            font-weight: 600;
        }
        .fate-search-summary__sep {
            margin: 0 0.25rem;
            opacity: 0.65;
        }
        .fate-search-summary__clear {
            display: inline-block;
            margin-top: 0.55rem;
            font-size: 0.86rem;
        }
        .fate-search-summary__note {
            margin: 0.35rem 0 0;
            font-size: 0.84rem;
            color: var(--muted);
            line-height: 1.5;
        }
        .fate-search-summary--fuzzy {
            border-color: rgba(251, 191, 36, 0.45);
            background: linear-gradient(135deg, rgba(251, 191, 36, 0.14), rgba(251, 191, 36, 0.04));
            box-shadow: inset 0 0 0 1px rgba(251, 191, 36, 0.08);
        }
        .fate-search-summary--fuzzy .fate-search-summary__title {
            color: #fde68a;
        }
        .fate-search-summary__badge {
            display: inline-block;
            margin: 0 0 0.45rem;
            padding: 0.18rem 0.55rem;
            border-radius: 999px;
            border: 1px solid rgba(251, 191, 36, 0.55);
            background: rgba(251, 191, 36, 0.16);
            color: #fde68a;
            font-size: 0.72rem;
            font-weight: 700;
            letter-spacing: 0.06em;
            text-transform: uppercase;
        }
        .fate-search-summary--fuzzy .fate-search-summary__note {
            color: rgba(253, 230, 138, 0.92);
        }
        .fate-search-fuzzy-label {
            margin: 0 0 0.75rem;
            padding: 0.45rem 0.75rem;
            border-radius: 8px;
            border: 1px dashed rgba(251, 191, 36, 0.35);
            background: rgba(251, 191, 36, 0.06);
            color: var(--muted);
            font-size: 0.84rem;
            line-height: 1.5;
        }
        .fate-search-fuzzy-label strong {
            color: #fde68a;
            font-weight: 700;
        }

        .toolbar {
            display: flex;
            flex-wrap: wrap;
            gap: 0.55rem;
            align-items: center;
            margin-bottom: 1.05rem;
        }
        .home-listing-nav {
            display: flex;
            flex-wrap: wrap;
            gap: 0.45rem;
            margin: 0 0 0.85rem;
        }
        .home-listing-nav__btn {
            display: inline-flex;
            align-items: center;
            padding: 0.42rem 0.95rem;
            border: 1px solid var(--line);
            border-radius: 8px;
            background: rgba(255, 255, 255, 0.03);
            color: var(--muted);
            font-size: 0.86rem;
            font-weight: 600;
            text-decoration: none;
            line-height: 1.35;
            transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease;
        }
        .home-listing-nav__btn:hover {
            color: var(--fg);
            border-color: rgba(122, 184, 255, 0.35);
        }
        .home-listing-nav__btn.is-active {
            color: var(--fg);
            border-color: rgba(122, 184, 255, 0.45);
            background: rgba(122, 184, 255, 0.12);
        }
        .toolbar label { font-size: 0.78rem; color: var(--muted); margin-right: 0.25rem; }
        select, .btn-link {
            background: var(--bg2);
            border: 1px solid var(--line);
            color: var(--fg);
            padding: 0.45rem 0.65rem;
            border-radius: 8px;
            font-size: 0.88rem;
        }
        .btn-link { cursor: pointer; text-decoration: none; display: inline-block; }
        .btn-link:hover { border-color: rgba(121,192,255,.35); }
        .stats {
            font-size: 0.8rem;
            color: var(--muted);
            margin-left: auto;
        }
        .stats strong { color: var(--fg); font-weight: 600; }

        .grid {
            max-width: none;
            margin: 0 auto;
            padding: 0 0 2.25rem;
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(248px, 1fr));
            gap: 0.85rem;
        }
        .card {
            border: 1px solid var(--line);
            border-radius: var(--radius);
            overflow: hidden;
            background: var(--card);
            display: flex;
            flex-direction: column;
            min-height: 100%;
            box-shadow: var(--shadow-sm);
            transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
        }
        .card:hover {
            transform: translateY(-3px);
            border-color: rgba(122,184,255,.2);
            box-shadow: var(--shadow-sm), 0 0 0 1px rgba(122,184,255,.08);
        }
        .card-visual {
            aspect-ratio: 16 / 7;
            background: linear-gradient(145deg, var(--bg2), #171d28);
            position: relative;
            overflow: hidden;
        }
        .card-visual__link {
            display: block;
            width: 100%;
            height: 100%;
            color: inherit;
            text-decoration: none;
        }
        .card-visual__link:focus-visible {
            outline: 2px solid rgba(122, 184, 255, 0.65);
            outline-offset: -2px;
        }
        .card-visual__link img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            display: block;
            transition: opacity 0.18s ease;
        }
        .card-visual__link:hover img {
            opacity: 0.9;
        }
        .card-visual .ph {
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100%;
            color: var(--muted);
            font-size: 0.75rem;
            letter-spacing: 0.06em;
        }
        .badge-rating {
            position: absolute;
            top: 0.45rem;
            right: 0.45rem;
            z-index: 2;
            display: inline-flex;
            align-items: center;
            gap: 0.18rem;
            background: rgba(255, 255, 255, 0.96);
            color: #1a1a1a;
            border: 1px solid rgba(0, 0, 0, 0.12);
            padding: 0.22rem 0.5rem;
            border-radius: 4px;
            font-size: 0.78rem;
            font-weight: 700;
            line-height: 1.2;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.22);
        }
        .badge-rating__star {
            color: #f59e0b;
            font-size: 0.82rem;
            line-height: 1;
        }
        .badge-rating__score {
            font-variant-numeric: tabular-nums;
        }
        .badge-rating__cnt {
            font-size: 0.68rem;
            font-weight: 600;
            color: #555;
        }
        .card-rating-row {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 0.28rem 0.38rem;
            margin: 0;
            font-size: 0.82rem;
            line-height: 1.35;
        }
        .card-rating-row__star {
            color: #fbbf24;
            font-size: 0.92rem;
            line-height: 1;
        }
        .card-rating-row__score {
            font-size: 0.95rem;
            font-weight: 800;
            color: var(--fg);
            font-variant-numeric: tabular-nums;
        }
        .card-rating-row__brand {
            font-size: 0.68rem;
            font-weight: 700;
            letter-spacing: 0.03em;
            text-transform: uppercase;
            color: #4285f4;
            padding: 0.06rem 0.32rem;
            border: 1px solid rgba(66, 133, 244, 0.35);
            border-radius: 3px;
            background: rgba(66, 133, 244, 0.08);
        }
        .card-rating-row__cnt {
            font-size: 0.74rem;
            font-weight: 500;
            color: var(--muted);
        }
        .card-body { padding: 0.52rem 0.78rem 0.62rem; flex: 1; display: flex; flex-direction: column; gap: 0.28rem; }
        .card-body h2 {
            font-size: 0.93rem;
            font-weight: 600;
            line-height: 1.32;
        }
        .card-body h2 a { color: inherit; text-decoration: none; }
        .card-body h2 a:hover { color: var(--accent); }
        .meta-line { font-size: 0.73rem; color: var(--muted); line-height: 1.42; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
        .card-foot {
            margin-top: auto;
            padding-top: 0.38rem;
            display: flex;
            justify-content: space-between;
            align-items: center;
            gap: 0.45rem;
            font-size: 0.72rem;
            color: var(--muted);
        }
        .card-foot a {
            color: var(--accent);
            text-decoration: none;
            font-weight: 600;
            font-size: 0.78rem;
        }
        .card-foot a:hover { text-decoration: underline; }

        @media (max-width: 767px) {
            .home-listing-nav {
                flex-wrap: nowrap;
                overflow-x: auto;
                overflow-y: hidden;
                -webkit-overflow-scrolling: touch;
                scrollbar-width: none;
                gap: 0.4rem;
                margin-bottom: 0.65rem;
                padding-bottom: 0.1rem;
            }
            .home-listing-nav::-webkit-scrollbar {
                display: none;
            }
            .home-listing-nav__btn {
                flex-shrink: 0;
                white-space: nowrap;
                font-size: 0.82rem;
                padding: 0.38rem 0.85rem;
            }
            .toolbar {
                flex-wrap: nowrap;
                align-items: center;
                gap: 0.4rem;
                overflow-x: auto;
                overflow-y: hidden;
                -webkit-overflow-scrolling: touch;
                scrollbar-width: none;
                margin-bottom: 0.75rem;
                padding-bottom: 0.12rem;
            }
            .toolbar::-webkit-scrollbar {
                display: none;
            }
            .toolbar > div,
            .toolbar > form {
                flex: 0 0 auto;
                display: inline-flex;
                align-items: center;
                gap: 0.28rem;
                min-width: 0;
            }
            .toolbar label {
                margin-right: 0;
                flex-shrink: 0;
                white-space: nowrap;
                font-size: 0.72rem;
            }
            .toolbar select {
                width: auto;
                min-width: 4.8rem;
                max-width: none;
                flex-shrink: 0;
                font-size: 0.8rem;
                padding: 0.38rem 0.48rem;
            }
            .toolbar > form {
                gap: 0.35rem;
            }
            .toolbar > form .btn-link {
                flex: 0 0 auto;
                white-space: nowrap;
                font-size: 0.8rem;
                padding: 0.38rem 0.55rem;
            }
            .toolbar .stats {
                margin-left: 0;
                flex-shrink: 0;
                white-space: nowrap;
                font-size: 0.72rem;
                line-height: 1.2;
            }
            .grid {
                grid-template-columns: repeat(2, minmax(0, 1fr));
                gap: 0.55rem;
                padding-bottom: 1.75rem;
            }
            .card-body {
                padding: 0.42rem 0.52rem 0.52rem;
                gap: 0.2rem;
            }
            .card-body h2 {
                font-size: 0.82rem;
                line-height: 1.28;
            }
            .meta-line {
                font-size: 0.68rem;
            }
            .card-foot {
                padding-top: 0.28rem;
                font-size: 0.66rem;
                gap: 0.3rem;
            }
            .card-foot a {
                font-size: 0.72rem;
            }
            .badge-rating {
                font-size: 0.68rem;
                padding: 0.16rem 0.38rem;
                top: 0.32rem;
                right: 0.32rem;
            }
            .card-rating-row {
                font-size: 0.72rem;
            }
            .card-rating-row__score {
                font-size: 0.82rem;
            }
            .card-rating-row__cnt {
                font-size: 0.66rem;
            }
        }

        .empty {
            grid-column: 1 / -1;
            text-align: center;
            padding: 3rem 1rem;
            border: 1px dashed var(--line);
            border-radius: var(--radius);
            color: var(--muted);
        }
        .empty code { color: var(--accent); }

        .pager {
            max-width: none;
            margin: 0 auto;
            padding: 0 0 2rem;
            display: flex;
            flex-wrap: wrap;
            gap: 0.5rem;
            align-items: center;
            justify-content: center;
            font-size: 0.88rem;
        }
        .pager a, .pager span {
            padding: 0.35rem 0.65rem;
            border-radius: 6px;
            border: 1px solid var(--line);
            text-decoration: none;
            color: var(--accent);
            background: var(--bg2);
        }
        .pager span.disabled { opacity: 0.35; pointer-events: none; color: var(--muted); }
        .pager span.cur { border-color: rgba(121,192,255,.4); color: var(--fg); }

        /* 首頁本週熱門：幻燈片式滑動（定點／非定點各自 TOP10） */
        .fate-weekly-slider {
            margin: 0 0 1.35rem;
        }
        .fate-weekly-slider__head {
            display: flex;
            align-items: flex-end;
            justify-content: space-between;
            gap: 0.65rem 1rem;
            margin-bottom: 0.62rem;
        }
        .fate-weekly-slider__titles {
            min-width: 0;
            flex: 1 1 auto;
        }
        .fate-weekly-slider__label {
            margin: 0;
            font-size: clamp(0.98rem, 2.2vw, 1.12rem);
            font-weight: 800;
            letter-spacing: 0.02em;
            color: var(--fg);
            line-height: 1.3;
        }
        .fate-weekly-slider__sub {
            margin: 0.28rem 0 0;
            font-size: 0.74rem;
            color: var(--muted);
            line-height: 1.4;
        }
        .fate-weekly-slider__counter {
            flex-shrink: 0;
            font-size: 0.78rem;
            font-weight: 700;
            color: var(--muted);
            letter-spacing: 0.04em;
            padding: 0.28rem 0.55rem;
            border-radius: 999px;
            border: 1px solid var(--line);
            background: rgba(255, 255, 255, 0.03);
        }
        .fate-weekly-slider__viewport {
            position: relative;
            overflow: hidden;
            border-radius: calc(var(--radius) + 2px);
            border: 1px solid var(--line);
            background: var(--bg2);
            box-shadow: var(--shadow-sm);
            height: clamp(154px, 31vw, 220px);
        }
        .fate-weekly-slider__track {
            display: flex;
            width: 100%;
            height: 100%;
            transition: transform 0.42s cubic-bezier(0.25, 0.8, 0.25, 1);
            will-change: transform;
        }
        .fate-weekly-slider__slide {
            flex: 0 0 100%;
            min-width: 100%;
            height: 100%;
        }
        .fate-weekly-slider__link {
            display: block;
            position: relative;
            width: 100%;
            height: 100%;
            color: inherit;
            text-decoration: none;
            overflow: hidden;
        }
        .fate-weekly-slider__cover {
            position: absolute;
            inset: 0;
            width: 100%;
            height: 100%;
            object-fit: cover;
            object-position: center;
            display: block;
            background: linear-gradient(145deg, var(--bg2), #171d28);
        }
        .fate-weekly-slider__cover--empty {
            display: flex;
            align-items: center;
            justify-content: center;
            color: var(--muted);
            font-size: 0.72rem;
            letter-spacing: 0.08em;
        }
        .fate-weekly-slider__overlay {
            position: absolute;
            inset: 0;
            background: linear-gradient(180deg, rgba(10, 12, 16, 0.12) 0%, rgba(10, 12, 16, 0.08) 40%, rgba(10, 12, 16, 0.88) 100%);
            pointer-events: none;
        }
        .fate-weekly-slider__content {
            position: absolute;
            left: 0;
            right: 0;
            bottom: 0;
            z-index: 2;
            padding: clamp(0.55rem, 2vw, 0.85rem) clamp(0.75rem, 2.5vw, 1.1rem);
            color: #fff;
        }
        .fate-weekly-slider__kicker {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 0.28rem 0.4rem;
            margin-bottom: 0.22rem;
        }
        .fate-weekly-slider__rank {
            display: inline-flex;
            min-width: 1.55rem;
            height: 1.55rem;
            align-items: center;
            justify-content: center;
            padding: 0 0.4rem;
            border-radius: 999px;
            background: rgba(122, 184, 255, 0.95);
            color: #0a0c10;
            font-weight: 900;
            font-size: 0.74rem;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.25);
        }
        .fate-weekly-slider__badge {
            display: inline-block;
            padding: 0.14rem 0.48rem;
            border-radius: 999px;
            background: rgba(255, 255, 255, 0.12);
            border: 1px solid rgba(255, 255, 255, 0.18);
            font-size: 0.62rem;
            font-weight: 700;
            letter-spacing: 0.05em;
            text-transform: uppercase;
            opacity: 0.92;
        }
        .fate-weekly-slider__title {
            margin: 0;
            font-size: clamp(0.92rem, 2.6vw, 1.12rem);
            line-height: 1.25;
            font-weight: 800;
            color: #fff;
            text-shadow: 0 2px 12px rgba(0, 0, 0, 0.5);
            display: -webkit-box;
            -webkit-line-clamp: 2;
            -webkit-box-orient: vertical;
            overflow: hidden;
        }
        .fate-weekly-slider__meta {
            display: flex;
            flex-wrap: wrap;
            gap: 0.22rem 0.65rem;
            margin-top: 0.28rem;
            font-size: 0.72rem;
            color: rgba(255, 255, 255, 0.9);
            text-shadow: 0 1px 6px rgba(0, 0, 0, 0.45);
        }
        .fate-weekly-slider__meta-k {
            opacity: 0.72;
            margin-right: 0.22rem;
        }
        .fate-weekly-slider__meta > span {
            display: inline-flex;
            align-items: center;
            max-width: 100%;
        }
        .fate-weekly-slider__cta {
            display: none;
        }
        .fate-weekly-slider__nav {
            position: absolute;
            top: 50%;
            z-index: 4;
            transform: translateY(-50%);
            width: 2.15rem;
            height: 2.15rem;
            border-radius: 999px;
            border: 1px solid rgba(255, 255, 255, 0.35);
            background: rgba(10, 12, 16, 0.55);
            color: #fff;
            font-size: 1.15rem;
            line-height: 1;
            cursor: pointer;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            transition: background 0.15s ease, border-color 0.15s ease, transform 0.12s ease;
            backdrop-filter: blur(4px);
        }
        .fate-weekly-slider__nav:hover {
            background: rgba(122, 184, 255, 0.35);
            border-color: rgba(122, 184, 255, 0.65);
        }
        .fate-weekly-slider__nav:active {
            transform: translateY(-50%) scale(0.96);
        }
        .fate-weekly-slider__nav--prev { left: 0.55rem; }
        .fate-weekly-slider__nav--next { right: 0.55rem; }
        .fate-weekly-slider__dots {
            position: absolute;
            left: 0;
            right: 0;
            bottom: 0.55rem;
            z-index: 4;
            display: flex;
            justify-content: center;
            gap: 0.35rem;
            pointer-events: none;
        }
        .fate-weekly-slider__dot {
            pointer-events: auto;
            width: 0.45rem;
            height: 0.45rem;
            padding: 0;
            border: none;
            border-radius: 999px;
            background: rgba(255, 255, 255, 0.38);
            cursor: pointer;
            transition: transform 0.15s ease, background 0.15s ease;
        }
        .fate-weekly-slider__dot.is-active {
            background: rgba(122, 184, 255, 0.95);
            transform: scale(1.25);
        }
        .fate-weekly-slider--single .fate-weekly-slider__viewport {
            border-radius: calc(var(--radius) + 2px);
        }
        @media (max-width: 720px) {
            .fate-weekly-slider__head {
                align-items: center;
            }
            .fate-weekly-slider__label {
                font-size: 0.95rem;
            }
            .fate-weekly-slider__sub {
                font-size: 0.7rem;
            }
            .fate-weekly-slider__viewport {
                height: clamp(132px, 40vw, 171px);
            }
            .fate-weekly-slider__nav {
                width: 1.85rem;
                height: 1.85rem;
                font-size: 1rem;
            }
            .fate-weekly-slider__content {
                padding-bottom: 1.35rem;
            }
        }
        @media (prefers-reduced-motion: reduce) {
            .fate-weekly-slider__track {
                transition: none;
            }
        }

        code.inline { font-size: 0.85em; background: rgba(0,0,0,.35); padding: 0.1em 0.35em; border-radius: 4px; }

        .layout-shell--detail { padding-top: 0.25rem; }
        .store-bc {
            font-size: 0.8rem;
            color: var(--muted);
            margin: 0 0 1rem;
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 0.35rem;
        }
        .store-bc a { color: var(--accent); text-decoration: none; }
        .store-bc a:hover { text-decoration: underline; }
        .store-bc__sep { opacity: 0.45; user-select: none; }
        .store-bc__cur { color: var(--fg); }

        .store-panel {
            border-radius: var(--radius);
            border: 1px solid var(--line);
            padding: 1.25rem 1.35rem;
            background: var(--card);
            box-shadow: var(--shadow-sm);
        }
        .store-panel--warn { border-color: rgba(255,180,120,.28); }
        .store-panel--muted { color: var(--muted); }

        .store-detail { padding-bottom: 2rem; }

        /* 店家詳情：版型對齊 SPA 新手村（封面資訊卡 + 照片格網 + 區塊卡片），沿用本站深色變數 */
        .store-card-fate {
            background: var(--card);
            border-radius: 14px;
            border: 1px solid var(--line);
            box-shadow: var(--shadow-sm);
            margin-bottom: 1.1rem;
            overflow: hidden;
        }
        .store-card-fate__cover {
            width: 100%;
            height: 280px;
            object-fit: cover;
            display: block;
            background: linear-gradient(145deg, var(--bg2), #171d28);
        }
        .store-card-fate__cover--empty {
            display: flex;
            align-items: center;
            justify-content: center;
            color: var(--muted);
            font-size: 0.85rem;
            letter-spacing: 0.06em;
        }
        .store-card-fate__body {
            padding: 1rem 1.05rem 1.05rem;
        }
        .store-card-fate--photos,
        .store-card-fate--block {
            padding: 1rem 1.05rem 1.05rem;
        }
        .store-header-row-fate {
            display: flex;
            justify-content: space-between;
            align-items: flex-start;
            gap: 0.75rem;
            margin-bottom: 0.75rem;
            padding-bottom: 0.65rem;
            border-bottom: 1px dashed rgba(122, 184, 255, 0.22);
        }
        .store-title-fate {
            font-size: clamp(1.22rem, 2.8vw, 1.55rem);
            font-weight: 700;
            line-height: 1.25;
            margin: 0 0 0.25rem;
            letter-spacing: -0.02em;
        }
        .store-sub-fate {
            margin: 0 0 0.35rem;
            font-size: 0.88rem;
            color: var(--muted);
        }
        .store-rating-fate {
            margin: 0;
            font-size: 0.88rem;
            font-weight: 600;
            color: var(--fg);
        }
        .store-rating-fate__star {
            color: #fbbf24;
            margin-right: 0.15rem;
        }
        .store-rating-fate__cnt {
            font-weight: 500;
            color: var(--muted);
            font-size: 0.82rem;
        }
        .store-share-fate {
            display: flex;
            flex-wrap: wrap;
            gap: 0.35rem;
            flex-shrink: 0;
        }
        .store-share-fate__btn {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            padding: 0.35rem 0.55rem;
            border-radius: 999px;
            font-size: 0.72rem;
            font-weight: 600;
            border: 1px solid var(--line);
            background: rgba(255, 255, 255, 0.04);
            color: var(--accent);
            text-decoration: none;
            cursor: pointer;
            font-family: inherit;
            transition: background 0.15s ease, border-color 0.15s ease;
        }
        .store-share-fate__btn:hover {
            background: rgba(122, 184, 255, 0.12);
            border-color: rgba(122, 184, 255, 0.35);
        }
        .store-info-fate {
            display: flex;
            flex-direction: column;
            gap: 0.42rem;
            margin-bottom: 0.85rem;
        }
        .store-info-item-fate {
            display: flex;
            align-items: flex-start;
            gap: 0.5rem;
            padding: 0.42rem 0.55rem;
            border-radius: 10px;
            border: 1px solid rgba(122, 184, 255, 0.15);
            background: rgba(122, 184, 255, 0.06);
            font-size: 0.86rem;
            line-height: 1.45;
            color: var(--fg);
        }
        .store-info-item-fate__glyph {
            flex-shrink: 0;
            width: 1.35rem;
            height: 1.35rem;
            border-radius: 8px;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            font-size: 0.68rem;
            font-weight: 800;
            background: rgba(122, 184, 255, 0.18);
            color: var(--accent);
        }
        .store-info-item-fate__body {
            min-width: 0;
            word-break: break-word;
        }
        .store-info-item-fate__body a {
            color: var(--accent);
            font-weight: 600;
            text-decoration: none;
        }
        .store-info-item-fate__body a:hover {
            text-decoration: underline;
        }
        .store-hours-inline-fate {
            font-weight: 500;
        }
        .store-info-item-fate__body .store-hours-card__today {
            margin: 0 0 0.5rem;
            font-size: 0.88rem;
            line-height: 1.45;
        }
        .store-hours-card__tag {
            display: inline-block;
            margin-right: 0.35rem;
            padding: 0.1rem 0.4rem;
            border-radius: 4px;
            font-size: 0.68rem;
            font-weight: 700;
            letter-spacing: 0.04em;
            color: var(--accent);
            background: rgba(122, 184, 255, 0.12);
            border: 1px solid rgba(122, 184, 255, 0.28);
            vertical-align: baseline;
        }
        .store-hours-card__table-wrap {
            margin-top: 0.15rem;
            overflow-x: auto;
        }
        .store-hours-card__table {
            width: 100%;
            border-collapse: collapse;
            font-size: 0.8rem;
            line-height: 1.4;
        }
        .store-hours-card__table th,
        .store-hours-card__table td {
            padding: 0.28rem 0.45rem 0.28rem 0;
            border-bottom: 1px solid var(--line);
            text-align: left;
            vertical-align: top;
        }
        .store-hours-card__table tr:last-child th,
        .store-hours-card__table tr:last-child td { border-bottom: none; }
        .store-hours-card__table th {
            width: 5.5rem;
            font-weight: 600;
            color: var(--muted);
            white-space: nowrap;
        }
        .store-hours-card__legacy,
        .store-hours-card__list {
            margin: 0;
            font-size: 0.84rem;
            line-height: 1.45;
            color: var(--fg);
        }
        .store-hours-card__list {
            padding-left: 1.1rem;
        }
        .store-hours-card__list li { margin-bottom: 0.2rem; }
        .store-hours-card__toggle {
            display: inline-block;
            margin: 0.15rem 0 0;
            padding: 0;
            border: none;
            background: none;
            color: var(--accent);
            font: inherit;
            font-size: 0.8rem;
            font-weight: 600;
            cursor: pointer;
            text-decoration: underline;
            text-underline-offset: 2px;
        }
        .store-hours-card__toggle:hover { opacity: 0.88; }
        .store-hours-card__details { margin-top: 0.45rem; }
        .store-hours-card__details[hidden] { display: none !important; }
        .store-features-fate {
            display: flex;
            flex-wrap: wrap;
            gap: 0.4rem;
            padding-top: 0.65rem;
            margin-bottom: 0.85rem;
            border-top: 1px solid var(--line);
        }
        .store-badge-fate {
            display: inline-flex;
            align-items: center;
            padding: 0.28rem 0.55rem;
            border-radius: 999px;
            font-size: 0.76rem;
            font-weight: 600;
            line-height: 1.2;
        }
        .store-badge-fate--muted {
            background: rgba(255, 255, 255, 0.06);
            border: 1px solid var(--line);
            color: var(--muted);
        }
        .store-badge-fate--accent {
            background: rgba(122, 184, 255, 0.14);
            border: 1px solid rgba(122, 184, 255, 0.28);
            color: var(--accent);
        }
        .store-badge-fate--ok {
            background: rgba(74, 222, 128, 0.14);
            border: 1px solid rgba(74, 222, 128, 0.35);
            color: #86efac;
        }
        .store-disclaimer-fate {
            font-size: 0.82rem;
            line-height: 1.55;
            color: var(--muted);
            padding: 0.55rem 0.65rem;
            border-radius: 10px;
            background: rgba(0, 0, 0, 0.22);
            border: 1px solid var(--line);
        }
        .store-section-fate-h {
            font-size: 1.02rem;
            font-weight: 700;
            margin: 0 0 0.75rem;
            color: var(--fg);
            letter-spacing: -0.01em;
        }
        .store-photos-grid-fate {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(128px, 1fr));
            gap: 10px;
            margin: 0;
        }
        .store-photo-tile-fate {
            position: relative;
            padding-top: 75%;
            border-radius: 10px;
            overflow: hidden;
            border: 1px solid var(--line);
            background: var(--bg2);
        }
        .store-photo-tile-fate a {
            position: absolute;
            inset: 0;
            cursor: zoom-in;
        }
        .store-photo-tile-fate a.fate-image-lightbox-trigger {
            touch-action: manipulation;
            -webkit-tap-highlight-color: transparent;
        }
        .store-photo-tile-fate img {
            position: absolute;
            inset: 0;
            width: 100%;
            height: 100%;
            object-fit: cover;
            transition: transform 0.25s ease;
        }
        .store-photo-tile-fate a:hover img {
            transform: scale(1.05);
        }
        .store-photo-tile-fate--extra {
            display: none;
        }
        .store-photo-tile-fate--extra.store-photo-tile-fate--extra-visible {
            display: block;
        }
        .store-photos-more-fate {
            margin-top: 0.65rem;
            padding: 0.4rem 0.85rem;
            border-radius: 10px;
            font-size: 0.82rem;
            font-weight: 600;
            font-family: inherit;
            cursor: pointer;
            border: 1px solid rgba(122, 184, 255, 0.35);
            background: rgba(122, 184, 255, 0.1);
            color: var(--accent);
        }
        .store-photos-more-fate:hover {
            background: rgba(122, 184, 255, 0.18);
        }
        .store-meta-foot--detail {
            margin-top: 0.35rem;
            padding-top: 0.85rem;
            border-top: 1px solid var(--line);
        }
        @media (max-width: 767px) {
            .store-card-fate__cover {
                height: 140px;
            }
            .store-header-row-fate {
                flex-direction: column;
                align-items: stretch;
            }
            .store-share-fate {
                justify-content: flex-start;
            }
            .store-photos-grid-fate {
                grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
            }
        }

        .store-hero {
            display: grid;
            grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
            gap: 1.15rem;
            align-items: stretch;
            margin-bottom: 1.35rem;
        }
        @media (max-width: 840px) {
            .store-hero { grid-template-columns: 1fr; }
        }
        .store-hero__visual {
            position: relative;
            border-radius: var(--radius);
            overflow: hidden;
            border: 1px solid var(--line);
            aspect-ratio: 16 / 9;
            background: linear-gradient(145deg, var(--bg2), #171d28);
            box-shadow: var(--shadow-sm);
        }
        .store-hero__visual img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            display: block;
        }
        .store-hero__ph {
            height: 100%;
            display: flex;
            align-items: center;
            justify-content: center;
            color: var(--muted);
            font-size: 0.72rem;
            letter-spacing: 0.08em;
        }
        .store-hero__badge {
            position: absolute;
            bottom: 0.55rem;
            left: 0.55rem;
            background: rgba(0,0,0,.55);
            border: 1px solid var(--line);
            padding: 0.28rem 0.5rem;
            border-radius: 8px;
            font-size: 0.82rem;
            font-weight: 700;
        }
        .store-hero__badge-sub { opacity: 0.82; font-weight: 500; font-size: 0.78rem; }
        .store-hero__intro {
            display: flex;
            flex-direction: column;
            gap: 0.45rem;
            justify-content: center;
            padding: 0.15rem 0.25rem;
        }
        .store-title {
            font-size: clamp(1.35rem, 3vw, 1.85rem);
            font-weight: 700;
            line-height: 1.22;
            letter-spacing: -0.02em;
        }
        .store-sub { color: var(--muted); font-size: 0.92rem; }
        .store-addr { color: var(--fg); font-size: 0.88rem; line-height: 1.55; opacity: 0.92; }
        .store-hero__actions { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.35rem; }
        .store-btn {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            padding: 0.42rem 0.85rem;
            border-radius: 10px;
            font-size: 0.84rem;
            font-weight: 600;
            text-decoration: none;
            border: 1px solid var(--line);
            transition: background 0.15s ease, border-color 0.15s ease;
        }
        .store-btn--primary {
            background: rgba(122, 184, 255, 0.18);
            color: var(--accent);
            border-color: rgba(122, 184, 255, 0.35);
        }
        .store-btn--primary:hover { background: rgba(122, 184, 255, 0.28); }
        .store-btn--ghost {
            background: transparent;
            color: var(--muted);
        }
        .store-btn--ghost:hover { border-color: rgba(122, 184, 255, 0.3); color: var(--accent); }

        .store-section { margin-bottom: 1.35rem; }
        .store-section__h {
            font-size: 0.72rem;
            text-transform: uppercase;
            letter-spacing: 0.1em;
            color: var(--muted);
            margin: 0 0 0.65rem;
            font-weight: 700;
        }
        .store-tag-cloud {
            display: flex;
            flex-wrap: wrap;
            gap: 0.45rem 0.5rem;
            margin: 0;
            align-items: flex-start;
        }
        .store-tag-bubble {
            display: inline-flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 0.35rem 0.55rem;
            max-width: 100%;
            padding: 0.42rem 0.78rem 0.42rem 0.62rem;
            border-radius: 1.15rem;
            border: 1px solid rgba(122, 184, 255, 0.22);
            background: linear-gradient(155deg, rgba(122, 184, 255, 0.12), rgba(255,255,255,0.03));
            box-shadow: 0 1px 0 rgba(255,255,255,0.05) inset, 0 6px 22px rgba(0,0,0,0.22);
        }
        .store-tag-bubble__k {
            flex-shrink: 0;
            font-size: 0.68rem;
            font-weight: 700;
            letter-spacing: 0.06em;
            text-transform: uppercase;
            color: var(--muted);
            opacity: 0.95;
        }
        .store-tag-bubble__k::after {
            content: '·';
            margin-left: 0.35rem;
            opacity: 0.45;
            font-weight: 400;
        }
        .store-tag-bubble__v {
            font-size: 0.84rem;
            line-height: 1.4;
            word-break: break-word;
            color: var(--fg);
            min-width: 0;
        }
        .store-tag-bubble__v a {
            color: var(--accent);
            text-decoration: none;
            font-weight: 600;
        }
        .store-tag-bubble__v a:hover { text-decoration: underline; }

        .store-address-plain {
            margin: 0;
            padding: 0.65rem 0.85rem;
            border-radius: 12px;
            border: 1px solid var(--line);
            background: rgba(255,255,255,0.02);
            font-size: 0.88rem;
            line-height: 1.55;
            color: var(--fg);
        }
        .store-address-plain__row {
            margin: 0 0 0.45rem;
        }
        .store-address-plain__row:last-child {
            margin-bottom: 0;
        }
        .store-address-plain__label {
            display: inline-block;
            min-width: 5.5rem;
            margin-right: 0.5rem;
            font-size: 0.72rem;
            font-weight: 700;
            letter-spacing: 0.06em;
            text-transform: uppercase;
            color: var(--muted);
            vertical-align: top;
        }

        .store-photos {
            display: flex;
            gap: 0.45rem;
            overflow-x: auto;
            padding-bottom: 0.35rem;
            scroll-snap-type: x mandatory;
            -webkit-overflow-scrolling: touch;
        }
        .store-photo-cell {
            flex: 0 0 auto;
            width: 132px;
            height: 92px;
            border-radius: 10px;
            overflow: hidden;
            border: 1px solid var(--line);
            scroll-snap-align: start;
        }
        .store-photo-cell img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            display: block;
        }
        .store-photo-cell:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

        .store-line { font-size: 0.88rem; line-height: 1.55; margin: 0 0 0.5rem; }
        .store-pre {
            margin: 0.35rem 0 0;
            padding: 0.75rem 0.85rem;
            border-radius: 10px;
            border: 1px solid var(--line);
            background: rgba(0,0,0,.22);
            font-size: 0.78rem;
            line-height: 1.5;
            white-space: pre-wrap;
            word-break: break-word;
            color: var(--muted);
            max-height: 14rem;
            overflow: auto;
        }
        .store-pre--json { color: var(--fg); opacity: 0.88; font-family: ui-monospace, monospace; font-size: 0.74rem; }

        .store-meta-foot {
            display: flex;
            flex-wrap: wrap;
            gap: 0.65rem 1rem;
            align-items: center;
            padding-top: 0.85rem;
            border-top: 1px solid var(--line);
            font-size: 0.76rem;
            color: var(--muted);
        }
        .store-meta-foot__id { font-weight: 700; color: var(--fg); opacity: 0.85; }

        <?php
        if ($fateIncludeStoreMap) {
            require_once dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'fate_store_map.php';
            fate_store_map_styles();
        }
        ?>

        .store-hours-today {
            display: inline-flex;
            align-items: baseline;
            flex-wrap: wrap;
            gap: 0.35rem 0.65rem;
            padding: 0.45rem 0.75rem;
            border-radius: 10px;
            border: 1px solid rgba(122, 184, 255, 0.28);
            background: rgba(122, 184, 255, 0.08);
            font-size: 0.88rem;
            line-height: 1.45;
            margin: 0 0 0.85rem;
        }
        .store-hours-today__tag {
            font-size: 0.68rem;
            font-weight: 700;
            letter-spacing: 0.06em;
            text-transform: uppercase;
            color: var(--accent);
        }

        .store-hours-table-wrap {
            overflow-x: auto;
            border-radius: 10px;
            border: 1px solid var(--line);
            margin: 0 0 0.65rem;
        }
        .store-hours-table {
            width: 100%;
            border-collapse: collapse;
            font-size: 0.84rem;
        }
        .store-hours-table th,
        .store-hours-table td {
            padding: 0.45rem 0.65rem;
            text-align: left;
            border-bottom: 1px solid var(--line);
            vertical-align: top;
        }
        .store-hours-table tr:last-child th,
        .store-hours-table tr:last-child td { border-bottom: none; }
        .store-hours-table th {
            width: 38%;
            max-width: 11rem;
            color: var(--muted);
            font-weight: 600;
            font-size: 0.8rem;
        }
        .store-hours-table td { color: var(--fg); line-height: 1.45; }

        .store-hours-legacy {
            font-size: 0.9rem;
            line-height: 1.5;
            margin: 0 0 0.65rem;
            color: var(--fg);
        }

        .store-hours-list {
            margin: 0;
            padding-left: 1.15rem;
            font-size: 0.86rem;
            line-height: 1.55;
            color: var(--muted);
        }
        .store-hours-list li { margin-bottom: 0.28rem; }
        .store-hours-list li:last-child { margin-bottom: 0; }

        /* 店家頁 Tab：推薦技師 / 店家照片 / OSM 地圖 */
        .store-extra-tabs { margin-top: 1.1rem; padding-top: 0; }
        .store-extra-tabs > .store-tabs {
            display: flex;
            gap: 0.35rem;
            padding: 0.65rem 0.85rem 0;
            border-bottom: 1px solid var(--line);
            margin: 0;
        }
        .store-tabs__btn {
            appearance: none;
            font: inherit;
            cursor: pointer;
            padding: 0.5rem 0.95rem;
            border: 1px solid transparent;
            border-radius: 10px 10px 0 0;
            background: transparent;
            color: var(--muted);
            font-size: 0.88rem;
            font-weight: 600;
            margin-bottom: -1px;
            transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease;
        }
        .store-tabs__btn:hover { color: var(--fg); background: rgba(255,255,255,0.04); }
        .store-tabs__btn.is-active {
            color: var(--accent);
            background: rgba(122,184,255,0.1);
            border-color: var(--line);
            border-bottom-color: var(--card);
        }
        .store-tabs__badge {
            display: inline-block;
            margin-left: 0.35rem;
            padding: 0.05rem 0.45rem;
            border-radius: 999px;
            font-size: 0.72rem;
            font-weight: 700;
            background: rgba(122,184,255,0.2);
            color: var(--accent);
        }
        .store-tab-panel { display: none; overflow: visible; }
        .store-tab-panel.is-active { display: block; }
        .store-tab-panel__inner { padding: 0.85rem 0.9rem 1rem; }
        .store-extra-tabs .masseur-section { margin-top: 0; }
        .store-photos-tab .store-photos-more-fate { margin-top: 0.75rem; }
        .masseur-head--tab { margin-bottom: 0.5rem; }
        .masseur-head--tab .masseur-count { font-size: 0.85rem; color: var(--muted); }
        .store-map-tab .store-map-embed { margin-top: 0; }

        /* 推薦技師（卡片式列表） */
        .masseur-section { margin-top: 1.1rem; }
        .masseur-section--forum .masseur-forum-hint {
            margin: 0 0 0.65rem; padding: 0.5rem 0.75rem; border-radius: 10px;
            font-size: 0.82rem; color: var(--muted); line-height: 1.45;
            background: rgba(122, 184, 255, 0.08); border: 1px solid rgba(122, 184, 255, 0.22);
        }
        .masseur-head { display: flex; align-items: baseline; gap: 0.6rem; flex-wrap: wrap; }
        .masseur-count { color: var(--muted); font-size: 0.85rem; }
        .masseur-flash { margin: 0.5rem 0; padding: 0.55rem 0.8rem; border-radius: 10px; font-size: 0.88rem; }
        .masseur-flash--ok { background: rgba(126,231,135,0.12); color: var(--ok); border: 1px solid rgba(126,231,135,0.3); }
        .masseur-flash--bad { background: rgba(255,107,107,0.12); color: #ff9b9b; border: 1px solid rgba(255,107,107,0.3); }
        .masseur-empty, .masseur-review-empty { color: var(--muted); font-size: 0.88rem; }
        .masseur-rows {
            list-style: none; margin: 0.55rem 0 0.85rem; padding: 0;
            display: flex;
            flex-direction: column;
            gap: 0.45rem;
            overflow: visible;
        }
        .masseur-row {
            border: 1px solid var(--line); border-radius: 12px;
            background: linear-gradient(165deg, rgba(255,255,255,0.045), rgba(255,255,255,0.02));
            padding: 0.5rem 0.62rem; overflow: visible;
            box-shadow: 0 1px 0 rgba(255,255,255,0.04) inset, 0 6px 18px rgba(0,0,0,0.14);
            min-width: 0;
        }
        .masseur-row__main {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 0.45rem 0.55rem;
        }
        .masseur-avatar-wrap { position: relative; flex-shrink: 0; }
        .masseur-row__avatar {
            width: 52px; height: 52px; border-radius: 50%; overflow: hidden;
            display: flex; align-items: center; justify-content: center;
            background: linear-gradient(160deg, rgba(122,184,255,0.18), rgba(157,122,232,0.16));
            font-size: 1.15rem; color: rgba(255,255,255,0.75);
            border: 1px solid rgba(255,255,255,0.08);
            box-shadow: 0 2px 8px rgba(0,0,0,0.18);
            cursor: default;
        }
        .masseur-avatar-wrap--has-photo .masseur-row__avatar { cursor: zoom-in; }
        @media (hover: none), (pointer: coarse) {
            .masseur-avatar-wrap--has-photo .masseur-row__avatar {
                touch-action: manipulation;
                -webkit-tap-highlight-color: transparent;
            }
        }
        .masseur-row__avatar:focus-visible {
            outline: 2px solid var(--accent);
            outline-offset: 2px;
        }
        .masseur-row__avatar--male { background: linear-gradient(160deg, rgba(122,184,255,0.24), rgba(122,184,255,0.08)); }
        .masseur-row__avatar--female { background: linear-gradient(160deg, rgba(255,150,200,0.22), rgba(157,122,232,0.12)); }
        .masseur-row__avatar img { width: 100%; height: 100%; object-fit: cover; }
        .masseur-avatar-preview {
            position: absolute;
            left: calc(100% + 10px);
            top: 50%;
            z-index: 40;
            width: min(220px, 42vw);
            max-height: 320px;
            transform: translateY(-50%);
            border-radius: 12px;
            overflow: hidden;
            border: 1px solid var(--line);
            background: var(--bg2);
            box-shadow: 0 12px 36px rgba(0,0,0,0.45);
            opacity: 0;
            visibility: hidden;
            pointer-events: none;
            transition: opacity 0.15s ease, visibility 0.15s ease;
        }
        .masseur-avatar-preview img {
            display: block;
            width: 100%;
            height: auto;
            max-height: 320px;
            object-fit: contain;
            vertical-align: top;
        }
        @media (hover: hover) and (pointer: fine) {
            .masseur-avatar-wrap--has-photo:hover .masseur-avatar-preview,
            .masseur-avatar-wrap--has-photo:focus-within .masseur-avatar-preview {
                opacity: 1;
                visibility: visible;
            }
        }
        @media (max-width: 640px) {
            .masseur-avatar-preview {
                left: 50%;
                top: auto;
                bottom: calc(100% + 8px);
                transform: translateX(-50%);
                width: min(200px, 72vw);
            }
        }
        .fate-image-lightbox {
            position: fixed;
            inset: 0;
            z-index: 12000;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: max(1rem, env(safe-area-inset-top)) max(1rem, env(safe-area-inset-right)) max(1rem, env(safe-area-inset-bottom)) max(1rem, env(safe-area-inset-left));
        }
        .fate-image-lightbox[hidden] { display: none !important; }
        body.fate-image-lightbox-open { overflow: hidden; }
        .fate-image-lightbox__backdrop {
            position: absolute;
            inset: 0;
            background: rgba(4, 6, 10, 0.88);
        }
        .fate-image-lightbox__dialog {
            position: relative;
            z-index: 1;
            width: min(92vw, 520px);
            max-height: min(88vh, 720px);
            border-radius: 14px;
            border: 1px solid var(--line);
            background: var(--bg2);
            box-shadow: 0 18px 48px rgba(0, 0, 0, 0.55);
            overflow: hidden;
        }
        .fate-image-lightbox__close {
            position: absolute;
            top: 0.45rem;
            right: 0.45rem;
            z-index: 2;
            width: 2.15rem;
            height: 2.15rem;
            border: 1px solid var(--line);
            border-radius: 999px;
            background: rgba(12, 14, 18, 0.82);
            color: var(--fg);
            font-size: 1.35rem;
            line-height: 1;
            cursor: pointer;
        }
        .fate-image-lightbox__figure {
            margin: 0;
            display: flex;
            flex-direction: column;
        }
        .fate-image-lightbox__img {
            display: block;
            width: 100%;
            max-height: min(78vh, 640px);
            object-fit: contain;
            background: #0a0c10;
        }
        .fate-image-lightbox__caption {
            padding: 0.65rem 0.85rem;
            font-size: 0.92rem;
            font-weight: 600;
            text-align: center;
            border-top: 1px solid var(--line);
        }
        .fate-image-lightbox__caption[hidden] { display: none; }
        .fate-image-lightbox-avatar {
            cursor: zoom-in;
        }
        .fate-image-lightbox-avatar:focus-visible {
            outline: 2px solid var(--accent);
            outline-offset: 2px;
        }
        @media (hover: none), (pointer: coarse) {
            .fate-image-lightbox-avatar {
                touch-action: manipulation;
                -webkit-tap-highlight-color: transparent;
            }
        }
        .masseur-row__info { min-width: 0; flex: 1 1 8rem; display: flex; flex-wrap: wrap; align-items: center; gap: 0.22rem 0.45rem; }
        .masseur-row__namerow {
            display: inline-flex; flex-wrap: wrap; align-items: center; gap: 0.28rem 0.42rem;
        }
        .masseur-row__name { font-weight: 700; font-size: 0.92rem; letter-spacing: 0.01em; line-height: 1.25; }
        .masseur-row__date { color: var(--muted); font-size: 0.68rem; line-height: 1.25; white-space: nowrap; }
        .masseur-row__actions {
            flex-shrink: 0; margin-left: auto;
            display: flex; flex-direction: row; flex-wrap: wrap;
            align-items: center; justify-content: flex-end; gap: 0.28rem;
        }
        .masseur-row__fav { flex-shrink: 0; }
        .masseur-row__votes { flex-shrink: 0; }
        .masseur-favorite-form { margin: 0; }
        .masseur-favorite-btn {
            font-size: 0.74rem; cursor: pointer;
            background: rgba(255,255,255,0.05); color: var(--fg);
            border: 1px solid var(--line); border-radius: 8px; padding: 0.18rem 0.42rem;
        }
        .masseur-favorite-btn.is-active {
            border-color: rgba(255, 120, 160, 0.65);
            background: rgba(255, 120, 160, 0.14);
            color: #ffb8cc;
        }
        .masseur-favorite-btn.is-static { cursor: default; opacity: 0.85; }
        .masseur-row--forum .forum-entry-link {
            font-size: 0.78rem !important; padding: 0.12rem 0.55rem !important;
            font-weight: 600;
        }
        .masseur-card__gender {
            font-size: 0.64rem; color: var(--accent);
            border: 1px solid rgba(122,184,255,0.4); border-radius: 999px; padding: 0.02rem 0.38rem;
            line-height: 1.35;
        }
        .masseur-profile-stats {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 0.42rem 0.5rem;
            margin: 0;
            padding: 0;
        }
        .masseur-profile-stats--inline {
            width: 100%;
            margin-top: 0.15rem;
        }
        .masseur-profile-stats__item {
            display: inline-flex;
            align-items: center;
            gap: 0.38rem;
            margin: 0;
            padding: 0.24rem 0.68rem;
            border-radius: 999px;
            border: 1px solid rgba(122, 184, 255, 0.32);
            background: linear-gradient(180deg, rgba(122, 184, 255, 0.1), rgba(122, 184, 255, 0.04));
            box-shadow: 0 1px 0 rgba(255, 255, 255, 0.04) inset;
            line-height: 1.3;
            max-width: 100%;
        }
        .masseur-profile-stats__item dt {
            margin: 0;
            font-size: 0.68rem;
            color: var(--muted);
            font-weight: 600;
            flex-shrink: 0;
        }
        .masseur-profile-stats__item dt::after {
            content: '·';
            margin-left: 0.35rem;
            color: rgba(122, 184, 255, 0.45);
            font-weight: 400;
        }
        .masseur-profile-stats__label-short { display: none; }
        .masseur-profile-stats__item dd {
            margin: 0;
            font-size: 0.74rem;
            color: var(--fg);
            font-weight: 500;
            min-width: 0;
        }
        .masseur-profile-stats-fields {
            display: flex;
            flex-direction: column;
            gap: 0.55rem;
        }
        .masseur-profile-stats-age-preview {
            display: inline-block;
            margin-left: 0.45rem;
            font-size: 0.78rem;
            color: var(--accent);
        }
        .masseur-profile-stats-measures__label {
            display: block;
            font-size: 0.78rem;
            margin-bottom: 0.25rem;
        }
        .masseur-profile-stats-measures__row {
            display: flex;
            flex-wrap: wrap;
            gap: 0.55rem 0.75rem;
        }
        .masseur-profile-stats-measures__item {
            display: flex;
            flex-direction: column;
            gap: 0.15rem;
            font-size: 0.76rem;
        }
        .masseur-profile-stats-measures__item input {
            width: 4.5rem;
        }
        .masseur-card__tags {
            margin-top: 0.38rem; padding-top: 0.38rem;
            border-top: 1px dashed rgba(255,255,255,0.07);
            min-width: 0;
        }
        .masseur-card__tags .masseur-tags { margin-top: 0; gap: 0.35rem; min-width: 0; width: 100%; }
        .masseur-card__folds { margin-top: 0.32rem; display: flex; flex-direction: column; gap: 0.22rem; }
        .masseur-formal-locked {
            margin: 0; padding: 0.35rem 0.45rem; font-size: 0.76rem; color: var(--muted); line-height: 1.45;
            border: 1px dashed var(--line); border-radius: 8px; background: rgba(255,255,255,0.02);
        }
        .masseur-formal-locked--inline { border: none; background: transparent; padding: 0.15rem 0 0; }
        .masseur-tags-locked-fold,
        .masseur-reviews-fold { margin: 0; }
        .masseur-tags-locked-summary,
        .masseur-reviews-summary {
            cursor: pointer; font-size: 0.74rem; color: var(--accent);
            list-style: none; user-select: none;
            display: inline-flex; align-items: center; gap: 0.22rem;
            padding: 0.12rem 0.48rem;
            border-radius: 999px;
            border: 1px dashed var(--line);
            background: rgba(255,255,255,0.03);
        }
        .masseur-tags-locked-summary::-webkit-details-marker,
        .masseur-reviews-summary::-webkit-details-marker { display: none; }
        .masseur-tags-locked-fold[open] .masseur-tags-locked-summary,
        .masseur-reviews-fold[open] > .masseur-reviews-summary {
            border-color: rgba(122,184,255,0.4);
            background: rgba(122,184,255,0.1);
        }
        .masseur-reviews-summary__n { font-weight: 700; }
        .masseur-reviews-body { margin-top: 0.35rem; padding-left: 0.1rem; }
        .masseur-vote-form { display: flex; gap: 0.4rem; }
        .masseur-vote-btn {
            font-size: 0.74rem; cursor: pointer;
            background: rgba(255,255,255,0.05); color: var(--fg);
            border: 1px solid var(--line); border-radius: 8px; padding: 0.18rem 0.42rem;
        }
        .masseur-vote-btn.is-active { border-color: var(--accent); background: rgba(122,184,255,0.16); }
        .masseur-vote-btn.is-static { cursor: default; opacity: 0.85; }
        .masseur-row__weekly { display: flex; align-items: center; }
        .masseur-weekly-form { margin: 0; }
        .masseur-weekly-btn {
            font-size: 0.74rem; cursor: pointer;
            background: rgba(255,255,255,0.05); color: var(--fg);
            border: 1px solid var(--line); border-radius: 8px; padding: 0.18rem 0.42rem;
        }
        .masseur-weekly-btn.is-active { border-color: #e8b84a; background: rgba(232,184,74,0.14); }
        .masseur-weekly-btn.is-static { cursor: default; opacity: 0.85; }
        .masseur-weekly-btn--link { display: inline-flex; align-items: center; text-decoration: none; }
        .masseur-weekly-page__head { margin-bottom: 1rem; }
        .masseur-weekly-page__title { margin: 0 0 0.35rem; font-size: 1.35rem; }
        .masseur-weekly-page__sub, .masseur-weekly-page__quota { margin: 0.2rem 0; color: var(--muted); font-size: 0.88rem; }
        .masseur-weekly-tabs { display: flex; gap: 0.45rem; margin: 0.85rem 0; flex-wrap: wrap; }
        .masseur-weekly-tabs__tab {
            padding: 0.35rem 0.75rem; border-radius: 999px; border: 1px solid var(--line);
            text-decoration: none; color: var(--fg); font-size: 0.86rem;
        }
        .masseur-weekly-tabs__tab.is-active { border-color: var(--accent); background: rgba(122,184,255,0.12); }
        .masseur-weekly-toolbar { display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: flex-end; justify-content: space-between; margin-bottom: 0.85rem; }
        .masseur-weekly-filter { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
        .masseur-weekly-filter--week { flex: 1 1 14rem; min-width: 0; }
        .masseur-weekly-filter__select { max-width: 10rem; }
        .masseur-weekly-filter__select--week { max-width: none; min-width: 11rem; flex: 1 1 auto; }
        .masseur-weekly-page__hist-badge {
            display: inline-block;
            padding: 0.08rem 0.4rem;
            border-radius: 999px;
            font-size: 0.72rem;
            background: rgba(122, 184, 255, 0.12);
            color: var(--accent);
            vertical-align: middle;
        }
        .masseur-weekly-weeknav { display: flex; gap: 0.55rem; font-size: 0.86rem; }
        .masseur-weekly-weeknav__link { color: var(--accent); text-decoration: none; }
        .masseur-weekly-empty { color: var(--muted); margin: 1rem 0; }
        .masseur-weekly-empty--small { font-size: 0.88rem; }
        .masseur-weekly-rank { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.55rem; }
        .masseur-weekly-rank__item {
            display: grid; grid-template-columns: auto auto 1fr auto; gap: 0.65rem; align-items: center;
            padding: 0.65rem 0.75rem; border: 1px solid var(--line); border-radius: 12px; background: rgba(255,255,255,0.02);
        }
        .masseur-weekly-rank__num { font-weight: 700; color: var(--accent); min-width: 2rem; }
        .masseur-weekly-rank__avatar { width: 56px; height: 56px; border-radius: 10px; object-fit: cover; }
        .masseur-weekly-rank__avatar--empty {
            display: inline-flex; align-items: center; justify-content: center;
            background: rgba(255,255,255,0.06); font-size: 1.2rem;
        }
        .masseur-weekly-rank__name { margin: 0; font-weight: 600; }
        .masseur-weekly-rank__store, .masseur-weekly-rank__count { margin: 0.15rem 0 0; font-size: 0.84rem; color: var(--muted); }
        .masseur-weekly-records { margin-top: 1.5rem; padding-top: 1rem; border-top: 1px solid var(--line); }
        .masseur-weekly-records__title { margin: 0 0 0.65rem; font-size: 1rem; }
        .masseur-weekly-records__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.35rem; font-size: 0.88rem; }
        .masseur-weekly-records__time { margin-left: 0.35rem; color: var(--muted); font-size: 0.8rem; }
        .masseur-weekly-admin-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; }
        .masseur-weekly-admin-table th, .masseur-weekly-admin-table td { border: 1px solid var(--line); padding: 0.35rem 0.45rem; text-align: left; }
        .sidebar-weekly-head {
            display: flex;
            align-items: baseline;
            justify-content: space-between;
            gap: 0.45rem 0.55rem;
            margin-bottom: 0.55rem;
            flex-wrap: wrap;
        }
        .sidebar-title--weekly { margin-bottom: 0; flex-shrink: 0; }
        .sidebar-weekly-head__range {
            margin: 0;
            font-size: 0.68rem;
            color: var(--muted);
            line-height: 1.3;
            text-align: right;
            flex: 1 1 6.5rem;
            min-width: 0;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .sidebar-card--masseur-weekly {
            background: linear-gradient(168deg, rgba(232, 184, 74, 0.07) 0%, var(--card) 38%, var(--card) 100%);
            border-color: rgba(232, 184, 74, 0.2);
            padding-top: 0.95rem;
        }
        .sidebar-weekly-tabs { display: flex; gap: 0.35rem; margin: 0.15rem 0 0.65rem; }
        .sidebar-weekly-tabs__tab {
            flex: 1;
            font-size: 0.72rem;
            font-weight: 600;
            padding: 0.32rem 0.4rem;
            border-radius: 999px;
            border: 1px solid var(--line);
            background: rgba(255, 255, 255, 0.02);
            color: var(--muted);
            cursor: pointer;
            transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
        }
        .sidebar-weekly-tabs__tab:hover {
            color: var(--fg);
            border-color: rgba(122, 184, 255, 0.28);
        }
        .sidebar-weekly-tabs__tab.is-active {
            border-color: rgba(232, 184, 74, 0.45);
            background: rgba(232, 184, 74, 0.12);
            color: var(--fg);
        }
        .sidebar-weekly-rank {
            list-style: none;
            margin: 0;
            padding: 0;
            display: none;
            flex-direction: column;
            gap: 0.38rem;
        }
        .sidebar-weekly-rank.is-active { display: flex; }
        .sidebar-weekly-rank__item {
            display: block;
            min-width: 0;
        }
        .sidebar-weekly-rank__link {
            display: grid;
            grid-template-columns: auto 1fr auto;
            gap: 0.55rem;
            align-items: center;
            min-width: 0;
            padding: 0.42rem 0.5rem;
            border-radius: 11px;
            border: 1px solid var(--line);
            background: rgba(255, 255, 255, 0.02);
            text-decoration: none;
            color: inherit;
            transition: border-color 0.15s ease, background 0.15s ease, transform 0.12s ease;
        }
        .sidebar-weekly-rank__link:hover {
            border-color: rgba(122, 184, 255, 0.35);
            background: rgba(122, 184, 255, 0.06);
            transform: translateY(-1px);
        }
        .sidebar-weekly-rank__media { flex-shrink: 0; }
        .sidebar-weekly-rank__avatar {
            width: 36px;
            height: 36px;
            border-radius: 9px;
            object-fit: cover;
            display: block;
            border: 1px solid rgba(255, 255, 255, 0.08);
            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
        }
        .sidebar-weekly-rank__avatar--empty {
            width: 36px;
            height: 36px;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            border-radius: 9px;
            background: rgba(255, 255, 255, 0.06);
            font-size: 0.85rem;
            border: 1px solid rgba(255, 255, 255, 0.08);
        }
        .sidebar-weekly-rank__body {
            min-width: 0;
            display: flex;
            flex-direction: column;
            gap: 0.12rem;
        }
        .sidebar-weekly-rank__name-row {
            display: flex;
            align-items: center;
            gap: 0.25rem;
            min-width: 0;
        }
        .sidebar-weekly-rank__name {
            font-size: 0.82rem;
            font-weight: 650;
            line-height: 1.25;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }
        .sidebar-weekly-rank__gender {
            flex-shrink: 0;
            font-size: 0.72rem;
            color: var(--muted);
            opacity: 0.85;
        }
        .sidebar-weekly-rank__store {
            display: flex;
            align-items: baseline;
            gap: 0.28rem;
            min-width: 0;
            font-size: 0.72rem;
            line-height: 1.3;
            color: var(--muted);
        }
        .sidebar-weekly-rank__store-label {
            flex-shrink: 0;
            font-size: 0.62rem;
            font-weight: 600;
            letter-spacing: 0.04em;
            text-transform: uppercase;
            color: rgba(232, 184, 74, 0.85);
        }
        .sidebar-weekly-rank__store-name {
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }
        .sidebar-weekly-rank__loc {
            font-size: 0.68rem;
            color: var(--muted);
            opacity: 0.88;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }
        .sidebar-weekly-rank__badge {
            display: inline-flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            gap: 0.05rem;
            min-width: 2.1rem;
            padding: 0.22rem 0.28rem;
            border-radius: 8px;
            background: rgba(232, 184, 74, 0.1);
            border: 1px solid rgba(232, 184, 74, 0.22);
            flex-shrink: 0;
        }
        .sidebar-weekly-rank__badge-star { font-size: 0.62rem; line-height: 1; }
        .sidebar-weekly-rank__badge-n {
            font-size: 0.72rem;
            font-weight: 700;
            font-variant-numeric: tabular-nums;
            color: #e8b84a;
            line-height: 1.1;
        }
        .sidebar-weekly-rank__empty {
            font-size: 0.78rem;
            color: var(--muted);
            padding: 0.35rem 0.15rem;
            line-height: 1.45;
        }
        .sidebar-actions--weekly { margin-top: 0.7rem; }
        .sidebar-btn--weekly {
            width: 100%;
            background: rgba(232, 184, 74, 0.1);
            border-color: rgba(232, 184, 74, 0.28);
            color: #e8b84a;
        }
        .sidebar-btn--weekly:hover {
            background: rgba(232, 184, 74, 0.18);
            border-color: rgba(232, 184, 74, 0.42);
        }
        .sidebar-hint--weekly { margin-bottom: 0.35rem; }
        .masseur-tags { margin-top: 0; display: flex; flex-direction: column; gap: 0.45rem; min-width: 0; width: 100%; }
        .masseur-tags__group {
            display: flex;
            flex-direction: column;
            gap: 0.35rem;
            align-items: stretch;
            min-width: 0;
            width: 100%;
        }
        .masseur-tags__head {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 0.35rem 0.55rem;
        }
        .masseur-tags__topic {
            font-size: 0.72rem;
            color: var(--muted);
            font-weight: 600;
            line-height: 1.3;
        }
        .masseur-tags__help { font-size: 0.72rem; }
        .masseur-tags__help-summary {
            cursor: pointer;
            list-style: none;
            display: inline-flex;
            align-items: center;
            gap: 0.2rem;
            padding: 0.12rem 0.45rem;
            border-radius: 999px;
            border: 1px solid var(--line);
            background: rgba(255,255,255,0.04);
            color: var(--accent);
            user-select: none;
        }
        .masseur-tags__help-summary::-webkit-details-marker { display: none; }
        .masseur-tags__help-summary::before {
            content: '?';
            display: inline-flex;
            width: 0.95rem;
            height: 0.95rem;
            align-items: center;
            justify-content: center;
            border-radius: 50%;
            border: 1px solid rgba(122,184,255,0.35);
            font-size: 0.62rem;
            font-weight: 700;
            line-height: 1;
        }
        .masseur-tags__help[open] .masseur-tags__help-summary {
            border-color: rgba(122,184,255,0.4);
            background: rgba(122,184,255,0.1);
        }
        .masseur-tags__desc {
            flex: 1 1 100%;
            margin: 0.1rem 0 0;
            padding: 0.45rem 0.55rem;
            border-radius: 8px;
            border: 1px solid var(--line);
            background: rgba(0,0,0,0.2);
            font-size: 0.76rem;
            line-height: 1.55;
            color: var(--muted);
        }
        .masseur-tags__list {
            display: flex;
            flex-wrap: wrap;
            gap: 0.32rem;
            align-content: flex-start;
            min-width: 0;
            width: 100%;
        }
        .masseur-tag-form { display: inline-flex; margin: 0; max-width: 100%; }
        .masseur-tag {
            display: inline-flex; align-items: center; gap: 0.28rem;
            font-size: 0.76rem; line-height: 1.25;
            background: rgba(255,255,255,0.04); color: var(--fg);
            border: 1px solid var(--line); border-radius: 999px;
            padding: 0.2rem 0.55rem; cursor: pointer;
            transition: border-color 0.15s ease, background 0.15s ease;
            max-width: 100%;
            white-space: normal;
            text-align: left;
            word-break: break-word;
        }
        .masseur-tag:hover { border-color: rgba(122,184,255,0.35); }
        .masseur-tag.is-active { border-color: var(--accent); background: rgba(122,184,255,0.14); color: var(--accent); }
        .masseur-tag.is-static { cursor: default; opacity: 0.9; }
        .masseur-tag__n {
            font-size: 0.68rem; font-weight: 700; color: var(--muted);
            min-width: 1rem; text-align: center;
        }
        .masseur-tag.is-active .masseur-tag__n { color: var(--accent); }
        .masseur-tags__bar {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            align-content: flex-start;
            gap: 0.32rem;
            min-width: 0;
        }
        .masseur-tags__bar > .masseur-tag-form {
            display: inline-flex;
            margin: 0;
            max-width: 100%;
        }
        .masseur-tags__more {
            margin: 0;
            display: inline-flex;
            flex: 0 0 auto;
            max-width: 100%;
        }
        .masseur-tags__more-summary {
            cursor: pointer;
            list-style: none;
            display: inline-flex;
            align-items: center;
            gap: 0.25rem;
            padding: 0.18rem 0.55rem;
            border-radius: 999px;
            border: 1px dashed var(--line);
            background: rgba(255,255,255,0.03);
            color: var(--accent);
            font-size: 0.74rem;
            line-height: 1.25;
            user-select: none;
            white-space: nowrap;
        }
        .masseur-tags__more-summary::-webkit-details-marker { display: none; }
        .masseur-tags__more[open] {
            flex: 1 1 100%;
            width: 100%;
            flex-direction: column;
            align-items: stretch;
            gap: 0.35rem;
        }
        .masseur-tags__more[open] .masseur-tags__more-summary {
            align-self: flex-start;
            border-color: rgba(122,184,255,0.4);
            background: rgba(122,184,255,0.1);
        }
        .masseur-tags--collapsible:has(.masseur-tags__more[open]) .masseur-tags__bar > .masseur-tag-form,
        .masseur-tags--collapsible:has(.masseur-tags__more[open]) .masseur-tags__bar > .masseur-tag.is-static {
            display: none !important;
        }
        .masseur-tags__all {
            display: flex;
            flex-direction: column;
            gap: 0.45rem;
            width: 100%;
        }
        .masseur-tags__all .masseur-tags__group {
            display: flex;
            flex-direction: row;
            flex-wrap: wrap;
            align-items: center;
            gap: 0.28rem 0.45rem;
            min-width: 0;
        }
        .masseur-tags__all .masseur-tags__head {
            flex: 0 0 auto;
            margin: 0;
        }
        .masseur-tags__all .masseur-tags__list {
            display: flex;
            flex-wrap: wrap;
            flex-direction: row;
            align-items: center;
            gap: 0.32rem;
            flex: 1 1 8rem;
            min-width: 0;
        }
        .masseur-tags__all .masseur-tags__desc {
            flex: 1 1 100%;
        }
        @media (max-width: 767px) {
            .masseur-tags__all .masseur-tags__group {
                flex-direction: column;
                align-items: flex-start;
                gap: 0.32rem;
            }
            .masseur-tags__all .masseur-tags__head {
                width: 100%;
            }
            .masseur-tags__all .masseur-tags__list {
                width: 100%;
                flex: 0 1 auto;
            }
        }

        /* 會員回報（歇業／更名／已離店）：非肯定樣式 */
        .crowd-reports {
            margin-top: 0.55rem;
            padding-top: 0.5rem;
            border-top: 1px dashed rgba(255,255,255,0.08);
        }
        .crowd-reports--card { margin-top: 0.45rem; padding-top: 0.4rem; }
        .crowd-reports--store-detail { margin: 0.75rem 0 0.25rem; }
        .crowd-reports--masseur {
            margin: 0.35rem 0 0;
            padding: 0.32rem 0 0;
            border-top: 1px dashed rgba(255,255,255,0.07);
        }
        .crowd-reports__hint {
            margin: 0 0 0.35rem;
            font-size: 0.68rem;
            color: var(--muted);
            letter-spacing: 0.02em;
        }
        .crowd-reports__flash {
            margin: 0 0 0.4rem;
            padding: 0.45rem 0.6rem;
            font-size: 0.78rem;
            border-radius: 8px;
        }
        .crowd-reports__flash[hidden] { display: none !important; }
        .crowd-report-btn.is-busy { opacity: 0.55; cursor: wait; }
        .crowd-reports--no-signal {
            margin-top: 0.4rem;
            padding-top: 0;
            border-top: none;
        }
        .crowd-reports__hint--action {
            font-size: 0.7rem;
            font-style: normal;
        }
        .crowd-reports__hint-short { display: none; }
        .crowd-reports__list {
            display: flex;
            flex-wrap: wrap;
            gap: 0.35rem 0.45rem;
            align-items: center;
        }
        .crowd-report-form { display: inline-flex; margin: 0; }
        .crowd-report-btn { font: inherit; }
        .crowd-report-action {
            font-size: 0.72rem;
            line-height: 1.25;
            padding: 0.1rem 0;
            border: none;
            border-radius: 0;
            background: transparent;
            color: var(--muted);
            cursor: pointer;
            text-decoration: underline;
            text-decoration-style: dotted;
            text-underline-offset: 0.18em;
            transition: color 0.15s;
        }
        .crowd-report-action:hover {
            color: #c9b070;
            text-decoration-color: rgba(212,167,44,0.55);
        }
        .crowd-reports--no-signal .crowd-reports__list { gap: 0.2rem 0.65rem; }
        .crowd-report-tag {
            display: inline-flex;
            align-items: center;
            gap: 0.35rem;
            font-size: 0.72rem;
            line-height: 1.25;
            padding: 0.18rem 0.55rem;
            border-radius: 999px;
            border: 1px dashed rgba(255,255,255,0.22);
            background: rgba(255,255,255,0.03);
            color: var(--muted);
            cursor: pointer;
            transition: border-color 0.15s, background 0.15s, color 0.15s;
        }
        .crowd-report-tag:hover {
            border-color: rgba(212,167,44,0.45);
            color: #c9b070;
            background: rgba(212,167,44,0.06);
        }
        .crowd-report-tag.is-active {
            border-style: solid;
            border-color: rgba(212,167,44,0.55);
            background: rgba(212,167,44,0.1);
            color: #d4a72c;
        }
        .crowd-report-tag.is-static { cursor: default; opacity: 0.92; }
        .crowd-report-tag.is-static:hover {
            border-color: rgba(255,255,255,0.22);
            color: var(--muted);
            background: rgba(255,255,255,0.03);
        }
        .crowd-report-tag__label { font-weight: 600; }
        .crowd-report-tag__members {
            font-size: 0.66rem;
            font-weight: 500;
            opacity: 0.88;
            white-space: nowrap;
        }
        .crowd-report-tag.has-count .crowd-report-tag__members { color: inherit; }

        @media (max-width: 600px) {
            .masseur-row { padding: 0.45rem 0.5rem 0.5rem; }
            .masseur-row__main {
                display: grid;
                grid-template-columns: 44px minmax(0, 1fr);
                grid-template-areas:
                    "avatar info"
                    "actions actions";
                align-items: start;
                column-gap: 0.5rem;
                row-gap: 0.35rem;
            }
            .masseur-avatar-wrap { grid-area: avatar; align-self: start; }
            .masseur-row__info {
                grid-area: info;
                flex: none;
                width: auto;
                flex-direction: column;
                align-items: stretch;
                gap: 0.2rem;
            }
            .masseur-row__actions {
                grid-area: actions;
                flex-basis: auto;
                width: 100%;
                margin-left: 0;
                padding: 0.32rem 0.35rem;
                justify-content: space-between;
                gap: 0.22rem;
                border-radius: 8px;
                background: rgba(255, 255, 255, 0.03);
                border: 1px solid rgba(255, 255, 255, 0.06);
            }
            .masseur-row__avatar { width: 44px; height: 44px; font-size: 1rem; }
            .masseur-row__namerow {
                display: flex;
                flex-wrap: wrap;
                align-items: center;
                gap: 0.22rem 0.35rem;
                width: 100%;
            }
            .masseur-row__name { font-size: 0.9rem; }
            .masseur-row__date {
                flex: 1 1 100%;
                font-size: 0.64rem;
                white-space: normal;
            }
            .masseur-profile-stats--inline {
                display: grid;
                grid-template-columns: minmax(0, 1.2fr) minmax(0, 1.45fr) minmax(2.75rem, auto);
                gap: 0.28rem;
                width: 100%;
                margin-top: 0.12rem;
            }
            .masseur-profile-stats__item {
                flex-direction: column;
                align-items: flex-start;
                gap: 0.08rem;
                padding: 0.28rem 0.32rem;
                border-radius: 8px;
                max-width: none;
            }
            .masseur-profile-stats__item--cup {
                align-items: center;
                padding-left: 0.28rem;
                padding-right: 0.28rem;
                min-width: 2.75rem;
            }
            .masseur-profile-stats__item--cup dt,
            .masseur-profile-stats__item--cup dd {
                text-align: center;
                width: 100%;
            }
            .masseur-profile-stats__item--cup dd {
                letter-spacing: 0.02em;
                white-space: nowrap;
            }
            .masseur-profile-stats__item dt::after { display: none; }
            .masseur-profile-stats__item dt {
                font-size: 0.6rem;
                line-height: 1.2;
            }
            .masseur-profile-stats__label-full { display: none; }
            .masseur-profile-stats__label-short { display: inline; }
            .masseur-profile-stats__item dd {
                font-size: 0.68rem;
                line-height: 1.25;
                word-break: break-word;
            }
            .masseur-favorite-btn,
            .masseur-vote-btn,
            .masseur-weekly-btn {
                font-size: 0.7rem;
                padding: 0.22rem 0.38rem;
            }
            .masseur-vote-form { gap: 0.28rem; }
            .crowd-reports--masseur {
                margin-top: 0.28rem;
                padding-top: 0.28rem;
            }
            .crowd-reports--masseur .crowd-reports__hint {
                margin-bottom: 0.22rem;
                font-size: 0.62rem;
                line-height: 1.35;
            }
            .crowd-reports--masseur .crowd-reports__hint-long { display: none; }
            .crowd-reports--masseur .crowd-reports__hint-short { display: inline; }
            .crowd-reports--masseur .crowd-reports__list { gap: 0.22rem 0.35rem; }
            .crowd-report-action { font-size: 0.68rem; }
            .masseur-card__tags {
                margin-top: 0.28rem;
                padding-top: 0.28rem;
            }
            .masseur-tags { gap: 0.28rem; }
            .masseur-tags__bar { gap: 0.24rem; }
            .masseur-tag {
                font-size: 0.7rem;
                padding: 0.16rem 0.45rem;
            }
            .masseur-tags__more-summary {
                font-size: 0.68rem;
                padding: 0.14rem 0.42rem;
            }
            .masseur-tags__head { gap: 0.28rem; }
            .masseur-card__folds {
                flex-direction: row;
                flex-wrap: wrap;
                align-items: center;
                gap: 0.28rem 0.35rem;
                margin-top: 0.28rem;
            }
            .masseur-reviews-summary,
            .masseur-edit-summary {
                font-size: 0.68rem;
                padding: 0.14rem 0.42rem;
            }
            .masseur-card__folds .masseur-reviews-fold,
            .masseur-card__folds .masseur-edit-fold {
                flex: 0 1 auto;
            }
            .masseur-reviews-fold[open],
            .masseur-edit-fold[open] {
                flex: 1 1 100%;
            }
            .masseur-reviews-body { margin-top: 0.28rem; }
        }
        .masseur-edit-fold { margin-top: 0; }
        .masseur-edit-summary {
            cursor: pointer; font-size: 0.74rem; color: var(--muted);
            list-style: none; user-select: none;
            display: inline-flex; align-items: center; gap: 0.2rem;
            padding: 0.1rem 0;
        }
        .masseur-edit-summary::-webkit-details-marker { display: none; }
        details.masseur-edit-fold[open] > .masseur-edit-summary { color: var(--accent); }
        .masseur-edit-form { margin-top: 0.45rem; display: flex; flex-direction: column; gap: 0.55rem; max-width: 24rem; }
        .masseur-edit-current-photo {
            width: 72px; height: 72px; object-fit: cover; border-radius: 50%;
            border: 1px solid var(--line); display: block; margin: 0.2rem 0 0.35rem;
        }
        .masseur-edit-remove-photo { display: flex; align-items: center; gap: 0.35rem; margin: 0.15rem 0; }
        .masseur-delete-form { margin-top: 0.55rem; padding-top: 0.45rem; border-top: 1px dashed var(--line); }
        .masseur-btn--danger {
            border-color: rgba(255,120,120,0.55); color: #ffb4b4;
            background: rgba(255,80,80,0.12);
        }
        .masseur-review-list { list-style: none; margin: 0.25rem 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
        .masseur-review { display: flex; gap: 0.65rem; font-size: 0.82rem; border-top: 1px dashed var(--line); padding-top: 0.45rem; }
        .masseur-review__avatar {
            width: 40px; height: 40px; border-radius: 50%; overflow: hidden; flex-shrink: 0;
            display: flex; align-items: center; justify-content: center;
            background: var(--bg2); color: var(--muted); font-size: 0.95rem;
        }
        .masseur-review__avatar img { width: 100%; height: 100%; object-fit: cover; }
        .masseur-review__main { flex: 1; min-width: 0; }
        .masseur-review__author { font-weight: 600; }
        .masseur-review__date { color: var(--muted); margin-left: 0.4rem; font-size: 0.74rem; }
        .masseur-review__body { margin: 0.2rem 0 0; line-height: 1.5; }
        .masseur-review__edited { color: var(--muted); font-size: 0.74rem; font-style: italic; }
        .masseur-review-form { margin-top: 0.5rem; display: flex; flex-direction: column; gap: 0.35rem; }
        .masseur-review-pager {
            display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap;
            margin-top: 0.55rem; padding-top: 0.5rem; border-top: 1px dashed var(--line);
        }
        .masseur-review-pager__info { color: var(--muted); font-size: 0.78rem; }
        .masseur-review-pager a.masseur-btn { text-decoration: none; }
        .masseur-review-form textarea, .masseur-create-form textarea { resize: vertical; }
        .masseur-create {
            border: 1px dashed var(--line); border-radius: var(--radius);
            padding: 0.8rem 1rem; background: rgba(255,255,255,0.02);
        }
        .masseur-create-summary {
            cursor: pointer; font-weight: 600; font-size: 0.95rem; color: var(--accent);
            list-style: none; user-select: none;
        }
        .masseur-create-summary::-webkit-details-marker { display: none; }
        .masseur-create-fold[open] .masseur-create-summary { margin-bottom: 0.7rem; }
        .masseur-note { color: var(--muted); font-size: 0.9rem; margin: 0; }
        .masseur-note--sm { font-size: 0.82rem; margin-top: 0.5rem; }
        .masseur-field { display: flex; flex-direction: column; gap: 0.25rem; margin-bottom: 0.7rem; max-width: 28rem; }
        .masseur-field label { font-size: 0.85rem; color: var(--muted); }
        .masseur-field input[type="text"], .masseur-field select,
        .masseur-review-form textarea, .masseur-create-form textarea {
            background: var(--bg2); color: var(--fg);
            border: 1px solid var(--line); border-radius: 8px; padding: 0.45rem 0.6rem;
            font: inherit; width: 100%;
        }
        .masseur-hint { color: var(--muted); font-size: 0.78rem; margin: 0.1rem 0 0; }
        .masseur-photo-editor { margin: 0.4rem 0; max-width: 24rem; }
        .masseur-photo-canvas {
            width: 100%; max-width: 320px; height: auto; display: block;
            border: 1px solid var(--line); border-radius: 10px; touch-action: none;
            background: #000;
        }
        .masseur-photo-canvas--crop { cursor: grab; }
        .masseur-photo-canvas--crop:active { cursor: grabbing; }
        #masseur-photo-canvas { cursor: crosshair; }
        .masseur-photo-tools { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; margin-top: 0.5rem; }
        .masseur-photo-brush-label { font-size: 0.8rem; color: var(--muted); display: flex; align-items: center; gap: 0.35rem; }
        .masseur-photo-preview { max-width: 180px; border-radius: 10px; margin-top: 0.25rem; }
        .masseur-photo-preview-wrap[hidden] { display: none !important; }
        .masseur-photo-preview-wrap:not([hidden]) { display: block; margin-top: 0.5rem; }
        .masseur-default-photo { margin-top: 0.45rem; }
        .masseur-default-photo__label { display: block; font-size: 0.78rem; color: var(--muted); margin-bottom: 0.25rem; }
        .masseur-default-photo__box {
            width: 72px; height: 72px; border-radius: 50%; overflow: hidden;
            border: 1px solid var(--line); background: var(--bg2);
            display: flex; align-items: center; justify-content: center;
        }
        .masseur-default-photo__img { width: 100%; height: 100%; object-fit: cover; }
        .masseur-default-photo__img[hidden] { display: none !important; }
        .masseur-default-photo__symbol { font-size: 1.65rem; line-height: 1; color: var(--muted); }
        .masseur-default-photo__symbol[hidden] { display: none !important; }
        .masseur-btn {
            cursor: pointer; font: inherit; border-radius: 8px;
            border: 1px solid var(--line); background: rgba(255,255,255,0.06); color: var(--fg);
            padding: 0.45rem 0.9rem;
        }
        .masseur-btn--sm { padding: 0.32rem 0.7rem; font-size: 0.84rem; }
        .masseur-btn--primary { border-color: var(--accent); background: rgba(122,184,255,0.18); color: #fff; }
        .masseur-create__actions { display: flex; align-items: center; gap: 0.8rem; flex-wrap: wrap; margin-top: 0.4rem; }
        .masseur-reward-note { color: var(--muted); font-size: 0.78rem; }

        /* 會員收藏技師 */
        .member-fav-head {
            display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between;
            gap: 0.75rem 1rem; margin-bottom: 0.85rem;
        }
        .member-fav-public-form {
            display: flex; flex-wrap: wrap; align-items: center; gap: 0.55rem 0.75rem;
            padding: 0.55rem 0.7rem; border: 1px solid var(--line); border-radius: 10px;
            background: var(--card); font-size: 0.84rem;
        }
        .member-fav-public-form label { display: inline-flex; align-items: center; gap: 0.35rem; cursor: pointer; }
        .member-fav-public-link { font-size: 0.82rem; color: var(--muted); word-break: break-all; }
        .member-fav-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.75rem; }
        .member-fav-card {
            border: 1px solid var(--line); border-radius: var(--radius-lg, 14px);
            padding: 0.85rem 0.95rem; background: var(--card);
        }
        .member-fav-card__top {
            display: grid; grid-template-columns: auto minmax(0, 1fr) auto;
            gap: 0.75rem 0.85rem; align-items: start;
        }
        .member-fav-card__avatar {
            width: 56px; height: 56px; border-radius: 50%; overflow: hidden;
            display: flex; align-items: center; justify-content: center;
            background: linear-gradient(160deg, rgba(122,184,255,0.18), rgba(157,122,232,0.16));
            font-size: 1.35rem; flex-shrink: 0;
        }
        .member-fav-card__avatar img { width: 100%; height: 100%; object-fit: cover; }
        .member-fav-card__name { font-weight: 700; font-size: 1rem; margin: 0 0 0.2rem; }
        .member-fav-card__store { font-size: 0.82rem; margin: 0; }
        .member-fav-card__store a { color: var(--accent); text-decoration: none; }
        .member-fav-card__meta { font-size: 0.76rem; color: var(--muted); margin: 0.25rem 0 0; }
        .member-fav-card__side { display: flex; flex-direction: column; align-items: flex-end; gap: 0.4rem; }
        .member-fav-exp-form { margin: 0; }
        .member-fav-exp-btn {
            font-size: 0.78rem; cursor: pointer; border-radius: 999px; padding: 0.22rem 0.65rem;
            border: 1px solid var(--line); background: rgba(255,255,255,0.04); color: var(--muted);
        }
        .member-fav-exp-btn.is-done {
            border-color: rgba(126,231,135,0.45); background: rgba(126,231,135,0.1); color: var(--ok);
        }
        .member-fav-unfav-form { margin: 0; }
        .member-fav-card__tags { margin-top: 0.65rem; padding-top: 0.65rem; border-top: 1px dashed rgba(255,255,255,0.08); }
        .member-fav-card__reviews { margin-top: 0.5rem; }
        @media (max-width: 560px) {
            .member-fav-card__top { grid-template-columns: auto minmax(0, 1fr); }
            .member-fav-card__side {
                grid-column: 1 / -1;
                flex-direction: row;
                flex-wrap: wrap;
                align-items: stretch;
                justify-content: stretch;
                gap: 0.35rem;
                padding-left: 0;
            }
            .member-fav-exp-form,
            .member-fav-unfav-form { flex: 1 1 8rem; min-width: 0; }
            .member-fav-exp-btn,
            .member-fav-card__side .member-profile-btn { width: 100%; text-align: center; box-sizing: border-box; }
        }

        /* 會員收藏文章 */
        .member-thread-fav-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.65rem; }
        .member-thread-fav-card {
            display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between;
            gap: 0.65rem 1rem; border: 1px solid var(--line); border-radius: var(--radius-lg, 14px);
            padding: 0.8rem 0.95rem; background: var(--card);
        }
        .member-thread-fav-card__main { flex: 1 1 12rem; min-width: 0; }
        .member-thread-fav-card__type { margin: 0 0 0.25rem; font-size: 0.76rem; color: var(--muted); }
        .member-thread-fav-card__orphan { color: #e8a87c; }
        .member-thread-fav-card__title { margin: 0 0 0.3rem; font-size: 0.98rem; font-weight: 700; line-height: 1.35; }
        .member-thread-fav-card__title a { color: var(--fg); text-decoration: none; }
        .member-thread-fav-card__title a:hover { color: var(--accent); text-decoration: underline; }
        .member-thread-fav-card__thread { margin: 0 0 0.35rem; font-size: 0.84rem; color: var(--muted); line-height: 1.4; }
        .member-thread-fav-card__thread-label { font-weight: 600; color: var(--fg); margin-right: 0.35rem; }
        .member-thread-fav-card__excerpt { margin: 0 0 0.35rem; font-size: 0.88rem; color: var(--fg); line-height: 1.45; }
        .member-thread-fav-card__meta { margin: 0; font-size: 0.76rem; color: var(--muted); }
        .member-thread-fav-card__side { display: flex; flex-wrap: wrap; align-items: center; gap: 0.45rem; }
        .member-thread-fav-unfav-form { margin: 0; }
        .member-thread-fav-unfav-btn {
            font-size: 0.78rem; cursor: pointer; border-radius: 999px; padding: 0.28rem 0.65rem;
            border: 1px solid var(--line); background: rgba(255,255,255,0.04); color: var(--muted);
        }
        .member-thread-fav-unfav-btn:hover { border-color: rgba(255,120,120,0.45); color: #ffb4b4; }
        .member-saved-section-title { margin: 1rem 0 0.55rem; font-size: 0.92rem; font-weight: 700; color: var(--fg); }
        .member-saved-section-title:first-of-type { margin-top: 0.25rem; }

        /* 我的帳號（member_profile.php） */
        .page-head { margin: 0 0 1.1rem; }
        .page-head--compact { margin-bottom: 0.85rem; }
        .page-title {
            font-size: clamp(1.15rem, 2.4vw, 1.45rem);
            font-weight: 700;
            margin: 0 0 0.35rem;
            letter-spacing: -0.02em;
        }
        .member-profile-head .sub {
            color: var(--muted);
            font-size: 0.88rem;
            line-height: 1.55;
            margin: 0;
        }
        .member-profile-msg {
            padding: 0.55rem 0.75rem;
            border-radius: 10px;
            margin-bottom: 0.85rem;
            font-size: 0.85rem;
            border: 1px solid var(--line);
            line-height: 1.55;
        }
        .member-profile-msg--ok { color: var(--ok); background: rgba(126,231,135,.09); }
        .member-profile-msg--bad { color: #f85149; background: rgba(248,81,73,.08); }
        .member-profile-msg--warn { color: #d4a72c; background: rgba(212,167,44,.08); }
        .member-profile-card--warn { border-color: rgba(212,167,44,.35); background: rgba(212,167,44,.05); }
        .member-profile-tabs-wrap { padding-top: 0; overflow: hidden; }
        .member-profile-tabs {
            display: flex;
            flex-wrap: wrap;
            gap: 0.2rem;
            padding: 0.65rem 0.85rem 0;
            border-bottom: 1px solid var(--line);
        }
        .member-profile-tabs__btn {
            display: inline-flex;
            align-items: center;
            text-decoration: none;
            padding: 0.5rem 0.95rem;
            border: 1px solid transparent;
            border-radius: 10px 10px 0 0;
            background: transparent;
            color: var(--muted);
            font-size: 0.88rem;
            font-weight: 600;
            margin-bottom: -1px;
            transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease;
        }
        .member-profile-tabs__btn:hover { color: var(--fg); background: rgba(255,255,255,0.04); }
        .member-profile-tabs__btn.is-active {
            color: var(--accent);
            background: rgba(122,184,255,0.1);
            border-color: var(--line);
            border-bottom-color: var(--card);
        }
        .member-profile-tabs__badge {
            display: inline-block;
            margin-left: 0.35rem;
            padding: 0.05rem 0.45rem;
            border-radius: 999px;
            font-size: 0.72rem;
            font-weight: 700;
            background: rgba(122,184,255,0.2);
            color: var(--accent);
        }
        .member-profile-tab-panel { display: none; }
        .member-profile-tab-panel.is-active { display: block; }
        .member-profile-tab-panel__inner { padding: 0.95rem 0.9rem 1.1rem; }
        .member-profile-tab-divider {
            border-top: 1px solid var(--line);
            margin: 1.1rem 0 0.85rem;
        }
        .member-profile-tab-subtitle {
            margin: 0 0 0.65rem;
            font-size: 0.95rem;
            font-weight: 700;
        }
        .member-profile-email-block--warn {
            padding: 0.65rem 0.75rem;
            border-radius: 8px;
            border: 1px solid rgba(212,167,44,.35);
            background: rgba(212,167,44,.05);
        }
        .member-profile-stores-head {
            display: flex;
            justify-content: space-between;
            align-items: flex-start;
            gap: 1rem;
            flex-wrap: wrap;
            margin-bottom: 1rem;
        }
        .member-profile-stores-head__hint { margin: 0.25rem 0 0; }
        .member-profile-stores-head__cta { text-decoration: none; white-space: nowrap; }
        .member-profile-stores-head__actions {
            display: flex;
            flex-wrap: wrap;
            gap: 0.5rem;
            align-items: center;
        }
        .member-profile-stores-kind {
            display: inline-block;
            font-size: 0.78rem;
            font-weight: 700;
            padding: 0.15rem 0.45rem;
            border-radius: 4px;
            background: rgba(120,120,120,.15);
            color: var(--muted);
        }
        .member-profile-stores-kind--mobile {
            background: rgba(51,85,136,.18);
            color: #8cb4ff;
        }
        .member-profile-stores-kind--plain {
            background: transparent;
            color: var(--muted);
            font-weight: 500;
            padding: 0;
        }
        .store-listing-badge {
            display: inline-block;
            font-size: 0.78rem;
            font-weight: 700;
            padding: 0.2rem 0.5rem;
            border-radius: 4px;
            line-height: 1.3;
        }
        .store-listing-badge--mobile {
            background: rgba(51,85,136,.22);
            color: #9ec0ff;
            border: 1px solid rgba(51,85,136,.35);
        }
        .card--listing-mobile .card-body h2 a { letter-spacing: 0.01em; }
        .card--listing-mobile .meta-line:first-of-type { margin-top: 0.15rem; }
        .store-detail--mobile .store-card-fate { border-color: rgba(51,85,136,.28); }
        .store-detail--mobile .store-info-item-fate__glyph { color: #9ec0ff; }
        .member-profile-stores-table__link {
            color: var(--accent);
            text-decoration: underline;
        }
        .member-profile-stores-status {
            font-weight: 700;
            font-size: 0.85rem;
        }
        .member-profile-stores-status--ok { color: var(--ok); }
        .member-profile-stores-status--pending { color: #d4a72c; }
        .member-profile-summary {
            display: flex;
            gap: 1rem;
            align-items: flex-start;
            flex-wrap: wrap;
        }
        .member-profile-avatar {
            width: 96px;
            height: 96px;
            border-radius: 50%;
            object-fit: cover;
            border: 2px solid var(--line);
            background: var(--bg2);
            flex-shrink: 0;
        }
        .member-profile-avatar--empty {
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 0.72rem;
            color: var(--muted);
            text-align: center;
            padding: 0.35rem;
            border-style: dashed;
        }
        .member-profile-who {
            font-size: 1rem;
            font-weight: 600;
            display: flex;
            flex-wrap: wrap;
            align-items: baseline;
            gap: 0.35rem 0.5rem;
            margin: 0 0 0.25rem;
        }
        .member-profile-ncoin { font-size: 0.88rem; font-weight: 600; white-space: nowrap; }
        .member-profile-ncoin__label { color: var(--muted); font-weight: 500; margin-right: 0.15rem; }
        .member-profile-ncoin__amount { color: var(--accent); font-variant-numeric: tabular-nums; }
        .member-profile-meta {
            margin: 0.15rem 0 0;
            font-size: 0.82rem;
            color: var(--muted);
        }
        .member-profile-ncoin-sum {
            display: flex;
            flex-wrap: wrap;
            gap: 0.5rem 1.4rem;
            margin-bottom: 0.85rem;
            font-size: 0.86rem;
        }
        .member-profile-ncoin-sum b { color: var(--accent); font-variant-numeric: tabular-nums; }
        .member-profile-ncoin-sum__bad { color: #f85149 !important; }
        .member-profile-empty { color: var(--muted); font-size: 0.86rem; margin: 0; }
        .member-profile-table-wrap { overflow-x: auto; }
        .member-profile-ncoin-hist {
            width: 100%;
            border-collapse: collapse;
            font-size: 0.82rem;
        }
        .member-profile-ncoin-hist th,
        .member-profile-ncoin-hist td {
            text-align: left;
            padding: 0.4rem 0.5rem;
            border-bottom: 1px solid var(--line);
            vertical-align: top;
        }
        .member-profile-ncoin-hist th { color: var(--muted); font-weight: 600; }
        .member-profile-ncoin-hist__amt {
            font-variant-numeric: tabular-nums;
            white-space: nowrap;
            color: var(--ok);
            text-align: right;
        }
        .member-profile-ncoin-hist__amt--debit {
            color: #f85149;
        }
        .member-profile-ncoin-hist__amt--reverted {
            color: var(--muted);
        }
        .member-profile-ncoin-hist tr.is-reverted .member-profile-ncoin-hist__amt {
            color: var(--muted);
            text-decoration: line-through;
        }
        .member-profile-ncoin-hist__reverted {
            color: #f85149;
            font-size: 0.72rem;
            margin-left: 0.3rem;
            text-decoration: none;
        }
        .member-profile-ncoin-hist__when { color: var(--muted); white-space: nowrap; }
        .member-profile-ncoin-hist__note {
            display: block;
            font-size: 0.72rem;
            color: var(--muted);
            margin-top: 0.1rem;
        }
        .member-profile-ncoin-range {
            color: var(--muted);
            font-size: 0.82rem;
            margin: 0 0 0.75rem;
            line-height: 1.5;
        }
        .member-profile-ncoin-range__sep {
            margin: 0 0.35rem;
            opacity: 0.45;
        }
        .member-profile-ncoin-pager {
            margin: 0 0 0.85rem;
            padding: 0;
            justify-content: flex-start;
        }
        .member-profile-ncoin-pager--top {
            margin-bottom: 0.75rem;
        }
        .member-profile-ncoin-pager--bottom {
            margin-top: 0.85rem;
            margin-bottom: 0;
            justify-content: center;
        }
        .member-profile-ncoin-pager__gap {
            padding: 0.35rem 0.25rem;
            color: var(--muted);
            user-select: none;
        }
        .member-profile-transfer-warn {
            padding: 0.65rem 0.75rem;
            margin-bottom: 0.85rem;
            border-radius: 8px;
            border: 1px solid rgba(248, 81, 73, 0.45);
            background: rgba(248, 81, 73, 0.08);
            color: var(--fg);
            font-size: 0.88rem;
            line-height: 1.5;
        }
        .member-profile-transfer-meta {
            font-size: 0.88rem;
            color: var(--muted);
            margin: 0 0 0.85rem;
            line-height: 1.55;
        }
        .member-profile-transfer-meta strong {
            color: var(--accent);
            font-variant-numeric: tabular-nums;
        }
        .member-profile-transfer-lookup {
            display: flex;
            gap: 0.5rem;
            align-items: stretch;
            margin-bottom: 0.75rem;
        }
        .member-profile-transfer-lookup .member-profile-input {
            margin-bottom: 0;
            flex: 1;
        }
        .member-profile-transfer-lookup-result {
            font-size: 0.85rem;
            margin: -0.35rem 0 0.75rem;
        }
        .member-profile-transfer-lookup-result--ok { color: var(--ok); }
        .member-profile-transfer-lookup-result--bad { color: #f85149; }
        .member-profile-transfer-confirm {
            display: flex;
            gap: 0.5rem;
            align-items: flex-start;
            font-size: 0.85rem;
            line-height: 1.45;
            margin: 0.5rem 0 0.85rem;
            cursor: pointer;
        }
        .member-profile-transfer-confirm input { margin-top: 0.2rem; flex-shrink: 0; }
        .member-profile-label {
            display: block;
            font-size: 0.85rem;
            color: var(--muted);
            margin-bottom: 0.3rem;
        }
        .member-profile-input {
            width: 100%;
            padding: 0.5rem 0.65rem;
            border-radius: 8px;
            border: 1px solid var(--line);
            background: var(--bg2);
            color: var(--fg);
            margin-bottom: 0.75rem;
            font-size: 0.9rem;
            font: inherit;
        }
        .member-profile-input--code {
            font-family: ui-monospace, monospace;
            font-size: 1.15rem;
            letter-spacing: 0.2em;
            max-width: 10rem;
            text-align: center;
        }
        .member-profile-avatar-pick {
            display: flex;
            flex-wrap: wrap;
            gap: 0.5rem;
            align-items: center;
            margin-bottom: 0.5rem;
        }
        .member-profile-input--file {
            flex: 1;
            min-width: 12rem;
            margin-bottom: 0;
        }
        .member-profile-avatar-preview {
            width: 64px;
            height: 64px;
            border-radius: 50%;
            object-fit: cover;
            border: 2px solid var(--line);
        }
        .member-profile-avatar-preview[hidden] { display: none !important; }
        .member-profile-crop-panel {
            margin: 0.5rem 0 0.85rem;
            padding: 0.85rem;
            border: 1px solid var(--line);
            border-radius: var(--radius);
            background: var(--bg2);
        }
        .member-profile-crop-panel[hidden] { display: none !important; }
        .member-profile-crop-hint {
            font-size: 0.8rem;
            color: var(--muted);
            margin: 0 0 0.65rem;
            line-height: 1.45;
        }
        .member-profile-crop-canvas-wrap {
            width: 280px;
            max-width: 100%;
            margin: 0 auto 0.65rem;
            border-radius: 50%;
            overflow: hidden;
            border: 2px solid var(--line);
            touch-action: none;
        }
        #avatar-crop-canvas { display: block; width: 100%; height: auto; cursor: grab; }
        #avatar-crop-canvas:active { cursor: grabbing; }
        .member-profile-crop-zoom {
            display: flex;
            align-items: center;
            gap: 0.5rem;
            margin-bottom: 0.65rem;
            font-size: 0.82rem;
            color: var(--muted);
        }
        .member-profile-crop-zoom input[type=range] { flex: 1; }
        .member-profile-crop-actions {
            display: flex;
            flex-wrap: wrap;
            gap: 0.45rem;
            justify-content: center;
        }
        .member-profile-form-actions {
            display: flex;
            flex-wrap: wrap;
            gap: 0.5rem;
            align-items: center;
            margin-top: 0.25rem;
        }
        .member-profile-form--spaced { margin-top: 0.85rem; }
        .member-profile-btn {
            display: inline-block;
            padding: 0.5rem 1rem;
            border-radius: 8px;
            border: 1px solid var(--line);
            background: rgba(122,184,255,.15);
            color: var(--accent);
            cursor: pointer;
            font-size: 0.9rem;
            text-decoration: none;
            font-family: inherit;
        }
        .member-profile-btn:hover { background: rgba(122,184,255,.25); }
        .member-profile-btn--ghost { background: transparent; }
        .member-profile-btn--primary { border-color: var(--accent); }
        .member-profile-btn--sm { font-size: 0.8rem; padding: 0.28rem 0.65rem; }
        .member-profile-email { margin: 0; font-size: 0.88rem; line-height: 1.55; }
        .member-profile-meta-inline { color: var(--muted); font-size: 0.82rem; margin-left: 0.35rem; }
        .member-profile-meta-block {
            display: block;
            margin-top: 0.25rem;
            color: var(--muted);
            font-size: 0.82rem;
        }
        .member-profile-hint {
            color: var(--muted);
            font-size: 0.88rem;
            line-height: 1.5;
            margin: 0.5rem 0 0;
        }

        @media (max-width: 767px) {
            .layout-shell,
            .layout-shell--detail {
                padding-left: 0.65rem;
                padding-right: 0.65rem;
            }

            .layout-shell--detail .store-bc {
                font-size: 0.78rem;
                margin-bottom: 0.6rem;
            }

            .member-profile-head .sub {
                font-size: 0.84rem;
                line-height: 1.5;
            }

            .member-profile-msg {
                font-size: 0.84rem;
                padding: 0.5rem 0.65rem;
            }

            .store-card-fate--block.member-profile-card {
                padding: 0.75rem 0.7rem;
            }

            .member-profile-summary {
                flex-direction: column;
                align-items: center;
                text-align: center;
                gap: 0.7rem;
            }

            .member-profile-summary__body {
                width: 100%;
                min-width: 0;
            }

            .member-profile-avatar {
                width: 80px;
                height: 80px;
            }

            .member-profile-who {
                justify-content: center;
                flex-direction: column;
                align-items: center;
                gap: 0.3rem;
            }

            .member-profile-ncoin {
                white-space: normal;
            }

            .member-profile-meta {
                font-size: 0.84rem;
            }

            .member-profile-tabs-wrap {
                overflow: visible;
            }

            .member-profile-tabs {
                flex-wrap: nowrap;
                overflow-x: auto;
                overflow-y: hidden;
                -webkit-overflow-scrolling: touch;
                scrollbar-width: none;
                gap: 0.35rem;
                padding: 0.55rem 0.65rem 0;
            }

            .member-profile-tabs::-webkit-scrollbar {
                display: none;
            }

            .member-profile-tabs__btn {
                flex: 0 0 auto;
                white-space: nowrap;
                margin-bottom: 0.55rem;
                padding: 0.42rem 0.85rem;
                font-size: 0.82rem;
                border-radius: 999px;
                border: 1px solid var(--line);
                border-bottom: 1px solid var(--line);
            }

            .member-profile-tabs__btn.is-active {
                border-color: rgba(122, 184, 255, 0.45);
                border-bottom-color: rgba(122, 184, 255, 0.45);
                background: rgba(122, 184, 255, 0.14);
            }

            .member-profile-tab-panel__inner {
                padding: 0.75rem 0.65rem 0.95rem;
            }

            .member-profile-stores-head {
                flex-direction: column;
                gap: 0.65rem;
            }

            .member-profile-stores-head__actions {
                width: 100%;
                flex-direction: column;
            }

            .member-profile-stores-head__actions .member-profile-btn {
                width: 100%;
                text-align: center;
            }

            .member-profile-ncoin-sum {
                flex-direction: column;
                align-items: flex-start;
                gap: 0.35rem;
            }

            .member-profile-transfer-lookup {
                flex-direction: column;
            }

            .member-profile-transfer-lookup .member-profile-btn {
                width: 100%;
                text-align: center;
            }

            .member-fav-head {
                flex-direction: column;
                gap: 0.65rem;
            }

            .member-fav-public-form {
                width: 100%;
                flex-direction: column;
                align-items: stretch;
            }

            .member-fav-public-form .member-profile-btn {
                width: 100%;
                text-align: center;
            }

            .member-profile-table-wrap {
                overflow-x: visible;
            }

            .member-profile-stores-table thead,
            .member-profile-ncoin-hist thead {
                display: none;
            }

            .member-profile-stores-table tbody,
            .member-profile-stores-table tr,
            .member-profile-ncoin-hist tbody,
            .member-profile-ncoin-hist tr {
                display: block;
            }

            .member-profile-stores-table tr,
            .member-profile-ncoin-hist tr {
                border: 1px solid var(--line);
                border-radius: 10px;
                margin-bottom: 0.65rem;
                padding: 0.65rem 0.7rem;
                background: var(--card);
            }

            .member-profile-stores-table td,
            .member-profile-ncoin-hist td {
                display: flex;
                justify-content: space-between;
                align-items: flex-start;
                gap: 0.65rem;
                padding: 0.28rem 0;
                border-bottom: none;
                text-align: right;
            }

            .member-profile-stores-table td::before,
            .member-profile-ncoin-hist td::before {
                content: attr(data-label);
                flex: 0 0 auto;
                max-width: 42%;
                color: var(--muted);
                font-weight: 600;
                font-size: 0.8rem;
                text-align: left;
                line-height: 1.35;
            }

            .member-profile-ncoin-hist td:last-child {
                align-items: center;
            }

            .member-profile-ncoin-hist__amt {
                white-space: nowrap;
            }

            .member-profile-form-actions {
                flex-direction: column;
            }

            .member-profile-form-actions .member-profile-btn {
                width: 100%;
                text-align: center;
            }

            .member-profile-input--file {
                min-width: 0;
            }

            .member-profile-ncoin-pager {
                flex-wrap: wrap;
                justify-content: center;
            }
        }
    </style>
    <?php
    echo fate_site_footer_stylesheet_tag('./');
    echo fate_social_links_stylesheet_tag('./');
    $fateThemeStyles = $fateThemeCssFiles ?? fate_theme_extra_stylesheets();
    foreach ($fateThemeStyles as $cssHref) {
        if (!is_string($cssHref) || $cssHref === '') {
            continue;
        }
        $cssFs = dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . ltrim(str_replace('/', DIRECTORY_SEPARATOR, $cssHref), '.\\');
        $cssVer = is_file($cssFs) ? (string) filemtime($cssFs) : (string) time();
        ?>
    <link rel="stylesheet" href="<?= htmlspecialchars($cssHref, ENT_QUOTES, 'UTF-8') ?>?v=<?= htmlspecialchars($cssVer, ENT_QUOTES, 'UTF-8') ?>">
    <?php } ?>
    <?php
    if (!empty($fateIncludeAuthStyles)) {
        $authCssFs = dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'static' . DIRECTORY_SEPARATOR . 'fate-auth.css';
        $authCssVer = is_file($authCssFs) ? (string) filemtime($authCssFs) : (string) time();
        ?>
    <link rel="stylesheet" href="./static/fate-auth.css?v=<?= htmlspecialchars($authCssVer, ENT_QUOTES, 'UTF-8') ?>">
    <?php } ?>
    <?php
    require_once dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'fate_mobile_member_bar.php';
    echo fate_mobile_frontend_stylesheet_tags('./');
    ?>
    <?php if (!empty($fateIncludeBlogAssets)): ?>
        <?php require __DIR__ . DIRECTORY_SEPARATOR . 'blog_head_assets.inc.php'; ?>
    <?php endif; ?>
</head>
