@font-face{font-family:Onest;src:url('/fonts/Onest-VariableFont_wght.ttf') format('truetype');font-weight:100 900;font-display:swap}
@font-face{font-family:Druk;src:url('/fonts/drukwidecyr-bold.woff2') format('woff2');font-weight:700;font-display:swap}
:root{color:#171717;background:#f7faff;font-family:Onest,Arial,sans-serif;font-synthesis:none;color-scheme:light}
*{box-sizing:border-box}body{margin:0}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer;touch-action:manipulation}button:active{filter:brightness(.97)}button:focus-visible,a:focus-visible{outline:3px solid #0f62fe;outline-offset:5px}button:disabled{cursor:default}[hidden]{display:none!important}
#project-network{--blue:#0f62fe;--ink:#182d4c;--muted:#526074;min-height:100svh;overflow:clip;background:#f7faff}
.skip-link{position:fixed;left:20px;top:-80px;padding:15px 22px;color:#171717;background:#fff;z-index:20;border-radius:8px}.skip-link:focus{top:14px}
.site-header{height:76px;background:#fff;display:flex;justify-content:space-between;align-items:center;padding:0 clamp(24px,4.4vw,72px);position:relative;z-index:4;border-bottom:1px solid #182d4c08}.brand{display:flex;align-items:center;gap:9px;color:inherit;text-decoration:none;border-radius:6px}.brand:focus-visible{outline:3px solid var(--blue);outline-offset:7px}.brand img{object-fit:contain}.brand>span{font-size:25px;font-weight:700;letter-spacing:-1px;line-height:.9}.brand small{display:block;margin-top:6px;font-size:11px;font-weight:350;letter-spacing:4.7px;text-transform:uppercase}.current-page{position:absolute;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:9px;font-size:13px;color:var(--blue)}.current-page i{width:7px;height:7px;background:var(--blue);border-radius:50%;box-shadow:0 0 0 5px #0f62fe0a}.header-note{font-size:13px;color:#5b6270}
.portfolio{max-width:1500px;padding:0 clamp(24px,4.4vw,72px);margin:auto}.intro{display:flex;align-items:flex-end;justify-content:space-between;min-height:122px;padding:26px 0 8px;gap:30px}.eyebrow{font-size:10px;color:#4b5460;letter-spacing:.08em;text-transform:uppercase;font-weight:500;margin:0 0 12px}h1{font-family:Druk,Arial,sans-serif;font-size:clamp(38px,4vw,55px);letter-spacing:-.025em;line-height:1.12;margin:0}h1>span{color:var(--blue)}.intro-copy{font-size:15px;line-height:1.65;color:#4b5460;margin:0 6% 5px 0}
.graph-space{position:relative;isolation:isolate;height:clamp(500px,calc(100svh - 260px),680px);outline:none;--node-size:clamp(154px,14vw,202px);margin-top:2px}.network-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:-2;cursor:grab;touch-action:pan-y}.network-canvas.is-grabbing{cursor:grabbing}.semantic-links{position:absolute;inset:0;width:100%;height:100%;z-index:-1;pointer-events:none;overflow:visible}.ai-link{fill:none;stroke:#0f62fe;stroke-width:1.1;stroke-opacity:0;transition:stroke-opacity .22s}.ai-dot{fill:#0f62fe;opacity:0;transition:opacity .22s}.semantic-links.is-highlighted .ai-link{stroke-opacity:.48}.semantic-links.is-highlighted .ai-dot{opacity:1}.ai-label{position:absolute;display:flex;align-items:center;gap:7px;opacity:0;pointer-events:none;transform:translate(-50%,-50%);transition:opacity .2s;background:#f7faffed;padding:6px 9px;border-radius:8px;white-space:nowrap;z-index:0}.ai-label.is-visible{opacity:1}.ai-label>span{color:var(--blue);font-size:13px;font-weight:600}.ai-label small{font-size:10px;color:#4f6b9a}
.project-list{height:100%;pointer-events:none}.project{position:absolute;width:clamp(210px,18.5vw,266px);pointer-events:auto;z-index:1;--lift:0;transform:translate(var(--move-x,0px),var(--move-y,0px))}.project[data-id="ai-widget"]{left:7%;top:7%}.project[data-id="floraguard"]{left:67%;top:2%}.project[data-id="beton"]{left:20%;top:56%}.project[data-id="gorod"]{right:3%;top:52%}.project.is-active{z-index:5}.project.is-dragging{z-index:6}.project.is-dragging .project-preview{visibility:hidden;opacity:0;pointer-events:none}
.project-trigger{width:100%;display:flex;align-items:center;flex-direction:column;position:relative;text-align:center;background:none;border:0;border-radius:16px;color:#171717;padding:0;cursor:grab;user-select:none;-webkit-user-select:none;touch-action:pan-y}.project-trigger:active{filter:none}.project.is-dragging .project-trigger{cursor:grabbing}.node-cover{display:block;width:var(--node-size);height:var(--node-size);flex:none;position:relative;border-radius:50%;background:radial-gradient(circle at 34% 25%,#fff 0,#f0f5ff 70%,#e7efff 100%);box-shadow:0 4px 26px #182d4c0c,0 0 0 1px #cbd9ee;border:5px solid #f7faff;transform:scale(calc(1 + var(--lift)*.055));will-change:transform;transition:box-shadow .25s}.node-cover:after{content:'';position:absolute;inset:-7px;border:1px solid #182d4c13;border-radius:50%;pointer-events:none}.node-cover img{position:absolute;width:100%;height:100%;inset:0;object-fit:contain;padding:8px;pointer-events:none}.project[data-id="beton"] .node-cover img{padding:3px}.node-port{position:absolute;width:10px;height:10px;right:8%;top:9%;background:#182d4c;border:3px solid #f7faff;border-radius:50%;box-sizing:content-box;z-index:1}.project[data-id="floraguard"] .node-port,.project[data-id="gorod"] .node-port{background:#cc442e}.project.is-active .node-cover{box-shadow:0 10px 38px #0f62fe1b,0 0 0 2px #0f62fe}.project.is-related .node-cover{box-shadow:0 4px 26px #182d4c0c,0 0 0 1.5px #0f62fe8c}.project.is-active .node-port{background:var(--blue)}
.project-title{display:flex;align-items:center;justify-content:center;gap:8px;position:relative;margin-top:17px;font-weight:650;font-size:19px;letter-spacing:-.03em;line-height:1.2;width:100%;padding:0 4px;white-space:nowrap}.project-title:before{content:'';position:absolute;inset:-7px -4px;z-index:-1;background:#f7faff;border-radius:15px;filter:blur(4px)}.project-arrow{font-size:18px;line-height:1;color:#6e7e95;flex:none;transition:color .2s}.project.is-active .project-arrow{color:var(--blue)}.project-label{display:block;max-width:100%;position:relative;color:#526074;font-size:12px;line-height:1.5;margin-top:6px;min-height:18px;text-wrap:balance;background:#f7faff;padding:0 3px;box-shadow:0 0 8px 4px #f7faff}
.project-preview{position:absolute;top:0;left:100%;padding-left:16px;width:252px;visibility:hidden;opacity:0;pointer-events:none;transform:translateX(-5px);transition:opacity .18s,transform .22s,visibility .18s}.project[data-id="floraguard"] .project-preview,.project[data-id="gorod"] .project-preview{left:auto;right:100%;padding:0 16px 0 0;transform:translateX(5px)}.project[data-id="beton"] .project-preview,.project[data-id="gorod"] .project-preview{top:12px}.project.is-active:not(.is-dragging) .project-preview{visibility:visible;opacity:1;pointer-events:auto;transform:translateX(0)}.preview-inner{background:#fff;border:1px solid #d8e2f1;padding:19px;border-radius:14px;box-shadow:0 12px 32px #182d4c10}.preview-heading{font-size:10px;letter-spacing:.075em;text-transform:uppercase;color:#66748a;display:block;margin-bottom:10px}.preview-description{font-size:13px;line-height:1.6;color:#3d4757;margin:0}.preview-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:13px}.preview-tags span{font-size:10px;color:#4f6587;padding:4px 7px;border-radius:5px;background:#f2f6fc}.open-case{min-height:44px;width:100%;display:flex;justify-content:space-between;align-items:center;gap:8px;border:0;border-radius:7px;background:#0f62fe;color:#fff;padding:12px 13px;margin-top:15px;font-size:12px;font-weight:550}.open-case:hover{background:#0353e9}.open-case>span{font-size:18px;line-height:14px}.related-note{margin:12px 0 0;border-top:1px solid #e5ecf6;padding-top:10px;font-size:11px;line-height:1.5;color:#45638e}
.graph-footer{min-height:60px;display:flex;justify-content:space-between;align-items:center;border-top:1px solid #182d4c0d;gap:20px}.graph-footer p{margin:0;font-size:11px;color:#657084;display:flex;align-items:center;gap:7px}.count-dot{width:5px;height:5px;background:#cc442e;border-radius:50%}.drag-hint{color:#627088;margin-left:-3px}.motion-toggle{min-height:44px;display:flex;align-items:center;gap:8px;white-space:nowrap;padding:8px 0 8px 12px;border:0;background:none;color:#526079;font-size:11px}.motion-toggle svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.motion-toggle:hover{color:var(--blue)}.motion-toggle:disabled{color:#6d788b}.motion-off .network-canvas,.motion-off .project-trigger{cursor:pointer}.motion-off .drag-hint{visibility:hidden}
@media(min-width:1000px) and (max-width:1190px){.portfolio{padding-inline:28px}.graph-space{--node-size:158px}.project{width:218px}.project[data-id="ai-widget"]{left:2%}.project[data-id="floraguard"]{left:65%}.project[data-id="beton"]{left:13%;top:55%}.project[data-id="gorod"]{right:0;top:53%}.project-title{font-size:17px}.project-label{font-size:11px}.project-preview{width:236px;padding-left:14px;top:0}.project[data-id="floraguard"] .project-preview,.project[data-id="gorod"] .project-preview{padding-right:14px}.preview-inner{padding:16px}.preview-description{font-size:12px}.related-note{font-size:10px}.preview-tags{margin-top:10px}.open-case{margin-top:12px}}
@media(max-width:999px){.portfolio{padding-inline:28px}.intro{padding:30px 0 16px;min-height:0}.intro-copy{font-size:13px;margin:18px 0 0;max-width:240px}.graph-space{height:auto;min-height:650px;--node-size:180px;margin-top:0}.project-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:50px 10%;padding:25px 4% 45px;align-items:start}.project{position:relative;inset:auto!important;width:100%;min-width:0;transform:none!important}.project:nth-child(even){margin-top:70px}.project:nth-child(3){margin-top:-20px}.project-title{font-size:18px;white-space:normal}.project-trigger{cursor:pointer}.project-preview{position:relative;inset:auto!important;width:100%;padding:0!important;transform:none!important;display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s,opacity .2s,visibility .2s}.project.is-active .project-preview{grid-template-rows:1fr}.preview-inner{min-height:0;overflow:hidden;padding:0;border:0;border-radius:0;background:#f7faff;box-shadow:none}.project-preview:not([inert]) .preview-inner{padding:17px 0 0;margin-top:16px;border-top:1px solid #cedcee}.preview-heading{display:none}.preview-description{font-size:13px}.preview-tags{margin-top:11px}.open-case{min-height:48px}.semantic-links,.ai-label{display:none}.drag-hint{display:none}.network-canvas{cursor:default}}
@media(max-width:599px){.site-header{height:65px;padding-inline:21px}.brand img{width:35px;height:34px}.brand>span{font-size:21px}.brand small{font-size:8px;letter-spacing:4.5px;margin-top:5px}.header-note{display:none}.current-page{position:static;transform:none;font-size:12px}.portfolio{padding-inline:22px}.intro{display:block;padding:30px 0 19px}.eyebrow{font-size:9px;letter-spacing:.035em;margin-bottom:14px}h1{font-size:39px}.intro-copy{margin:17px 0 0;max-width:300px;font-size:13px;line-height:1.6}.intro-copy br{display:none}.graph-space{min-height:0;--node-size:190px}.project-list{display:flex;flex-direction:column;gap:34px;padding:18px 0 32px}.project{width:calc(100% - 34px);margin:0!important;align-self:flex-start}.project:nth-child(even){align-self:flex-end}.project-title{font-size:19px;margin-top:17px}.project-label{font-size:12px;max-width:270px}.project-preview{padding-inline:3px!important}.preview-description{font-size:14px}.preview-tags span{font-size:11px}.open-case{font-size:13px}.related-note{font-size:12px}.graph-footer{padding:8px 0;gap:8px}.graph-footer p,.motion-toggle{font-size:10px}.motion-toggle{padding-left:4px}}
@media(max-width:359px){.portfolio{padding-inline:18px}.site-header{padding-inline:18px}.eyebrow{font-size:8px}.project{width:calc(100% - 16px)}.graph-space{--node-size:172px}.project-title{font-size:18px}.project-label{font-size:11px}.intro-copy{font-size:12px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important;animation:none!important;scroll-behavior:auto!important}.node-cover{transform:none!important;will-change:auto}.network-canvas,.project-trigger{cursor:pointer}.drag-hint{display:none}}
@media(forced-colors:active){.network-canvas,.semantic-links,.ai-label{display:none}.node-cover,.preview-inner{border:1px solid CanvasText}.open-case{border:1px solid ButtonText}.node-port{background:CanvasText}}
