:root{font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#233347;background:#f4f6f8;font-synthesis:none;font-size:14px;--green:#168975;--blue:#3977d5;--purple:#9567c9}*{box-sizing:border-box}body{margin:0;-webkit-user-select:none;user-select:none}input,textarea,[contenteditable="true"]{-webkit-user-select:text;user-select:text}button,input,select{font:inherit}button{cursor:pointer}button:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible{outline:3px solid #e8aa42;outline-offset:3px}button{border:0}header{height:70px;background:#101e2e;color:#dbe5ee;display:flex;align-items:center;justify-content:space-between;padding:0 32px}.brand{text-decoration:none;color:#fff;display:flex;align-items:center;font-size:25px;font-weight:740;letter-spacing:-1px}.brand>span:not(.brand-icon){font-weight:350;color:#9eb5ca}.brand-icon{color:#6ce4bd;font-size:38px;margin-right:11px}.brand small{font-size:9px;font-weight:500;letter-spacing:1.6px;border-left:1px solid #405064;padding-left:20px;margin-left:22px;color:#9dafc0}.header-right{display:flex;align-items:center;gap:9px;font-size:11px;color:#acbecf}.live-dot{width:7px;height:7px;background:#29a88d;display:inline-block;border-radius:50%;flex-shrink:0}.icon-button{border-radius:50%;width:28px;height:28px;color:inherit;background:#ffffff10;border:1px solid #ffffff30;font-size:17px}.header-right button{margin-left:12px}main{padding:28px 30px 0;max-width:1920px;margin:auto}.title-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:25px}.eyebrow,.section-label{font-size:10px;letter-spacing:1.35px;font-weight:700;color:#81909f}.eyebrow{color:#728497}h1{font-size:27px;letter-spacing:-.9px;margin:9px 0}p{line-height:1.65;color:#748191;margin:0}h1+p{font-size:13px}.primary,.secondary{padding:11px 15px;border-radius:6px;font-size:12px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;gap:12px;white-space:nowrap}.primary{background:#168975;color:white;box-shadow:0 2px 2px #12372910}.primary:hover{background:#0f7463}.secondary{background:white;border:1px solid #dce2e8;color:#536174}.secondary:hover{background:#edf2f5}.toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:16px}.tabs{background:#e8edf1;padding:4px;display:flex;border-radius:7px;gap:2px}.tabs button{padding:11px 14px;background:transparent;color:#95a1ae;border-radius:5px;font-size:11px;font-weight:600;white-space:nowrap}.tabs button span{margin-left:7px;color:#657487}.tabs button[aria-selected=true]{background:white;color:#168975;box-shadow:0 1px 4px #263a4b15}.tabs button[aria-selected=true] span{color:#263e4f}.request-controls{display:flex;align-items:center;gap:8px}.check{font-size:11px;color:#718090;margin-right:10px;display:flex;align-items:center;gap:5px}input{accent-color:#168975}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 292px;gap:18px;align-items:start}.diagram-panel{background:#fff;border:1px solid #dce3e9;border-radius:9px;overflow:hidden;position:relative}.canvas-top,.canvas-bottom{height:46px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;background:#fff;position:relative;z-index:2}.canvas-top{border-bottom:1px solid #e5eaf0;font-size:11px}.canvas-top>div{display:flex;align-items:center;gap:8px}.canvas-top strong{font-size:11px;font-weight:550}#quorum{font-size:10px;color:#7d8a98;border-left:1px solid #dce3ea;margin-left:4px;padding-left:12px}.canvas-top label{font-size:10px;color:#7c8997;display:flex;align-items:center}.canvas-bottom{border-top:1px solid #e5eaf0;height:45px;padding:0 12px}.legend{display:flex;gap:13px;font-size:9px;color:#8995a3}.traffic{color:var(--green)}.control{color:var(--blue)}.replication{color:var(--purple)}.zoom{display:flex;align-items:center;gap:5px}.zoom button{background:#f3f6f8;color:#6b7c8f;border-radius:4px;padding:4px 7px;font-size:11px}.zoom span{font-size:10px;min-width:35px;text-align:center}#viewport{height:720px;position:relative;overflow:hidden;background-color:#fafcfd;background-image:radial-gradient(#d8e0e8 .8px,transparent .8px);background-size:18px 18px;touch-action:none;cursor:grab}#viewport.dragging{cursor:grabbing}#world{width:1580px;height:1320px;position:absolute;transform-origin:0 0}#connections,#nodes{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.node,.group-label{position:absolute}.node{pointer-events:auto}.group-label{font-size:13px;font-weight:700;letter-spacing:1.8px;color:#718398}.group-label span{font-size:11px;letter-spacing:0;font-weight:400;margin-left:13px;color:#92a0ad}.machine{border:1.8px solid #c7d3dd;border-radius:10px;background:#fff;box-shadow:0 3px 7px #30475805;padding:12px}.machine.entry{border-top:3px solid #66b8a5}.machine.cp{border-top:3px solid #8caee1}.machine.worker{border-top:3px solid #78b9bc}.machine.database{border-top:3px solid #b29ac9}.machine-head{display:flex;align-items:center;justify-content:space-between;height:28px;margin-bottom:10px}.machine-name{font-size:15px;font-weight:750;color:#34465a;display:flex;gap:9px;align-items:center}.machine-name small{font-weight:400;font-size:10px;color:#8190a0}.power{color:#168975;border:1px solid #d5ebe5;border-radius:5px;background:#f0faf6;width:27px;height:26px;font-size:16px}.machine-status{font-size:10px;color:#168975;margin-bottom:9px;min-height:13px}.machine.off{background:#f3f4f6;border-color:#d6dce2;box-shadow:none}.machine.off .component,.machine.off .pod,.machine.off .disk{opacity:.36;filter:grayscale(1)}.machine.off .power{background:#fff0ef;color:#cc6058;border-color:#f0cbc8}.machine.off .machine-status{color:#c05d56}.component{font-size:11px;border:1px solid #dfe6ec;border-radius:4px;background:#f7f9fb;padding:7px 9px;margin-bottom:6px;cursor:help;position:relative;color:#54677b}.component:hover,.pod:hover,.disk:hover{border-color:#6ca998;background:#eff9f5}.component .badge{float:right;font-size:9px;color:#3d8e79;background:#e6f5ee;padding:1px 4px;border-radius:3px}.pod{border:1px dashed #6cb2aa;background:#f5fbfa;padding:8px;border-radius:6px;margin-bottom:9px;cursor:help;font-size:10px;color:#5c948a}.pod-title{display:flex;justify-content:space-between;margin-bottom:6px}.container{background:#fff;border:1px solid #cddfe0;border-left:3px solid #7cb9b1;border-radius:3px;padding:8px;color:#375c65;font-size:12px}.disk{border:1px solid #dbd1e7;background:#faf7fd;border-radius:5px;padding:8px 10px;font-size:10px;color:#837295;cursor:help;margin-top:7px}.disk strong{font-size:11px;display:block;color:#736080;margin-bottom:4px}.disk code{font-family:ui-monospace,monospace;font-size:10px;line-height:1.6}.runtime{font-size:9px;color:#8a97a6;display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-top:8px}.runtime button{font-size:9px;color:#778b9e;background:#f1f5f7;padding:5px 1px;border-radius:3px;border:1px solid #e7edf1;cursor:help}.endpoint{border:1.5px solid #90b9ad;border-radius:7px;background:#f0f9f5;text-align:center;font-size:12px;padding:12px;cursor:help;box-shadow:0 2px 4px #294b3b05}.endpoint strong{display:block;margin-bottom:4px}.endpoint small{font-size:10px;color:#7a948d}.endpoint.service{border-style:dashed;background:#f7fafb;border-color:#8fb6ba;color:#4b797c}.endpoint.api-vip{background:#f1f6fd;border-color:#b5cbe9;color:#6585b2}.endpoint.storage{background:#faf7fd;border-color:#c7b4d9;color:#877397}.endpoint.client{border:0;background:#eaf1f5;color:#60778c}.path{fill:none;stroke-width:2;stroke:var(--green);marker-end:url(#arrow);opacity:.72;stroke-linejoin:round}.path.control{stroke:var(--blue);stroke-dasharray:6 5}.path.data{stroke:var(--purple);stroke-dasharray:3 5}.path.muted{opacity:.055}.path.active-route{stroke:#00a77f;stroke-width:3.5;opacity:1;stroke-dasharray:8 5;animation:flow .7s linear infinite}.edge-label{font:10px -apple-system,sans-serif;fill:#8294a2;paint-order:stroke;stroke:#fafcfd;stroke-width:5px;stroke-linejoin:round}.edge-label.muted{opacity:0}.packet{fill:#12b98c;stroke:white;stroke-width:3;filter:drop-shadow(0 0 6px #00b18180)}.machine.selected,.endpoint.selected,.pod.selected{box-shadow:0 0 0 3px #27ba9740}.details-hidden .detail{display:none}.details-hidden .machine{height:auto!important;min-height:140px}.section-label{display:flex;justify-content:space-between;align-items:center;font-size:9px}.status-panel,.scenario-panel,.event-panel{padding:19px;border:1px solid #e0e6ec;border-radius:8px;background:#fff;margin-bottom:12px}.status-panel h2{font-size:18px;letter-spacing:-.5px;font-weight:650;margin:17px 0 8px}.status-panel p{font-size:11px}.request-state{font-size:11px;line-height:1.6;color:#50746c;padding:10px 11px;background:#f0f7f4;border-radius:4px;margin-top:15px;min-height:52px}.request-state.bad{background:#fff0ed;color:#b6604d}.counters{display:flex;justify-content:space-between;margin:18px 0 14px}.counters div{display:flex;flex-direction:column;gap:5px}.counters b{font-size:23px;font-weight:550;color:#38977c}.counters div:nth-child(2) b{color:#c97766}.counters div:nth-child(3) b{color:#688ab9}.counters span{font-size:9px;color:#82909e}.db-state{border-top:1px solid #e9edf1;padding-top:12px;font-size:10px;line-height:1.8;color:#82909e}.db-state strong{font-weight:550;color:#64778b}.scenario-panel select{width:100%;margin:13px 0 8px;border:1px solid #dae3e9;padding:9px 7px;border-radius:5px;color:#5b6c7e;background:#fff;font-size:11px}.scenario-panel button{width:100%;justify-content:space-between}.scenario-panel p{font-size:10px;margin-top:10px}.event-panel{padding-bottom:8px}#events{list-style:none;padding:0;margin:12px 0 0;max-height:280px;overflow:auto}#events li{border-left:1px solid #dbe7e5;padding:0 0 15px 13px;position:relative;margin-left:3px;font-size:10px;line-height:1.65;color:#778595}#events li:before{content:'';position:absolute;left:-3px;top:5px;width:5px;height:5px;border-radius:50%;background:#50a992}#events li.bad:before{background:#d37d6c}#events li.warn:before{background:#d3a054}#events time{font-family:ui-monospace,monospace;color:#a0acb8;display:block;font-size:9px;margin-bottom:3px}footer{display:flex;justify-content:space-between;padding:16px 1px;color:#8c98a6;font-size:10px;gap:12px}footer button{background:none;color:#72899c;font-size:10px;white-space:nowrap}dialog{border:1px solid #d8e2e8;border-radius:12px;width:520px;max-width:90vw;padding:25px;box-shadow:0 20px 90px #10203240;color:#304459}dialog::backdrop{background:#10203270;backdrop-filter:blur(3px)}.dialog-head{display:flex;justify-content:space-between;align-items:center}.dialog-head button{background:#edf2f5;color:#6d7d8d;border-color:#dce4ea}dialog h2{font-size:23px;margin:17px 0}dialog p{font-size:13px;margin:12px 0;color:#66798b}dialog strong{color:#38576a}dialog ul{padding-left:20px;color:#66798b;font-size:13px;line-height:1.8}@keyframes flow{to{stroke-dashoffset:-26}}@media(min-width:1650px){#viewport{height:850px}}@media(max-width:1200px){main{padding:22px 18px 0}.toolbar{align-items:flex-start;flex-wrap:wrap}.workspace{grid-template-columns:minmax(0,1fr) 265px}.tabs button{padding:10px 12px}#viewport{height:680px}.request-controls{margin-left:auto}}@media(max-width:850px){header{padding:0 16px}.brand small,.header-right{display:none}.title-row{align-items:flex-start;gap:12px}h1{font-size:23px}.title-row>.secondary{font-size:10px;padding:9px}.workspace{grid-template-columns:1fr}aside{display:grid;grid-template-columns:1fr 1fr;gap:12px}.event-panel{grid-column:1/-1}#viewport{height:620px}.toolbar{gap:12px}.request-controls{margin:0}.check{font-size:10px}.legend{gap:8px;font-size:8px}footer{flex-wrap:wrap}.status-panel,.scenario-panel{margin:0}}@media(max-width:520px){main{padding:18px 10px 0}.title-row{flex-wrap:wrap;margin-bottom:18px}.tabs{width:100%}.tabs button{flex:1;padding:10px 6px;font-size:10px}.tabs button span{margin-left:3px}.request-controls{flex-wrap:wrap;width:100%}.check{width:100%;margin-bottom:3px}#viewport{height:500px}.canvas-top{padding:0 10px}#quorum{display:none}.legend span:last-child{display:none}.zoom{gap:1px}.zoom button{font-size:10px;padding:5px}aside{grid-template-columns:1fr}.event-panel{grid-column:auto}.canvas-top strong{font-size:10px}}@media(prefers-reduced-motion:reduce){.path.active-route{animation:none}}
/* Внутренние блоки остаются в границах физических машин. */
.machine{padding:10px}.machine-head{height:22px;margin-bottom:6px}.machine-status{font-size:11px;min-height:13px;line-height:13px;margin-bottom:5px}.component{font-size:12px;line-height:15px;padding:4px 8px;margin-bottom:4px}.component .badge{font-size:10px;line-height:13px;padding:0 4px}.disk{padding:5px 8px;margin-top:4px;line-height:12px}.disk strong{font-size:11px;margin-bottom:2px}.disk code{line-height:14px}.pod{padding:5px;margin-bottom:7px;font-size:11px}.pod-title{line-height:13px;margin-bottom:4px}.container{padding:4px 7px;line-height:16px}.runtime{grid-template-columns:1fr 1.6fr 1.3fr .6fr;gap:4px;margin-top:5px}.runtime button{font-size:10px;line-height:12px;padding:4px 0}.endpoint{font-size:14px}.endpoint small{font-size:11px}.group-label{font-size:14px}.group-label span{font-size:12px}.edge-label{font-size:11px}
.path.unavailable:not(.muted){stroke:#b2bdc7;stroke-dasharray:3 7;opacity:.25}
#connections{z-index:1}.machine-head,.machine-status,.component,.pod,.disk,.runtime{position:relative;z-index:2}.endpoint{z-index:2}
.failure-stages:empty{display:none}.failure-stages{display:flex;justify-content:space-between;gap:3px;margin-top:14px}.failure-stages span{font-size:8px;color:#a3afba;text-align:center;display:flex;flex-direction:column;gap:5px;align-items:center}.failure-stages b{display:grid;place-items:center;font-size:10px;font-weight:500;width:21px;height:21px;border:1px solid #e0e7ed;border-radius:50%;background:#f5f8fa}.failure-stages .done{color:#45947e}.failure-stages .done b{background:#eff8f3;border-color:#cde4da}.failure-stages .current{color:#b08446}.failure-stages .current b{background:#fff5df;border-color:#ead6ab}
[data-info]:focus-visible{outline:3px solid #e8aa42;outline-offset:2px}
.group-label{z-index:2;background:#fafcfd;padding:2px 4px;border-radius:3px}
.power{display:grid;place-items:center;padding:0}.power svg{display:block;flex-shrink:0}
.debug-panel{margin-bottom:16px;padding:12px 14px;border:1px solid #dce3e9;border-radius:8px;background:#fff}
.debug-buttons{display:flex;flex-wrap:wrap;gap:8px}.debug-panel p{font-size:12px;margin-top:10px;color:#4b6578}.debug-panel .debug-hint{font-size:11px;color:#81909f}
button:disabled{opacity:.45;cursor:default}.debug-panel [hidden]{display:none}
/* Справочник доступен из пояснений, журнала и пошаговых сообщений. */
a.term-link{color:#2464c5;text-decoration:underline;text-decoration-color:#2464c550;text-underline-offset:3px;cursor:pointer}a.term-link:hover{color:#17468d;text-decoration-color:currentColor}
.glossary-access{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:18px;padding:18px;border:1px solid #dce3e9;border-radius:8px;background:#fff}.glossary-access strong{font-size:13px}.glossary-access p{font-size:12px;margin-top:4px}
#glossary{width:740px;max-height:85vh;overflow-y:auto;user-select:text}#glossary label{display:block;font-size:12px;font-weight:600;margin-bottom:7px}#glossary-search{width:100%;padding:12px;border:1px solid #cbd7e2;border-radius:6px;background:#f8fafc;color:#233347}#glossary-count{font-size:12px;margin:12px 0}.glossary-entry{padding:16px;border:1px solid #e0e6ec;border-radius:8px;margin:10px 0;scroll-margin-top:16px}.glossary-entry h3{font-size:16px;margin:0 0 8px;color:#304459}.glossary-entry p{margin:0;line-height:1.75}.glossary-entry.term-selected{border-color:#3977d5;background:#f0f6ff;box-shadow:0 0 0 2px #3977d520}.glossary-entry h3:focus-visible{outline:2px solid #3977d5;outline-offset:4px}
@media(max-width:520px){.glossary-access{align-items:stretch;flex-direction:column}#glossary{padding:18px;max-width:95vw}.glossary-entry{padding:12px}}
