/* ВГороде82 — собранные стили. Разбор: docs/frontend/Сборка_стилей.md
   Файл СОБИРАЕТСЯ из tokens/ и css/ — правьте их, а не его. */
/* tokens/fonts.css */
@font-face{font-family:"TikTok Sans";src:url("/ds2/assets/fonts/TikTokSans-VF.subset.woff2") format("woff2");font-weight:600 800;font-stretch:100% 130%;font-style:normal;font-display:swap}
@font-face{font-family:"Inter";src:url("/ds2/assets/fonts/Inter-VF.subset.woff2") format("woff2");font-weight:400 600;font-style:normal;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url("/ds2/assets/fonts/JetBrainsMono-VF.ttf") format("truetype-variations");font-weight:100 800;font-style:normal;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url("/ds2/assets/fonts/JetBrainsMono-Italic-VF.ttf") format("truetype-variations");font-weight:100 800;font-style:italic;font-display:swap}

:root{
  --font-fallback:"Segoe UI","Helvetica Neue",Helvetica,Arial,system-ui,sans-serif;
  --font-display:"TikTok Sans","Inter",var(--font-fallback);
  --font-text:"Inter",var(--font-fallback);
  --font-mono:"JetBrains Mono","SF Mono",Consolas,"Liberation Mono",monospace;
}

/* tokens/colors.css */
:root{
  
  --blue-50:#EEF5FC;
  --blue-100:#D7E8F7;
  --blue-200:#AFCFEF;
  --blue-300:#7FB0E2;
  --blue-400:#4C8CD1;
  --blue-500:#1F6BBD;
  --blue-600:#0559A6; 
  --blue-700:#044A8B;
  --blue-800:#043A6D;
  --blue-900:#062C51;
  --blue-950:#051D36;

  
  --ink-0:#FFFFFF;
  --ink-25:#FAFBFC;
  --ink-50:#F4F6F8;
  --ink-100:#EAEEF2;
  --ink-200:#DBE1E8;
  --ink-300:#C2CBD5;
  --ink-400:#94A1B0;
  --ink-500:#6B7A8B;
  --ink-600:#4E5C6B;
  --ink-700:#38434F;
  --ink-800:#232C36;
  --ink-900:#131A21;
  --ink-1000:#000000; 

  
  --accent-50:#FDF0EB;
  --accent-100:#FADCD1;
  --accent-300:#F0A183;
  --accent-500:#E4572E;
  --accent-600:#C8431E;
  --accent-700:#A23516;

  
  --sand-50:#FDF5E4;
  --sand-100:#F9E7BF;
  --sand-300:#EFC768;
  --sand-500:#D9A227;
  --sand-600:#B07C12;
  --sand-700:#8A600C;

  
  --green-50:#E7F5EF;
  --green-500:#12805C;
  --green-700:#0B5F44;
  --red-50:#FCEBEB;
  --red-500:#C42B2B;
  --red-700:#971F1F;
  --amber-50:#FDF3E0;
  --amber-500:#B7791F;
  --amber-700:#8A5A14;

  
  --text-primary:var(--ink-900);
  --text-secondary:var(--ink-600);
  --text-muted:var(--ink-500);
  --text-faint:var(--ink-400);
  --text-inverse:var(--ink-0);
  --text-brand:var(--blue-600);
  --text-link:var(--blue-600);
  --text-link-hover:var(--blue-700);
  --text-accent:var(--accent-600);
  --text-price:var(--ink-900);

  --surface-page:var(--ink-0);
  --surface-sunken:var(--ink-50);
  --surface-card:var(--ink-0);
  --surface-raised:var(--ink-0);
  --surface-hover:var(--ink-50);
  --surface-active:var(--ink-100);
  --surface-inverse:var(--ink-900);
  --surface-brand:var(--blue-600);
  --surface-brand-hover:var(--blue-700);
  --surface-brand-soft:var(--blue-50);
  --surface-accent:var(--accent-500);
  --surface-accent-soft:var(--accent-50);
  --surface-skeleton:var(--ink-100);
  --surface-overlay:rgba(19,26,33,.56);

  --border-subtle:var(--ink-100);
  --border-default:var(--ink-200);
  --border-strong:var(--ink-300);
  --border-brand:var(--blue-600);
  --border-focus:var(--blue-600);

  
  --status-draft-fg:var(--ink-600);      --status-draft-bg:var(--ink-100);
  --status-review-fg:var(--amber-700);   --status-review-bg:var(--amber-50);
  --status-live-fg:var(--green-700);     --status-live-bg:var(--green-50);
  --status-rejected-fg:var(--red-700);   --status-rejected-bg:var(--red-50);
  --status-paused-fg:var(--ink-600);     --status-paused-bg:var(--ink-100);
  --status-hidden-fg:var(--ink-500);     --status-hidden-bg:var(--ink-50);
  --status-expiring-fg:var(--amber-700); --status-expiring-bg:var(--amber-50);

  
  --mark-portal-fg:var(--ink-0);   --mark-portal-bg:var(--blue-600);
  --mark-alushta-fg:var(--sand-700); --mark-alushta-bg:var(--sand-50); --mark-alushta-br:var(--sand-300);

  
  --rating-star:var(--sand-500);
  --rating-empty:var(--ink-200);

  
  --ad-label-fg:var(--ink-500);
  --ad-placeholder-bg:var(--ink-50);
  --ad-placeholder-fg:var(--ink-400);

  
  --map-water:#CFE3F2;
  --map-land:#F2F1EC;
  --map-pin:var(--blue-600);
}

/* tokens/typography.css */
:root{
  
  --t-display-stretch:130%; --t-display-w:800;
  --t-display-sm-stretch:115%; --t-display-sm-w:700;
  
  --t-display1-size:64px;  --t-display1-lh:66px;  --t-display1-ls:-0.025em; --t-display1-w:var(--t-display-w);
  --t-display2-size:48px;  --t-display2-lh:52px;  --t-display2-ls:-0.022em; --t-display2-w:var(--t-display-w);
  --t-h1-size:40px;        --t-h1-lh:44px;        --t-h1-ls:-0.02em;       --t-h1-w:var(--t-display-w);
  --t-h2-size:32px;        --t-h2-lh:36px;        --t-h2-ls:-0.018em;      --t-h2-w:var(--t-display-w);
  --t-h3-size:24px;        --t-h3-lh:30px;        --t-h3-ls:-0.014em;      --t-h3-w:var(--t-display-sm-w);
  --t-h4-size:20px;        --t-h4-lh:26px;        --t-h4-ls:-0.01em;       --t-h4-w:var(--t-display-sm-w);
  --t-lead-size:22px;      --t-lead-lh:32px;      --t-lead-ls:-0.005em;    --t-lead-w:400;
  --t-body-lg-size:18px;   --t-body-lg-lh:28px;   --t-body-lg-ls:0;        --t-body-lg-w:400;
  --t-body-size:16px;      --t-body-lh:24px;      --t-body-ls:0;           --t-body-w:400;
  --t-body-sm-size:14px;   --t-body-sm-lh:20px;   --t-body-sm-ls:0;        --t-body-sm-w:400;
  --t-caption-size:13px;   --t-caption-lh:18px;   --t-caption-ls:0.002em;  --t-caption-w:400;
  --t-micro-size:11px;     --t-micro-lh:14px;     --t-micro-ls:0.03em;     --t-micro-w:500;
  
  --t-article-size:20px;   --t-article-lh:32px;
  
  --t-dense-size:14px;     --t-dense-lh:18px;
  
  --measure-article:684px;
}

.t-display1{font-family:var(--font-display);font-size:var(--t-display1-size);line-height:var(--t-display1-lh);letter-spacing:var(--t-display1-ls);font-weight:var(--t-display1-w)}
.t-display2{font-family:var(--font-display);font-size:var(--t-display2-size);line-height:var(--t-display2-lh);letter-spacing:var(--t-display2-ls);font-weight:var(--t-display2-w)}
.t-h1{font-family:var(--font-display);font-size:var(--t-h1-size);line-height:var(--t-h1-lh);letter-spacing:var(--t-h1-ls);font-weight:var(--t-h1-w)}
.t-h2{font-family:var(--font-display);font-size:var(--t-h2-size);line-height:var(--t-h2-lh);letter-spacing:var(--t-h2-ls);font-weight:var(--t-h2-w)}
.t-h3{font-family:var(--font-display);font-size:var(--t-h3-size);line-height:var(--t-h3-lh);letter-spacing:var(--t-h3-ls);font-weight:var(--t-h3-w)}
.t-h4{font-family:var(--font-display);font-size:var(--t-h4-size);line-height:var(--t-h4-lh);letter-spacing:var(--t-h4-ls);font-weight:var(--t-h4-w)}
.t-lead{font-size:var(--t-lead-size);line-height:var(--t-lead-lh);letter-spacing:var(--t-lead-ls);color:var(--text-secondary)}
.t-body-lg{font-size:var(--t-body-lg-size);line-height:var(--t-body-lg-lh)}
.t-body{font-size:var(--t-body-size);line-height:var(--t-body-lh)}
.t-body-sm{font-size:var(--t-body-sm-size);line-height:var(--t-body-sm-lh)}
.t-caption{font-size:var(--t-caption-size);line-height:var(--t-caption-lh);color:var(--text-muted)}
.t-micro{font-size:var(--t-micro-size);line-height:var(--t-micro-lh);letter-spacing:var(--t-micro-ls);text-transform:uppercase}
.t-num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}
.t-mono{font-family:var(--font-mono);font-size:var(--t-caption-size)}
.t-muted{color:var(--text-muted)}
.t-secondary{color:var(--text-secondary)}

@media (max-width:767px){
  :root{
    --t-display1-size:38px; --t-display1-lh:40px;
    --t-display2-size:32px; --t-display2-lh:36px;
    --t-h1-size:28px;       --t-h1-lh:32px;
    --t-h2-size:24px;       --t-h2-lh:28px;
    --t-h3-size:20px;       --t-h3-lh:26px;
    --t-h4-size:17px;       --t-h4-lh:23px;
    --t-lead-size:18px;     --t-lead-lh:27px;
    --t-article-size:18px;  --t-article-lh:29px;
  }
}

/* tokens/spacing.css */
:root{
  --s-0:0;      --s-2:2px;   --s-4:4px;   --s-6:6px;   --s-8:8px;
  --s-10:10px;  --s-12:12px; --s-14:14px; --s-16:16px; --s-20:20px; --s-24:24px;
  --s-28:28px;  --s-32:32px; --s-36:36px; --s-40:40px; --s-48:48px; --s-56:56px;
  --s-64:64px;  --s-80:80px; --s-96:96px; --s-120:120px;

  
  --grid-max:1680px;
  --grid-wide:1920px;
  --grid-narrow:832px;
  --grid-cols:12;
  --grid-gutter:24px;
  --grid-margin:clamp(16px,2.5vw,48px);
  --section-gap:64px;      
  --card-pad:12px;         
  --block-gap:24px;        

  
  --grid-cols-m:4;
  --grid-gutter-m:12px;
  --grid-margin-m:16px;
  --section-gap-m:40px;
  --block-gap-m:12px;

  
  --control-h-sm:32px;
  --control-h-md:40px;
  --control-h-lg:48px;
  --control-h-xl:56px;
  --tap-min:44px;          

  
  --header-h:72px;
  --header-h-m:56px;
  --sidebar-w:260px;
  --sidebar-w-collapsed:64px;

  
  --dense-pad-x:12px;
  --dense-pad-y:8px;
  --dense-row-h:44px;
  --dense-gap:12px;
  --dense-section-gap:24px;
}

@media (max-width:767px){
  :root{
    --grid-gutter:var(--grid-gutter-m);
    --grid-margin:var(--grid-margin-m);
    --section-gap:var(--section-gap-m);
    --block-gap:var(--block-gap-m);
    --header-h:var(--header-h-m);
  }
}

/* tokens/elevation.css */
:root{
  --r-xs:4px;
  --r-sm:8px;
  --r-md:12px;
  --r-lg:16px;
  --r-xl:24px;
  --r-2xl:32px;
  --r-pill:999px;
  --r-circle:50%;
  --r-control:10px;   
  --r-card:16px;      
  --r-media:12px;     
  --r-dense:6px;      

  --shadow-0:none;
  --shadow-1:0 1px 2px rgba(19,26,33,.06), 0 0 0 1px rgba(19,26,33,.04);
  --shadow-2:0 4px 12px rgba(19,26,33,.08), 0 0 0 1px rgba(19,26,33,.04);
  --shadow-3:0 10px 28px rgba(19,26,33,.10);
  --shadow-4:0 20px 56px rgba(19,26,33,.16);
  --shadow-inset:inset 0 1px 0 rgba(255,255,255,.6);
  --focus-ring:0 0 0 3px rgba(5,89,166,.26);
  --focus-ring-danger:0 0 0 3px rgba(196,43,43,.24);

  
  --scrim-bottom:linear-gradient(180deg,rgba(19,26,33,0) 0%,rgba(19,26,33,.06) 40%,rgba(19,26,33,.72) 100%);
  --scrim-full:linear-gradient(180deg,rgba(19,26,33,.35) 0%,rgba(19,26,33,.15) 45%,rgba(19,26,33,.78) 100%);
}

/* tokens/motion.css */
:root{
  --dur-instant:80ms;
  --dur-fast:140ms;
  --dur-base:200ms;
  --dur-slow:320ms;
  --dur-enter:240ms;   
  --dur-exit:160ms;    

  --ease-out:cubic-bezier(.2,.8,.3,1);
  --ease-in-out:cubic-bezier(.4,0,.2,1);
  --ease-in:cubic-bezier(.4,0,1,1);

  --hover-lift:translateY(-2px);
  --press-scale:scale(.985);
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;scroll-behavior:auto !important}
}

/* css/base.css */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--surface-page);color:var(--text-primary);font-family:var(--font-text);font-size:var(--t-body-size);line-height:var(--t-body-lh);font-weight:400;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2,h3,h4,h5,h6{margin:0;font-family:var(--font-display);color:var(--text-primary)}
p{margin:0;text-wrap:pretty}
img,svg,video{display:block;max-width:100%}
button,input,select,textarea{font:inherit;color:inherit}
a{color:var(--text-link);text-decoration:none;text-underline-offset:.18em;transition:color var(--dur-fast) var(--ease-out)}
a:hover{color:var(--text-link-hover);text-decoration:underline}
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px;border-radius:var(--r-xs)}
ul,ol{margin:0;padding:0}
hr{border:0;border-top:1px solid var(--border-subtle);margin:var(--s-32) 0}
::selection{background:var(--blue-100);color:var(--ink-900)}
.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.icon{display:inline-block;width:20px;height:20px;flex:none;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;vertical-align:middle}
.icon-16{width:16px;height:16px;stroke-width:1.9}
.icon-24{width:24px;height:24px;stroke-width:1.7}
.icon-32{width:32px;height:32px;stroke-width:1.5}
.icon-fill{fill:currentColor;stroke:none}

/* css/layout.css */
.v-page{min-height:100vh;display:flex;flex-direction:column}
.v-container{width:100%;max-width:var(--grid-max);margin:0 auto;padding-inline:var(--grid-margin)}
.v-container--wide{max-width:var(--grid-wide)}
.v-container--narrow{max-width:var(--grid-narrow)}
.v-section{padding-block:var(--section-gap)}
.v-section--tight{padding-block:var(--s-32)}
.v-stack{display:flex;flex-direction:column;gap:var(--s-16)}
.v-stack--sm{gap:var(--s-8)}
.v-stack--lg{gap:var(--s-24)}
.v-stack--xl{gap:var(--s-40)}
.v-row{display:flex;align-items:center;gap:var(--s-12)}
.v-row--sm{gap:var(--s-8)}
.v-row--wrap{flex-wrap:wrap}
.v-row--between{justify-content:space-between}
.v-spacer{flex:1 1 auto}
.v-grid{display:grid;gap:var(--block-gap)}
.v-grid--2{grid-template-columns:repeat(2,1fr)}
.v-grid--3{grid-template-columns:repeat(3,1fr)}
.v-grid--4{grid-template-columns:repeat(4,1fr)}
.v-grid--5{grid-template-columns:repeat(5,1fr)}
.v-grid--auto{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}

.v-grid--band{grid-template-columns:repeat(3,minmax(0,1fr))}
.v-split{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--s-40);align-items:start}

.v-catalog{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--s-40);align-items:start;margin-top:24px;padding-bottom:32px}
.v-catalog__aside{order:2}
@media (min-width:1440px){.v-catalog{grid-template-columns:minmax(0,1fr) 336px}}
@media (max-width:1023px){.v-catalog{grid-template-columns:1fr;gap:var(--s-24)}}

[data-air="dense"]{--section-gap:40px;--block-gap:16px}

.v-rail{display:grid;grid-auto-flow:column;grid-auto-columns:calc((100% - 3 * var(--block-gap)) / 4);gap:var(--block-gap);overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scrollbar-width:none;align-items:stretch;margin-inline:calc(var(--grid-margin) * -1);padding-inline:var(--grid-margin);scroll-padding-inline:var(--grid-margin)}
.v-rail::-webkit-scrollbar{display:none}
.v-rail>*,.v-rail .v-card,.v-rail .v-ad{scroll-snap-align:start;min-width:0}

.v-rail--posters{grid-auto-columns:calc((100% - 3 * var(--block-gap)) / 4)}
.v-rail--wide{grid-auto-columns:calc((100% - 2 * var(--block-gap)) / 3)}

.v-rail--boxed>*{height:100%}
.v-rail--boxed .v-card{height:100%;border:1px solid var(--border-subtle)}
.v-rail--boxed .v-card__media{border-radius:10px}
.v-rail--boxed .v-card__body{padding-top:var(--s-12)}
.v-rail .v-card__title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

.v-cityhero{padding-block:40px 32px}
.v-cityhero__search{max-width:720px;margin-top:24px}
.v-cityhero .v-search{height:60px;border-radius:var(--r-pill);padding-inline:24px;box-shadow:var(--shadow-2)}
.v-cityhero .v-search__input{font-size:17px}
.v-cityhero__tiles{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-top:32px}
@media (max-width:1023px){.v-cityhero__tiles{grid-template-columns:repeat(3,1fr)}}
@media (max-width:767px){.v-cityhero{padding-block:24px}.v-cityhero__tiles{grid-template-columns:repeat(2,1fr);gap:8px}.v-cityhero .v-search{height:52px;padding-inline:16px}}

.v-bandhead{display:flex;align-items:baseline;justify-content:space-between;gap:24px;margin-bottom:20px}
.v-bandhead__title{display:flex;align-items:baseline;gap:12px}
.v-bandhead__count{font-size:15px;color:var(--text-muted);font-weight:400;white-space:nowrap}
@media (max-width:767px){.v-bandhead{flex-wrap:wrap;gap:8px}}

.v-railwrap{position:relative;container-type:inline-size}

@container (max-width:900px){
  .v-rail,.v-rail--posters{grid-auto-columns:calc((100% - 2 * var(--block-gap)) / 3)}
  .v-rail--wide{grid-auto-columns:calc((100% - var(--block-gap)) / 2)}
}
@container (max-width:640px){
  .v-rail,.v-rail--posters{grid-auto-columns:calc((100% - var(--block-gap)) / 2)}
}
.v-rail__nav{position:absolute;top:38%;width:44px;height:44px;border-radius:var(--r-circle);border:1px solid var(--border-subtle);background:#fff;color:var(--ink-800);display:none;place-items:center;box-shadow:var(--shadow-3);cursor:pointer;z-index:3;transition:background var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out)}
.v-rail__nav:hover{background:var(--ink-50)}
.v-rail__nav:active{transform:scale(.94)}
.v-rail__nav[hidden]{display:none}
.v-rail__nav--prev{left:-22px}
.v-rail__nav--next{right:-22px}
@media (hover:hover) and (pointer:fine){.v-rail__nav:not([hidden]){display:grid}}
@media (max-width:1279px){.v-rail__nav--prev{left:4px}.v-rail__nav--next{right:4px}}
@media (min-width:1440px){.v-split{grid-template-columns:minmax(0,1fr) 336px}}
@media (max-width:1023px){.v-rail,.v-rail--posters{grid-auto-columns:calc((100% - 2 * var(--block-gap)) / 3)}.v-rail--wide{grid-auto-columns:calc((100% - var(--block-gap)) / 2)}}
@media (max-width:767px){.v-rail{grid-auto-columns:78%}.v-rail--posters{grid-auto-columns:60%}.v-rail--wide{grid-auto-columns:88%}}
.v-sticky{position:sticky;top:calc(var(--header-h) + var(--s-16))}

.v-header{position:sticky;top:0;z-index:60;background:var(--surface-page);border-bottom:1px solid var(--border-subtle)}
.v-header__bar{height:var(--header-h);display:flex;align-items:center;gap:var(--s-20)}
.v-header__logo{display:flex;align-items:center;gap:var(--s-10);font-family:var(--font-display);font-weight:800;font-size:19px;letter-spacing:-.02em;color:var(--ink-900)}
.v-header__logo img{width:34px;height:34px;object-fit:contain}
.v-nav{display:flex;align-items:center;gap:var(--s-4)}
.v-nav__link{padding:var(--s-8) var(--s-12);border-radius:var(--r-sm);color:var(--text-secondary);font-weight:500;font-size:15px;transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
.v-nav__link:hover{background:var(--surface-hover);color:var(--text-primary);text-decoration:none}
.v-nav__link.is-active{color:var(--text-brand);background:var(--surface-brand-soft)}

.v-footer{margin-top:auto;background:var(--surface-sunken);border-top:1px solid var(--border-subtle);padding-block:var(--s-56) var(--s-32)}
.v-footer__cols{display:grid;grid-template-columns:1.4fr repeat(4,1fr);gap:var(--s-32)}
.v-footer__title{font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint);margin-bottom:var(--s-12)}
.v-footer__list{list-style:none;display:flex;flex-direction:column;gap:var(--s-8)}
.v-footer__list a{color:var(--text-secondary);font-size:14px}
.v-footer__legal{margin-top:var(--s-40);padding-top:var(--s-20);border-top:1px solid var(--border-default);display:flex;gap:var(--s-16);flex-wrap:wrap;color:var(--text-faint);font-size:13px}

@media (max-width:1023px){.v-split{grid-template-columns:1fr}.v-sticky{position:static}.v-grid--4,.v-grid--5{grid-template-columns:repeat(2,1fr)}.v-grid--3{grid-template-columns:repeat(2,1fr)}}
@media (max-width:767px){.v-grid--2,.v-grid--3,.v-grid--4,.v-grid--5,.v-grid--auto,.v-grid--band{grid-template-columns:1fr}.v-footer__cols{grid-template-columns:1fr 1fr}}

/* css/buttons.css */
.v-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-8);height:var(--control-h-md);padding:0 var(--s-20);border:1px solid transparent;border-radius:var(--r-control);font-family:var(--font-text);font-size:15px;font-weight:600;line-height:1;letter-spacing:-.005em;white-space:nowrap;cursor:pointer;background:none;transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out),transform var(--dur-instant) var(--ease-out)}
.v-btn:active:not(:disabled){transform:var(--press-scale)}
.v-btn:disabled,.v-btn.is-disabled{opacity:.45;cursor:not-allowed;transform:none}
.v-btn:focus-visible{outline:none;box-shadow:var(--focus-ring)}
.v-btn .icon{width:18px;height:18px;margin-inline:-2px}

.v-btn--primary{background:var(--surface-brand);color:var(--text-inverse)}
.v-btn--primary:hover:not(:disabled){background:var(--surface-brand-hover)}
.v-btn--accent{background:var(--surface-accent);color:var(--text-inverse)}
.v-btn--accent:hover:not(:disabled){background:var(--accent-600)}
.v-btn--secondary{background:var(--surface-page);color:var(--text-primary);border-color:var(--border-default)}
.v-btn--secondary:hover:not(:disabled){border-color:var(--border-strong);background:var(--surface-hover)}
.v-btn--soft{background:var(--surface-brand-soft);color:var(--text-brand)}
.v-btn--soft:hover:not(:disabled){background:var(--blue-100)}
.v-btn--ghost{background:transparent;color:var(--text-secondary)}
.v-btn--ghost:hover:not(:disabled){background:var(--surface-hover);color:var(--text-primary)}
.v-btn--link{background:none;height:auto;padding:0;color:var(--text-link);font-weight:600}
.v-btn--link:hover:not(:disabled){text-decoration:underline}
.v-btn--danger{background:var(--red-500);color:var(--text-inverse)}
.v-btn--danger:hover:not(:disabled){background:var(--red-700)}
.v-btn--danger-quiet{background:var(--red-50);color:var(--red-700)}
.v-btn--success{background:var(--green-500);color:var(--text-inverse)}
.v-btn--success:hover:not(:disabled){background:var(--green-700)}
.v-btn--onmedia{background:rgba(255,255,255,.16);color:#fff;border-color:rgba(255,255,255,.34);backdrop-filter:blur(8px)}
.v-btn--onmedia:hover:not(:disabled){background:rgba(255,255,255,.26)}

.v-btn--xs{height:28px;padding:0 var(--s-10);font-size:13px;border-radius:var(--r-sm)}
.v-btn--sm{height:var(--control-h-sm);padding:0 var(--s-12);font-size:14px;border-radius:var(--r-sm)}
.v-btn--lg{height:var(--control-h-lg);padding:0 var(--s-24);font-size:16px}
.v-btn--xl{height:var(--control-h-xl);padding:0 var(--s-32);font-size:17px;border-radius:var(--r-md)}
.v-btn--block{width:100%}
.v-btn--pill{border-radius:var(--r-pill)}
.v-btn.is-loading{color:transparent;position:relative;pointer-events:none}
.v-btn.is-loading::after{content:"";position:absolute;width:16px;height:16px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;color:var(--text-inverse);animation:v-spin .7s linear infinite}
@keyframes v-spin{to{transform:rotate(360deg)}}

.v-iconbtn{display:inline-flex;align-items:center;justify-content:center;width:var(--control-h-md);height:var(--control-h-md);border:1px solid transparent;border-radius:var(--r-control);background:transparent;color:var(--text-secondary);cursor:pointer;transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
.v-iconbtn:hover{background:var(--surface-hover);color:var(--text-primary)}

.v-iconbtn{position:relative}
.v-iconbtn__badge{position:absolute;top:1px;right:1px;min-width:16px;height:16px;padding:0 4px;border-radius:var(--r-pill);background:var(--red-500);color:#fff;font-size:10.5px;font-weight:700;display:grid;place-items:center;box-shadow:0 0 0 2px var(--surface-page)}
.v-iconbtn:active{transform:var(--press-scale)}
.v-iconbtn--outline{border-color:var(--border-default);background:var(--surface-page)}
.v-iconbtn--solid{background:var(--surface-brand);color:var(--text-inverse)}
.v-iconbtn--solid:hover{background:var(--surface-brand-hover);color:var(--text-inverse)}
.v-iconbtn--onmedia{background:rgba(255,255,255,.9);color:var(--ink-800);box-shadow:var(--shadow-2)}
.v-iconbtn--sm{width:var(--control-h-sm);height:var(--control-h-sm);border-radius:var(--r-sm)}
.v-iconbtn--lg{width:var(--control-h-lg);height:var(--control-h-lg)}
.v-iconbtn.is-on{color:var(--accent-500)}

/* css/forms.css */
.v-field{display:flex;flex-direction:column;gap:var(--s-6)}
.v-label{font-size:14px;font-weight:500;color:var(--text-secondary)}
.v-label .v-req{color:var(--red-500)}
.v-hint{font-size:13px;color:var(--text-muted)}
.v-error{font-size:13px;color:var(--red-500);display:flex;align-items:center;gap:var(--s-6)}

.v-input,.v-select,.v-textarea{width:100%;height:var(--control-h-md);padding:0 var(--s-14,14px);background:var(--surface-page);border:1px solid var(--border-default);border-radius:var(--r-control);font-size:15px;color:var(--text-primary);transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}
.v-input::placeholder,.v-textarea::placeholder{color:var(--text-faint)}
.v-input:hover,.v-select:hover,.v-textarea:hover{border-color:var(--border-strong)}
.v-input:focus,.v-select:focus,.v-textarea:focus{outline:none;border-color:var(--border-focus);box-shadow:var(--focus-ring)}
.v-input:disabled,.v-select:disabled,.v-textarea:disabled{background:var(--ink-50);color:var(--text-faint);cursor:not-allowed}
.v-input.is-invalid,.v-select.is-invalid{border-color:var(--red-500)}
.v-input.is-invalid:focus{box-shadow:var(--focus-ring-danger)}
.v-textarea{height:auto;min-height:104px;padding:var(--s-10) var(--s-14,14px);line-height:22px;resize:vertical}
.v-input--lg,.v-select--lg{height:var(--control-h-lg);font-size:16px}
.v-input--sm,.v-select--sm{height:var(--control-h-sm);font-size:14px;padding:0 var(--s-10);border-radius:var(--r-sm)}
.v-select{appearance:none;padding-right:var(--s-36,36px);background-image:linear-gradient(45deg,transparent 50%,var(--ink-500) 50%),linear-gradient(135deg,var(--ink-500) 50%,transparent 50%);background-position:calc(100% - 18px) 18px,calc(100% - 13px) 18px;background-size:5px 5px,5px 5px;background-repeat:no-repeat;cursor:pointer}

.v-inputgroup{position:relative;display:flex;align-items:center}
.v-inputgroup .icon{position:absolute;left:var(--s-12);color:var(--text-faint);pointer-events:none}
.v-inputgroup .v-input{padding-left:var(--s-40)}
.v-inputgroup__suffix{position:absolute;right:var(--s-12);color:var(--text-muted);font-size:14px}

.v-search{position:relative;display:flex;align-items:center;width:100%}
.v-search .icon{position:absolute;left:var(--s-14,14px);color:var(--text-faint)}
.v-search__input{width:100%;height:var(--control-h-md);padding:0 var(--s-40);background:var(--surface-sunken);border:1px solid transparent;border-radius:var(--r-pill);font-size:15px}
.v-search__input:focus{outline:none;background:var(--surface-page);border-color:var(--border-focus);box-shadow:var(--focus-ring)}
.v-search__clear{position:absolute;right:var(--s-8)}

.v-check{display:inline-flex;align-items:flex-start;gap:var(--s-10);cursor:pointer;font-size:15px;line-height:20px;color:var(--text-primary)}
.v-check input{position:absolute;opacity:0;width:0;height:0}
.v-check__box{flex:none;width:20px;height:20px;margin-top:0;border:1.5px solid var(--border-strong);border-radius:var(--r-xs);background:var(--surface-page);display:grid;place-items:center;transition:all var(--dur-fast) var(--ease-out)}
.v-check__box svg{width:13px;height:13px;stroke:#fff;stroke-width:3;opacity:0;transition:opacity var(--dur-fast) var(--ease-out)}
.v-check input:checked + .v-check__box{background:var(--surface-brand);border-color:var(--surface-brand)}
.v-check input:checked + .v-check__box svg{opacity:1}
.v-check input:focus-visible + .v-check__box{box-shadow:var(--focus-ring)}
.v-check input:disabled + .v-check__box{background:var(--ink-100);border-color:var(--border-default)}
.v-check--radio .v-check__box{border-radius:50%}
.v-check--radio input:checked + .v-check__box{background:var(--surface-page);border-color:var(--surface-brand);border-width:6px}
.v-check--radio .v-check__box svg{display:none}

.v-switch{display:inline-flex;align-items:center;gap:var(--s-10);cursor:pointer;font-size:15px}
.v-switch input{position:absolute;opacity:0;width:0;height:0}
.v-switch__track{width:40px;height:24px;border-radius:var(--r-pill);background:var(--ink-300);position:relative;transition:background var(--dur-base) var(--ease-out);flex:none}
.v-switch__track::after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(19,26,33,.25);transition:transform var(--dur-base) var(--ease-out)}
.v-switch input:checked + .v-switch__track{background:var(--surface-brand)}
.v-switch input:checked + .v-switch__track::after{transform:translateX(16px)}
.v-switch input:focus-visible + .v-switch__track{box-shadow:var(--focus-ring)}

.v-range{display:flex;align-items:center;gap:var(--s-8)}
.v-range .v-input{text-align:left}
.v-range__dash{color:var(--text-faint)}

.v-segmented{display:inline-flex;padding:3px;background:var(--surface-sunken);border-radius:var(--r-control);gap:2px}
.v-segmented__item{padding:0 var(--s-16);height:34px;display:inline-flex;align-items:center;border:0;background:none;border-radius:var(--r-sm);font-size:14px;font-weight:600;color:var(--text-secondary);cursor:pointer;transition:all var(--dur-fast) var(--ease-out)}
.v-segmented__item:hover{color:var(--text-primary)}
.v-segmented__item.is-active{background:var(--surface-page);color:var(--text-primary);box-shadow:var(--shadow-1)}

.v-drop{border:1.5px dashed var(--border-strong);border-radius:var(--r-md);background:var(--surface-sunken);padding:var(--s-32);text-align:center;color:var(--text-muted);cursor:pointer;transition:all var(--dur-fast) var(--ease-out)}
.v-drop:hover,.v-drop.is-over{border-color:var(--border-brand);background:var(--surface-brand-soft);color:var(--text-brand)}
.v-thumb{position:relative;aspect-ratio:4/3;border-radius:var(--r-sm);overflow:hidden;background:var(--ink-100)}
.v-thumb__cover{position:absolute;left:6px;top:6px;background:var(--surface-brand);color:#fff;font-size:11px;font-weight:600;padding:2px 6px;border-radius:var(--r-xs)}
.v-thumb__del{position:absolute;right:6px;top:6px}
@media (max-width:767px){.v-input,.v-select{height:var(--control-h-lg)}.v-check__box{width:22px;height:22px}}

/* css/chips.css */
.v-chip{display:inline-flex;align-items:center;gap:var(--s-6);height:36px;padding:0 var(--s-14,14px);border:1px solid var(--border-default);border-radius:var(--r-pill);background:var(--surface-page);font-size:14px;font-weight:500;color:var(--text-secondary);cursor:pointer;white-space:nowrap;transition:all var(--dur-fast) var(--ease-out)}
.v-chip:hover{border-color:var(--border-strong);color:var(--text-primary)}
.v-chip.is-active{background:var(--ink-900);border-color:var(--ink-900);color:#fff}
.v-chip--brand.is-active{background:var(--surface-brand);border-color:var(--surface-brand)}
.v-chip--sm{height:30px;font-size:13px;padding:0 var(--s-10)}
.v-chip__count{color:var(--text-faint);font-variant-numeric:tabular-nums}
.v-chip.is-active .v-chip__count{color:rgba(255,255,255,.7)}
.v-chip__x{margin-right:-4px;opacity:.6}
.v-chip__x:hover{opacity:1}
.v-chiprow{display:flex;gap:var(--s-8);flex-wrap:wrap}
.v-chiprow--scroll{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-inline:calc(var(--grid-margin) * -1);padding-inline:var(--grid-margin)}
.v-chiprow--scroll::-webkit-scrollbar{display:none}

.v-filterbar{display:flex;align-items:center;gap:var(--s-8);flex-wrap:wrap}
.v-filterbar__sep{width:1px;height:24px;background:var(--border-default);margin-inline:var(--s-4)}

.v-fdrop{position:relative}
.v-fdrop__pill{display:inline-flex;align-items:center;gap:var(--s-6);height:36px;padding:0 var(--s-14,14px);border:1px solid var(--border-default);border-radius:var(--r-pill);background:var(--surface-page);font-size:14px;font-weight:500;color:var(--text-secondary);cursor:pointer;white-space:nowrap;transition:border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}
.v-fdrop__pill:hover{border-color:var(--border-strong);color:var(--text-primary)}
.v-fdrop__pill.is-open{border-color:var(--border-strong);color:var(--text-primary)}
.v-fdrop__pill.is-set{border-color:var(--surface-brand);color:var(--text-link)}
.v-fdrop__pill .icon{color:var(--text-faint)}
.v-fdrop__pill.is-set .icon{color:currentColor}
.v-fdrop__count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:var(--r-pill);background:var(--surface-brand);color:#fff;font-size:11.5px;line-height:1;font-weight:700;font-variant-numeric:tabular-nums}
.v-fdrop__value{color:var(--text-primary);font-weight:600}

.v-fdrop__panel{position:absolute;top:calc(100% + 8px);left:0;z-index:40;width:360px;max-width:calc(100vw - 32px);background:var(--surface-page);border:1px solid var(--border-subtle);border-radius:var(--r-lg);box-shadow:var(--shadow-4);animation:v-rise var(--dur-enter) var(--ease-out)}
.v-fdrop__panel--end{left:auto;right:0}
.v-fdrop__head{display:flex;align-items:center;justify-content:space-between;gap:var(--s-16);padding:var(--s-20) var(--s-20) var(--s-12)}
.v-fdrop__title{font-family:var(--font-display);font-size:22px;font-weight:700;letter-spacing:-.02em;color:var(--text-primary)}
.v-fdrop__close{display:grid;place-items:center;width:32px;height:32px;margin:-4px -6px -4px 0;border:0;border-radius:var(--r-circle);background:none;color:var(--text-muted);cursor:pointer}
.v-fdrop__close:hover{background:var(--surface-hover);color:var(--text-primary)}
.v-fdrop__search{padding:0 var(--s-20) var(--s-12)}
.v-fdrop__body{max-height:300px;overflow-y:auto;padding:0 var(--s-20);display:flex;flex-direction:column;gap:var(--s-10)}
.v-fdrop__foot{display:flex;gap:var(--s-10);padding:var(--s-16) var(--s-20) var(--s-20)}
.v-fdrop__foot .v-btn--primary{flex:1}

.v-fdrop__options{display:grid;gap:var(--s-8)}
.v-fdrop__opt{height:40px;padding:0 var(--s-10);border:1px solid var(--border-default);border-radius:var(--r-pill);background:var(--surface-page);font-size:14px;font-weight:500;color:var(--text-secondary);cursor:pointer;white-space:nowrap}
.v-fdrop__opt:hover{border-color:var(--border-strong);color:var(--text-primary)}
.v-fdrop__opt.is-active{background:var(--surface-brand);border-color:var(--surface-brand);color:#fff}

@media (max-width:767px){.v-filterbar{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-inline:calc(var(--grid-margin) * -1);padding-inline:var(--grid-margin)}.v-filterbar::-webkit-scrollbar{display:none}.v-fdrop__panel{position:fixed;left:var(--s-16);right:var(--s-16);top:auto;bottom:var(--s-16);width:auto}}

.v-filters{background:var(--surface-page);border:1px solid var(--border-subtle);border-radius:var(--r-md)}.v-filters__group{border-bottom:1px solid var(--border-subtle)}
.v-filters__group:last-child{border-bottom:0}
.v-filters__head{width:100%;display:flex;align-items:center;justify-content:space-between;padding:var(--s-14,14px) var(--s-16);background:none;border:0;cursor:pointer;font-size:15px;font-weight:600;color:var(--text-primary);text-align:left}
.v-filters__head .icon{color:var(--text-faint);transition:transform var(--dur-base) var(--ease-out)}
.v-filters__group.is-open .v-filters__head .icon{transform:rotate(180deg)}
.v-filters__body{padding:0 var(--s-16) var(--s-16);display:flex;flex-direction:column;gap:var(--s-10)}
.v-filters__flags{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-8) var(--s-12)}
.v-filters__more{background:none;border:0;padding:0;color:var(--text-link);font-size:14px;font-weight:600;cursor:pointer;text-align:left}
.v-filters__applied{display:flex;gap:var(--s-8);flex-wrap:wrap;align-items:center}
.v-sort{display:inline-flex;align-items:center;gap:var(--s-8);font-size:14px;color:var(--text-secondary)}

/* css/cards.css */
.v-card{position:relative;display:flex;flex-direction:column;padding:var(--card-pad);background:var(--surface-card);border-radius:var(--r-card);transition:transform var(--dur-base) var(--ease-out),box-shadow var(--dur-base) var(--ease-out)}
.v-card:hover{transform:var(--hover-lift);box-shadow:var(--shadow-3)}
.v-card--framed{border:1px solid var(--border-subtle)}
.v-card--flat:hover{transform:none;box-shadow:none}
.v-card__media{position:relative;aspect-ratio:4/3;border-radius:var(--r-media);overflow:hidden;background:var(--ink-100)}
.v-card__media img{width:100%;height:100%;object-fit:cover;transition:transform var(--dur-slow) var(--ease-out)}
.v-card:hover .v-card__media img{transform:scale(1.03)}
.v-card__media--poster{aspect-ratio:3/4}
.v-card__media--wide{aspect-ratio:16/9}
.v-card__marks{position:absolute;left:var(--s-10);top:var(--s-10);display:flex;flex-direction:column;gap:var(--s-6);align-items:flex-start;z-index:2}
.v-card__fav{position:absolute;right:var(--s-10);top:var(--s-10);z-index:2}
.v-card__body{display:flex;flex-direction:column;gap:var(--s-6);padding-top:var(--s-12)}
.v-card__rubric{font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-faint)}
.v-card__title{font-family:var(--font-display);font-size:19px;line-height:24px;font-weight:700;letter-spacing:-.015em;color:var(--text-primary);display:flex;gap:var(--s-6);align-items:baseline;flex-wrap:wrap;overflow:hidden}
.v-card a.v-card__title:hover{color:var(--text-link);text-decoration:none}

.v-card__title .v-hotelstars{margin-left:var(--s-6)}
.v-card__meta{display:flex;align-items:center;gap:var(--s-8);flex-wrap:wrap;font-size:14px;color:var(--text-secondary)}
.v-card__meta .v-dot{color:var(--ink-300)}
.v-card__addr{display:flex;align-items:center;gap:var(--s-6);font-size:14px;color:var(--text-muted)}
.v-card__price{font-size:16px;font-weight:700;color:var(--text-price);font-variant-numeric:tabular-nums}
.v-card__price--exact{font-size:19px;font-family:var(--font-display);letter-spacing:-.01em}
.v-card__params{font-size:14px;color:var(--text-secondary);font-variant-numeric:tabular-nums}
.v-card__badges{display:flex;gap:var(--s-6);flex-wrap:wrap;margin-top:var(--s-2)}
.v-card__foot{display:flex;align-items:center;justify-content:space-between;gap:var(--s-8);margin-top:var(--s-4)}
.v-dot::before{content:"·"}

.v-card--overlay{padding:0;position:relative;border-radius:var(--r-card);overflow:hidden;aspect-ratio:3/4;background:var(--ink-900)}
.v-card--overlay:hover{transform:none;box-shadow:var(--shadow-4)}
.v-card--overlay .v-card__media{position:absolute;inset:0;aspect-ratio:auto;border-radius:0}
.v-card__shade{position:absolute;inset:0;background:linear-gradient(to top,rgba(8,16,26,.86) 0%,rgba(8,16,26,.55) 34%,rgba(8,16,26,.05) 62%,transparent 100%)}
.v-card__over{position:absolute;left:0;right:0;bottom:0;padding:20px;display:flex;flex-direction:column;gap:8px;z-index:2;pointer-events:none}
.v-card__over>*{pointer-events:auto}
.v-card__rubric--onmedia{color:rgba(255,255,255,.72)}
.v-card__title--onmedia{font-size:24px;line-height:28px;color:#fff;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.v-card--overlay a.v-card__title:hover{color:#fff;opacity:.85}
.v-card__overmeta{font-size:14px;line-height:20px;color:rgba(255,255,255,.82);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.v-card__overfoot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:8px}
.v-card__pricepill{display:inline-flex;align-items:center;height:40px;padding:0 20px;border-radius:var(--r-pill);background:#fff;color:var(--ink-900);font-weight:600;font-size:15px;white-space:nowrap;transition:background var(--dur-fast) var(--ease-out)}
.v-card__pricepill:hover{background:var(--ink-100);text-decoration:none;color:var(--ink-900)}
.v-card__fav--static{position:static}
.v-rail .v-card--overlay .v-card__title{-webkit-line-clamp:2}
@media (max-width:767px){.v-card__over{padding:16px}.v-card__title--onmedia{font-size:20px;line-height:24px}}

.v-card--row.v-card--row-article .v-card__media{width:132px;aspect-ratio:4/3}
.v-card--row.v-card--row-article .v-card__title{font-size:17px;line-height:22px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
@media (max-width:767px){.v-card--row.v-card--row-article{flex-direction:row;gap:var(--s-12)}.v-card--row.v-card--row-article .v-card__media{width:104px;aspect-ratio:4/3;border-radius:var(--r-md)}.v-card--row.v-card--row-article .v-card__body{padding:0}}

.v-card--row{flex-direction:row;gap:var(--s-16)}
.v-card--row .v-card__media{width:220px;flex:none;aspect-ratio:4/3}
.v-card--row .v-card__body{padding-top:0;flex:1;min-width:0}

.v-card--mobile{padding:0;overflow:hidden;border:1px solid var(--border-subtle)}
.v-card--mobile .v-card__media{aspect-ratio:16/9;border-radius:0}
.v-card--mobile .v-card__body{padding:var(--s-16);gap:var(--s-4)}
.v-card--mobile .v-card__title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.v-card--mobile .v-card__badges{margin-top:var(--s-8)}
.v-card--mobile:hover{transform:none;box-shadow:none}

@media (max-width:767px){
  .v-card__title{font-size:17px;line-height:22px}
  
  .v-card--row{padding:0;flex-direction:column;gap:0;overflow:hidden;border:1px solid var(--border-subtle)}
  .v-card--row .v-card__media{width:100%;aspect-ratio:16/9;border-radius:0}
  .v-card--row .v-card__body{padding:var(--s-16);gap:var(--s-4)}
  .v-card--row .v-card__title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
  .v-card--row .v-card__badges{margin-top:var(--s-8)}
}

.v-tile{display:flex;flex-direction:column;justify-content:space-between;gap:var(--s-24);padding:var(--s-20);border-radius:var(--r-lg);background:var(--surface-sunken);min-height:132px;transition:background var(--dur-fast) var(--ease-out),transform var(--dur-base) var(--ease-out)}
.v-tile:hover{background:var(--surface-brand-soft);transform:var(--hover-lift);text-decoration:none}
.v-tile__icon{color:var(--text-brand)}
.v-tile__name{font-family:var(--font-display);font-size:19px;font-weight:700;letter-spacing:-.015em;color:var(--text-primary)}
.v-tile__count{font-size:14px;color:var(--text-muted);font-variant-numeric:tabular-nums}

.v-article-card__kicker{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--accent-600)}
.v-news-item{display:flex;gap:var(--s-16);padding:var(--s-16) 0;border-bottom:1px solid var(--border-subtle)}
.v-news-item__time{font-size:13px;color:var(--text-faint);width:56px;flex:none;font-variant-numeric:tabular-nums}

/* css/badges.css */
.v-badge{display:inline-flex;align-items:center;gap:var(--s-4);height:24px;padding:0 var(--s-8);border-radius:var(--r-xs);background:var(--surface-sunken);color:var(--text-secondary);font-size:13px;font-weight:500;white-space:nowrap}
.v-badge--outline{background:transparent;border:1px solid var(--border-default)}

.v-badge--soon{background:transparent;border:1px dashed var(--border-default);color:var(--text-muted)}
.v-badge__soon{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint)}
.v-badge--brand{background:var(--surface-brand-soft);color:var(--text-brand)}
.v-badge--accent{background:var(--surface-accent-soft);color:var(--accent-700)}
.v-badge--sand{background:var(--sand-50);color:var(--sand-700)}
.v-badge--onmedia{background:rgba(19,26,33,.62);color:#fff;backdrop-filter:blur(6px)}
.v-badge--lg{height:28px;font-size:14px;padding:0 var(--s-10)}

.v-mark{display:inline-flex;align-items:center;gap:var(--s-6);height:26px;padding:0 var(--s-10) 0 var(--s-8);border-radius:var(--r-pill);font-size:12px;font-weight:600;letter-spacing:-.005em;white-space:nowrap;border:1px solid transparent}
.v-mark .icon{width:14px;height:14px}
.v-mark--portal{background:var(--mark-portal-bg);color:var(--mark-portal-fg)}
.v-mark--alushta{background:var(--mark-alushta-bg);color:var(--mark-alushta-fg);border-color:var(--mark-alushta-br)}
.v-mark--lg{height:32px;font-size:14px;padding:0 var(--s-14,14px) 0 var(--s-10)}
.v-mark--lg .icon{width:16px;height:16px}
.v-mark--compact{width:26px;padding:0;justify-content:center}

.v-rating{display:inline-flex;align-items:center;gap:var(--s-6);font-size:14px}
.v-rating__value{font-weight:700;color:var(--text-primary);font-variant-numeric:tabular-nums}
.v-rating__star{color:var(--rating-star)}
.v-rating__count{color:var(--text-muted)}
.v-rating--lg{font-size:16px}
.v-rating--sm{font-size:13.5px}
.v-rating--lg .v-rating__value{font-size:22px;font-family:var(--font-display)}
.v-stars{display:inline-flex;gap:1px;color:var(--rating-star)}
.v-stars .is-empty{color:var(--rating-empty)}

.v-hotelstars{display:inline-flex;gap:1px;color:var(--sand-500)}
.v-hotelstars .icon{width:13px;height:13px}

.v-status{display:inline-flex;align-items:center;gap:var(--s-6);min-height:24px;padding:2px var(--s-8);border-radius:var(--r-pill);font-size:12.5px;line-height:18px;font-weight:600;text-wrap:pretty}
.v-status::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.v-status--draft{background:var(--status-draft-bg);color:var(--status-draft-fg)}
.v-status--review{background:var(--status-review-bg);color:var(--status-review-fg)}
.v-status--live{background:var(--status-live-bg);color:var(--status-live-fg)}
.v-status--rejected{background:var(--status-rejected-bg);color:var(--status-rejected-fg)}
.v-status--paused{background:var(--status-paused-bg);color:var(--status-paused-fg)}
.v-status--hidden{background:var(--status-hidden-bg);color:var(--status-hidden-fg)}
.v-status--expiring{background:var(--status-expiring-bg);color:var(--status-expiring-fg)}

.v-status--outline{box-shadow:inset 0 0 0 1px currentColor}

.v-cardstate{display:grid;gap:var(--s-8)}
.v-cardstate__axis{display:grid;grid-template-columns:130px minmax(0,1fr);gap:var(--s-10);align-items:center}
.v-cardstate__label{font-size:12.5px;color:var(--text-muted)}
.v-cardstate__out{margin-top:var(--s-4);padding:var(--s-10) var(--s-12);border-radius:var(--r-dense);background:var(--red-50);color:var(--red-700)}
.v-cardstate__out.is-online{background:var(--green-50);color:var(--green-700)}
.v-cardstate__outhead{display:flex;align-items:center;gap:var(--s-6);font-size:13.5px;font-weight:600}
.v-cardstate__reasons{margin:var(--s-6) 0 0;padding-left:var(--s-20);font-size:13px;line-height:19px;font-weight:400}
.v-cardstate--row{display:flex;flex-wrap:wrap;gap:var(--s-6);align-items:center}
.v-cardstate__verdict{display:inline-flex;align-items:center;gap:var(--s-4);height:24px;padding:0 var(--s-8);border-radius:var(--r-pill);background:var(--red-50);color:var(--red-700);font-size:12.5px;font-weight:700}
.v-cardstate__verdict.is-online{background:var(--green-50);color:var(--green-700)}

.v-notif{width:360px;background:var(--surface-page);border:1px solid var(--border-subtle);border-radius:var(--r-dense);box-shadow:var(--shadow-4);overflow:hidden}
.v-notif__head{display:flex;align-items:center;justify-content:space-between;gap:var(--s-12);padding:var(--s-12) var(--s-14,14px);border-bottom:1px solid var(--border-subtle)}
.v-notif__head .v-btn--link{font-size:12.5px}
.v-notif__count{display:inline-grid;place-items:center;min-width:20px;height:20px;margin-left:var(--s-6);padding:0 6px;border-radius:var(--r-pill);background:var(--red-500);color:#fff;font-size:11px;font-weight:700}
.v-notif__list{max-height:320px;overflow-y:auto}
.v-notif__item{display:flex;gap:var(--s-10);width:100%;padding:var(--s-10) var(--s-14,14px);text-align:left;background:none;border:0;border-bottom:1px solid var(--border-subtle);cursor:pointer;color:var(--text-secondary)}
.v-notif__item:hover{background:var(--surface-hover)}
.v-notif__item.is-unread{background:var(--surface-brand-soft);color:var(--text-primary);font-weight:500}
.v-notif__text{display:block;font-size:13.5px;line-height:18px}
.v-notif__time{display:block;margin-top:2px;font-size:12px;color:var(--text-faint);font-weight:400}

.v-open{font-size:14px;font-weight:600}
.v-open--now{color:var(--green-500)}
.v-open--closed{color:var(--text-muted)}

/* css/feedback.css */
.v-overlay{position:fixed;inset:0;background:var(--surface-overlay);backdrop-filter:blur(2px);display:grid;grid-template-columns:1fr;justify-items:center;align-items:start;overflow-y:auto;overscroll-behavior:contain;padding:var(--s-24);z-index:100;animation:v-fade var(--dur-enter) var(--ease-out)}
@keyframes v-fade{from{opacity:0}}
.v-modal{width:100%;max-width:520px;margin:auto;max-height:calc(100dvh - var(--s-48,48px));display:flex;flex-direction:column;background:var(--surface-page);border-radius:var(--r-lg);box-shadow:var(--shadow-4);overflow:hidden;animation:v-rise var(--dur-enter) var(--ease-out)}
@keyframes v-rise{from{opacity:0;transform:translateY(12px)}}
.v-modal--wide{max-width:800px}
.v-modal--full{max-width:1120px}
.v-modal__head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--s-16);padding:var(--s-24) var(--s-24) var(--s-12);flex:none}
.v-modal__title{font-family:var(--font-display);font-size:22px;font-weight:700;letter-spacing:-.018em}
.v-modal__body{padding:0 var(--s-24) var(--s-24);color:var(--text-secondary);overflow-y:auto;min-height:0}
.v-modal__foot{display:flex;justify-content:flex-end;gap:var(--s-10);padding:var(--s-16) var(--s-24);background:var(--surface-sunken);border-top:1px solid var(--border-subtle);flex:none}
.v-modal--danger .v-modal__title{color:var(--red-700)}
@media (max-width:767px){.v-overlay{padding:0;align-items:end}.v-modal{max-width:none;margin:auto 0 0;border-radius:var(--r-lg) var(--r-lg) 0 0}}

.v-auth{max-width:420px}
.v-auth .v-modal__body{gap:var(--s-14,14px)}
.v-auth__or{display:flex;align-items:center;gap:var(--s-12);color:var(--text-faint);font-size:13px;margin-block:var(--s-2)}
.v-auth__or::before,.v-auth__or::after{content:"";flex:1;height:1px;background:var(--border-subtle)}
.v-auth__consent{font-size:13px;line-height:18px;color:var(--text-secondary)}
.v-auth__foot{display:flex;justify-content:space-between;gap:var(--s-16);font-size:14px;padding-top:var(--s-4)}
.v-auth--full{max-width:none;height:100%;border-radius:0;display:flex;flex-direction:column}
.v-auth--full .v-modal__body{flex:1;padding-top:var(--s-24)}
.v-overlay--sheet{padding:0;justify-items:stretch;align-items:stretch}
.v-overlay--sheet .v-modal{margin:0;max-height:none}
@media (max-width:767px){.v-auth{max-width:none}}

.v-alert{display:flex;gap:var(--s-12);padding:var(--s-14,14px) var(--s-16);border-radius:var(--r-md);font-size:14px;line-height:20px}
.v-alert__title{font-weight:600;margin-bottom:2px;color:var(--text-primary)}
.v-alert--info{background:var(--surface-brand-soft);color:var(--blue-800)}
.v-alert--success{background:var(--green-50);color:var(--green-700)}
.v-alert--warning{background:var(--amber-50);color:var(--amber-700)}
.v-alert--error{background:var(--red-50);color:var(--red-700)}
.v-alert--neutral{background:var(--surface-sunken);color:var(--text-secondary)}

.v-toast{display:flex;align-items:center;gap:var(--s-12);padding:var(--s-12) var(--s-16);background:var(--surface-inverse);color:#fff;border-radius:var(--r-md);box-shadow:var(--shadow-3);font-size:14px}

.v-empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--s-12);padding:var(--s-56) var(--s-24);color:var(--text-secondary)}
.v-empty__art{width:64px;height:64px;border-radius:var(--r-circle);background:var(--surface-brand-soft);color:var(--text-brand);display:grid;place-items:center}
.v-empty__title{font-family:var(--font-display);font-size:20px;font-weight:700;color:var(--text-primary)}
.v-empty__text{max-width:44ch}

.v-skel{background:var(--surface-skeleton);border-radius:var(--r-xs);position:relative;overflow:hidden}
.v-skel::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.7),transparent);animation:v-shimmer 1.3s infinite}
@keyframes v-shimmer{to{transform:translateX(100%)}}
.v-skel--text{height:12px}
.v-skel--title{height:20px;border-radius:var(--r-sm)}
.v-skel--media{aspect-ratio:4/3;border-radius:var(--r-media)}

.v-tooltip{position:relative}
.v-tooltip__bubble{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:var(--surface-inverse);color:#fff;font-size:12.5px;line-height:16px;padding:6px 10px;border-radius:var(--r-sm);white-space:nowrap;box-shadow:var(--shadow-2);z-index:20}

.v-consent{position:fixed;left:var(--s-16);right:var(--s-16);bottom:var(--s-16);z-index:90;max-width:560px;background:var(--surface-page);border:1px solid var(--border-default);border-radius:var(--r-lg);box-shadow:var(--shadow-4);padding:var(--s-20);display:flex;flex-direction:column;gap:var(--s-12)}
.v-consent__text{font-size:14px;line-height:20px;color:var(--text-secondary)}

.v-pager{display:flex;align-items:center;gap:var(--s-4);justify-content:center}
.v-pager__item{min-width:40px;height:40px;padding:0 var(--s-10);display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r-sm);font-size:15px;font-weight:500;color:var(--text-secondary);border:0;background:none;cursor:pointer;font-variant-numeric:tabular-nums}
.v-pager__item:hover{background:var(--surface-hover);color:var(--text-primary);text-decoration:none}
.v-pager__item.is-active{background:var(--surface-brand);color:#fff}
.v-pager__gap{color:var(--text-faint);padding:0 var(--s-4)}

/* css/data.css */
.v-table{width:100%;border-collapse:collapse;font-size:14px}
.v-table th{text-align:left;font-weight:600;font-size:12.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-faint);padding:var(--s-8) var(--s-12);border-bottom:1px solid var(--border-default);white-space:nowrap}
.v-table td{padding:var(--dense-pad-y) var(--dense-pad-x);border-bottom:1px solid var(--border-subtle);vertical-align:middle;height:var(--dense-row-h)}
.v-table tbody tr:hover{background:var(--surface-hover)}
.v-table--num td.num,.v-table--num th.num{text-align:right;font-variant-numeric:tabular-nums}
.v-table td.strong{font-weight:600;color:var(--text-primary)}
.v-table--zebra tbody tr:nth-child(even){background:var(--ink-25)}

.v-tabs{display:flex;gap:var(--s-20);border-bottom:1px solid var(--border-subtle)}
.v-tab{padding:var(--s-12) 0;border:0;background:none;font-size:15px;font-weight:600;color:var(--text-muted);cursor:pointer;position:relative;white-space:nowrap}
.v-tab:hover{color:var(--text-primary)}
.v-tab.is-active{color:var(--text-primary)}
.v-tab.is-active::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--surface-brand);border-radius:2px}
.v-tab__count{margin-left:6px;font-size:13px;color:var(--text-faint);font-variant-numeric:tabular-nums}

.v-map{position:relative;border-radius:var(--r-md);overflow:hidden;background:var(--map-land);min-height:220px}
.v-map__grid{position:absolute;inset:0;background-image:linear-gradient(var(--ink-100) 1px,transparent 1px),linear-gradient(90deg,var(--ink-100) 1px,transparent 1px);background-size:48px 48px;opacity:.9}
.v-map__water{position:absolute;background:var(--map-water)}
.v-map__pin{position:absolute;transform:translate(-50%,-100%);color:var(--map-pin);filter:drop-shadow(0 3px 6px rgba(19,26,33,.28))}
.v-map__road{position:absolute;background:#fff;height:6px;border-radius:3px}
.v-map__ctrl{position:absolute;right:var(--s-12);top:var(--s-12);display:flex;flex-direction:column;gap:1px;border-radius:var(--r-sm);overflow:hidden;box-shadow:var(--shadow-2)}

.v-chart{display:flex;align-items:flex-end;gap:4px;height:140px}
.v-chart__bar{flex:1;background:var(--blue-200);border-radius:3px 3px 0 0;transition:background var(--dur-fast) var(--ease-out)}
.v-chart__bar.is-hi{background:var(--surface-brand)}
.v-chart__bar:hover{background:var(--blue-500)}
.v-chart__axis{display:flex;justify-content:space-between;font-size:11px;color:var(--text-faint);margin-top:var(--s-6)}
.v-metric{display:flex;flex-direction:column;gap:var(--s-2)}
.v-metric__value{font-family:var(--font-display);font-size:28px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.v-metric__label{font-size:13px;color:var(--text-muted)}
.v-metric__delta{font-size:13px;font-weight:600}
.v-metric__delta--up{color:var(--green-500)}
.v-metric__delta--down{color:var(--red-500)}

.v-gallery{display:grid;grid-template-columns:2fr 1fr 1fr;grid-template-rows:1fr 1fr;gap:var(--s-8);border-radius:var(--r-md);overflow:hidden}
.v-gallery__item{background:var(--ink-100);overflow:hidden;position:relative;padding:0;border:0;cursor:zoom-in}
.v-gallery__item img{width:100%;height:100%;object-fit:cover}
.v-gallery__item:first-child{grid-row:span 2}
.v-gallery__more{position:absolute;inset:0;background:rgba(19,26,33,.6);color:#fff;display:grid;place-items:center;font-weight:600}

.v-gallery--strip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));grid-template-rows:none;height:auto}
.v-gallery--strip .v-gallery__item{aspect-ratio:4/3}
.v-gallery--strip .v-gallery__item:first-child{grid-row:auto}
@media (max-width:767px){.v-gallery--strip{display:flex;overflow-x:auto;scrollbar-width:none}.v-gallery--strip::-webkit-scrollbar{display:none}.v-gallery--strip .v-gallery__item{flex:none;width:200px}}

@media (max-width:767px){.v-gallery{grid-template-columns:1fr;grid-template-rows:auto}.v-gallery__item:first-child{grid-row:auto;aspect-ratio:4/3}.v-gallery__item:not(:first-child){display:none}}

.v-place{display:flex;flex-direction:column;gap:var(--s-40);padding-bottom:var(--s-48)}
.v-place__head{display:flex;flex-direction:column;gap:var(--s-10)}
.v-place__crumbs{display:flex;align-items:center;gap:var(--s-8);font-size:13.5px;color:var(--text-muted)}
.v-place__crumbs a{color:var(--text-link)}
.v-place__fav{align-self:flex-start;padding:0;border:0;background:none;font-size:13.5px;color:var(--text-link);cursor:pointer}
.v-place__facts{display:flex;flex-direction:column;gap:var(--s-12)}
.v-place__contacts{display:flex;flex-direction:column;gap:var(--s-4);font-size:15px}
.v-place__addr{color:var(--text-secondary)}
.v-place__link{color:var(--text-link);align-self:flex-start}

.v-eyebrow{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--accent-600)}

.v-objhero{display:grid;grid-template-columns:340px minmax(0,1fr);border-radius:var(--r-lg);overflow:hidden;min-height:300px}
.v-objhero__panel{display:flex;flex-direction:column;justify-content:flex-end;gap:var(--s-8);padding:var(--s-28) var(--s-24);background:var(--ink-800);color:#fff}
.v-objhero__rubric{display:flex;align-items:center;gap:var(--s-8);font-size:12.5px;text-transform:uppercase;letter-spacing:.06em;color:rgba(255,255,255,.62)}

.v-objhero__name{margin:0;color:inherit;font-family:var(--font-display);font-size:34px;line-height:40px;letter-spacing:-.02em;font-weight:700}
.v-objhero__addr{font-size:13.5px;color:rgba(255,255,255,.7)}

.v-objhero__open{align-self:flex-start;margin-top:var(--s-4);font-size:13.5px;font-weight:600;color:var(--green-50)}
.v-objhero__photo{position:relative;background:var(--ink-100)}
.v-objhero__photo img{width:100%;height:100%;object-fit:cover;display:block}
.v-objhero__acts{position:absolute;right:var(--s-16);bottom:var(--s-16);display:flex;gap:var(--s-8)}
.v-objhero__acts .v-iconbtn{background:rgba(255,255,255,.92);border-color:transparent}
@media (max-width:900px){.v-objhero{grid-template-columns:1fr}.v-objhero__panel{order:2;background:var(--surface-page);color:var(--text-primary)}.v-objhero__name{font-size:26px;line-height:32px}.v-objhero__addr{color:var(--text-muted)}.v-objhero__photo{aspect-ratio:16/9}}

.v-promotiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--s-12);max-width:620px}
.v-promotile{display:flex;align-items:center;justify-content:space-between;gap:var(--s-12);padding:var(--s-14) var(--s-16);border-radius:var(--r-md);background:var(--surface-sunken);color:var(--text-primary);font-size:14px;font-weight:600;line-height:19px;text-decoration:none}
.v-promotile:hover{background:var(--surface-hover)}
.v-promotile .icon{color:var(--text-brand);flex:none}

.v-objgrid{display:grid;grid-template-columns:minmax(0,1fr) 300px;justify-content:start;gap:var(--s-24);align-items:start;padding-block:var(--s-32) var(--s-48)}

.v-objgrid__rail{display:flex;flex-direction:column;gap:var(--s-24);align-self:stretch}

.v-objgrid__slot{flex:3 1 0;min-height:0;position:relative}
.v-objgrid__slot--last{flex:2 1 0}
.v-objgrid__stick{position:sticky;top:calc(var(--header-h) + var(--s-16))}

.v-objgrid__spacer{flex:2 1 0;min-height:0}
@media (max-width:1023px){.v-objgrid{grid-template-columns:1fr;gap:var(--s-24)}.v-objgrid__stick{position:static}.v-objgrid__slot,.v-objgrid__slot--last{flex:0 0 auto}}

.v-objgrid .v-card__media{aspect-ratio:16/10}
.v-objgrid .v-card__body{padding:var(--s-10) var(--s-12) var(--s-12);gap:var(--s-4)}
.v-objgrid .v-card__title{font-size:15px;line-height:20px}
.v-objgrid .v-card__meta,.v-objgrid .v-card__row{font-size:12.5px}
.v-objgrid .v-card__badges{display:none}

.v-adrow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s-16)}
@media (max-width:767px){.v-adrow{grid-template-columns:repeat(2,minmax(0,1fr))}}

.v-specs{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--s-16) var(--s-24);padding-block:var(--s-16);border-top:1px solid var(--border-subtle);border-bottom:1px solid var(--border-subtle)}
.v-spec__k{display:block;font-size:12.5px;color:var(--text-faint);margin-bottom:2px}
.v-spec__v{display:block;font-size:14.5px;color:var(--text-primary)}
.v-spec__v a{color:var(--text-link)}

.v-menutile{display:inline-flex;align-items:center;gap:var(--s-12);padding:var(--s-14) var(--s-16);border:1px solid var(--border-subtle);border-radius:var(--r-md);background:var(--surface-page);text-decoration:none;color:var(--text-primary)}
.v-menutile:hover{border-color:var(--border-strong)}
.v-menutile__name{display:block;font-weight:600;font-size:15px}
.v-menutile__ext{display:block;font-size:12px;color:var(--text-faint);text-transform:uppercase;letter-spacing:.04em}

.v-rate{display:flex;flex-direction:column;gap:var(--s-12)}
.v-rate__head{display:flex;align-items:center;gap:var(--s-12);flex-wrap:wrap}
.v-rate__thumbs{display:flex;gap:var(--s-8)}

.v-faq{display:flex;flex-direction:column}
.v-faq__item{border-bottom:1px solid var(--border-subtle)}
.v-faq__q{display:flex;align-items:center;justify-content:space-between;gap:var(--s-16);width:100%;padding:var(--s-16) 0;border:0;background:none;text-align:left;font-size:15.5px;font-weight:500;color:var(--text-primary);cursor:pointer}
.v-faq__q .icon{color:var(--text-muted);flex:none}
.v-faq__q:hover{color:var(--text-brand)}
.v-faq__a{padding-bottom:var(--s-16);font-size:14.5px;line-height:22px;color:var(--text-secondary);max-width:72ch}

.v-reviews{display:flex;flex-direction:column;gap:var(--s-4)}
.v-reviews__summary{display:flex;align-items:center;gap:var(--s-40);padding:var(--s-20);margin-bottom:var(--s-8);background:var(--surface-sunken);border-radius:var(--r-md);flex-wrap:wrap}
.v-reviews__score{display:flex;flex-direction:column;gap:var(--s-4);min-width:120px}
.v-reviews__score b{font-family:var(--font-display);font-size:40px;line-height:1;letter-spacing:-.02em;color:var(--text-primary)}
.v-reviews__bars{display:flex;flex-direction:column;gap:var(--s-6);flex:1;min-width:240px;max-width:420px}
.v-reviews__bar{display:grid;grid-template-columns:12px 1fr 28px;align-items:center;gap:var(--s-10);font-size:13px;color:var(--text-muted)}
.v-reviews__track{height:6px;border-radius:var(--r-pill);background:var(--ink-100);overflow:hidden}
.v-reviews__fill{display:block;height:100%;border-radius:var(--r-pill);background:var(--accent-500)}
.v-reviews__num{text-align:right}
@media (max-width:767px){.v-reviews__summary{gap:var(--s-20)}}

.v-placehead{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--s-24);margin-block:var(--s-16) var(--s-20);flex-wrap:wrap}
.v-placehead__main{display:flex;flex-direction:column;gap:var(--s-10);min-width:0}
.v-contactcard{display:flex;flex-direction:column;gap:var(--s-10);padding:var(--s-20);background:var(--surface-page);border:1px solid var(--border-subtle);border-radius:var(--r-lg);box-shadow:var(--shadow-1)}

.v-inflow{margin-block:var(--s-8)}
.v-attrs{display:grid;gap:0}
.v-attrs__row{display:grid;grid-template-columns:minmax(0,220px) minmax(0,1fr);gap:var(--s-24);padding-block:var(--s-10);border-bottom:1px solid var(--border-subtle);font-size:15px}
.v-attrs__k{color:var(--text-muted)}
.v-attrs__v{color:var(--text-primary)}
@media (max-width:767px){.v-attrs__row{grid-template-columns:1fr;gap:2px}.v-placehead{align-items:flex-start}}

.v-lightbox{position:fixed;inset:0;z-index:200;background:rgba(19,26,33,.88);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--s-16);padding:var(--s-24);animation:v-fade var(--dur-enter) var(--ease-out)}
.v-lightbox__close{position:absolute;top:var(--s-20);right:var(--s-24);display:inline-flex;align-items:center;gap:var(--s-6);height:40px;padding:0 var(--s-16);border:0;border-radius:var(--r-pill);background:#fff;color:var(--text-primary);font-size:15px;font-weight:600;cursor:pointer}
.v-lightbox__stage{position:relative;display:flex;align-items:center;justify-content:center;max-width:min(1100px,92vw);max-height:78vh}
.v-lightbox__img{max-width:100%;max-height:78vh;object-fit:contain;border-radius:var(--r-sm);background:var(--ink-800)}
.v-lightbox__nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;display:grid;place-items:center;border:0;border-radius:50%;background:rgba(255,255,255,.92);color:var(--text-primary);cursor:pointer}
.v-lightbox__nav:hover{background:#fff}
.v-lightbox__nav--prev{left:-58px}
.v-lightbox__nav--next{right:-58px}
.v-lightbox__foot{display:flex;align-items:center;gap:var(--s-16);color:rgba(255,255,255,.82);font-size:14px}
.v-lightbox__foot b{color:#fff}
@media (max-width:1023px){.v-lightbox__nav--prev{left:var(--s-8)}.v-lightbox__nav--next{right:var(--s-8)}}

.v-hours{display:grid;grid-template-columns:auto 1fr;gap:var(--s-6) var(--s-24);font-size:14px}
.v-hours__day{color:var(--text-muted)}
.v-hours__val{text-align:right;font-variant-numeric:tabular-nums}
.v-hours__row.is-today{font-weight:600;color:var(--text-primary)}

.v-review{display:flex;flex-direction:column;gap:var(--s-10);padding:var(--s-20) 0;border-bottom:1px solid var(--border-subtle)}
.v-review__head{display:flex;align-items:center;gap:var(--s-8);flex-wrap:wrap}
.v-review__author{font-weight:600;color:var(--text-primary)}
.v-review__dot{width:3px;height:3px;border-radius:50%;background:var(--ink-300)}
.v-review__date{font-size:13px;color:var(--text-faint)}
.v-review__report{margin-left:auto;border:0;background:none;padding:0;font-size:13px;color:var(--text-faint);cursor:pointer}
.v-review__report:hover{color:var(--text-secondary)}
.v-review__text{margin:0;font-size:15px;line-height:23px;color:var(--text-primary);text-wrap:pretty;max-width:72ch}
.v-review__helpful{display:inline-flex;align-items:center;gap:var(--s-6);align-self:flex-start;height:32px;padding:0 var(--s-12);border:1px solid var(--border-default);border-radius:var(--r-pill);background:var(--surface-page);font-size:13.5px;font-weight:500;color:var(--text-secondary);cursor:pointer}
.v-review__helpful:hover{border-color:var(--border-strong);color:var(--text-primary)}
.v-review__helpful span{color:var(--text-faint)}
.v-review__reply{margin-left:var(--s-24);padding:var(--s-12) var(--s-16);background:var(--surface-brand-soft);border-radius:var(--r-sm)}
.v-review__reply-head{display:flex;align-items:center;gap:var(--s-6);margin-bottom:var(--s-4)}
.v-review__reply-head .icon{color:var(--text-brand)}
.v-review__reply-who{font-weight:600;color:var(--text-brand);font-size:13.5px}
.v-review__reply-text{margin:0;font-size:14px;line-height:21px;color:var(--text-secondary);max-width:70ch}
@media (max-width:767px){.v-review__reply{margin-left:0}}

/* css/ads.css */
.v-ad{position:relative;border-radius:var(--r-md);overflow:hidden;background:var(--ad-placeholder-bg)}
.v-ad__media{display:block;width:100%;height:100%;object-fit:cover}
.v-ad__label{position:absolute;right:var(--s-8);bottom:var(--s-8);z-index:2;display:inline-flex;align-items:center;gap:var(--s-4);height:20px;padding:0 var(--s-6);border-radius:var(--r-xs);background:rgba(255,255,255,.86);backdrop-filter:blur(6px);color:var(--ad-label-fg);font-size:11px;line-height:1;letter-spacing:.02em;cursor:pointer;border:0;font-family:var(--font-text)}
.v-ad__label:hover{background:#fff;color:var(--text-secondary)}

.v-adwrap{display:flex;flex-direction:column;position:relative}

.v-adwrap--bare{display:block}
.v-ad__label--outside{position:static;background:none;backdrop-filter:none;padding:0;height:auto;margin-top:var(--s-6);align-self:flex-end}
.v-ad__erid{font-family:var(--font-mono);font-size:10.5px;letter-spacing:0}
.v-ad__sponsor{position:absolute;left:var(--s-8);bottom:var(--s-8);z-index:2;font-size:12px;color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.5)}

.v-ad__dots{position:absolute;top:var(--s-8);right:var(--s-8);z-index:3;width:24px;height:24px;display:grid;place-items:center;padding:0;border:0;border-radius:var(--r-xs);background:rgba(255,255,255,.86);color:var(--text-secondary);cursor:pointer}
.v-ad__dots:hover{background:#fff;color:var(--text-primary)}
.v-admenu{position:absolute;top:36px;right:var(--s-8);z-index:40;width:264px;display:flex;flex-direction:column;padding:var(--s-8) 0;background:var(--surface-page);border-radius:var(--r-md);box-shadow:var(--shadow-4);font-size:14px;text-align:left}
.v-admenu__about{display:flex;gap:var(--s-10);padding:var(--s-8) var(--s-14,14px) var(--s-10);color:var(--text-secondary)}
.v-admenu__about b{display:block;color:var(--text-primary);font-weight:600}
.v-admenu__adv{display:block;margin-top:2px;font-size:13px;line-height:17px}
.v-admenu__item{display:flex;align-items:center;gap:var(--s-10);width:100%;padding:var(--s-10) var(--s-14,14px);border:0;background:none;color:var(--text-link);font-size:14px;text-align:left;cursor:pointer}
.v-admenu__item:hover{background:var(--surface-hover)}
.v-admenu__item .icon{color:var(--text-muted);flex:none}
.v-admenu__erid{display:flex;align-items:center;gap:var(--s-10);padding:var(--s-10) var(--s-14,14px) var(--s-6);color:var(--text-secondary);font-family:var(--font-mono);font-size:13px}
.v-admenu__eridtag{flex:none;padding:2px 4px;border:1px solid var(--border-default);border-radius:3px;font-size:9px;font-weight:700;letter-spacing:.04em;color:var(--text-muted)}

.v-ad--billboard{aspect-ratio:1280/200}
.v-ad--wide{aspect-ratio:1280/120}
.v-ad--inline{aspect-ratio:16/5}
.v-ad--card{aspect-ratio:4/3}
.v-ad--side{aspect-ratio:300/600}
.v-ad--side-sm{aspect-ratio:300/250}
.v-ad--mobile{aspect-ratio:320/100}

.v-ad--native{aspect-ratio:16/10}

.v-ad--vacant{display:flex;align-items:center;justify-content:center;gap:var(--s-10);background:var(--surface-sunken);color:var(--ad-placeholder-fg);font-size:14px}
.v-ad--vacant .v-ad__cta{color:var(--text-link);font-weight:600}
.v-ad--lazy{background:var(--surface-skeleton)}

.v-ad--premium{margin-bottom:var(--s-24)}

.v-adpopup{width:100%;max-width:600px;background:var(--surface-page);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--shadow-4);position:relative}
.v-adpopup__close{position:absolute;right:var(--s-10);top:var(--s-10);z-index:3}

@media (max-width:1023px){.v-ad--side,.v-ad--side-sm,.v-article__rail .v-ad--card{aspect-ratio:1200/300}}
@media (max-width:767px){.v-ad--side,.v-ad--side-sm,.v-article__rail .v-ad--card{aspect-ratio:320/100}}

/* css/editorial.css */
.v-hero{position:relative;min-height:520px;display:flex;align-items:flex-end;border-radius:0;overflow:hidden;background:var(--ink-800)}
.v-hero img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.v-hero__scrim{position:absolute;inset:0;background:var(--scrim-full)}
.v-hero__inner{position:relative;padding-block:var(--s-48);color:#fff}
.v-hero__inner h1{color:#fff;max-width:20ch}
.v-hero__kicker{display:inline-flex;margin-bottom:var(--s-12);color:#fff;background:rgba(255,255,255,.18);backdrop-filter:blur(8px);border-radius:var(--r-pill);padding:5px 12px;font-size:13px;font-weight:600}
@media (max-width:767px){.v-hero{min-height:400px}}

.v-article{display:grid;grid-template-columns:minmax(0,var(--measure-article)) 300px;gap:var(--s-48);align-items:start;justify-content:center;padding-block:var(--s-48)}
.v-article__rail{align-self:stretch}
@media (min-width:1440px){.v-article{gap:var(--s-64,64px);grid-template-columns:minmax(0,var(--measure-article)) 336px}}
@media (max-width:1023px){.v-article{grid-template-columns:minmax(0,1fr);justify-items:center;gap:var(--s-32);padding-block:var(--s-32)}.v-article__rail{width:100%;max-width:var(--measure-article)}.v-article__rail .v-sticky{position:static}}

.v-prose__ad{margin-block:var(--s-40)}

.v-hero--contained,.v-herobox .v-hero{min-height:360px;border-radius:var(--r-lg)}
.v-hero--contained .v-hero__inner,.v-herobox .v-hero__inner{padding-inline:var(--s-40);padding-block:var(--s-32);max-width:none}
.v-hero--contained .v-hero__inner h1,.v-herobox .v-hero__inner h1{max-width:24ch}
@media (max-width:767px){.v-hero--contained,.v-herobox .v-hero{min-height:300px;border-radius:var(--r-md)}.v-hero--contained .v-hero__inner,.v-herobox .v-hero__inner{padding-inline:var(--s-20)}}

.v-prose{font-size:var(--t-article-size);line-height:var(--t-article-lh);color:var(--ink-800);max-width:var(--measure-article)}
.v-prose > * + *{margin-top:var(--s-24)}
.v-prose h2{font-size:var(--t-h2-size);line-height:var(--t-h2-lh);letter-spacing:var(--t-h2-ls);margin-top:var(--s-48)}
.v-prose h3{font-size:var(--t-h3-size);line-height:var(--t-h3-lh);margin-top:var(--s-32)}
.v-prose ul,.v-prose ol{padding-left:1.3em;display:flex;flex-direction:column;gap:var(--s-8)}
.v-prose li::marker{color:var(--text-faint)}
.v-prose a{text-decoration:underline;text-decoration-color:var(--blue-200);text-decoration-thickness:2px}

.v-placelink{display:inline;font-weight:600;color:var(--text-link);text-decoration:underline;text-decoration-color:var(--blue-200);text-decoration-thickness:2px}
.v-placelink::after{content:"";display:inline-block;width:13px;height:13px;margin-left:3px;vertical-align:-1px;background:currentColor;-webkit-mask:no-repeat center/contain url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><path d='M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z'/><circle cx='12' cy='10' r='3'/></svg>");mask:no-repeat center/contain url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><path d='M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z'/><circle cx='12' cy='10' r='3'/></svg>")}

.v-quote,.v-inset,.v-inthis,.v-divider,.v-prose__ad,.v-figure--full,.v-figure--column,.v-prose h2,.v-prose h3{clear:both}

.v-quote{margin-inline:0;border-left:3px solid var(--surface-brand);padding-left:var(--s-24);font-family:var(--font-display);font-size:26px;line-height:34px;font-weight:600;letter-spacing:-.018em;color:var(--ink-900);max-width:none}
.v-quote__who{display:block;margin-top:var(--s-10);font-family:var(--font-text);font-size:14px;font-weight:400;color:var(--text-muted)}
.v-divider{width:64px;height:3px;background:var(--ink-200);border-radius:2px;margin-block:var(--s-40)}

.v-figure{margin-block:var(--s-32);margin-inline:0}
.v-figure img{width:100%;border-radius:var(--r-md)}
.v-figure figcaption{margin-top:var(--s-10);font-size:14px;line-height:20px;color:var(--text-muted)}
.v-figure--full{max-width:none;width:100%}
.v-figure--column{max-width:var(--measure-article)}
.v-figure--left{float:left;width:340px;margin:var(--s-8) var(--s-32) var(--s-20) 0}
.v-figure--right{float:right;width:340px;margin:var(--s-8) 0 var(--s-20) var(--s-32)}
.v-prose::after{content:"";display:block;clear:both}
@media (max-width:767px){.v-figure--left,.v-figure--right{float:none;width:100%;margin-inline:0}}

.v-inset{border:1px solid var(--border-default);border-radius:var(--r-md);padding:var(--s-16);display:flex;gap:var(--s-16);align-items:center;max-width:var(--measure-article)}
.v-inset__media{width:120px;aspect-ratio:4/3;border-radius:var(--r-sm);background:var(--ink-100);flex:none;overflow:hidden}
.v-inset__label{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-faint);margin-bottom:2px}
.v-inthis{background:var(--surface-sunken);border-radius:var(--r-lg);padding:var(--s-32)}

/* css/admin.css */
.v-app{display:grid;grid-template-columns:var(--sidebar-w) minmax(0,1fr);min-height:100vh;background:var(--ink-50)}
.v-side{background:var(--surface-page);border-right:1px solid var(--border-subtle);display:flex;flex-direction:column;padding:var(--s-12);gap:var(--s-4);position:sticky;top:0;height:100vh;overflow:auto}
.v-side__brand{display:flex;align-items:center;gap:var(--s-8);padding:var(--s-10) var(--s-8) var(--s-16);font-family:var(--font-display);font-weight:800;letter-spacing:-.02em}
.v-side__brand img{width:28px;height:28px}
.v-side__group{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:var(--text-faint);padding:var(--s-16) var(--s-8) var(--s-6)}
.v-side__link{display:flex;align-items:center;gap:var(--s-10);padding:var(--s-8) var(--s-10);border-radius:var(--r-dense);color:var(--text-secondary);font-size:14px;font-weight:500;transition:background var(--dur-fast) var(--ease-out)}
.v-side__link:hover{background:var(--surface-hover);color:var(--text-primary);text-decoration:none}
.v-side__link.is-active{background:var(--surface-brand-soft);color:var(--text-brand);font-weight:600}
.v-side__link .icon{width:18px;height:18px}
.v-side__badge{margin-left:auto;min-width:20px;height:20px;padding:0 6px;border-radius:var(--r-pill);background:var(--red-500);color:#fff;font-size:11px;font-weight:700;display:grid;place-items:center;font-variant-numeric:tabular-nums}

.v-sidewrap{display:contents}

.v-fieldset{border:1px solid var(--border-subtle);border-radius:var(--r-dense);padding:var(--s-12) var(--s-14,14px);margin:0}
.v-fieldset__legend{padding:0 var(--s-6);font-size:12.5px;color:var(--text-muted)}

.v-innresult{padding:var(--s-10) var(--s-12);border-radius:var(--r-dense);font-size:13px;line-height:19px;background:var(--surface-sunken);color:var(--text-secondary)}
.v-innresult[data-tone="ok"]{background:var(--green-50);color:var(--green-700)}
.v-innresult[data-tone="warn"]{background:var(--amber-50);color:var(--amber-700)}
.v-innresult[data-tone="error"]{background:var(--red-50);color:var(--red-700)}
.v-innresult__warn{margin-top:var(--s-6);font-weight:700}

.v-main{display:flex;flex-direction:column;min-width:0}
.v-topbar{height:56px;display:flex;align-items:center;gap:var(--s-12);padding:0 var(--s-24);background:var(--surface-page);border-bottom:1px solid var(--border-subtle);position:sticky;top:0;z-index:20}
.v-topbar__title{font-family:var(--font-display);font-size:17px;font-weight:700;letter-spacing:-.015em}
.v-role{display:inline-flex;align-items:center;gap:var(--s-6);height:24px;padding:0 var(--s-8);border-radius:var(--r-xs);background:var(--ink-100);color:var(--text-secondary);font-size:12px;font-weight:600}
.v-content{padding:var(--s-24);display:flex;flex-direction:column;gap:var(--dense-section-gap)}
.v-panel{background:var(--surface-page);border:1px solid var(--border-subtle);border-radius:var(--r-dense);overflow:hidden}
.v-panel__head{display:flex;align-items:center;justify-content:space-between;gap:var(--s-12);padding:var(--s-12) var(--s-16);border-bottom:1px solid var(--border-subtle)}
.v-panel__title{font-size:15px;font-weight:600}
.v-panel__body{padding:var(--s-16)}
.v-panel__body--flush{padding:0}
.v-toolbar{display:flex;align-items:center;gap:var(--s-8);flex-wrap:wrap;padding:var(--s-12) var(--s-16);border-bottom:1px solid var(--border-subtle);background:var(--ink-25)}

.v-queue__row{display:grid;grid-template-columns:132px minmax(0,1fr) 160px 120px auto;align-items:center;gap:var(--s-12);padding:var(--s-10) var(--s-16);border-bottom:1px solid var(--border-subtle);font-size:14px}
.v-queue__row:hover{background:var(--surface-hover)}
.v-queue__type{font-size:12px;font-weight:600;color:var(--text-secondary);background:var(--ink-100);border-radius:var(--r-xs);padding:3px 8px;justify-self:start}
.v-queue__target{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.v-queue__age{color:var(--text-muted);font-variant-numeric:tabular-nums}
.v-queue__age.is-old{color:var(--red-500);font-weight:600}
.v-queue__actions{display:flex;gap:var(--s-6);justify-self:end}

.v-checklist{display:flex;flex-direction:column;gap:var(--s-8)}
.v-checklist__item{display:flex;align-items:flex-start;gap:var(--s-10);font-size:14px;padding:var(--s-8) var(--s-10);border-radius:var(--r-dense);background:var(--ink-25)}
.v-checklist__item .icon{margin-top:2px}
.v-checklist__ok{color:var(--green-500)}
.v-checklist__warn{color:var(--amber-500)}

.v-formgrid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-16)}
.v-formgrid--full{grid-template-columns:1fr}
.v-formrow{display:grid;grid-template-columns:200px minmax(0,1fr);gap:var(--s-16);align-items:start;padding:var(--s-12) 0;border-bottom:1px solid var(--border-subtle)}
.v-autosave{font-size:12.5px;color:var(--text-muted);display:inline-flex;align-items:center;gap:var(--s-6)}

@media (max-width:1023px){
  .v-app{grid-template-columns:1fr}
  .v-side{position:sticky;top:0;height:auto;flex-direction:row;align-items:center;gap:var(--s-6);padding:var(--s-8) var(--s-12);border-right:0;border-bottom:1px solid var(--border-subtle);overflow-x:auto;scrollbar-width:none;z-index:21}
  .v-side::-webkit-scrollbar{display:none}
  .v-side__brand,.v-side__group,.v-side .v-role{display:none}
  .v-side__link{flex:none;height:32px;padding:0 var(--s-12);border:1px solid var(--border-subtle);border-radius:var(--r-pill);white-space:nowrap}
  .v-side__link.is-active{border-color:var(--surface-brand)}
  .v-formgrid,.v-formrow{grid-template-columns:1fr}
}

/* css/type-scale.css */
body{font-synthesis-weight:none}
h1,h2,.t-display1,.t-display2,.t-h1,.t-h2,.v-objhero__name,.v-metric__value,.v-reviews__score b{font-stretch:var(--t-display-stretch);font-weight:var(--t-display-w)}
h3,h4,h5,h6,.t-h3,.t-h4,.v-card__title,.v-tile__name,.v-modal__title,.v-fdrop__title,.v-empty__title,.v-topbar__title,.v-rating--lg .v-rating__value,.v-card__price--exact{font-stretch:var(--t-display-sm-stretch);font-weight:var(--t-display-sm-w)}
h1,h2,h3,h4,.v-objhero__name,.v-card__title,.v-tile__name,.v-modal__title,.v-empty__title{overflow-wrap:break-word;hyphens:auto}
table,time,.v-table,.v-metric__value,.v-card__price--exact{font-variant-numeric:tabular-nums}
