/* W3C-inspired composition: tokens, base, layouts, components, exceptions. */
:root{--paper:#f5f7fa;--surface:#fff;--ink:#203447;--muted:#516475;--blue:#235b85;--blue-dark:#17476d;--line:#d5dfe8;--ochre:#806020;--silver:#e8eef4;--radius:1.25rem;--max:76rem;--bs-body-font-family:'Golos Text',system-ui,sans-serif;--bs-body-color:var(--ink);--bs-body-bg:var(--paper);--bs-link-color:var(--blue);--bs-border-color:var(--line)}
html{scroll-padding-top:9rem}body{font:1.0625rem/1.7 var(--bs-body-font-family);color:var(--ink);background:var(--paper)}*,*::before,*::after{box-sizing:border-box}img,svg{max-width:100%}a{color:var(--blue);text-underline-offset:.2em;text-decoration-thickness:1px}a:hover{color:var(--blue-dark);text-decoration-thickness:2px}a:focus-visible,button:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--ochre);outline-offset:4px}
h1,h2,h3,h4{font-family:var(--bs-body-font-family);line-height:1.22;font-weight:600;letter-spacing:-.025em;text-wrap:balance;color:var(--ink);overflow-wrap:break-word}h1{font-size:clamp(2rem,4.5vw,3.6rem)}h2{font-size:clamp(1.75rem,3vw,2.6rem)}h3{font-size:1.4rem}h1 em,h2 em,h3 em{font-style:normal;color:var(--blue)}p{margin:0 0 1.2em}p:last-child{margin-bottom:0}main{min-height:65vh}section[id],h2[id],h3[id]{scroll-margin-top:9rem}.wrap{width:min(var(--max),calc(100% - 3rem));margin-inline:auto}.wrap>*{min-width:0}.section,.work-section,.method,.about-section,.cooperation,.contact-section,.timeline-section,.case-study-section,.competence-section{padding-block:4.5rem}.section-intro,.work-heading,.experience-heading{margin-bottom:2rem}.section-intro>p,.work-heading p,.experience-heading>p{max-width:62ch;color:var(--muted)}.eyebrow,.section-label,.case-tag,.case-number,.study-number,.capability-index{font-size:.875rem;font-weight:500;letter-spacing:.025em;color:var(--blue);margin-bottom:.8rem}.actions{display:flex;gap:.8rem;flex-wrap:wrap;margin-top:1.5rem}
.btn,.button{font-size:.9375rem;font-weight:500;line-height:1.5;border-radius:.75rem;padding:.75rem 1.1rem;min-height:44px;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;text-decoration:none;transition:background-color .18s,color .18s}.btn-primary,.button-primary{--bs-btn-bg:var(--blue-dark);--bs-btn-border-color:var(--blue-dark);--bs-btn-hover-bg:var(--blue);--bs-btn-hover-border-color:var(--blue);background:var(--blue-dark);color:#fff}.btn-outline-primary,.button-outline{--bs-btn-color:var(--blue-dark);--bs-btn-border-color:#8ca2b6;--bs-btn-hover-bg:var(--blue-dark);--bs-btn-hover-border-color:var(--blue-dark);--bs-btn-hover-color:#fff}.button:hover{text-decoration:none}.text-link{font-weight:500}.skip-link{position:fixed;top:.5rem;left:1rem;z-index:200;padding:.75rem 1rem;background:white;border:2px solid var(--blue);transform:translateY(-180%)}.skip-link:focus{transform:none}
.site-header{position:sticky;top:0;z-index:100;background:#fffffffa;border-bottom:1px solid var(--line);transition:transform .2s}.site-header.js-hidden{transform:translateY(-110%)}.site-header:focus-within{transform:none}.header-inner{display:flex;align-items:center;gap:1rem;padding-block:.65rem;min-height:76px}.home-symbol{width:44px;height:44px;flex:0 0 44px;display:flex;align-items:center;justify-content:center;border:1px solid var(--line);border-radius:.8rem;background:#edf2f7;text-decoration:none}.nav.desktop-nav{display:flex;flex-wrap:wrap;gap:.1rem}.nav a,.language-nav a{font-size:.875rem;display:inline-flex;align-items:center;justify-content:center;padding:.65rem .7rem;min-height:44px;border-radius:.5rem;text-decoration:none}.nav a:hover,.language-nav a:hover{text-decoration:underline;background:#f0f4f8}.nav a[aria-current],.language-nav a[aria-current]{background:#e7eff6;color:var(--blue-dark);text-decoration:underline}.language-nav{display:flex;align-items:center;margin-left:auto;gap:.1rem}.language-nav a{padding-inline:.55rem}.telegram-icon{width:44px;height:44px;flex:none;display:flex;align-items:center;justify-content:center;border-radius:50%;background:var(--blue);color:white}.telegram-icon svg{width:24px;height:24px;fill:currentColor}.mobile-menu{display:none;position:relative}.mobile-menu summary{padding:.7rem .9rem;min-height:44px;cursor:pointer;list-style:none;border:1px solid var(--line);border-radius:.75rem;text-decoration:underline;text-decoration-style:dashed;text-underline-offset:.2em;font-size:.9375rem}.mobile-menu summary::-webkit-details-marker{display:none}.mobile-menu summary::after{content:' +';margin-left:.35rem}.mobile-menu[open] summary::after{content:' −'}.mobile-menu nav{position:absolute;right:0;top:calc(100% + .6rem);width:min(25rem,calc(100vw - 3rem));padding:.8rem;background:white;border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 16px 40px #20344718;max-height:65vh;overflow:auto}.mobile-menu nav a{display:block;padding:.75rem .8rem}
.hero{padding-block:3.5rem}.hero-copy{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 5%}.hero-copy .eyebrow{grid-column:1/-1}.hero-copy h1{grid-column:1;grid-row:2/5;font-size:clamp(3rem,6vw,5rem);line-height:1.1}.hero-principle{grid-column:2;font-size:1.5rem;font-weight:500;line-height:1.45}.hero-lead{grid-column:2;color:var(--muted)}.hero-copy .actions{grid-column:2;margin-top:.3rem}.hero-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.5rem;margin:2rem 0}.hero-facts>div{background:white;border:1px solid var(--line);border-radius:1rem;padding:1.15rem 1.4rem}.hero-facts dt{font-size:1.15rem;font-weight:600}.hero-facts dd{color:var(--muted);font-size:.9375rem;margin:.4rem 0 0}.strip{background:var(--silver)}.strip-inner{display:flex;flex-wrap:wrap;gap:.75rem 2rem;padding-block:1rem;font-size:.875rem}
.card{border-color:var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:0 6px 22px #20344705;min-width:0}.capabilities,.study-grid,.reading-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.5rem}.capability,.study,.reading-list>article,.material-card{padding:1.6rem}.capability{display:flex;flex-direction:column}.capability .text-link{margin-top:auto}.capability h3,.study h3,.reading-list h3{line-height:1.35}.card p{color:var(--muted)}.card .eyebrow{color:var(--blue)}.cases{display:grid;gap:1.5rem}.case{display:grid;grid-template-columns:11rem minmax(0,1fr);gap:2rem;padding:1.75rem}.case-side{display:flex;flex-direction:column;justify-content:space-between;gap:1rem}.case-symbol{font-size:2rem;color:var(--ochre)}.case-status,.study-result{font-size:.875rem;color:var(--blue-dark)!important}.work-section,.case-study-section{background:var(--silver)}.work-heading,.method,.about-grid,.cooperation,.contact-grid,.competence-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4rem}.steps{list-style:none;padding:0;margin:0;display:grid;gap:1.5rem}.steps>li{display:flex;gap:1rem}.steps>li>span{display:flex;align-items:center;justify-content:center;flex:0 0 40px;height:40px;border:1px solid var(--line);border-radius:.65rem;color:var(--ochre);font-weight:600}.steps h3{font-size:1.15rem;margin-bottom:.5rem}.about-section{background:var(--blue-dark);color:white}.about-section h2,.about-section h2 em{color:white}.about-section .section-label{color:#e2c68d}.tech-list,.stack{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.5rem}.tech-list span,.stack span{font-size:.875rem;padding:.25rem .65rem;border:1px solid #9badbd;border-radius:.5rem}.cooperation-options{display:grid;gap:1.5rem}.cooperation-options article{padding-bottom:1.25rem;border-bottom:1px solid var(--line)}.cooperation-options article>span{font-size:.875rem;color:var(--ochre)}.cooperation-options h3{margin-block:.6rem}.reading-list{margin-bottom:1.5rem}.article-art{margin:0 0 1.5rem;overflow:hidden;border-radius:.9rem;background:#f7f4ed}.article-art img{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover}.article-art-hero{border-radius:var(--radius);margin-block:2rem;max-width:54rem}
.featured{margin-top:2.5rem}.featured-heading{display:flex;justify-content:space-between;align-items:end;gap:1.5rem;margin-bottom:1.3rem}.featured-heading h2{font-size:1.8rem}.featured-heading p{color:var(--muted);font-size:.9375rem}.slider-controls{display:flex;gap:.75rem;align-items:center;flex:none}.slider-controls[hidden]{display:none}.slider-controls button{width:44px;padding:.4rem}.slider-status{font-size:.875rem;min-width:6.5rem;text-align:center}.featured-list{display:grid;gap:1.5rem}.featured-slide{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);overflow:hidden;position:relative}.featured-slide .article-art{margin:0;border-radius:0}.featured-slide .article-art img{height:100%;min-height:18rem;object-fit:cover}.featured-copy{padding:clamp(1.5rem,3vw,2.5rem);align-self:center}.featured-copy h3{font-size:clamp(1.5rem,2.5vw,2.1rem);line-height:1.3}.featured-copy>p{line-height:1.7}.featured-open{display:inline-block;color:var(--blue);margin-top:.5rem;font-size:.9375rem}.featured-slide:focus-within{outline:3px solid var(--ochre);outline-offset:4px}.featured.js-slider .featured-slide[hidden]{display:none}.featured.js-slider .featured-list{display:block}.featured.js-slider .featured-slide:not([hidden]){animation:slide-enter .18s ease-out}@keyframes slide-enter{from{opacity:.7;transform:translateY(4px)}to{opacity:1;transform:none}}
.contact-section{background:#eaf0f5}.contact-grid{align-items:start}.contact-grid p{color:var(--muted)}.contact-links{min-width:0;align-self:start}.contact-links a{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.6rem 1.2rem;padding:1.75rem;background:white;border:1px solid var(--line);border-radius:var(--radius);text-decoration:none}.contact-links a>span:first-child{grid-column:1;font-size:.9375rem;color:var(--muted)}.contact-links a strong{grid-column:1;font-size:clamp(1.5rem,2.5vw,2rem);line-height:1.3;overflow-wrap:anywhere;text-decoration:underline}.contact-links a>span:last-child{grid-column:2;grid-row:1/3;align-self:center;font-size:1.75rem}.footer{padding-block:2rem;background:var(--blue-dark);color:#fff}.footer a{color:#fff}.footer-inner{display:flex;flex-wrap:wrap;gap:1rem 2rem;justify-content:space-between;align-items:start;font-size:.875rem}.footer nav{display:flex;flex-wrap:wrap;gap:.6rem 1.2rem}.footer nav a{padding-block:.3rem}
.breadcrumbs{padding-block:1.5rem}.breadcrumbs ol{list-style:none;display:flex;flex-wrap:wrap;gap:.4rem .6rem;margin:0;padding:0;font-size:.875rem;color:var(--muted)}.breadcrumbs li:not(:first-child)::before{content:'/';margin-right:.6rem;color:#6c7f8f}.detail-intro,.experience-intro{padding-block:1.25rem 2.5rem}.detail-lead,.experience-deck,.materials-deck{font-size:1.1875rem;line-height:1.7;color:var(--muted);max-width:68ch}.detail-signature{font-size:.9375rem;color:var(--muted)}.case-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin-block:1.5rem}.case-facts>div{padding:1rem 1.25rem;background:var(--silver);border-radius:1rem}.case-facts dt{font-size:.875rem;color:var(--blue);margin-bottom:.3rem}.case-facts dd{margin:0}.detail-layout{display:grid;grid-template-columns:15rem minmax(0,1fr);gap:3rem;padding-bottom:4rem}.detail-aside{align-self:start}.detail-aside nav{border:1px solid var(--line);border-radius:1rem;padding:1.25rem;background:#fff}.detail-aside ol{padding-left:1.2rem;font-size:.9375rem}.detail-aside li{margin-bottom:.7rem}.detail-body{min-width:0}.direction-links,.experience-index{display:flex;gap:.8rem 1.5rem;flex-wrap:wrap;margin-top:1.5rem}.direction-links{padding-bottom:3rem}.timeline{display:grid;gap:0}.job{display:grid;grid-template-columns:13rem minmax(0,1fr);gap:2rem;padding-block:2rem;border-top:1px solid var(--line)}.job-date{font-size:.9375rem;color:var(--muted)}.job-date span{display:block;font-size:.875rem;margin-top:.3rem}.job-role{color:var(--blue);font-size:.9375rem}.experience-heading{max-width:70ch}.competence-grid{margin-top:1.5rem}.competence-grid h3{font-size:1.25rem}.study-grid{margin-top:1.5rem}
.materials-layout{display:grid;grid-template-columns:15rem minmax(0,1fr);gap:3rem;padding-bottom:4rem}.materials-sidebar{min-width:0}.materials-menu{border:1px solid var(--line);border-radius:1rem;padding:1.25rem;background:#fff}.materials-menu>summary{font-weight:500;cursor:pointer}.materials-menu nav{padding-top:1rem}.materials-menu ul{list-style:none;padding-left:1rem;margin-block:.8rem}.materials-menu nav>ul{padding-left:0}.materials-menu li{font-size:.875rem;margin-bottom:.5rem}.materials-menu a{display:inline-block;padding-block:.25rem}.materials-menu summary{cursor:pointer}.section-overview{font-size:.8125rem}.catalog-home{font-weight:500}.rss-link{display:inline-block;margin-block:1rem;font-size:.875rem}.materials-intro{margin-bottom:2rem}.materials-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem}.material-card h2{font-size:1.5rem}.material-card p{font-size:1rem}.publication h1{font-size:clamp(2rem,3.5vw,3rem)}.publication-meta{display:flex;flex-wrap:wrap;gap:.4rem 1rem;font-size:.875rem;color:var(--muted);margin-block:1rem}.publication-tags{display:flex;flex-wrap:wrap;list-style:none;padding:0;gap:.4rem}.publication-tags li{font-size:.8125rem;background:var(--silver);padding:.25rem .6rem;border-radius:.4rem}.article-toc{padding:1.5rem;border:1px solid var(--line);border-radius:1rem;background:white;margin-block:2rem}.article-toc>p{font-weight:500}.article-toc ol{padding-left:1.3rem;font-size:.9375rem;margin-bottom:0}.article-toc li{margin-block:.55rem}.toc-level-3{margin-left:1rem}.prose{font-family:'Source Serif 4',Georgia,serif;font-size:1.3125rem;line-height:1.8;max-width:68ch;min-width:0;overflow-wrap:break-word}.prose h2,.prose h3{font-family:var(--bs-body-font-family);margin-top:1.7em;margin-bottom:.65em;line-height:1.3}.prose h2{font-size:1.75rem}.prose h3{font-size:1.45rem}.prose p{margin-bottom:1.2em}.prose li{margin-bottom:.5em}.prose pre{font-size:.85rem;line-height:1.7;background:#edf2f6;padding:1.25rem;border-radius:.75rem;overflow:auto}.prose code{font-size:.85em;color:#233e56;overflow-wrap:anywhere}.prose pre code{font-size:inherit;overflow-wrap:normal}.prose img{max-width:100%;height:auto;margin-block:1rem}.prose blockquote{border-left:3px solid var(--ochre);padding-left:1.5rem;color:var(--muted)}.table-scroll{max-width:100%;overflow:auto;margin-block:1.5rem}.prose table{font-family:var(--bs-body-font-family);font-size:1rem;min-width:20rem;border-collapse:collapse;width:100%}.prose td,.prose th{padding:.7rem;border:1px solid var(--line);vertical-align:top}.prose th{background:var(--silver)}.author-note{font-size:.9375rem;padding-block:1.5rem;margin-top:2rem;border-top:1px solid var(--line)}.publication-footer{display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;font-size:.9375rem}.materials-empty{padding:2rem;border:1px solid var(--line);border-radius:1rem;background:white}
@media(hover:hover){.card{transition:box-shadow .18s,border-color .18s}.card:hover{box-shadow:0 12px 30px #2034470d;border-color:#adc0d0}}
@media(max-width:1199px){.nav.desktop-nav{display:none}.mobile-menu{display:block;margin-left:auto}.header-inner{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;gap:.5rem 1rem}.mobile-menu{justify-self:end}.language-nav{grid-column:1/-1;grid-row:2;justify-content:center;margin:0;border-top:1px solid var(--line);padding-top:.3rem}.telegram-icon{grid-column:3;grid-row:1}.case{grid-template-columns:8rem minmax(0,1fr)}.work-heading,.method,.about-grid,.cooperation,.contact-grid,.competence-grid{gap:2.5rem}}
@media(max-width:991px){.detail-layout,.materials-layout{grid-template-columns:minmax(0,1fr);gap:2rem}.materials-menu{padding:1rem 1.25rem}.detail-aside ol{columns:2}.reading-list,.study-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.hero-copy h1{font-size:clamp(2.8rem,6.5vw,4rem)}.featured-slide{grid-template-columns:1fr 1fr}.featured-copy{padding:1.5rem}.hero-facts{gap:1rem}}
@media(max-width:767px){body{font-size:1rem}.wrap{width:calc(100% - 2rem)}.hero{padding-block:2rem}.hero-copy{display:block}.hero-copy h1{font-size:clamp(2.5rem,10vw,4rem);margin-block:1rem 1.5rem}.hero-principle{font-size:1.35rem}.hero-copy .actions{margin-top:1.5rem}.hero-facts{grid-template-columns:1fr;margin-block:1.75rem;gap:.75rem}.hero-facts>div{display:flex;gap:.7rem;align-items:baseline;padding:.85rem 1rem}.hero-facts dt{font-size:1rem}.hero-facts dd{margin:0}.section,.work-section,.method,.about-section,.cooperation,.contact-section,.timeline-section,.case-study-section,.competence-section{padding-block:3rem}.capabilities,.study-grid,.reading-list,.materials-list,.work-heading,.method,.about-grid,.cooperation,.contact-grid,.competence-grid{grid-template-columns:1fr;gap:1.5rem}.case{grid-template-columns:1fr;gap:.75rem;padding:1.4rem}.case-side{flex-direction:row;align-items:center}.case-symbol{font-size:1.5rem}.capability,.study,.reading-list>article,.material-card{padding:1.4rem}.featured-heading{flex-wrap:wrap;gap:1rem}.featured-slide{grid-template-columns:1fr}.featured-slide .article-art img{height:auto;min-height:0;aspect-ratio:3/2}.featured-copy h3{font-size:1.5rem}.featured-copy{padding:1.4rem}.slider-controls{margin-left:auto}.contact-links a{padding:1.4rem}.case-facts{grid-template-columns:1fr}.job{grid-template-columns:1fr;gap:.75rem;padding-block:1.5rem}.detail-aside ol{columns:1}.prose{font-size:1.25rem;line-height:1.75}.prose h2{font-size:1.6rem}.prose h3{font-size:1.35rem}.footer-inner{display:block}.footer nav{margin-top:1rem}.materials-deck,.detail-lead,.experience-deck{font-size:1.125rem}.publication h1{font-size:2rem}.breadcrumbs{padding-block:1.25rem}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@media print{.site-header,.footer,.contact-section,.slider-controls,.skip-link{display:none!important}body{background:white;color:black;font-size:11pt}.wrap{width:100%;max-width:none}.detail-layout,.materials-layout{display:block}.detail-aside,.materials-sidebar{display:none}.prose{font-size:12pt;max-width:none}.featured.js-slider .featured-slide[hidden]{display:grid!important}.card{box-shadow:none;break-inside:avoid}.article-art{max-width:25rem}}

.page-views{display:inline-flex;align-items:center;gap:.35rem;white-space:nowrap;font-variant-numeric:tabular-nums}.page-views svg{flex:none}
.experience-personal{color:var(--muted);font-size:.9375rem;max-width:68ch}


/* Software versions block (materials/web/software-versions) */
/* Автоматическая сводка версий (includes/software-versions.php): карточки продуктов */
.sw-versions .sw-versions__group{font-family:var(--bs-body-font-family);font-size:1rem;font-weight:600;color:var(--muted);margin:1.6rem 0 .7rem;text-transform:uppercase;letter-spacing:.04em}
.sw-versions .sw-versions__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(15.5rem,1fr));gap:.9rem;align-items:start;list-style:none;margin:0 0 1.6rem;padding:0;font-family:var(--bs-body-font-family);font-size:.95rem;line-height:1.45}
.sw-versions .sw-card{border:1px solid var(--line);border-radius:1rem;background:var(--surface,#fff);padding:.95rem 1.05rem;min-width:0;margin:0}
.sw-versions .sw-card--error{border-style:dashed}
.sw-versions .sw-card__name{font-weight:600;font-size:1.05rem;line-height:1.3;margin:0 0 .65rem}
.sw-versions .sw-card__name a{text-decoration:none}
.sw-versions .sw-card__name a:hover{text-decoration:underline}
.sw-versions .sw-card__branches{list-style:none;margin:0;padding:0;display:grid;gap:.55rem}
.sw-versions .sw-branch{margin:0;padding:0}
.sw-versions .sw-branch+.sw-branch{border-top:1px solid var(--line);padding-top:.55rem}
.sw-versions .sw-branch__line{display:flex;align-items:baseline;flex-wrap:wrap;gap:.2rem .5rem}
.sw-versions .sw-branch__name{font-weight:600;font-variant-numeric:tabular-nums}
.sw-versions .sw-branch__latest{color:var(--muted);font-variant-numeric:tabular-nums}
.sw-versions .sw-branch__latest a{color:inherit}
.sw-versions .sw-lts{font-size:.68rem;font-weight:600;line-height:1.4;padding:0 .3rem;border:1px solid currentColor;border-radius:.3rem;color:var(--muted);align-self:center}
.sw-versions .sw-badge{margin-left:auto;display:inline-flex;align-items:center;gap:.35rem;font-size:.78rem;white-space:nowrap}
.sw-versions .sw-badge::before{content:"";width:.5rem;height:.5rem;border-radius:50%;background:currentColor;flex:none}
.sw-versions .sw-badge--supported{color:#2e7d4f}
.sw-versions .sw-badge--ending_soon{color:var(--ochre);font-weight:600}
.sw-versions .sw-badge--eol,.sw-versions .sw-badge--unknown{color:var(--muted)}
.sw-versions .sw-branch--eol .sw-branch__name,.sw-versions .sw-branch--eol .sw-branch__latest{opacity:.7}
.sw-versions .sw-branch__dates{display:flex;flex-wrap:wrap;gap:.1rem .9rem;font-size:.8rem;color:var(--muted);margin-top:.1rem;font-variant-numeric:tabular-nums}
.sw-versions__meta,.sw-versions__notice{font-size:.9em}
.sw-versions__notice--stale{font-weight:600}
@media (max-width:30rem){.sw-versions .sw-versions__grid{grid-template-columns:1fr}}
