/* SumerNet — router 3D (moduł wielokrotnego użytku). Markup generuje router3d.js.
   Tematyzacja: --r3d-top, --r3d-side, --r3d-front, --r3d-edge, --r3d-shadow,
   --r3d-led-green, --r3d-led-amber, --r3d-cable, --r3d-label, --r3d-pole (słup; fallback --r3d-label) (z fallbackami poniżej).
   Wszystkie wymiary = liczba * --r3d-u (1px * --r3d-scale, ustawiane z opcji size). */
.r3d{
  --r3d-u:calc(1px * var(--r3d-scale, 1));
  --r3d-i-top:var(--r3d-top, #EEF0F3);
  --r3d-i-side:var(--r3d-side, #D5D9E0);
  --r3d-i-front:var(--r3d-front, #E4E7EC);
  --r3d-i-edge:var(--r3d-edge, #BFC5CE);
  --r3d-i-shadow:var(--r3d-shadow, rgba(0,0,0,.35));
  --r3d-i-green:var(--r3d-led-green, #1FC56F);
  --r3d-i-amber:var(--r3d-led-amber, #FFB020);
  --r3d-i-cable:var(--r3d-cable, #0057FF);
  --r3d-i-label:var(--r3d-label, #4E5767);
  --r3d-i-pole:var(--r3d-pole, var(--r3d-i-label));
  --r3d-i-gloss:.7;--r3d-i-glare:.75;--r3d-i-emboss:rgba(255,255,255,.9);
  --r3d-i-port:#B9BFC9;--r3d-i-off:#C4CAD3;--r3d-i-eth:#6F7F9C;--r3d-i-wan:#2F6FDB;--r3d-i-plug:#0E9A55;
  position:relative;width:100%;height:calc(400*var(--r3d-u));padding-bottom:0;perspective:calc(1400*var(--r3d-u));perspective-origin:calc(50% + var(--r3d-shift, 0px)) 50%;box-sizing:border-box;
}
:root[data-theme="dark"] .r3d{
  --r3d-i-top:var(--r3d-top, #262B34);
  --r3d-i-side:var(--r3d-side, #171B22);
  --r3d-i-front:var(--r3d-front, #1F242C);
  --r3d-i-edge:var(--r3d-edge, #3A414C);
  --r3d-i-shadow:var(--r3d-shadow, rgba(0,0,0,.6));
  --r3d-i-green:var(--r3d-led-green, #2BE07F);
  --r3d-i-amber:var(--r3d-led-amber, #FFC24D);
  --r3d-i-cable:var(--r3d-cable, #5B8CFF);
  --r3d-i-label:var(--r3d-label, #A6AEBB);
  --r3d-i-gloss:.12;--r3d-i-glare:.16;--r3d-i-emboss:rgba(0,0,0,.55);
  --r3d-i-port:#0B0D11;--r3d-i-off:#3A414C;--r3d-i-eth:#8FA3C4;--r3d-i-wan:#5B8CFF;--r3d-i-plug:#1FB467;
}
.r3d *,.r3d *::before,.r3d *::after{box-sizing:border-box}

.r3d-shadow{position:absolute;left:50%;top:80%;width:calc(500*var(--r3d-u));height:calc(120*var(--r3d-u));margin:calc(-60*var(--r3d-u)) 0 0 calc(-250*var(--r3d-u) + var(--r3d-shift, 0px));border-radius:50%;background:var(--r3d-i-shadow);filter:blur(calc(24*var(--r3d-u)));opacity:.5;animation:r3d-shadow 6s ease-in-out infinite}
.r3d.is-nofloat .r3d-shadow,.r3d.is-nofloat .r3d-float{animation:none}
.r3d-float{position:absolute;inset:0;left:var(--r3d-shift, 0px);right:calc(-1*var(--r3d-shift, 0px));transform-style:preserve-3d;animation:r3d-float 6s ease-in-out infinite}
.r3d-device{position:absolute;left:50%;top:58%;width:calc(440*var(--r3d-u));height:calc(280*var(--r3d-u));margin:calc(-140*var(--r3d-u)) 0 0 calc(-220*var(--r3d-u));transform-style:preserve-3d;transform:rotateX(58deg) rotateZ(-18deg)}
@keyframes r3d-float{0%,100%{transform:translateY(calc(10*var(--r3d-u)))}50%{transform:translateY(calc(-10*var(--r3d-u)))}}
@keyframes r3d-shadow{0%,100%{transform:scale(1);opacity:.5}50%{transform:scale(.86);opacity:.34}}

.r3d-face{position:absolute}
.r3d-top{inset:0;border-radius:calc(18*var(--r3d-u));transform:translateZ(calc(22*var(--r3d-u)));background:linear-gradient(135deg,rgba(255,255,255,var(--r3d-i-gloss)) 0%,rgba(255,255,255,0) 42%,rgba(0,0,0,.06) 100%),var(--r3d-i-top);border:1px solid var(--r3d-i-edge);overflow:hidden}
.r3d-bottom{inset:0;border-radius:calc(18*var(--r3d-u));transform:translateZ(calc(-22*var(--r3d-u)));background:#05060a}
.r3d-slice{position:absolute;inset:0;border-radius:calc(18*var(--r3d-u));transform:translateZ(calc(var(--zk) * var(--r3d-u)));background:color-mix(in srgb,var(--r3d-i-top) calc(var(--k) * 60%),var(--r3d-i-side))}
.r3d-front{left:calc(18*var(--r3d-u));top:calc(118*var(--r3d-u));width:calc(404*var(--r3d-u));height:calc(44*var(--r3d-u));transform:translateY(calc(141*var(--r3d-u))) rotateX(-90deg);background:linear-gradient(180deg,var(--r3d-i-front),color-mix(in srgb,var(--r3d-i-front) 70%,var(--r3d-i-side)));border-radius:0 0 calc(6*var(--r3d-u)) calc(6*var(--r3d-u));display:flex;align-items:center;gap:calc(13*var(--r3d-u));padding:0 calc(20*var(--r3d-u)) 0 calc(52*var(--r3d-u));border-bottom:1px solid var(--r3d-i-edge)}
.r3d-back{left:calc(18*var(--r3d-u));top:calc(118*var(--r3d-u));width:calc(404*var(--r3d-u));height:calc(44*var(--r3d-u));transform:translateY(calc(-141*var(--r3d-u))) rotateX(90deg);background:var(--r3d-i-side)}
.r3d-left,.r3d-right{left:calc(198*var(--r3d-u));top:calc(18*var(--r3d-u));width:calc(44*var(--r3d-u));height:calc(244*var(--r3d-u));background:var(--r3d-i-side)}
.r3d-left{transform:translateX(calc(-221*var(--r3d-u))) rotateY(-90deg)}
.r3d-right{transform:translateX(calc(221*var(--r3d-u))) rotateY(90deg)}
.r3d-glare{position:absolute;inset:0;background:linear-gradient(112deg,transparent 28%,rgba(255,255,255,var(--r3d-i-glare)) 44%,transparent 58%);background-size:260% 100%;background-position:var(--gx,40%) 0;pointer-events:none}
/* logo/marka: w osi głębokości wyśrodkowane względem rzędu diod (środek diody = 210 + 5.5 = 215.5u od tylnej krawędzi), prawy margines 24u, szerokość 26% obudowy (odstęp od diody LAN > 12u) */
.r3d-logobox{position:absolute;right:calc(24*var(--r3d-u));top:calc(187.5*var(--r3d-u));width:26%;height:calc(56*var(--r3d-u));display:flex;align-items:center;justify-content:flex-end;pointer-events:none}
.r3d-brand{font-weight:500;font-size:calc(12.8*var(--r3d-u));letter-spacing:.02em;color:var(--r3d-i-edge);text-shadow:0 1px 0 var(--r3d-i-emboss);line-height:1.2;white-space:nowrap}
.r3d-logo{display:block;width:100%;height:auto;max-height:100%;object-fit:contain;opacity:.85}
.r3d-model{position:absolute;left:calc(150*var(--r3d-u));top:calc(14*var(--r3d-u));font-weight:500;font-size:calc(12.8*var(--r3d-u));color:var(--r3d-i-edge);text-shadow:0 1px 0 var(--r3d-i-emboss);line-height:1.2}
.r3d-vents{position:absolute;left:calc(150*var(--r3d-u));top:calc(44*var(--r3d-u));width:calc(140*var(--r3d-u));height:calc(70*var(--r3d-u));background:repeating-linear-gradient(90deg,var(--r3d-i-edge) 0 calc(3*var(--r3d-u)),transparent calc(3*var(--r3d-u)) calc(11*var(--r3d-u)));border-radius:calc(6*var(--r3d-u));opacity:.55;-webkit-mask-image:linear-gradient(180deg,#000,transparent);mask-image:linear-gradient(180deg,#000,transparent)}

/* diody: pozycjonowane absolutnie dokładnie nad środkiem portu (--x = środek portu na przedniej ściance; górna ścianka = ścianka + 18u) */
.r3d-leds{position:absolute;inset:0;pointer-events:none}
.r3d-led-item{position:absolute;left:calc((18 + var(--x))*var(--r3d-u));top:calc(210*var(--r3d-u));transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:calc(7*var(--r3d-u))}
.r3d-led{--c:var(--r3d-i-green);width:calc(11*var(--r3d-u));height:calc(11*var(--r3d-u));border-radius:50%;background:var(--r3d-i-off);box-shadow:inset 0 1px 2px rgba(0,0,0,.35)}
.r3d-led.is-green{background:var(--r3d-i-green);box-shadow:0 0 calc(10*var(--r3d-u)) var(--r3d-i-green)}
.r3d-led.is-amber{background:var(--r3d-i-amber);box-shadow:0 0 calc(10*var(--r3d-u)) var(--r3d-i-amber)}
.r3d-led.blink-amber{--c:var(--r3d-i-amber)}
.r3d-led.blink-amber,.r3d-led.blink-green{animation:r3d-blink var(--bt,.35s) steps(1,end) var(--bn,2)}
@keyframes r3d-blink{0%{background:var(--c);box-shadow:0 0 calc(10*var(--r3d-u)) var(--c)}50%{background:var(--r3d-i-off);box-shadow:inset 0 1px 2px rgba(0,0,0,.35)}}
.r3d-led-label{transition:opacity .25s;font-size:calc(9.6*var(--r3d-u));font-weight:500;line-height:1;color:var(--r3d-i-label);white-space:nowrap}

/* podpisy portów — nadruk na przedniej ściance, w pasie nad portem, wyśrodkowane w osi portu (--x) */
.r3d-plabel{position:absolute;top:calc(2*var(--r3d-u));left:calc(var(--x)*var(--r3d-u));transform:translateX(-50%);flex:none;display:flex;justify-content:center;white-space:nowrap;font-size:calc(6.5*var(--r3d-u));font-weight:500;letter-spacing:.02em;line-height:1;color:var(--r3d-i-label)}
.r3d-plabel-slot{position:absolute;top:calc(2*var(--r3d-u));left:calc(var(--x)*var(--r3d-u));transform:translateX(-50%);width:calc(40*var(--r3d-u));height:calc(7*var(--r3d-u))}
.r3d-plabel-slot .r3d-plabel{left:0;right:0;top:0;transform:none;transition:opacity .25s}
.r3d-plabel--wan{color:var(--r3d-i-wan)}

.r3d-port-slot{position:relative;flex:none;width:calc(40*var(--r3d-u));height:calc(25*var(--r3d-u))}
.r3d-port{position:absolute;left:50%;top:50%;display:grid;place-items:center;transition:opacity .25s}
.r3d-port--fiber{width:calc(22*var(--r3d-u));height:calc(22*var(--r3d-u));margin:calc(-11*var(--r3d-u)) 0 0 calc(-11*var(--r3d-u));border-radius:calc(3*var(--r3d-u));background:var(--r3d-i-green);box-shadow:inset 0 0 0 calc(2*var(--r3d-u)) rgba(0,0,0,.18)}
.r3d-port--fiber i{width:calc(9*var(--r3d-u));height:calc(9*var(--r3d-u));border-radius:calc(2*var(--r3d-u));background:var(--r3d-i-port)}
.r3d-port--wan{width:calc(40*var(--r3d-u));height:calc(25*var(--r3d-u));margin:calc(-12.5*var(--r3d-u)) 0 0 calc(-20*var(--r3d-u));border-radius:calc(3*var(--r3d-u));border:calc(2*var(--r3d-u)) solid var(--r3d-i-wan);background:var(--r3d-i-port)}
.r3d-port--wan i{width:calc(24*var(--r3d-u));height:calc(7*var(--r3d-u));background:repeating-linear-gradient(90deg,var(--r3d-i-wan) 0 calc(2*var(--r3d-u)),transparent calc(2*var(--r3d-u)) calc(4*var(--r3d-u)));margin-top:calc(8*var(--r3d-u))}
.r3d-port.is-in,.r3d-plabel.is-in,.r3d-cable.is-in{animation:r3d-fade .25s ease-out}
.r3d-port.is-out,.r3d-plabel.is-out,.r3d-cable.is-out{opacity:0}
@keyframes r3d-fade{from{opacity:0}to{opacity:1}}
.r3d-port-rj{position:relative;width:calc(40*var(--r3d-u));height:calc(25*var(--r3d-u));border-radius:calc(3*var(--r3d-u));border:1px solid var(--r3d-i-edge);background:var(--r3d-i-port);flex:none}
.r3d-port-rj::before{content:"";position:absolute;left:50%;top:-1px;width:calc(14*var(--r3d-u));height:calc(6*var(--r3d-u));margin-left:calc(-7*var(--r3d-u));background:var(--r3d-i-front);border:1px solid var(--r3d-i-edge);border-top:0;border-radius:0 0 calc(3*var(--r3d-u)) calc(3*var(--r3d-u))}
.r3d-port-rj::after{content:"";position:absolute;left:calc(6*var(--r3d-u));right:calc(6*var(--r3d-u));bottom:calc(3*var(--r3d-u));height:calc(5*var(--r3d-u));background:repeating-linear-gradient(90deg,var(--r3d-i-edge) 0 calc(2*var(--r3d-u)),transparent calc(2*var(--r3d-u)) calc(4*var(--r3d-u)))}
.r3d-port-reset{margin-left:auto;width:calc(8*var(--r3d-u));height:calc(8*var(--r3d-u));border-radius:50%;background:var(--r3d-i-port);border:1px solid var(--r3d-i-edge);flex:none}

.r3d-ant{position:absolute;left:50%;top:50%;width:0;height:0;transform-style:preserve-3d}
.r3d-ant-l{transform:translate3d(calc(-168*var(--r3d-u)),calc(-112*var(--r3d-u)),calc(22*var(--r3d-u))) rotateX(8deg)}
.r3d-ant-r{transform:translate3d(calc(168*var(--r3d-u)),calc(-112*var(--r3d-u)),calc(22*var(--r3d-u))) rotateX(8deg)}
.r3d-af{position:absolute;display:block;left:calc(-8*var(--r3d-u));top:calc(-130*var(--r3d-u));width:calc(16*var(--r3d-u));height:calc(130*var(--r3d-u));transform-origin:50% 100%;background:var(--r3d-i-front);border-radius:calc(7*var(--r3d-u)) calc(7*var(--r3d-u)) 0 0;border:1px solid var(--r3d-i-edge)}
.r3d-af-a{transform:translateY(calc(5*var(--r3d-u))) rotateX(-90deg)}
.r3d-af-b{transform:translateY(calc(-5*var(--r3d-u))) rotateX(-90deg);background:var(--r3d-i-side)}
.r3d-af-c,.r3d-af-d{left:calc(-5*var(--r3d-u));width:calc(10*var(--r3d-u));background:var(--r3d-i-side)}
.r3d-af-c{transform:translateX(calc(-8*var(--r3d-u))) rotateZ(90deg) rotateX(-90deg)}
.r3d-af-d{transform:translateX(calc(8*var(--r3d-u))) rotateZ(90deg) rotateX(-90deg)}
.r3d-af-cap{left:calc(-8*var(--r3d-u));top:calc(-5*var(--r3d-u));width:calc(16*var(--r3d-u));height:calc(10*var(--r3d-u));border-radius:calc(4*var(--r3d-u));transform:translateZ(calc(130*var(--r3d-u)));background:var(--r3d-i-top)}

/* płaszczyzna wtyku — pozioma (równoległa do górnej ścianki), na wysokości środka portu (z=0 = 22-PY), tylna krawędź przy przedniej ściance;
   viewBox 404×260 (y=0 = linia ścianki, y rośnie do przodu); wtyk wchodzi w port prostopadle */
.r3d-plugplane{position:absolute;left:calc(18*var(--r3d-u));top:calc(281*var(--r3d-u));width:calc(404*var(--r3d-u));height:calc(260*var(--r3d-u));transform:translateZ(calc((22 - 22)*var(--r3d-u)));pointer-events:none}
.r3d-plug-slot{position:absolute;left:0;top:0;width:100%;height:100%}
.r3d-mark-plug,.r3d-mark-boot,.r3d-mark-axis{position:absolute;display:block;width:calc(2*var(--r3d-u));height:calc(2*var(--r3d-u));margin:calc(-1*var(--r3d-u)) 0 0 calc(-1*var(--r3d-u));opacity:0;pointer-events:none}
.r3d-mark-plug{left:calc(72*var(--r3d-u));top:0}
/* znaczniki osi wtyku (niewidoczne): boot = koniec boota (44u), axis = 60u przed portem w osi; kierunek osi na ekranie = rzut(axis) - rzut(port) */
.r3d-mark-boot{left:calc(72*var(--r3d-u));top:calc(44*var(--r3d-u))}
.r3d-mark-axis{left:calc(72*var(--r3d-u));top:calc(60*var(--r3d-u))}
/* warstwa ekranowa — bez transformacji 3D (słup/antena zawsze pionowe), współrzędne = px kontenera */
.r3d-overlay{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none}
/* ściana w rzucie skośnym: same cegły obrysowane cienką kreską (bez obrysu ściany, płaszczyzn i wypełnienia), tło pod kablem */
.r3d-brick{fill:none;stroke:var(--r3d-i-pole);stroke-opacity:.5;stroke-width:calc(.8*var(--r3d-u))}
:root[data-theme="dark"] .r3d-brick{stroke-opacity:.42}
.r3d-wall-port{fill:var(--r3d-i-pole);stroke:var(--r3d-i-pole);stroke-width:calc(1*var(--r3d-u));opacity:.7}
.r3d-overlay .r3d-cable-glow{stroke-width:calc(9*var(--r3d-u))}
.r3d-overlay .r3d-cable-line{stroke-width:calc(3.2*var(--r3d-u))}
.r3d-overlay .r3d-cable-pulse{stroke-width:calc(3.6*var(--r3d-u))}
.r3d-overlay .r3d-eth-line{stroke-width:calc(3*var(--r3d-u))}
.r3d-cable{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible;pointer-events:none;transition:opacity .25s}
.r3d-cable-glow{fill:none;stroke:var(--r3d-i-cable);stroke-width:9;stroke-linecap:round;opacity:.22}
.r3d-cable-line{fill:none;stroke:var(--r3d-i-cable);stroke-width:3.2;stroke-linecap:round}
.r3d-cable-pulse{fill:none;stroke:#fff;stroke-width:3.6;stroke-linecap:round;stroke-dasharray:7 100;stroke-dashoffset:7;animation:r3d-pulse 3s linear infinite}
.r3d-plug-boot{fill:var(--r3d-i-plug);stroke:rgba(0,0,0,.4);stroke-width:.7;stroke-linejoin:round;opacity:.8}
.r3d-plug-body{fill:var(--r3d-i-plug);stroke:rgba(0,0,0,.45);stroke-width:.8}
.r3d-plug-key{fill:var(--r3d-i-plug);stroke:rgba(0,0,0,.45);stroke-width:.7}
.r3d-plug-tip{fill:#F4F6F8;stroke:rgba(0,0,0,.4);stroke-width:.7}
/* słup betonowy: gradient poziomy (jaśniejsza lewa krawędź), bez linii poziomych; poprzeczka 230 V, stelaż z mufą */
.r3d-pg-a{stop-color:color-mix(in srgb,var(--r3d-i-pole) 62%,#fff)}
.r3d-pg-b{stop-color:var(--r3d-i-pole)}
.r3d-pg-c{stop-color:color-mix(in srgb,var(--r3d-i-pole) 80%,#000)}
.r3d-pole-body{stroke:color-mix(in srgb,var(--r3d-i-pole) 70%,#000);stroke-width:calc(.8*var(--r3d-u));stroke-linejoin:round}
.r3d-closure{fill:var(--r3d-i-front);stroke:var(--r3d-i-pole);stroke-width:calc(1.2*var(--r3d-u))}
.r3d-closure-in{fill:var(--r3d-i-cable);stroke:var(--r3d-i-pole);stroke-width:calc(.6*var(--r3d-u))}
.r3d-closure-logo{opacity:.9}
.r3d-rack{fill:none;stroke:var(--r3d-i-pole);stroke-width:calc(1.4*var(--r3d-u));opacity:.7}
.r3d-rack-bar{fill:var(--r3d-i-pole)}
.r3d-rack-clip{fill:var(--r3d-i-pole);stroke:var(--r3d-i-front);stroke-width:calc(.6*var(--r3d-u))}
.r3d-overlay .r3d-cable-coil{fill:none;stroke:var(--r3d-i-cable);stroke-width:calc(2*var(--r3d-u));stroke-linecap:round;opacity:.95}
.r3d-crossarm{stroke:var(--r3d-i-pole);stroke-width:calc(3*var(--r3d-u));stroke-linecap:round}
.r3d-insulator{stroke:var(--r3d-i-pole);stroke-width:calc(1.6*var(--r3d-u));stroke-linecap:round}
.r3d-insulator-cap{fill:var(--r3d-i-pole)}
.r3d-powerline{fill:none;stroke:var(--r3d-i-pole);stroke-width:calc(1*var(--r3d-u));opacity:.45}
.r3d-eth-line{stroke-width:calc(3*var(--r3d-u))}
.r3d-cable{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible;pointer-events:none;transition:opacity .25s}
.r3d-cable-glow{fill:none;stroke:var(--r3d-i-cable);stroke-width:9;stroke-linecap:round;opacity:.22}
.r3d-cable-line{fill:none;stroke:var(--r3d-i-cable);stroke-width:3.2;stroke-linecap:round}
.r3d-cable-pulse{fill:none;stroke:#fff;stroke-width:3.6;stroke-linecap:round;stroke-dasharray:7 100;stroke-dashoffset:7;animation:r3d-pulse 3s linear infinite}
.r3d-plug-boot{fill:var(--r3d-i-plug);stroke:rgba(0,0,0,.4);stroke-width:.7;stroke-linejoin:round;opacity:.8}
.r3d-plug-body{fill:var(--r3d-i-plug);stroke:rgba(0,0,0,.45);stroke-width:.8}
.r3d-plug-key{fill:var(--r3d-i-plug);stroke:rgba(0,0,0,.45);stroke-width:.7}
.r3d-plug-tip{fill:#F4F6F8;stroke:rgba(0,0,0,.4);stroke-width:.7}
/* słup betonowy: gradient poziomy (jaśniejsza lewa krawędź), bez linii poziomych; poprzeczka 230 V, stelaż z mufą */
.r3d-pg-a{stop-color:color-mix(in srgb,var(--r3d-i-pole) 62%,#fff)}
.r3d-pg-b{stop-color:var(--r3d-i-pole)}
.r3d-pg-c{stop-color:color-mix(in srgb,var(--r3d-i-pole) 80%,#000)}
.r3d-pole-body{stroke:color-mix(in srgb,var(--r3d-i-pole) 70%,#000);stroke-width:calc(.8*var(--r3d-u));stroke-linejoin:round}
.r3d-closure{fill:var(--r3d-i-front);stroke:var(--r3d-i-pole);stroke-width:calc(1.5*var(--r3d-u))}
.r3d-closure-seam{stroke:var(--r3d-i-pole);stroke-width:calc(1*var(--r3d-u));opacity:.6;fill:none}
.r3d-closure-clamp{fill:var(--r3d-i-pole)}
.r3d-closure-in{fill:var(--r3d-i-cable);stroke:var(--r3d-i-pole);stroke-width:calc(.8*var(--r3d-u))}
.r3d-eth-line{fill:none;stroke:var(--r3d-i-eth);stroke-width:3;stroke-linecap:round}
.r3d-eth-body{fill:var(--r3d-i-eth);stroke:rgba(0,0,0,.4);stroke-width:.8}
.r3d-eth-boot{fill:var(--r3d-i-eth);stroke:rgba(0,0,0,.4);stroke-width:.7;opacity:.8}
.r3d-eth-clip{fill:var(--r3d-i-eth);stroke:rgba(0,0,0,.4);stroke-width:.7}
.r3d-eth-tip{fill:#E4C26A;stroke:rgba(0,0,0,.4);stroke-width:.7}
/* antena (.r3d-antenna): rysunek wg szkicu 2D z kolorami w atrybutach SVG (biała czasza w obu motywach); grupa skalowana scale(--r3d-scale) w JS */
@keyframes r3d-pulse{from{stroke-dashoffset:7}to{stroke-dashoffset:-100}}

@media (prefers-reduced-motion:reduce){
  .r3d-shadow,.r3d-float,.r3d-led.blink-amber,.r3d-led.blink-green,.r3d-cable-pulse{animation:none}
  .r3d-cable-pulse{stroke-dashoffset:-45}
}
/* miejsce na pętlę kabla przed routerem: kontener z kablem jest wyższy, scena przesunięta w górę */
.r3d.has-cable{height:calc(470*var(--r3d-u))}
.r3d.has-cable .r3d-float,.r3d.has-cable .r3d-shadow{bottom:calc(70*var(--r3d-u))}
