/* Google Sans Flex (OFL) — tự lưu trong public/fonts, không tải từ CDN. Chia theo unicode-range: trình duyệt chỉ tải file cần dùng.
   Bỏ local(): bản Google Sans Flex tĩnh cài trên máy chỉ có 1 độ đậm, sẽ làm hỏng chữ đậm. */
@font-face {
    font-family: 'Google Sans Flex';
    font-style: normal;
    font-weight: 100 1000;
    font-display: swap;
    src: url('../fonts/GoogleSansFlex-vietnamese.woff2') format('woff2');
    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
@font-face {
    font-family: 'Google Sans Flex';
    font-style: normal;
    font-weight: 100 1000;
    font-display: swap;
    src: url('../fonts/GoogleSansFlex-latin-ext.woff2') format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
    font-family: 'Google Sans Flex';
    font-style: normal;
    font-weight: 100 1000;
    font-display: swap;
    src: url('../fonts/GoogleSansFlex-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Token theo qq-ulis-design-system (A1). Mọi cặp chữ/nền dùng ở đây đã được ContrastTest kiểm tra ≥ 4.5:1.
   Màu nhạt nhất của bảng (--color-text-min) không đạt contrast nên cố ý KHÔNG khai báo: không được dùng cho chữ. */
:root {
    --color-primary: #004780;
    --color-primary-hover: #003660;
    --color-secondary: #f0f4f8;
    --color-bg-primary: #ffffff;
    --color-bg-secondary: #f5f8fa;
    --color-bg-tertiary: #e6eff7;
    --color-bg-dark: #0a131c;
    --color-text-primary: #0a131c;
    --color-text-secondary: #202f3e;
    --color-text-muted: #506275;
    --color-border: #d0dfed;         /* viền trang trí (card, bảng); KHÔNG dùng cho ô nhập */
    --color-border-strong: #748699;  /* viền ô nhập: 3.74:1 trên trắng (WCAG 1.4.11 cần ≥ 3:1) */
    --color-warning-bg: #fbf3e2;
    --color-warning-text: #8a5a12;
    --color-info-bg: #e3ecf5;
    --color-info-text: #155a94;
    --color-danger-bg: #fdf2f2;
    --color-danger-text: #c53030;
    --color-danger-hover: #9b2226;
    --color-focus: var(--color-primary);

    --radius-card: 22px;
    --radius-item: 14px;
    --radius-field: 10px;
    --shadow-card: rgba(0, 71, 128, 0.03) 0 40px 90px -40px;
    --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
    /* Thang chữ duy nhất — mọi cỡ chữ trong file này lấy từ đây, không dùng số lẻ riêng */
    --fs-caption: 0.8125rem;                 /* 13 — nhãn trạng thái, khối debug */
    --fs-small: 0.875rem;                    /* 14 — mô tả, bảng, nhãn, nút, gợi ý */
    --fs-body: 1rem;                         /* 16 — nội dung, ô nhập */
    --fs-lead: 1.125rem;                     /* 18 — đoạn dẫn, tên thương hiệu */
    --fs-h3: clamp(1.0625rem, 1.4vw, 1.125rem); /* 17–18 — tên ứng dụng trong thẻ */
    --fs-h2: clamp(1.1875rem, 1.6vw, 1.375rem); /* 19–22 — tên nhóm */
    --fs-h1: clamp(1.5rem, 2.4vw, 1.875rem);    /* 24–30 — tiêu đề trang quản trị */
    --fs-display: clamp(1.75rem, 3.6vw, 2.5rem); /* 28–40 — tiêu đề lớn ở cổng */
    --fw-regular: 400;
    --fw-semibold: 600;
    --fw-bold: 700;
    --lh-heading: 1.2;
    --lh-body: 1.5;
    --lh-relaxed: 1.625;
    --lh-small: 1.4;

    --touch: 44px; /* vùng chạm tối thiểu trên MỌI kích thước màn hình */
}

* { box-sizing: border-box; }
[hidden] { display: none !important; } /* .card { display:flex } sẽ đè thuộc tính hidden nếu thiếu dòng này */
body { margin: 0; font-family: 'Google Sans Flex', "Segoe UI", Roboto, Arial, sans-serif; font-size: var(--fs-body); line-height: var(--lh-body); background: var(--color-bg-secondary); color: var(--color-text-primary); }
button, input, select, textarea { font-family: inherit; }
h1, h2, h3 { margin: 0; }
a { color: var(--color-primary); text-decoration: none; }
/* Liên kết nằm giữa câu: đậm thay cho gạch chân để vẫn nhận ra; chỉ gạch chân khi rê chuột/focus */
p a, .hint a, .muted a, .breadcrumb a { font-weight: var(--fw-semibold); }
p a:hover, .hint a:hover, .muted a:hover, .breadcrumb a:hover, p a:focus-visible, .hint a:focus-visible, .breadcrumb a:focus-visible { text-decoration: underline; }
:focus-visible { outline: 3px solid var(--color-focus); outline-offset: 2px; }
.muted { color: var(--color-text-muted); margin: 4px 0 16px; font-size: var(--fs-small); line-height: var(--lh-small); }

.visually-hidden { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.skip-link { position: absolute; left: -9999px; top: 8px; z-index: 100; background: var(--color-bg-primary); color: var(--color-primary); padding: 10px 18px; border-radius: 9999px; font-weight: var(--fw-bold); }
.skip-link:focus { left: 16px; }

/* Header kính mờ (A5.1) — chỉ dùng cho header */
.topbar { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 8px 16px; padding: 8px clamp(16px, 3vw, 24px); background: rgba(255, 255, 255, 0.82); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); border-bottom: 1px solid rgba(0, 71, 128, 0.08); position: sticky; top: 0; z-index: 50; }
.brand { display: flex; align-items: center; gap: 10px; }
.brand-logo { flex: none; width: 40px; height: 40px; border-radius: 8px; display: block; }
.brand-text { display: flex; flex-direction: column; min-width: 0; line-height: var(--lh-heading); }
.brand-text strong { font-size: var(--fs-body); font-weight: var(--fw-bold); color: var(--color-primary); }
.brand-text > span { font-size: var(--fs-small); color: var(--color-text-muted); }
.topbar-right { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 12px; }
.nav-link { display: inline-flex; align-items: center; min-height: var(--touch); padding: 0 14px; border: 0; border-radius: 9999px; background: none; color: var(--color-text-secondary); font: inherit; font-size: var(--fs-small); font-weight: var(--fw-semibold); text-decoration: none; cursor: pointer; }
.nav-link:hover { background: var(--color-secondary); }
.nav-user { color: var(--color-text-muted); padding: 0 6px; }
form.inline { display: inline; }
#q { flex: 0 1 280px; min-width: 0; width: 100%; min-height: var(--touch); padding: 0 16px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-field); background: var(--color-bg-primary); color: var(--color-text-primary); font: inherit; }

.wrap { max-width: 80rem; margin: 0 auto; padding: clamp(16px, 3vw, 24px); }
.wrap:focus { outline: none; }
/* Trang chủ: phần đầu gọn (tiêu đề + ô tìm kiếm), lưới thẻ đồng đều cả thẻ là liên kết, nhóm phụ dạng danh sách */
.hero { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px 32px; margin-bottom: clamp(16px, 2.5vw, 28px); padding: clamp(20px, 3.5vw, 32px) clamp(20px, 4vw, 36px); background: radial-gradient(circle at 92% 0%, rgba(0, 71, 128, 0.10), transparent 55%), linear-gradient(180deg, var(--color-bg-tertiary), var(--color-bg-primary)); border: 1px solid var(--color-border); border-radius: var(--radius-card); box-shadow: var(--shadow-card); }
.hero h1 { margin: 0 0 4px; font-size: var(--fs-display); font-weight: var(--fw-bold); line-height: var(--lh-heading); letter-spacing: -0.03em; color: var(--color-primary); }
.hero .hello { font-weight: var(--fw-semibold); font-size: var(--fs-lead); margin: 0 0 2px; }
.hero p { margin: 0; color: var(--color-text-muted); max-width: 42rem; line-height: var(--lh-relaxed); }
.hero-search { flex: 1 1 18rem; max-width: 26rem; }

.layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(260px, 320px); gap: clamp(20px, 3vw, 32px); align-items: start; }
.layout-single { grid-template-columns: minmax(0, 1fr); }
.group { margin-bottom: 32px; }
.group-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 12px; }
.group h2, .panel h2, .group-title { font-size: var(--fs-h2); font-weight: var(--fw-bold); line-height: var(--lh-heading); letter-spacing: -0.01em; color: var(--color-primary); }
.group-count { font-size: var(--fs-small); color: var(--color-text-muted); }
.group-desc { margin: 4px 0 14px; }
.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr)); gap: 12px; grid-auto-rows: 1fr; }
.list { display: grid; gap: 2px; grid-auto-rows: 1fr; }
.panel { background: var(--color-bg-primary); border: 1px solid var(--color-border); border-radius: var(--radius-card); padding: clamp(16px, 2.5vw, 24px); box-shadow: var(--shadow-card); }

.card { display: flex; align-items: center; gap: 14px; min-height: 76px; padding: 12px 16px; background: var(--color-bg-primary); border: 1px solid var(--color-border); border-radius: var(--radius-item); box-shadow: var(--shadow-card); color: inherit; text-decoration: none; transition: transform 0.25s var(--ease-out), box-shadow 0.25s ease, border-color 0.25s ease, background 0.2s ease; }
a.card:hover { transform: translateY(-2px); border-color: rgba(0, 71, 128, 0.3); box-shadow: 0 14px 30px -10px rgba(0, 71, 128, 0.12), 0 0 0 1px rgba(0, 71, 128, 0.05); }
a.card:hover .card-go { color: var(--color-primary); }
a.card:focus-visible { outline: 3px solid var(--color-focus); outline-offset: 2px; }

.icon { flex: 0 0 56px; height: 56px; border-radius: 12px; display: grid; place-items: center; font-size: 28px; font-weight: var(--fw-bold); color: var(--color-primary); overflow: hidden; }
.icon img { width: 36px; height: 36px; object-fit: contain; }
.card .icon { flex: 0 0 48px; height: 48px; font-size: 24px; }
.info { flex: 1 1 auto; min-width: 0; }
.info h3 { margin: 0; overflow-wrap: anywhere; font-size: var(--fs-h3); font-weight: var(--fw-semibold); line-height: var(--lh-heading); }
.info p { margin: 2px 0 0; color: var(--color-text-muted); font-size: var(--fs-small); line-height: var(--lh-small); overflow-wrap: anywhere; }
.card-go { flex: none; margin-left: auto; color: var(--color-text-muted); font-size: var(--fs-lead); line-height: 1; }
.card-soon { background: var(--color-bg-secondary); border-style: dashed; box-shadow: none; }
.badge { flex: none; margin-left: auto; padding: 2px 10px; border-radius: 9999px; background: var(--color-bg-tertiary); color: var(--color-text-muted); font-size: var(--fs-caption); font-weight: var(--fw-semibold); white-space: nowrap; }

/* Nhóm phụ (cột phải): hàng gọn trong 1 khung, không viền từng thẻ */
.panel .card { min-height: 0; padding: 8px 10px; border-color: transparent; border-radius: 10px; box-shadow: none; }
.panel a.card:hover { background: var(--color-secondary); transform: none; box-shadow: none; }
.panel .card .icon { flex-basis: 36px; height: 36px; font-size: 20px; border-radius: 10px; }
.panel .card .icon img { width: 22px; height: 22px; }
.panel .card-soon { background: none; border-style: solid; }

/* Nút bo pill (A4) — chỉ nút, không lan sang ô nhập/bảng */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: var(--touch); min-width: var(--touch); padding: 0 20px; border: 1px solid transparent; border-radius: 9999px; background: var(--color-primary); color: #fff; font: inherit; font-size: var(--fs-small); font-weight: var(--fw-semibold); line-height: 1.2; text-decoration: none; white-space: nowrap; cursor: pointer; box-shadow: 0 10px 24px -10px rgba(0, 71, 128, 0.5); transition: background 0.2s ease, transform 0.25s var(--ease-out); }
.btn:hover { background: var(--color-primary-hover); }
.btn-light { background: var(--color-bg-primary); border-color: var(--color-border); color: var(--color-text-primary); box-shadow: none; }
.btn-light:hover { background: var(--color-secondary); transform: translateY(-2px); }
.btn-danger { background: var(--color-danger-text); box-shadow: none; }
.btn-danger:hover { background: var(--color-danger-hover); }
.btn-disabled, .btn-disabled:hover { background: var(--color-bg-tertiary); color: var(--color-text-muted); box-shadow: none; cursor: not-allowed; transform: none; }

.foot a { display: inline-flex; align-items: center; min-height: var(--touch); }
.foot { text-align: center; color: var(--color-text-muted); font-size: var(--fs-small); padding: 24px; }

/* Quản trị */
.table-wrap { overflow-x: auto; background: var(--color-bg-primary); border: 1px solid var(--color-border); border-radius: 12px; box-shadow: var(--shadow-card); }
table { width: 100%; min-width: 780px; border-collapse: collapse; }
th, td { padding: 10px 14px; border-bottom: 1px solid var(--color-border); text-align: left; font-size: var(--fs-small); vertical-align: middle; }
th { background: var(--color-secondary); color: var(--color-text-secondary); font-weight: var(--fw-semibold); }
tr:last-child td { border-bottom: 0; }
.col-icon { width: 60px; }
.col-order { width: 170px; }
td .icon { width: 36px; height: 36px; flex-basis: 36px; font-size: 18px; }
td .icon img { width: 24px; height: 24px; }
td form { display: inline; }
.row-actions { display: flex; flex-wrap: nowrap; gap: 8px; }

.page-title { font-size: var(--fs-h1); font-weight: var(--fw-bold); line-height: var(--lh-heading); letter-spacing: -0.02em; color: var(--color-primary); }
.form { background: var(--color-bg-primary); border: 1px solid var(--color-border); border-radius: var(--radius-card); padding: clamp(20px, 3vw, 32px); max-width: 640px; box-shadow: var(--shadow-card); }
.form-title { margin-bottom: 8px; }
.form-login { margin: clamp(24px, 8vh, 64px) auto; max-width: 400px; }
.login-logo { display: block; width: 72px; height: 72px; border-radius: 12px; margin: 0 auto 12px; }
.form label { display: block; font-weight: var(--fw-semibold); margin: 16px 0 6px; font-size: var(--fs-small); }
.form input[type=text], .form input[type=password], .form input[type=number], .form select { width: 100%; min-height: var(--touch); padding: 10px 14px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-field); background: var(--color-bg-primary); color: var(--color-text-primary); font: inherit; font-size: var(--fs-body); }
.form input[type=color] { width: 88px; min-height: var(--touch); padding: 4px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-field); background: var(--color-bg-primary); cursor: pointer; }
.form input:focus-visible, .form select:focus-visible { border-color: var(--color-primary); }
.form .check { display: flex; align-items: center; gap: 10px; min-height: var(--touch); margin: 4px 0; font-weight: var(--fw-regular); font-size: var(--fs-body); }
.form input[type=checkbox] { width: 22px; height: 22px; margin: 0; accent-color: var(--color-primary); }
.form .hint { color: var(--color-text-muted); font-size: var(--fs-small); line-height: var(--lh-small); margin-top: 6px; }
.actions { margin-top: 24px; display: flex; flex-wrap: wrap; gap: 12px; }
.actions-flush { margin: 0; }
.alert { display: flex; align-items: flex-start; gap: 10px; background: var(--color-danger-bg); color: var(--color-danger-text); border: 1px solid rgba(197, 48, 48, 0.25); padding: 12px 16px; border-radius: 12px; margin-bottom: 16px; line-height: 1.4; }
.alert::before { content: "⚠"; content: "⚠" / ""; flex: none; }
.toolbar { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 12px; margin: 24px 0 12px; }
.flush { margin: 0; }

@media (max-width: 900px) {
    /* Đổi cấu trúc thật: 2 cột → 1 cột, ẩn tên dài cạnh logo. Font/padding co giãn bằng clamp(), không chỉnh ở đây. */
    .layout { grid-template-columns: minmax(0, 1fr); }
    .brand-text > span { display: none; }
}

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { transition: none !important; animation: none !important; scroll-behavior: auto !important; }
    a.card:hover, .btn-light:hover { transform: none; }
}

/* UX: breadcrumb, lỗi theo ô, dấu bắt buộc, thông báo, empty state, trang lỗi */
.breadcrumb ol { display: flex; flex-wrap: wrap; align-items: center; gap: 0 4px; margin: 0 0 8px; padding: 0; list-style: none; font-size: var(--fs-small); color: var(--color-text-muted); }
.breadcrumb li + li::before { content: "›"; content: "›" / ""; margin-right: 4px; }
.breadcrumb a { display: inline-flex; align-items: center; min-height: var(--touch); padding: 0 4px; }
.breadcrumb [aria-current="page"] { color: var(--color-text-primary); font-weight: var(--fw-semibold); }

.req { color: var(--color-danger-text); }
.form-note { margin: 0 0 4px; color: var(--color-text-muted); font-size: var(--fs-small); }
.field-error { margin-top: 6px; color: var(--color-danger-text); font-size: var(--fs-small); line-height: var(--lh-small); font-weight: var(--fw-semibold); }
.field-error:empty { display: none; }
.field-error:not(:empty)::before { content: "⚠ "; content: "⚠ " / ""; }
.form input[aria-invalid="true"], .form select[aria-invalid="true"] { border-color: var(--color-danger-text); border-width: 2px; }
.form input[type=checkbox][aria-invalid="true"] { outline: 2px solid var(--color-danger-text); }

.alert-info { background: var(--color-info-bg); color: var(--color-info-text); border-color: rgba(29, 112, 184, 0.3); }
.alert-info::before { content: "✓"; content: "✓" / ""; font-weight: var(--fw-bold); }

.empty { background: var(--color-bg-primary); border: 1px dashed var(--color-border-strong); border-radius: var(--radius-item); padding: clamp(20px, 3vw, 32px); margin-bottom: 24px; }
.empty .muted { margin: 4px 0 16px; max-width: 42rem; }
.empty-title { margin: 0; font-size: var(--fs-lead); font-weight: var(--fw-semibold); line-height: var(--lh-heading); }

.status { display: inline-flex; align-items: center; min-height: 28px; padding: 0 12px; border-radius: 9999px; font-size: var(--fs-caption); font-weight: var(--fw-semibold); white-space: nowrap; }
.status-on { background: var(--color-info-bg); color: var(--color-info-text); }
.status-off { background: var(--color-bg-tertiary); color: var(--color-text-muted); }

.error-page { max-width: 36rem; margin: clamp(16px, 6vh, 56px) auto; text-align: center; }
.error-page .login-logo { margin-bottom: 16px; }
.error-page .lead { font-size: var(--fs-lead); line-height: var(--lh-relaxed); margin: 12px 0; }
.error-page .actions { justify-content: center; }
.debug { text-align: left; overflow: auto; background: var(--color-bg-dark); color: #fff; padding: 16px; border-radius: 12px; font-size: var(--fs-caption); }

/* Captcha đăng nhập */
.captcha { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-bottom: 12px; }
.captcha svg { display: block; max-width: 100%; height: auto; border: 1px solid var(--color-border); border-radius: var(--radius-field); }
.captcha-input { text-transform: uppercase; letter-spacing: 0.35em; font-weight: var(--fw-bold); max-width: 14rem; }

/* Chọn icon cho ứng dụng */
.icon .icon-logo, .icon img.icon-logo { width: 100%; height: 100%; object-fit: cover; }
.icon-picker { min-width: 0; margin: 16px 0 0; padding: 0; border: 0; }
.icon-picker legend { padding: 0; margin-bottom: 8px; font-size: var(--fs-small); font-weight: var(--fw-semibold); }
.icon-picker .picker-note { font-weight: var(--fw-regular); color: var(--color-text-muted); }
.icon-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(92px, 1fr)); gap: 8px; max-height: 340px; overflow-y: auto; padding: 4px; }
.form label.icon-option { position: relative; display: block; margin: 0; font-weight: var(--fw-regular); cursor: pointer; }
.icon-face { display: flex; flex-direction: column; align-items: center; gap: 6px; min-height: 92px; padding: 10px 6px; border: 1px solid var(--color-border-strong); border-radius: 12px; background: var(--color-bg-primary); text-align: center; }
.icon-glyph { display: grid; place-items: center; width: 40px; height: 40px; font-size: 28px; line-height: 1; }
.icon-name { font-size: var(--fs-caption); line-height: var(--lh-small); color: var(--color-text-muted); }
.icon-option:hover .icon-face { background: var(--color-secondary); }
.icon-option input:checked + .icon-face { border-color: var(--color-primary); box-shadow: 0 0 0 2px var(--color-primary); background: var(--color-info-bg); }
.icon-option input:checked + .icon-face .icon-name { color: var(--color-info-text); font-weight: var(--fw-semibold); }
.icon-option input:focus-visible + .icon-face { outline: 3px solid var(--color-focus); outline-offset: 2px; }
.icon-custom { display: grid; gap: 4px; margin-top: 12px; }

/* Ô nhập thứ tự ở danh mục */
.order-form { display: flex; align-items: center; gap: 8px; }
.order-input { width: 5.5rem; min-height: var(--touch); padding: 0 10px; border: 1px solid var(--color-border-strong); border-radius: var(--radius-field); background: var(--color-bg-primary); color: var(--color-text-primary); font: inherit; font-size: var(--fs-body); text-align: center; }
.order-input[aria-invalid="true"] { border-color: var(--color-danger-text); border-width: 2px; }
.order-status { font-size: var(--fs-caption); font-weight: var(--fw-semibold); color: var(--color-info-text); white-space: nowrap; }
.order-status:empty { display: none; }
.order-status.is-error { color: var(--color-danger-text); white-space: normal; }

/* Ô nhập thứ tự của nhóm (ở đầu mỗi nhóm trong danh mục) */
.group-order { flex-wrap: wrap; }
.order-label { font-size: var(--fs-small); font-weight: var(--fw-semibold); color: var(--color-text-muted); white-space: nowrap; }

/* Khối Hỗ trợ & liên hệ ở cổng: mỗi liên hệ là 1 hàng (bấm để gọi / soạn thư / mở trang) */
.contact-list { display: grid; gap: 2px; margin: 0; padding: 0; list-style: none; }
.contact { display: flex; align-items: center; gap: 12px; min-height: var(--touch); padding: 8px 10px; border-radius: 10px; color: inherit; text-decoration: none; }
a.contact:hover { background: var(--color-secondary); }
a.contact:focus-visible { outline: 3px solid var(--color-focus); outline-offset: 2px; }
.contact-icon { flex: 0 0 36px; height: 36px; display: grid; place-items: center; border-radius: 10px; background: var(--color-bg-tertiary); font-size: 18px; line-height: 1; }
.contact-text { min-width: 0; }
.contact-label { display: block; font-size: var(--fs-caption); line-height: var(--lh-small); color: var(--color-text-muted); }
.contact-value { display: block; font-size: var(--fs-small); font-weight: var(--fw-semibold); line-height: var(--lh-small); overflow-wrap: anywhere; }
.form-block { margin-bottom: 8px; }
