/*!
 * Theme newnet-v2 — Trang dịch vụ thiết kế website (page layout web_design). Prefix: ws-
 * Dùng kèm css/svc-pricing.css (kit vp-: hero, thẻ giá, dự toán, tính năng, FAQ).
 */

/* ============================== HERO: thiết bị ============================== */
.ws-devices { position: relative; padding: 0 0 var(--nn-space-10) 0; }
.ws-browser { border-radius: var(--nn-radius-xl); background: #fff; overflow: hidden; box-shadow: 0 50px 100px -40px rgba(0, 0, 0, .75), 0 0 0 1px rgba(255, 255, 255, .1); }
.ws-browser .vp-monitor__bar { border-bottom-color: var(--nn-line); color: var(--nn-muted); }
.ws-site { padding: var(--nn-space-4) var(--nn-space-5) var(--nn-space-5); display: grid; gap: var(--nn-space-4); }
.ws-site span, .ws-site b, .ws-site em, .ws-site i, .ws-phone span, .ws-phone b, .ws-phone em, .ws-phone i { display: block; border-radius: var(--nn-radius-pill); background: var(--nn-surface-2); }
.ws-site__nav { display: flex; align-items: center; gap: var(--nn-space-3); }
.ws-site__nav b { width: 70px; height: 14px; background: var(--nn-gradient); }
.ws-site__nav span { width: 40px; height: 7px; }
.ws-site__nav span:first-of-type { margin-left: auto; }
.ws-site__nav em { width: 64px; height: 22px; background: var(--nn-ink); }
.ws-site__hero { display: grid; grid-template-columns: 1.1fr .9fr; gap: var(--nn-space-5); align-items: center; padding: var(--nn-space-4); border-radius: var(--nn-radius-lg); background: linear-gradient(135deg, var(--nn-brand-50), var(--nn-accent-50)); }
.ws-site__hero > div { display: grid; gap: 8px; }
.ws-site__hero span { height: 8px; background: color-mix(in srgb, var(--nn-ink) 12%, transparent); }
.ws-site__hero span.is-lg { height: 14px; background: color-mix(in srgb, var(--nn-ink) 70%, transparent); }
.ws-site__hero span.is-short { width: 65%; }
.ws-site__hero em { width: 92px; height: 26px; margin-top: 6px; background: var(--nn-gradient); box-shadow: 0 8px 16px -8px var(--nn-brand); }
.ws-site__hero > i { aspect-ratio: 1; border-radius: var(--nn-radius-lg); background: radial-gradient(circle at 30% 30%, var(--nn-glow), var(--nn-brand) 55%, var(--nn-accent)); animation: ws-morph 8s ease-in-out infinite; }
@keyframes ws-morph { 50% { border-radius: 42% 58% 60% 40% / 45% 40% 60% 55%; transform: rotate(6deg); } }
.ws-site__cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--nn-space-3); }
.ws-site__cards span { height: 64px; border-radius: var(--nn-radius-md); background: var(--nn-surface); border: 1px solid var(--nn-line); }

.ws-phone {
    position: absolute; right: -18px; bottom: 0; width: 150px; padding: 8px; border-radius: 26px; background: var(--nn-ink);
    box-shadow: 0 40px 70px -30px rgba(0, 0, 0, .8), 0 0 0 1px rgba(255, 255, 255, .12); animation: vp-float 7s ease-in-out infinite;
}
.ws-phone__screen { display: grid; gap: 7px; padding: 14px 10px 12px; border-radius: 19px; background: #fff; }
.ws-phone__screen b { width: 50px; height: 9px; background: var(--nn-gradient); }
.ws-phone__screen i { height: 66px; border-radius: 12px; background: radial-gradient(circle at 30% 30%, var(--nn-glow), var(--nn-brand) 60%, var(--nn-accent)); }
.ws-phone__screen span { height: 7px; }
.ws-phone__screen span.is-short { width: 60%; }
.ws-phone__screen em { width: 70px; height: 18px; background: var(--nn-ink); }
.ws-phone__cards { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.ws-phone__cards span { height: 40px; border-radius: 8px; }
.ws-devices .vp-chip--a { left: -26px; top: 40%; }
.ws-devices .vp-chip--b { right: auto; left: 18%; bottom: 6px; animation-delay: -2s; }
.ws-devices .vp-chip--b .nn-icon { color: var(--nn-success); }
.ws-chip--c { right: -12px; top: -16px; animation-delay: -4s; }
.ws-chip--c .nn-icon { color: var(--nn-primary); }
@media (max-width: 575.98px) { .ws-phone { width: 112px; right: -6px; } .ws-site__cards span { height: 44px; } }

/* ============================== Loại website ============================== */
.ws-types { display: grid; gap: var(--nn-space-5); grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); margin-top: var(--nn-space-10); }
@media (max-width: 575.98px) { .ws-types { grid-template-columns: 1fr; } }
.ws-type {
    position: relative; display: flex; flex-direction: column; padding: var(--nn-space-7); border-radius: var(--nn-radius-xl); background: #fff; border: 1px solid var(--nn-border);
    transition: transform .35s var(--vp-ease), box-shadow .35s, border-color .3s;
}
.ws-type::before { content: ""; position: absolute; inset: 0 0 auto; height: 3px; border-radius: var(--nn-radius-xl) var(--nn-radius-xl) 0 0; background: var(--nn-gradient); transform: scaleX(0); transform-origin: left; transition: transform .45s var(--vp-ease); }
.ws-type:hover { transform: translateY(-6px); border-color: var(--nn-brand-200); box-shadow: 0 30px 60px -36px color-mix(in srgb, var(--nn-brand-900) 45%, transparent); }
.ws-type:hover::before { transform: scaleX(1); }
.ws-type__icon { width: 52px; height: 52px; border-radius: var(--nn-radius-md); display: grid; place-items: center; font-size: 24px; color: var(--nn-primary); background: var(--nn-brand-50); transition: background .3s, color .3s, transform .35s var(--vp-ease); }
.ws-type:hover .ws-type__icon { color: #fff; background: var(--nn-gradient); transform: rotate(-6deg) scale(1.05); }
.ws-type__hot { position: absolute; top: var(--nn-space-6); right: var(--nn-space-6); display: inline-flex; align-items: center; gap: 4px; padding: 3px 9px; border-radius: var(--nn-radius-pill); font-size: var(--nn-text-2xs); font-weight: var(--nn-weight-bold); color: #fff; background: var(--vp-sale-grad); }
.ws-type h3 { margin: var(--nn-space-5) 0 var(--nn-space-2); font-size: var(--nn-text-lg); font-weight: var(--nn-weight-bold); color: var(--nn-ink); }
.ws-type p { margin: 0 0 var(--nn-space-5); font-size: var(--nn-text-sm); color: var(--nn-muted); line-height: var(--nn-leading-relaxed); }
.ws-type__foot { display: flex; align-items: center; justify-content: space-between; margin-top: auto; padding-top: var(--nn-space-4); border-top: 1px dashed var(--nn-border); font-size: var(--nn-text-sm); color: var(--nn-muted); }
.ws-type__foot strong { font-size: var(--nn-text-md); color: var(--nn-ink); }
.ws-type__go { width: 38px; height: 38px; border: 0; border-radius: var(--nn-radius-round); display: grid; place-items: center; cursor: pointer; font-size: 18px; color: var(--nn-primary); background: var(--nn-brand-50); transition: background .25s, color .25s, transform .3s var(--vp-ease); }
.ws-type__go:hover, .ws-type__go:focus-visible { color: #fff; background: var(--nn-primary); transform: rotate(45deg); outline: 0; }

/* ============================== Quy trình ============================== */
.ws-process { list-style: none; margin: var(--nn-space-10) 0 0; padding: 0; display: grid; gap: var(--nn-space-5); grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); counter-reset: none; }
@media (min-width: 1100px) { .ws-process { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 575.98px) { .ws-process { grid-template-columns: 1fr; } }
.ws-step { position: relative; padding: var(--nn-space-6); border-radius: var(--nn-radius-xl); background: #fff; border: 1px solid var(--nn-border); overflow: hidden; transition: border-color .3s, box-shadow .35s; }
.ws-step:hover { border-color: var(--nn-brand-200); box-shadow: 0 24px 48px -32px color-mix(in srgb, var(--nn-brand-900) 45%, transparent); }
.ws-step__top { display: flex; align-items: center; justify-content: space-between; }
.ws-step__icon { width: 46px; height: 46px; border-radius: var(--nn-radius-md); display: grid; place-items: center; font-size: 21px; color: #fff; background: var(--nn-gradient); box-shadow: 0 10px 20px -10px var(--nn-brand); }
.ws-step__num { font-size: 44px; font-weight: var(--nn-weight-extrabold); line-height: 1; letter-spacing: -.04em; color: transparent; -webkit-text-stroke: 1.5px var(--nn-brand-200); transition: color .3s; }
.ws-step:hover .ws-step__num { color: var(--nn-brand-50); }
.ws-step h3 { margin: var(--nn-space-5) 0 var(--nn-space-2); font-size: var(--nn-text-lg); font-weight: var(--nn-weight-bold); color: var(--nn-ink); }
.ws-step p { margin: 0 0 var(--nn-space-4); font-size: var(--nn-text-sm); color: var(--nn-muted); }
.ws-step__meta { display: flex; flex-wrap: wrap; gap: var(--nn-space-2); }
.ws-step__meta span { display: inline-flex; align-items: center; gap: 5px; padding: 4px var(--nn-space-2-5); border-radius: var(--nn-radius-pill); font-size: var(--nn-text-xs); font-weight: var(--nn-weight-medium); color: var(--nn-text); background: var(--nn-surface); }
.ws-step__meta span:first-child { color: var(--nn-primary); background: var(--nn-brand-50); }
.ws-step__meta .nn-icon { font-size: 14px; }

/* ============================== Kho giao diện mẫu ============================== */
.ws-head { display: grid; gap: var(--nn-space-2) var(--nn-space-10); align-items: end; }
@media (min-width: 992px) { .ws-head { grid-template-columns: auto minmax(0, 460px); justify-content: space-between; } .ws-head .vp-muted { margin: 0 0 var(--nn-space-4); } }
.ws-filter { display: flex; gap: var(--nn-space-2); margin: var(--nn-space-6) 0 var(--nn-space-8); overflow-x: auto; scrollbar-width: none; padding-bottom: 2px; }
.ws-filter::-webkit-scrollbar { display: none; }
.ws-filter__btn {
    flex: none; display: inline-flex; align-items: center; gap: var(--nn-space-2); padding: var(--nn-space-2) var(--nn-space-4); border-radius: var(--nn-radius-pill); cursor: pointer;
    font: inherit; font-size: var(--nn-text-sm); font-weight: var(--nn-weight-semibold); color: var(--nn-muted); background: #fff; border: 1px solid var(--nn-border); white-space: nowrap;
    transition: color .2s, background-color .2s, border-color .2s;
}
.ws-filter__btn span { min-width: 22px; padding: 0 6px; border-radius: var(--nn-radius-pill); font-size: var(--nn-text-2xs); text-align: center; color: var(--nn-muted); background: var(--nn-surface-2); }
.ws-filter__btn:hover { color: var(--nn-ink); border-color: var(--nn-border-strong); }
.ws-filter__btn.is-active { color: #fff; background: var(--nn-ink); border-color: var(--nn-ink); }
.ws-filter__btn.is-active span { color: var(--nn-ink); background: #fff; }
.ws-filter__btn:focus-visible { outline: 2px solid var(--nn-brand-300); outline-offset: 2px; }

.ws-templates { display: grid; gap: var(--nn-space-8) var(--nn-space-6); grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); }
.ws-tpl { --c: var(--nn-brand); display: flex; flex-direction: column; gap: var(--nn-space-4); }
.ws-tpl[hidden] { display: none; }
.ws-project__screen { position: relative; border-radius: var(--nn-radius-lg); overflow: hidden; background: #fff; border: 1px solid var(--nn-border); box-shadow: 0 24px 48px -32px color-mix(in srgb, var(--c) 60%, transparent); transition: transform .4s var(--vp-ease), box-shadow .4s; }
.ws-tpl:hover .ws-project__screen, .ws-tpl:focus-within .ws-project__screen { transform: translateY(-6px); box-shadow: 0 36px 60px -32px color-mix(in srgb, var(--c) 70%, transparent); }
.ws-project__bar { display: flex; align-items: center; gap: 5px; padding: 9px 12px; background: var(--nn-surface); border-bottom: 1px solid var(--nn-line); }
.ws-project__bar i { width: 8px; height: 8px; border-radius: var(--nn-radius-round); background: var(--nn-border-strong); }
.ws-project__bar span { margin-left: var(--nn-space-2); padding: 2px 10px; border-radius: var(--nn-radius-pill); background: #fff; font-size: 10px; color: var(--nn-muted); }
.ws-project__view { height: 240px; overflow: hidden; }
.ws-tpl__badge { position: absolute; top: 6px; right: 10px; z-index: 1; padding: 3px 10px; border-radius: var(--nn-radius-pill); font-size: var(--nn-text-2xs); font-weight: var(--nn-weight-bold); color: #fff; background: var(--vp-sale-grad); box-shadow: 0 6px 14px -6px var(--vp-sale); }
.ws-tpl__badge.is-new { background: var(--nn-gradient); box-shadow: 0 6px 14px -6px var(--nn-brand); }
/* Nút hành động hiện khi rê chuột / focus; trên màn hình cảm ứng luôn hiện ở đáy khung */
.ws-tpl__actions {
    position: absolute; inset: auto 0 0; z-index: 1; display: flex; justify-content: center; gap: var(--nn-space-2); padding: var(--nn-space-8) var(--nn-space-3) var(--nn-space-4);
    background: linear-gradient(transparent, color-mix(in srgb, var(--nn-ink) 70%, transparent));
    opacity: 0; transform: translateY(10px); transition: opacity .3s, transform .35s var(--vp-ease);
}
.ws-tpl:hover .ws-tpl__actions, .ws-tpl:focus-within .ws-tpl__actions { opacity: 1; transform: none; }
@media (hover: none) { .ws-tpl__actions { opacity: 1; transform: none; } }
.ws-tpl__body { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--nn-space-3); }
.ws-tpl__body small { color: var(--nn-muted); font-size: var(--nn-text-xs); }
.ws-tpl__body h3 { margin: 2px 0 0; font-size: var(--nn-text-lg); font-weight: var(--nn-weight-bold); color: var(--nn-ink); }
.ws-tpl__price { flex: none; padding-top: 2px; font-size: var(--nn-text-xs); color: var(--nn-muted); text-align: right; }
.ws-tpl__price strong { display: block; font-size: var(--nn-text-md); color: var(--nn-ink); }
.ws-project__tags { list-style: none; display: flex; flex-wrap: wrap; gap: 6px; margin: calc(-1 * var(--nn-space-2)) 0 0; padding: 0; }
.ws-project__tags li { display: inline-flex; align-items: center; gap: 4px; padding: 2px 9px; border-radius: var(--nn-radius-pill); font-size: var(--nn-text-2xs); color: var(--nn-muted); border: 1px solid var(--nn-border); }
.ws-project__tags .nn-icon { font-size: 12px; }
.ws-tpl--custom {
    justify-content: center; align-items: flex-start; gap: var(--nn-space-3); padding: var(--nn-space-8); border-radius: var(--nn-radius-xl); color: var(--nn-on-brand-muted);
    background: radial-gradient(120% 90% at 100% 0%, color-mix(in srgb, var(--nn-accent) 45%, transparent), transparent 60%), var(--nn-bg-brand);
}
.ws-tpl--custom h3 { margin: var(--nn-space-2) 0 0; font-size: var(--nn-text-xl); font-weight: var(--nn-weight-bold); color: #fff; }
.ws-tpl--custom p { margin: 0 0 var(--nn-space-3); font-size: var(--nn-text-sm); }
.ws-tpl__custom-icon { width: 52px; height: 52px; border-radius: var(--nn-radius-md); display: grid; place-items: center; font-size: 24px; color: #fff; background: var(--vp-sale-grad); box-shadow: 0 12px 24px -12px var(--vp-sale); }
.ws-tpl__empty { display: flex; align-items: center; justify-content: center; gap: var(--nn-space-2); padding: var(--nn-space-8); color: var(--nn-muted); }
.ws-tpl__empty[hidden] { display: none; }

/* Khung xem trước (partials/svc/template-mock) — rê chuột để "cuộn" trang */
.ws-mock { display: grid; gap: 12px; padding: 14px; transition: transform 2.4s cubic-bezier(.45, 0, .2, 1); }
.ws-tpl:hover .ws-mock { transform: translateY(calc(-100% + 240px)); }
.ws-mock span, .ws-mock em, .ws-mock i, .ws-mock b, .ws-mock u, .ws-mock s { display: block; }
.ws-mock__nav { display: flex; align-items: center; gap: 10px; }
.ws-mock__nav b { font-size: 12px; color: var(--c); white-space: nowrap; }
.ws-mock__nav span { width: 28px; height: 6px; border-radius: var(--nn-radius-pill); background: var(--nn-surface-2); }
.ws-mock__nav span:first-of-type { margin-left: auto; }
.ws-mock__nav em { width: 46px; height: 18px; border-radius: var(--nn-radius-pill); background: var(--c); }
.ws-mock__hero { display: grid; gap: 8px; align-content: center; height: 130px; padding: 16px; border-radius: 10px; background: linear-gradient(135deg, color-mix(in srgb, var(--c) 85%, #000), var(--c) 60%, color-mix(in srgb, var(--c) 55%, #fff)); }
.ws-mock__hero span { width: 70%; height: 10px; border-radius: var(--nn-radius-pill); background: rgba(255, 255, 255, .9); }
.ws-mock__hero span + span { width: 45%; height: 7px; background: rgba(255, 255, 255, .6); }
.ws-mock__hero em { width: 64px; height: 20px; margin-top: 4px; border-radius: var(--nn-radius-pill); background: #fff; }
.ws-mock__hero--short { height: 90px; }
.ws-mock__hero--center { height: 150px; justify-items: center; }
.ws-mock__hero--search { height: 140px; }
.ws-mock__hero--dark, .ws-mock__hero--split { display: grid; grid-template-columns: 1fr 90px; align-items: center; gap: 12px; }
.ws-mock__hero--dark { background: linear-gradient(135deg, var(--nn-ink), color-mix(in srgb, var(--c) 45%, var(--nn-ink))); }
.ws-mock__hero--dark > div, .ws-mock__hero--split > div { display: grid; gap: 8px; }
.ws-mock__hero--dark b { width: 86px; height: 86px; border-radius: var(--nn-radius-round); background: radial-gradient(circle at 35% 35%, color-mix(in srgb, var(--c) 40%, #fff), var(--c)); box-shadow: 0 0 0 6px rgba(255, 255, 255, .1); }
.ws-mock__hero--split b { height: 96px; border-radius: 10px; background: #fff; box-shadow: 0 10px 20px -10px rgba(0, 0, 0, .4); }
.ws-mock__search { display: flex; gap: 6px; padding: 6px; margin-top: 6px; border-radius: 8px; background: #fff; }
.ws-mock__search i { flex: 1; height: 14px; border-radius: 4px; background: var(--nn-surface-2); }
.ws-mock__search em { width: 40px; height: 14px; margin: 0; border-radius: 4px; background: var(--c); }
.ws-mock__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.ws-mock__grid--2 { grid-template-columns: 1fr 1fr; }
.ws-mock__grid span { height: 78px; border-radius: 8px; background: color-mix(in srgb, var(--c) 12%, #fff); }
.ws-mock__band { height: 60px; border-radius: 8px; background: color-mix(in srgb, var(--c) 22%, #fff); }
.ws-mock__band--quote { display: grid; gap: 6px; align-content: center; justify-items: center; }
.ws-mock__band--quote span { width: 60%; height: 7px; border-radius: var(--nn-radius-pill); background: color-mix(in srgb, var(--c) 45%, #fff); }
.ws-mock__band--quote span + span { width: 30%; }
.ws-mock__chips { display: flex; gap: 6px; }
.ws-mock__chips i { width: 48px; height: 16px; border-radius: var(--nn-radius-pill); background: color-mix(in srgb, var(--c) 14%, #fff); }
.ws-mock__chips i:first-child { background: var(--c); }
.ws-mock__products { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.ws-mock__products div { display: grid; gap: 5px; }
.ws-mock__products span { height: 54px; border-radius: 6px; background: color-mix(in srgb, var(--c) 14%, #fff); }
.ws-mock__products i { height: 5px; border-radius: var(--nn-radius-pill); background: var(--nn-surface-2); }
.ws-mock__products b { width: 55%; height: 6px; border-radius: var(--nn-radius-pill); background: var(--c); }
.ws-mock__features { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.ws-mock__features div { display: grid; gap: 6px; justify-items: center; padding: 10px 6px; border-radius: 8px; border: 1px solid var(--nn-line); }
.ws-mock__features i { width: 24px; height: 24px; border-radius: 7px; background: var(--c); }
.ws-mock__features span { width: 80%; height: 5px; border-radius: var(--nn-radius-pill); background: var(--nn-surface-2); }
.ws-mock__form { display: grid; gap: 6px; padding: 12px; border-radius: 8px; background: var(--nn-surface); }
.ws-mock__form span { height: 16px; border-radius: 5px; background: #fff; border: 1px solid var(--nn-line); }
.ws-mock__form em { height: 18px; border-radius: 5px; background: var(--c); }
.ws-mock__cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.ws-mock__cards div { display: grid; gap: 5px; padding-bottom: 6px; }
.ws-mock__cards span { height: 62px; border-radius: 6px; background: color-mix(in srgb, var(--c) 16%, #fff); }
.ws-mock__cards i { height: 5px; border-radius: var(--nn-radius-pill); background: var(--nn-surface-2); }
.ws-mock__cards i.is-short { width: 50%; background: color-mix(in srgb, var(--c) 40%, #fff); }
.ws-mock__cards u { height: 5px; border-radius: var(--nn-radius-pill); background: var(--nn-surface-2); }
.ws-mock__cards s { width: var(--w); height: 100%; border-radius: inherit; background: var(--c); }
.ws-mock__map { position: relative; height: 80px; border-radius: 8px; background: repeating-linear-gradient(45deg, var(--nn-surface), var(--nn-surface) 8px, var(--nn-surface-2) 8px, var(--nn-surface-2) 16px); }
.ws-mock__map i { position: absolute; width: 12px; height: 12px; border-radius: 50% 50% 50% 0; transform: rotate(-45deg); background: var(--c); }
.ws-mock__map i:nth-child(1) { left: 22%; top: 30%; } .ws-mock__map i:nth-child(2) { left: 55%; top: 50%; } .ws-mock__map i:nth-child(3) { left: 78%; top: 22%; }
.ws-mock__menu { display: grid; gap: 7px; padding: 4px 2px; }
.ws-mock__menu div { display: grid; grid-template-columns: 22px 1fr 34px; align-items: center; gap: 8px; }
.ws-mock__menu i { width: 22px; height: 22px; border-radius: var(--nn-radius-round); background: color-mix(in srgb, var(--c) 30%, #fff); }
.ws-mock__menu span { height: 6px; border-radius: var(--nn-radius-pill); background: var(--nn-surface-2); }
.ws-mock__menu b { height: 7px; border-radius: var(--nn-radius-pill); background: var(--c); }
.ws-mock__stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; padding: 10px; border-radius: 8px; background: color-mix(in srgb, var(--c) 12%, #fff); }
.ws-mock__stats i { height: 22px; border-radius: 5px; background: #fff; }
.ws-mock__foot { height: 54px; border-radius: 8px; background: var(--nn-ink); }

/* ============================== Gói ============================== */
.ws-packages { display: grid; gap: var(--nn-space-6); grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); margin-top: var(--nn-space-12); align-items: stretch; }
.ws-package .vp-plan__total { display: inline-flex; align-items: center; gap: 6px; }
.ws-package__list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--nn-space-3); flex: 1; }
.ws-package__list li { display: flex; align-items: flex-start; gap: var(--nn-space-2-5); font-size: var(--nn-text-sm); color: var(--nn-text); }
.ws-package__list .nn-icon { flex: none; margin-top: 2px; width: 18px; height: 18px; padding: 2px; border-radius: var(--nn-radius-round); font-size: 14px; color: var(--nn-success-700); background: var(--nn-success-soft); }
.ws-package__list li.is-off { color: var(--nn-subtle); text-decoration: line-through; text-decoration-color: var(--nn-border-strong); }
.ws-package__list li.is-off .nn-icon { color: var(--nn-subtle); background: var(--nn-surface-2); }
.ws-note { display: flex; align-items: flex-start; justify-content: center; gap: var(--nn-space-2); max-width: 760px; margin: var(--nn-space-8) auto 0; text-align: center; font-size: var(--nn-text-sm); color: var(--nn-muted); }
.ws-note .nn-icon { flex: none; margin-top: 3px; color: var(--nn-primary); }

/* ============================== Dự toán ============================== */
.ws-addons { grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr)); }
.vp-summary__price strong.ws-range { font-size: clamp(1.375rem, 1.1rem + .8vw, 1.625rem); white-space: nowrap; }
[data-vp-estimator] .vp-os-pick { grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); }

/* ============================== Công nghệ + đánh giá ============================== */
.ws-tech { margin-top: 0; padding-top: 0; border-top: 0; }
.ws-quotes-head { margin-top: var(--nn-space-16); }
.ws-quotes { display: grid; gap: var(--nn-space-5); grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); margin-top: var(--nn-space-10); }
.ws-quote { display: flex; flex-direction: column; margin: 0; padding: var(--nn-space-7); border-radius: var(--nn-radius-xl); background: var(--nn-surface); border: 1px solid var(--nn-line); }
.ws-quote__stars { display: flex; gap: 2px; color: var(--nn-highlight); }
.ws-quote__stars .nn-icon { font-size: 18px; }
.ws-quote blockquote { flex: 1; margin: var(--nn-space-4) 0 var(--nn-space-6); font-size: var(--nn-text-md); line-height: var(--nn-leading-relaxed); color: var(--nn-text); }
.ws-quote figcaption { display: flex; align-items: center; gap: var(--nn-space-3); }
.ws-quote__avatar { width: 44px; height: 44px; border-radius: var(--nn-radius-round); display: grid; place-items: center; font-size: var(--nn-text-xs); font-weight: var(--nn-weight-bold); color: #fff; background: var(--nn-gradient); }
.ws-quote figcaption strong { display: block; color: var(--nn-ink); }
.ws-quote figcaption small { color: var(--nn-muted); font-size: var(--nn-text-xs); }

@media (prefers-reduced-motion: reduce) {
    .ws-site__hero > i, .ws-phone { animation: none; }
    .ws-mock { transition: none; }
    .ws-tpl:hover .ws-mock { transform: none; }
}

/* ============================== Kho giao diện (layout template_gallery) ============================== */
.ws-more { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--nn-space-3); margin-top: var(--nn-space-10); }
.ws-ghero { padding-bottom: clamp(48px, 3rem + 2vw, 80px); }
.ws-gsearch { position: relative; max-width: 720px; margin: var(--nn-space-8) auto 0; padding-left: var(--nn-space-4); }
.ws-gsearch__icon { flex: none; font-size: 20px; color: var(--nn-subtle); }
.ws-gsearch input::-webkit-search-cancel-button { cursor: pointer; }
.ws-gallery { padding-top: var(--nn-space-10); }
.ws-toolbar { position: sticky; top: var(--nn-header-h); z-index: 2; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--nn-space-3) var(--nn-space-6); margin-bottom: var(--nn-space-8); padding: var(--nn-space-3) 0; background: color-mix(in srgb, #fff 92%, transparent); }
.ws-toolbar .ws-filter { flex: 1; min-width: 0; margin: 0; }
.ws-toolbar__right { display: flex; align-items: center; gap: var(--nn-space-4); }
.ws-toolbar__count { margin: 0; font-size: var(--nn-text-sm); color: var(--nn-muted); white-space: nowrap; }
.ws-toolbar__count strong { color: var(--nn-ink); }
.ws-toolbar__sort { width: auto; min-width: 190px; }
@media (max-width: 767.98px) { .ws-toolbar { position: static; } .ws-toolbar__right { width: 100%; justify-content: space-between; } }
.ws-tpl__body h3 a { color: inherit; text-decoration: none; }
.ws-tpl__body h3 a:hover { color: var(--nn-primary); }
.ws-tpl__price s { display: block; font-size: var(--nn-text-2xs); color: var(--nn-subtle); text-decoration-color: var(--vp-sale); }
.ws-tpl:has(.ws-tpl__price s) .ws-tpl__price strong { color: var(--vp-sale); }
.ws-steps4 { list-style: none; margin: var(--nn-space-10) 0 0; padding: 0; display: grid; gap: var(--nn-space-5); grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); counter-reset: none; }
.ws-steps4 li { position: relative; padding: var(--nn-space-6); border-radius: var(--nn-radius-xl); background: #fff; border: 1px solid var(--nn-border); }
.ws-steps4 h3 { margin: var(--nn-space-4) 0 var(--nn-space-1); font-size: var(--nn-text-md); font-weight: var(--nn-weight-bold); color: var(--nn-ink); }
.ws-steps4 p { margin: 0; font-size: var(--nn-text-sm); color: var(--nn-muted); }

/* ============================== Chi tiết giao diện (layout template_detail) ============================== */
.ws-dhead { padding: var(--nn-space-6) 0 var(--nn-section-y); background: linear-gradient(180deg, var(--nn-surface), #fff); }
.ws-crumb { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-bottom: var(--nn-space-6); font-size: var(--nn-text-sm); color: var(--nn-muted); }
.ws-crumb a { color: var(--nn-muted); text-decoration: none; display: inline-flex; }
.ws-crumb a:hover { color: var(--nn-primary); }
.ws-crumb .nn-icon { font-size: 14px; }
.ws-crumb [aria-current] { color: var(--nn-ink); font-weight: var(--nn-weight-semibold); }
.ws-dgrid { display: grid; gap: var(--nn-space-8); align-items: start; }
@media (min-width: 992px) { .ws-dgrid { grid-template-columns: minmax(0, 1fr) 400px; } }

.ws-preview { --c: var(--nn-brand); min-width: 0; }
.ws-preview__tools { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--nn-space-3); margin-bottom: var(--nn-space-3); }
.ws-preview__devices { display: inline-flex; gap: 4px; padding: 4px; border-radius: var(--nn-radius-pill); background: #fff; border: 1px solid var(--nn-border); }
.ws-preview__devices button { width: 40px; height: 34px; border: 0; border-radius: var(--nn-radius-pill); display: grid; place-items: center; cursor: pointer; font-size: 18px; color: var(--nn-muted); background: transparent; transition: background .2s, color .2s; }
.ws-preview__devices button:hover { color: var(--nn-ink); }
.ws-preview__devices button.is-active { color: #fff; background: var(--nn-ink); }
.ws-preview__swatches { display: inline-flex; align-items: center; gap: var(--nn-space-2); font-size: var(--nn-text-sm); color: var(--nn-muted); }
.ws-preview__swatches button { width: 26px; height: 26px; border-radius: var(--nn-radius-round); cursor: pointer; background: var(--s); border: 3px solid #fff; box-shadow: 0 0 0 1px var(--nn-border); transition: transform .2s, box-shadow .2s; }
.ws-preview__swatches button:hover { transform: scale(1.1); }
.ws-preview__swatches button.is-active { box-shadow: 0 0 0 2px var(--s); }
.ws-preview__devices button:focus-visible, .ws-preview__swatches button:focus-visible { outline: 2px solid var(--nn-brand-300); outline-offset: 2px; }
.ws-preview__stage {
    display: grid; justify-items: center; padding: var(--nn-space-5); border-radius: var(--nn-radius-2xl); overflow: hidden;
    background: radial-gradient(circle at 20% 0%, color-mix(in srgb, var(--c) 18%, transparent), transparent 55%), var(--nn-surface-2);
    transition: background .4s;
}
.ws-preview__frame { width: 100%; border-radius: var(--nn-radius-lg); overflow: hidden; background: #fff; box-shadow: 0 40px 80px -40px color-mix(in srgb, var(--c) 55%, transparent), 0 0 0 1px var(--nn-border); transition: width .5s var(--vp-ease), border-radius .4s, box-shadow .4s; }
.ws-preview[data-device="tablet"] .ws-preview__frame { width: min(100%, 560px); }
.ws-preview[data-device="mobile"] .ws-preview__frame { width: min(100%, 320px); border-radius: 28px; box-shadow: 0 40px 80px -40px color-mix(in srgb, var(--c) 55%, transparent), 0 0 0 8px var(--nn-ink); }
.ws-preview[data-device="mobile"] .ws-project__bar { display: none; }
.ws-preview__view { height: clamp(320px, 42vw, 520px); overflow: hidden; }
.ws-preview .ws-mock { gap: 16px; padding: 20px; animation: ws-autoscroll 16s ease-in-out 1s infinite alternate; }
.ws-preview[data-device="mobile"] .ws-mock { padding: 14px; gap: 12px; }
.ws-preview[data-device="mobile"] .ws-mock__grid, .ws-preview[data-device="mobile"] .ws-mock__cards, .ws-preview[data-device="mobile"] .ws-mock__features { grid-template-columns: 1fr 1fr; }
.ws-preview[data-device="mobile"] .ws-mock__products { grid-template-columns: 1fr 1fr; }
.ws-preview[data-device="mobile"] .ws-mock__nav span { display: none; }
.ws-preview .ws-mock__hero { height: 190px; }
.ws-preview:hover .ws-mock { animation-play-state: paused; }
@keyframes ws-autoscroll { 0%, 8% { transform: translateY(0); } 92%, 100% { transform: translateY(calc(-100% + clamp(320px, 42vw, 520px))); } }
.ws-preview__note { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: var(--nn-space-3) 0 0; font-size: var(--nn-text-xs); color: var(--nn-subtle); }
.ws-preview__note a { display: inline-flex; align-items: center; gap: 4px; font-weight: var(--nn-weight-semibold); }

.ws-info { position: sticky; top: calc(var(--nn-header-h) + var(--nn-space-5)); padding: var(--nn-space-7); border-radius: var(--nn-radius-xl); background: #fff; border: 1px solid var(--nn-border); box-shadow: 0 30px 60px -40px color-mix(in srgb, var(--nn-brand-900) 45%, transparent); }
@media (max-width: 991.98px) { .ws-info { position: static; } }
.ws-info__meta { display: flex; align-items: center; gap: 6px; margin: 0; font-size: var(--nn-text-sm); color: var(--nn-muted); }
.ws-info__meta .nn-icon { color: var(--nn-primary); }
.ws-info__title { margin: var(--nn-space-2) 0; font-size: clamp(1.75rem, 1.4rem + 1vw, 2.25rem); font-weight: var(--nn-weight-extrabold); letter-spacing: -.02em; color: var(--nn-ink); line-height: 1.15; }
.ws-info__rating { display: flex; flex-wrap: wrap; align-items: center; gap: var(--nn-space-2); margin: 0 0 var(--nn-space-4); font-size: var(--nn-text-sm); color: var(--nn-muted); }
.ws-info__rating > span { display: inline-flex; color: var(--nn-highlight); font-size: 16px; }
.ws-info__rating .ws-tpl__badge { position: static; font-style: normal; }
.ws-info__desc { margin: 0 0 var(--nn-space-5); font-size: var(--nn-text-sm); line-height: var(--nn-leading-relaxed); color: var(--nn-text); }
.ws-info__price { padding: var(--nn-space-4) 0; border-top: 1px dashed var(--nn-border); border-bottom: 1px dashed var(--nn-border); }
.ws-info__list { margin: var(--nn-space-5) 0; gap: var(--nn-space-2) var(--nn-space-3); grid-template-columns: 1fr 1fr; }
.ws-info__list li { font-size: var(--nn-text-xs); }
@media (max-width: 379.98px) { .ws-info__list { grid-template-columns: 1fr; } }
.ws-info__cta { display: grid; gap: var(--nn-space-2-5); }
.ws-info__assure { list-style: none; display: flex; flex-wrap: wrap; justify-content: center; gap: var(--nn-space-2) var(--nn-space-4); margin: var(--nn-space-4) 0 0; padding: 0; font-size: var(--nn-text-xs); color: var(--nn-muted); }
.ws-info__assure li { display: inline-flex; align-items: center; gap: 4px; }
.ws-info__assure .nn-icon { color: var(--nn-success); }

.ws-dbody { display: grid; gap: var(--nn-space-12); }
@media (min-width: 992px) { .ws-dbody { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } }
.ws-pages { list-style: none; margin: var(--nn-space-6) 0 0; padding: 0; display: grid; gap: var(--nn-space-3); grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
.ws-pages li { display: grid; gap: var(--nn-space-2); font-size: var(--nn-text-sm); font-weight: var(--nn-weight-medium); color: var(--nn-ink); }
.ws-pages__thumb { display: grid; gap: 5px; padding: 8px; border-radius: var(--nn-radius-md); background: #fff; border: 1px solid var(--nn-border); transition: border-color .25s, transform .3s var(--vp-ease); }
.ws-pages li:hover .ws-pages__thumb { border-color: color-mix(in srgb, var(--c) 45%, transparent); transform: translateY(-3px); }
.ws-pages__thumb i { width: 40%; height: 5px; border-radius: var(--nn-radius-pill); background: var(--c); }
.ws-pages__thumb b { height: 34px; border-radius: 5px; background: color-mix(in srgb, var(--c) 20%, #fff); }
.ws-pages__thumb span { height: 4px; border-radius: var(--nn-radius-pill); background: var(--nn-surface-2); }
.ws-pages__thumb span + span { width: 60%; }
.ws-fit-title { margin-top: var(--nn-space-10); }
.ws-fit { list-style: none; display: flex; flex-wrap: wrap; gap: var(--nn-space-2); margin: 0; padding: 0; }
.ws-fit li { display: inline-flex; align-items: center; gap: 6px; padding: 6px var(--nn-space-3); border-radius: var(--nn-radius-pill); font-size: var(--nn-text-sm); color: var(--nn-text); background: var(--nn-surface); border: 1px solid var(--nn-line); }
.ws-fit .nn-icon { color: var(--nn-success); }
.ws-highlights { display: grid; gap: var(--nn-space-4); margin-top: var(--nn-space-6); }
.ws-highlights article { display: flex; gap: var(--nn-space-4); padding: var(--nn-space-5); border-radius: var(--nn-radius-lg); border: 1px solid var(--nn-border); transition: border-color .25s, box-shadow .3s; }
.ws-highlights article:hover { border-color: var(--nn-brand-200); box-shadow: 0 20px 40px -32px color-mix(in srgb, var(--nn-brand-900) 45%, transparent); }
.ws-highlights .ws-type__icon { flex: none; width: 46px; height: 46px; font-size: 21px; }
.ws-highlights h3 { margin: 0 0 4px; font-size: var(--nn-text-md); font-weight: var(--nn-weight-bold); color: var(--nn-ink); }
.ws-highlights p { margin: 0; font-size: var(--nn-text-sm); color: var(--nn-muted); }
.ws-templates--related { margin-top: var(--nn-space-8); }

@media (prefers-reduced-motion: reduce) { .ws-preview .ws-mock { animation: none; } }
