/* =========================================================
 * 招投标信息发布平台 —— 全站样式(淡蓝主色调)
 * ========================================================= */

/* ---------- CSS 变量 ---------- */
:root {
    --color-primary: #1e5fa8; /* 主色 */
    --color-primary-hover: #1a5394; /* 主色 hover */
    --color-primary-light: #e8f1fb; /* 主色浅(hover/选中底) */
    --color-primary-soft: #f0f7ff; /* 主色更浅 */
    --color-border: #b4d2ee; /* 边框/分隔 */
    --color-border-light: #e2eaf2; /* 浅边框 */
    --color-bg: #f5f9fd; /* 页面背景 */
    --color-card: #ffffff; /* 卡片底 */
    --color-text: #1f2d3d; /* 主文字 */
    --color-text-sub: #5f6b7a; /* 次文字 */
    --color-text-muted: #8a99a8; /* 灰色辅助文字 */
    --color-footer: #2c3e50; /* Footer 深色背景 */
    --color-footer-text: #c8d3df; /* Footer 文字 */

    --shadow-sm: 0 1px 3px rgba(30, 95, 168, 0.08);
    --shadow-md: 0 4px 14px rgba(30, 95, 168, 0.12);
    --shadow-lg: 0 8px 24px rgba(30, 95, 168, 0.16);

    --radius: 8px;
    --radius-lg: 12px;

    --container-max: 1200px;
}

/* ---------- Reset ---------- */
* {
    box-sizing: border-box;
}

html, body {
    margin: 0;
    padding: 0;
    font-family: -apple-system, BlinkMacSystemFont, "PingFang SC",
    "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
    font-size: 14px;
    line-height: 1.6;
    color: var(--color-text);
    background: var(--color-bg);
    -webkit-font-smoothing: antialiased;
}

a {
    color: var(--color-primary);
    text-decoration: none;
}

a:hover {
    text-decoration: underline;
}

button {
    font-family: inherit;
    cursor: pointer;
    border: none;
    background: none;
}

/* ---------- 布局容器 ---------- */
#app {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

.main-wrap {
    flex: 1;
    padding: 28px 0 60px;
    position: relative;

    /* ----- 建筑行业风格背景:覆盖 Header 与 Footer 之间的整个区域 -----
     * 多层叠加:
     *   1) 右下角塔吊 + 楼宇剪影(SVG inline,主色低透明度)
     *   2) 左上角小型起重机轮廓
     *   3) 蓝图细网格(双向直线)
     *   4) 浅蓝径向渐变作为底色
     */
    background-color: #eaf1f9;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='560' height='280' viewBox='0 0 560 280'><g fill='none' stroke='%231e5fa8' stroke-width='1.4' opacity='0.16'><path d='M80 270 L80 50 L260 50'/><path d='M75 50 L85 50 L80 28 Z'/><path d='M80 72 L104 92 M80 92 L130 72 M80 112 L156 72'/><path d='M236 50 L260 72 L236 72 Z'/><line x1='248' y1='72' x2='248' y2='126'/><rect x='240' y='118' width='16' height='12'/><rect x='300' y='110' width='70' height='160'/><g><line x1='312' y1='128' x2='312' y2='265'/><line x1='324' y1='128' x2='324' y2='265'/><line x1='336' y1='128' x2='336' y2='265'/><line x1='348' y1='128' x2='348' y2='265'/><line x1='360' y1='128' x2='360' y2='265'/><line x1='300' y1='145' x2='370' y2='145'/><line x1='300' y1='170' x2='370' y2='170'/><line x1='300' y1='195' x2='370' y2='195'/><line x1='300' y1='220' x2='370' y2='220'/><line x1='300' y1='245' x2='370' y2='245'/></g><rect x='400' y='155' width='100' height='115'/><g><line x1='412' y1='168' x2='412' y2='265'/><line x1='430' y1='168' x2='430' y2='265'/><line x1='448' y1='168' x2='448' y2='265'/><line x1='466' y1='168' x2='466' y2='265'/><line x1='484' y1='168' x2='484' y2='265'/><line x1='400' y1='185' x2='500' y2='185'/><line x1='400' y1='210' x2='500' y2='210'/><line x1='400' y1='235' x2='500' y2='235'/></g><line x1='0' y1='270' x2='560' y2='270' stroke-width='2'/></g></svg>"),
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='280' height='200' viewBox='0 0 280 200'><g fill='none' stroke='%231e5fa8' stroke-width='1.2' opacity='0.13'><path d='M40 180 L40 60 L220 60'/><path d='M35 60 L45 60 L40 40 Z'/><path d='M40 80 L60 100 M40 100 L80 80 M40 120 L100 80 M40 140 L120 80'/><path d='M200 60 L220 80 L200 80 Z'/><line x1='210' y1='80' x2='210' y2='110'/><rect x='202' y='105' width='16' height='10'/><line x1='0' y1='180' x2='280' y2='180' stroke-width='1.6'/></g></svg>"),
    linear-gradient(rgba(30, 95, 168, 0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(30, 95, 168, 0.06) 1px, transparent 1px),
    radial-gradient(ellipse at top, #f3f8fd 0%, #e4eef8 55%, #d7e4f2 100%);
    background-repeat: no-repeat, no-repeat, repeat, repeat, no-repeat;
    background-position: right bottom,
    left top,
    0 0,
    0 0,
    center center;
    background-size: 560px 280px,
    280px 200px,
    28px 28px,
    28px 28px,
    100% 100%;
    background-attachment: fixed, fixed, fixed, fixed, fixed;
}

/* 移动端:压缩剪影、缩小网格密度,避免拥挤 */
@media (max-width: 768px) {
    .main-wrap {
        background-image: linear-gradient(rgba(30, 95, 168, 0.05) 1px, transparent 1px),
        linear-gradient(90deg, rgba(30, 95, 168, 0.05) 1px, transparent 1px),
        radial-gradient(ellipse at top, #f3f8fd 0%, #e4eef8 55%, #d7e4f2 100%);
        background-repeat: repeat, repeat, no-repeat;
        background-position: 0 0, 0 0, center center;
        background-size: 22px 22px, 22px 22px, 100% 100%;
        background-attachment: scroll, scroll, scroll;
    }
}

.container {
    max-width: var(--container-max);
    margin: 0 auto;
    padding: 0 20px;
}

/* =========================================================
 * Header
 * ========================================================= */
.app-header {
    background: #fff;
    box-shadow: var(--shadow-sm);
    border-bottom: 3px solid var(--color-primary);
    position: sticky;
    top: 0;
    z-index: 50;


    background-color: #eaf1f9;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='560' height='280' viewBox='0 0 560 280'><g fill='none' stroke='%231e5fa8' stroke-width='1.4' opacity='0.16'><path d='M80 270 L80 50 L260 50'/><path d='M75 50 L85 50 L80 28 Z'/><path d='M80 72 L104 92 M80 92 L130 72 M80 112 L156 72'/><path d='M236 50 L260 72 L236 72 Z'/><line x1='248' y1='72' x2='248' y2='126'/><rect x='240' y='118' width='16' height='12'/><rect x='300' y='110' width='70' height='160'/><g><line x1='312' y1='128' x2='312' y2='265'/><line x1='324' y1='128' x2='324' y2='265'/><line x1='336' y1='128' x2='336' y2='265'/><line x1='348' y1='128' x2='348' y2='265'/><line x1='360' y1='128' x2='360' y2='265'/><line x1='300' y1='145' x2='370' y2='145'/><line x1='300' y1='170' x2='370' y2='170'/><line x1='300' y1='195' x2='370' y2='195'/><line x1='300' y1='220' x2='370' y2='220'/><line x1='300' y1='245' x2='370' y2='245'/></g><rect x='400' y='155' width='100' height='115'/><g><line x1='412' y1='168' x2='412' y2='265'/><line x1='430' y1='168' x2='430' y2='265'/><line x1='448' y1='168' x2='448' y2='265'/><line x1='466' y1='168' x2='466' y2='265'/><line x1='484' y1='168' x2='484' y2='265'/><line x1='400' y1='185' x2='500' y2='185'/><line x1='400' y1='210' x2='500' y2='210'/><line x1='400' y1='235' x2='500' y2='235'/></g><line x1='0' y1='270' x2='560' y2='270' stroke-width='2'/></g></svg>"),
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='280' height='200' viewBox='0 0 280 200'><g fill='none' stroke='%231e5fa8' stroke-width='1.2' opacity='0.13'><path d='M40 180 L40 60 L220 60'/><path d='M35 60 L45 60 L40 40 Z'/><path d='M40 80 L60 100 M40 100 L80 80 M40 120 L100 80 M40 140 L120 80'/><path d='M200 60 L220 80 L200 80 Z'/><line x1='210' y1='80' x2='210' y2='110'/><rect x='202' y='105' width='16' height='10'/><line x1='0' y1='180' x2='280' y2='180' stroke-width='1.6'/></g></svg>"),
    linear-gradient(rgba(30, 95, 168, 0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(30, 95, 168, 0.06) 1px, transparent 1px),
    radial-gradient(ellipse at top, #f3f8fd 0%, #e4eef8 55%, #d7e4f2 100%);
    background-repeat: no-repeat, no-repeat, repeat, repeat, no-repeat;
    background-position: right bottom,
    left top,
    0 0,
    0 0,
    center center;
    background-size: 560px 280px,
    280px 200px,
    28px 28px,
    28px 28px,
    100% 100%;
    background-attachment: fixed, fixed, fixed, fixed, fixed;
}

.header-inner {
    display: flex;
    align-items: center;
    height: 80px;
}

.brand {
    display: flex;
    align-items: center;
    gap: 14px;
    color: var(--color-text);
    text-decoration: none;
}

.brand:hover {
    text-decoration: none;
}

.brand-logo {
    width: 48px;
    height: 48px;
    flex-shrink: 0;
    filter: drop-shadow(0 2px 4px rgba(30, 95, 168, 0.2));
}

.brand-name {
    font-size: 20px;
    font-weight: 700;
    color: var(--color-primary);
    letter-spacing: 0.5px;
}

.brand-sub {
    font-size: 12px;
    color: var(--color-text-muted);
    margin-top: 2px;
    letter-spacing: 1px;
}

/* =========================================================
 * 主页 - Tab
 * ========================================================= */
.tab-bar {
    display: flex;
    gap: 4px;
    background: #fff;
    border-radius: var(--radius-lg);
    padding: 6px;
    box-shadow: var(--shadow-sm);
    margin-bottom: 24px;
    overflow-x: auto;
    border: 1px solid var(--color-border-light);
}

.tab-item {
    flex: 1;
    min-width: 130px;
    padding: 14px 20px;
    font-size: 15px;
    font-weight: 500;
    color: var(--color-text-sub);
    border-radius: var(--radius);
    transition: all 0.2s ease;
    white-space: nowrap;
    position: relative;
}

.tab-item:hover {
    color: var(--color-primary);
    background: var(--color-primary-soft);
}

.tab-item.active {
    color: #fff;
    background: linear-gradient(135deg, #4a90d9 0%, var(--color-primary) 100%);
    font-weight: 600;
    box-shadow: 0 2px 8px rgba(30, 95, 168, 0.3);
}

/* ---------- 分类标题 ---------- */
.section-title {
    display: flex;
    align-items: center;
    font-size: 18px;
    font-weight: 600;
    color: var(--color-text);
    margin: 0 0 18px;
}

.section-title-bar {
    width: 4px;
    height: 18px;
    background: var(--color-primary);
    border-radius: 2px;
    margin-right: 10px;
}

/* =========================================================
 * 公告列表(两列 grid)
 * ========================================================= */
.notice-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 16px;
}

.notice-card {
    background: var(--color-card);
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-lg);
    padding: 20px 22px;
    cursor: pointer;
    transition: all 0.25s ease;
    position: relative;
    overflow: hidden;
}

.notice-card::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
    background: var(--color-primary);
    transform: scaleY(0);
    transform-origin: center;
    transition: transform 0.25s ease;
}

.notice-card:hover {
    background: var(--color-primary-light);
    border-color: var(--color-border);
    transform: translateY(-2px);
    box-shadow: var(--shadow-md);
}

.notice-card:hover::before {
    transform: scaleY(1);
}

.notice-card:focus {
    outline: 2px solid var(--color-primary);
    outline-offset: 2px;
}

.notice-date {
    font-size: 18px;
    color: var(--color-text-muted);
    margin-bottom: 8px;
    font-weight: 500;
}

.notice-title {
    font-size: 14px;
    font-weight: 600;
    color: var(--color-text);
    margin: 0 0 8px;
    line-height: 1.55;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
}

.notice-card:hover .notice-title {
    color: var(--color-primary);
}

.notice-meta {
    font-size: 12px;
    color: var(--color-text-muted);
    margin-top: 4px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* =========================================================
 * 主显示区域容器 —— 半透明白底卡片
 * 让 .main-wrap 上的建筑风背景从卡片边缘透出
 * ========================================================= */
.content-panel {
    position: relative;
    border-radius: var(--radius-lg);
    padding: 28px 28px 32px;
    margin-bottom: 24px;
    border: 1px solid rgba(180, 210, 238, 0.6);
    box-shadow: var(--shadow-md);
    background: rgba(255, 255, 255, 0.92);
    backdrop-filter: blur(2px);
    overflow: hidden;

    background-color: #eaf1f9;
    background-image: /* 1) 右下:塔吊 + 高楼群 */ url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='560' height='280' viewBox='0 0 560 280'><g fill='none' stroke='%231e5fa8' stroke-width='1.4' opacity='0.16'><path d='M80 270 L80 50 L260 50'/><path d='M75 50 L85 50 L80 28 Z'/><path d='M80 72 L104 92 M80 92 L130 72 M80 112 L156 72'/><path d='M236 50 L260 72 L236 72 Z'/><line x1='248' y1='72' x2='248' y2='126'/><rect x='240' y='118' width='16' height='12'/><rect x='300' y='110' width='70' height='160'/><g><line x1='312' y1='128' x2='312' y2='265'/><line x1='324' y1='128' x2='324' y2='265'/><line x1='336' y1='128' x2='336' y2='265'/><line x1='348' y1='128' x2='348' y2='265'/><line x1='360' y1='128' x2='360' y2='265'/><line x1='300' y1='145' x2='370' y2='145'/><line x1='300' y1='170' x2='370' y2='170'/><line x1='300' y1='195' x2='370' y2='195'/><line x1='300' y1='220' x2='370' y2='220'/><line x1='300' y1='245' x2='370' y2='245'/></g><rect x='400' y='155' width='100' height='115'/><g><line x1='412' y1='168' x2='412' y2='265'/><line x1='430' y1='168' x2='430' y2='265'/><line x1='448' y1='168' x2='448' y2='265'/><line x1='466' y1='168' x2='466' y2='265'/><line x1='484' y1='168' x2='484' y2='265'/><line x1='400' y1='185' x2='500' y2='185'/><line x1='400' y1='210' x2='500' y2='210'/><line x1='400' y1='235' x2='500' y2='235'/></g><line x1='0' y1='270' x2='560' y2='270' stroke-width='2'/></g></svg>"),
        /* 2) 左上:小起重机/桁架 */ url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='280' height='200' viewBox='0 0 280 200'><g fill='none' stroke='%231e5fa8' stroke-width='1.2' opacity='0.13'><path d='M40 180 L40 60 L220 60'/><path d='M35 60 L45 60 L40 40 Z'/><path d='M40 80 L60 100 M40 100 L80 80 M40 120 L100 80 M40 140 L120 80'/><path d='M200 60 L220 80 L200 80 Z'/><line x1='210' y1='80' x2='210' y2='110'/><rect x='202' y='105' width='16' height='10'/><line x1='0' y1='180' x2='280' y2='180' stroke-width='1.6'/></g></svg>"),
        /* 3) 蓝图网格 */ linear-gradient(rgba(30, 95, 168, 0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(30, 95, 168, 0.06) 1px, transparent 1px),
        /* 4) 浅蓝径向渐变 */ radial-gradient(ellipse at top, #f3f8fd 0%, #e4eef8 55%, #d7e4f2 100%);
    background-repeat: no-repeat, no-repeat, repeat, repeat, no-repeat;
    background-position: right bottom,
    left top,
    0 0,
    0 0,
    center center;
    background-size: 560px 280px,
    280px 200px,
    28px 28px,
    28px 28px,
    100% 100%;
    background-attachment: fixed, fixed, fixed, fixed, fixed;
}

/* 左侧装饰条:工程图纸感 */
.content-panel::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 3px;
    background: linear-gradient(90deg,
    var(--color-primary) 0%,
    #4a90d9 40%,
    transparent 100%);
}

.content-panel .section-title {
    margin-top: 4px;
}

@media (max-width: 768px) {
    .content-panel {
        padding: 18px 16px 22px;
    }
}

/* =========================================================
 * 状态盒(loading / error / empty)
 * ========================================================= */
.state-box {
    background: #fff;
    border: 1px dashed var(--color-border);
    border-radius: var(--radius-lg);
    padding: 60px 20px;
    text-align: center;
    color: var(--color-text-muted);
    font-size: 15px;
}

.state-box > * + * {
    margin-top: 16px;
}

.state-error {
    color: #d9534f;
    border-color: #f3c0bd;
    background: #fdf6f5;
}

.state-empty {
    color: var(--color-text-muted);
}

.btn-primary {
    display: inline-block;
    padding: 8px 22px;
    background: var(--color-primary);
    color: #fff;
    border-radius: var(--radius);
    font-size: 14px;
    transition: background 0.2s;
}

.btn-primary:hover {
    background: var(--color-primary-hover);
}

.spinner {
    display: inline-block;
    width: 32px;
    height: 32px;
    border: 3px solid var(--color-primary-light);
    border-top-color: var(--color-primary);
    border-radius: 50%;
    animation: spin 0.8s linear infinite;
}

@keyframes spin {
    to {
        transform: rotate(360deg);
    }
}

/* =========================================================
 * 详情页
 * ========================================================= */
.back-btn {
    display: inline-flex;
    align-items: center;
    padding: 8px 18px;
    background: #fff;
    color: var(--color-primary);
    border: 1px solid var(--color-border);
    border-radius: var(--radius);
    font-size: 14px;
    font-weight: 500;
    margin-bottom: 18px;
    transition: all 0.2s;
}

.back-btn:hover {
    background: var(--color-primary);
    color: #fff;
    border-color: var(--color-primary);
}

.detail-card {
    background: var(--color-card);
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-lg);
    padding: 40px 50px;
    box-shadow: var(--shadow-sm);
}

.detail-title {
    font-size: 24px;
    font-weight: 700;
    color: var(--color-text);
    text-align: center;
    margin: 0 0 16px;
    line-height: 1.4;
}

.detail-meta {
    text-align: center;
    font-size: 13px;
    color: var(--color-text-muted);
    margin-bottom: 24px;
}

.detail-meta > * + * {
    margin-left: 6px;
}

.detail-divider {
    height: 1px;
    background: linear-gradient(90deg,
    transparent, var(--color-border), transparent);
    margin: 0 0 28px;
}

/* ---------- 富文本内容样式 ---------- */
.rich-content {
    font-size: 15px;
    line-height: 1.85;
    color: var(--color-text);
}

.rich-content p {
    margin: 0 0 10px;
}

.rich-content strong,
.rich-content b {
    color: var(--color-text);
    font-weight: 700;
}

.rich-content img {
    max-width: 100%;
    height: auto;
    display: block;
    margin: 12px auto;
    border-radius: 4px;
}

.rich-content table {
    border-collapse: collapse;
    margin: 12px 0;
    width: 100%;
    max-width: 100%;
    overflow-x: auto;
    display: block;
}

.rich-content table tbody {
    display: table;
    width: 100%;
}

.rich-content table td,
.rich-content table th {
    border: 1px solid var(--color-border);
    padding: 8px 10px;
    vertical-align: top;
    background: #fff;
}

.rich-content table tr:first-child td {
    background: var(--color-primary-light);
    font-weight: 600;
}

.rich-content a {
    color: var(--color-primary);
    word-break: break-all;
}

.rich-content u {
    text-decoration: underline;
}

.rich-content h1,
.rich-content h2,
.rich-content h3 {
    color: var(--color-text);
    margin: 18px 0 10px;
}

/* ---------- 附件 ---------- */
.detail-attach {
    margin-top: 32px;
    padding: 16px 20px;
    background: var(--color-primary-soft);
    border-left: 3px solid var(--color-primary);
    border-radius: var(--radius);
    font-size: 14px;
}

.attach-label {
    color: var(--color-text-sub);
    margin-right: 8px;
}

/* =========================================================
 * Footer
 * ========================================================= */
.app-footer {
    background: var(--color-footer);
    color: var(--color-footer-text);
    margin-top: auto;
}

.footer-inner {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
    padding: 40px 20px 30px;
}

.footer-title {
    font-size: 15px;
    font-weight: 600;
    color: #fff;
    margin-bottom: 14px;
    padding-bottom: 8px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.15);
    letter-spacing: 1px;
}

.footer-item {
    font-size: 13px;
    line-height: 2;
    color: var(--color-footer-text);
}

.footer-bottom {
    border-top: 1px solid rgba(255, 255, 255, 0.1);
    padding: 16px 0;
    text-align: center;
    font-size: 12px;
    color: rgba(255, 255, 255, 0.5);
}

/* =========================================================
 * 响应式
 * ========================================================= */
@media (max-width: 768px) {
    .header-inner {
        height: 64px;
    }

    .brand-logo {
        width: 40px;
        height: 40px;
    }

    .brand-name {
        font-size: 16px;
    }

    .brand-sub {
        font-size: 11px;
    }

    .tab-bar {
        padding: 4px;
        gap: 2px;
    }

    .tab-item {
        min-width: 90px;
        padding: 10px 12px;
        font-size: 13px;
    }

    .notice-grid {
        grid-template-columns: 1fr;
        gap: 12px;
    }

    .notice-card {
        padding: 16px 18px;
    }

    .notice-title {
        font-size: 14px;
    }

    .detail-card {
        padding: 24px 18px;
    }

    .detail-title {
        font-size: 19px;
    }

    .rich-content {
        font-size: 14px;
    }

    .footer-inner {
        grid-template-columns: 1fr;
        gap: 24px;
        padding: 30px 20px 20px;
    }

    .main-wrap {
        padding: 18px 0 30px;
    }
}

@media (max-width: 480px) {
    .container {
        padding: 0 14px;
    }

    .tab-item {
        min-width: 0;
        font-size: 12px;
        padding: 9px 8px;
    }
}
