@portrayal/juniper-mx960 0.0.0-stage → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"components":{},"config":"base","configs":["ac","base"],"device":"mx960","device-version":"5.0.1","elements":[{"box":{"h":704.9,"w":584.2,"x":0.0,"y":0.0},"class":"chassis","id":"chassis-faceplate","parent":null,"path":"chassis"}],"generator":{"tool":"portrayal-render","version":"0.2.0"},"source-sha256":"e1d027c8ec84333ab12f1762068c1182b8a30e772de600a61c234a6e39e53340","view":"left","viewBox":[0.0,0.0,584.2,704.9]}
@@ -0,0 +1,48 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="584.2mm" height="704.9mm" viewBox="0 0 584.2 704.9" data-device="mx960" data-view="left" data-weight-max-kg="169.64" data-power-typical-w="6520" data-power-envelope="unstated" data-power-typical-scope="AC typical power draw from the MX Series family datasheet, which names no configuration, ambient or side; DC 6670 W" data-base-system-w="50" data-cooling-system-w="640 W high-capacity at full speed (450 W typical at normal speed); normal-capacity 600 W (400 W typical) - Table 95" data-max-thermal-output="AC 27,007 BTU/h (7920 W); DC 18,987 BTU/h (5568 W) (Table 84; provisioning ceiling)">
3
+ <style>
4
+ [data-path] { cursor: pointer; }
5
+ .state-on { --led-color: #22c55e; }
6
+ .state-up { --led-color: #22c55e; }
7
+ /* link and up are the same fact on an Ethernet lamp; see docs/rj45-family-design.md */
8
+ .state-link { --led-color: #22c55e; }
9
+ .state-activity { --led-color: #86efac; }
10
+ .state-ok { --led-color: #22c55e; }
11
+ .state-fault { --led-color: #ef4444; }
12
+ .state-fail { --led-color: #ef4444; }
13
+ .state-locate { --led-color: #3b82f6; }
14
+ .state-absent { opacity: 0.35; }
15
+ /* A SWITCHED OUTLET WITH NO LAMP is dimmed when it is off, as absent is but
16
+ less (docs/pdu-model-design.md section 3.2): every switched PDU in the
17
+ library has a lamp per outlet, and this is the fallback so the first one
18
+ without does not invent a lamp. An outlet a lamp is bound to by `for:`
19
+ carries data-lamped (mark_lamped) and is never dimmed: its lamp says it. */
20
+ [data-class='inlet'][data-states~='off'].state-off:not([data-lamped]) { opacity: 0.55; }
21
+ /* A state is a colour AND a behaviour. Solid and blinking of the same colour
22
+ are different facts on real hardware: on the S9510-28DC a solid green PWR
23
+ is "system power good" and a blinking green PWR is "power good but BMC
24
+ power fail". A blinking state that renders solid is the same failure as a
25
+ state class nothing paints - it looks modelled and is not.
26
+ blink animates opacity rather than fill, because each skin carries its own
27
+ unlit colour in the fill fallback and a keyframe cannot name it. alternate
28
+ animates fill, because two colours is the whole point, and takes its first
29
+ value from the element's own fill. */
30
+ @keyframes portrayal-blink {
31
+ 0%, 49.9% { opacity: 1; }
32
+ 50%, 100% { opacity: 0; }
33
+ }
34
+ @keyframes portrayal-alternate {
35
+ 0%, 49.9% { fill: var(--led-color, #3a3f44); }
36
+ 50%, 100% { fill: var(--led-color-alt, #3a3f44); }
37
+ }
38
+ .portrayal-highlight { filter: drop-shadow(0 0 1.2px #f59e0b) drop-shadow(0 0 0.5px #f59e0b); }
39
+ .portrayal-dim { opacity: 0.25; }
40
+ [data-class='region'].portrayal-highlight { stroke: #f59e0b; stroke-width: 0.7; filter: none; }
41
+ .state-fail[data-class='psu'], .state-fail[data-class='fan'] { filter: drop-shadow(0 0 1.4px #ef4444); }
42
+ </style>
43
+ <metadata>{"device":"Juniper MX960","device-version":"5.0.1","generator":{"tool":"portrayal-render","version":"0.2.0"},"resolved-components":{},"source-sha256":"e1d027c8ec84333ab12f1762068c1182b8a30e772de600a61c234a6e39e53340","view":"left"}</metadata>
44
+ <rect id="chassis-faceplate" data-path="chassis" data-class="chassis" data-model="MX960" x="0" y="0" width="584.2" height="704.9" rx="1.2" fill="#3a3e43" stroke="#22262a" stroke-width="0.5" />
45
+ <g id="--decor" data-class="decor">
46
+ <rect id="plate-0" data-kind="plate" x="0" y="330" width="584.2" height="30" rx="0.6" fill="#33373c" />
47
+ </g>
48
+ </svg>
@@ -0,0 +1 @@
1
+ {"components":{"juniper/mx960-psu-ac@1":"1.0.1","std/c20-inlet@1":"1.4.0"},"config":"base","configs":["ac","base"],"device":"mx960","device-version":"5.0.1","elements":[{"box":{"h":704.9,"w":441.1,"x":0.0,"y":0.0},"class":"chassis","id":"chassis-faceplate","parent":null,"path":"chassis"},{"box":{"h":24.4,"w":32.4,"x":26.0,"y":105.0},"class":"cutout","id":"cutout--inlet-0","parent":"inlet-0","path":"cutout:inlet-0"},{"box":{"h":24.4,"w":32.4,"x":129.0,"y":105.0},"class":"cutout","id":"cutout--inlet-1","parent":"inlet-1","path":"cutout:inlet-1"},{"box":{"h":24.4,"w":32.4,"x":232.0,"y":105.0},"class":"cutout","id":"cutout--inlet-2","parent":"inlet-2","path":"cutout:inlet-2"},{"box":{"h":24.4,"w":32.4,"x":335.0,"y":105.0},"class":"cutout","id":"cutout--inlet-3","parent":"inlet-3","path":"cutout:inlet-3"},{"box":null,"class":"silkscreen","for":["pem0"],"group":"silkscreen","group-role":"marking","parent":"pem0","path":"silk:0"},{"box":null,"class":"silkscreen","for":["pem1"],"group":"silkscreen","group-role":"marking","parent":"pem1","path":"silk:1"},{"box":null,"class":"silkscreen","for":["pem2"],"group":"silkscreen","group-role":"marking","parent":"pem2","path":"silk:2"},{"box":null,"class":"silkscreen","for":["pem3"],"group":"silkscreen","group-role":"marking","parent":"pem3","path":"silk:3"},{"box":{"h":24.4,"w":32.4,"x":26.0,"y":105.0},"class":"inlet","connection-points":{"mate":{"at":[16.2,12.2],"dir":"front","face":[42.2,117.2]}},"for":["pem0"],"group":"inlets","group-role":"service","id":"inlet-0","media":"ac","parent":"pem0","path":"inlet-0","ref":"std/c20-inlet@1:1.4.0","rel-pos":"0"},{"box":{"h":24.4,"w":32.4,"x":26.0,"y":105.0},"class":"cutout","id":"inlet-0--opening","parent":"inlet-0","path":"inlet-0/opening"},{"box":{"h":24.4,"w":32.4,"x":129.0,"y":105.0},"class":"inlet","connection-points":{"mate":{"at":[16.2,12.2],"dir":"front","face":[145.2,117.2]}},"for":["pem1"],"group":"inlets","group-role":"service","id":"inlet-1","media":"ac","parent":"pem1","path":"inlet-1","ref":"std/c20-inlet@1:1.4.0","rel-pos":"1"},{"box":{"h":24.4,"w":32.4,"x":129.0,"y":105.0},"class":"cutout","id":"inlet-1--opening","parent":"inlet-1","path":"inlet-1/opening"},{"box":{"h":24.4,"w":32.4,"x":232.0,"y":105.0},"class":"inlet","connection-points":{"mate":{"at":[16.2,12.2],"dir":"front","face":[248.2,117.2]}},"for":["pem2"],"group":"inlets","group-role":"service","id":"inlet-2","media":"ac","parent":"pem2","path":"inlet-2","ref":"std/c20-inlet@1:1.4.0","rel-pos":"2"},{"box":{"h":24.4,"w":32.4,"x":232.0,"y":105.0},"class":"cutout","id":"inlet-2--opening","parent":"inlet-2","path":"inlet-2/opening"},{"box":{"h":24.4,"w":32.4,"x":335.0,"y":105.0},"class":"inlet","connection-points":{"mate":{"at":[16.2,12.2],"dir":"front","face":[351.2,117.2]}},"for":["pem3"],"group":"inlets","group-role":"service","id":"inlet-3","media":"ac","parent":"pem3","path":"inlet-3","ref":"std/c20-inlet@1:1.4.0","rel-pos":"3"},{"box":{"h":24.4,"w":32.4,"x":335.0,"y":105.0},"class":"cutout","id":"inlet-3--opening","parent":"inlet-3","path":"inlet-3/opening"},{"box":{"h":480.0,"w":103.0,"x":14.5,"y":158.0},"class":"bay","group":"psus","group-role":"service","id":"pem0","parent":null,"path":"pem0","rel-pos":"0"},{"box":{"h":480.0,"w":103.0,"x":14.5,"y":158.0},"class":"psu","id":"pem0--module","parent":"pem0","path":"pem0/module","ref":"juniper/mx960-psu-ac@1:1.0.1","seat":"pem0","states":["ok","fault","absent"]},{"box":{"h":480.0,"w":103.0,"x":117.5,"y":158.0},"class":"bay","group":"psus","group-role":"service","id":"pem1","parent":null,"path":"pem1","rel-pos":"1"},{"box":{"h":480.0,"w":103.0,"x":117.5,"y":158.0},"class":"psu","id":"pem1--module","parent":"pem1","path":"pem1/module","ref":"juniper/mx960-psu-ac@1:1.0.1","seat":"pem1","states":["ok","fault","absent"]},{"box":{"h":480.0,"w":103.0,"x":220.5,"y":158.0},"class":"bay","group":"psus","group-role":"service","id":"pem2","parent":null,"path":"pem2","rel-pos":"2"},{"box":{"h":480.0,"w":103.0,"x":220.5,"y":158.0},"class":"psu","id":"pem2--module","parent":"pem2","path":"pem2/module","ref":"juniper/mx960-psu-ac@1:1.0.1","seat":"pem2","states":["ok","fault","absent"]},{"box":{"h":480.0,"w":103.0,"x":323.5,"y":158.0},"class":"bay","group":"psus","group-role":"service","id":"pem3","parent":null,"path":"pem3","rel-pos":"3"},{"box":{"h":480.0,"w":103.0,"x":323.5,"y":158.0},"class":"psu","id":"pem3--module","parent":"pem3","path":"pem3/module","ref":"juniper/mx960-psu-ac@1:1.0.1","seat":"pem3","states":["ok","fault","absent"]}],"generator":{"tool":"portrayal-render","version":"0.2.0"},"source-sha256":"e1d027c8ec84333ab12f1762068c1182b8a30e772de600a61c234a6e39e53340","view":"rear","viewBox":[0.0,0.0,441.1,704.9]}
@@ -0,0 +1,284 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="441.1mm" height="704.9mm" viewBox="0 0 441.1 704.9" data-device="mx960" data-view="rear" data-weight-max-kg="169.64" data-power-typical-w="6520" data-power-envelope="unstated" data-power-typical-scope="AC typical power draw from the MX Series family datasheet, which names no configuration, ambient or side; DC 6670 W" data-base-system-w="50" data-cooling-system-w="640 W high-capacity at full speed (450 W typical at normal speed); normal-capacity 600 W (400 W typical) - Table 95" data-max-thermal-output="AC 27,007 BTU/h (7920 W); DC 18,987 BTU/h (5568 W) (Table 84; provisioning ceiling)">
3
+ <style>
4
+ [data-path] { cursor: pointer; }
5
+ .state-on { --led-color: #22c55e; }
6
+ .state-up { --led-color: #22c55e; }
7
+ /* link and up are the same fact on an Ethernet lamp; see docs/rj45-family-design.md */
8
+ .state-link { --led-color: #22c55e; }
9
+ .state-activity { --led-color: #86efac; }
10
+ .state-ok { --led-color: #22c55e; }
11
+ .state-fault { --led-color: #ef4444; }
12
+ .state-fail { --led-color: #ef4444; }
13
+ .state-locate { --led-color: #3b82f6; }
14
+ .state-absent { opacity: 0.35; }
15
+ /* A SWITCHED OUTLET WITH NO LAMP is dimmed when it is off, as absent is but
16
+ less (docs/pdu-model-design.md section 3.2): every switched PDU in the
17
+ library has a lamp per outlet, and this is the fallback so the first one
18
+ without does not invent a lamp. An outlet a lamp is bound to by `for:`
19
+ carries data-lamped (mark_lamped) and is never dimmed: its lamp says it. */
20
+ [data-class='inlet'][data-states~='off'].state-off:not([data-lamped]) { opacity: 0.55; }
21
+ /* A state is a colour AND a behaviour. Solid and blinking of the same colour
22
+ are different facts on real hardware: on the S9510-28DC a solid green PWR
23
+ is "system power good" and a blinking green PWR is "power good but BMC
24
+ power fail". A blinking state that renders solid is the same failure as a
25
+ state class nothing paints - it looks modelled and is not.
26
+ blink animates opacity rather than fill, because each skin carries its own
27
+ unlit colour in the fill fallback and a keyframe cannot name it. alternate
28
+ animates fill, because two colours is the whole point, and takes its first
29
+ value from the element's own fill. */
30
+ @keyframes portrayal-blink {
31
+ 0%, 49.9% { opacity: 1; }
32
+ 50%, 100% { opacity: 0; }
33
+ }
34
+ @keyframes portrayal-alternate {
35
+ 0%, 49.9% { fill: var(--led-color, #3a3f44); }
36
+ 50%, 100% { fill: var(--led-color-alt, #3a3f44); }
37
+ }
38
+ .portrayal-highlight { filter: drop-shadow(0 0 1.2px #f59e0b) drop-shadow(0 0 0.5px #f59e0b); }
39
+ .portrayal-dim { opacity: 0.25; }
40
+ [data-class='region'].portrayal-highlight { stroke: #f59e0b; stroke-width: 0.7; filter: none; }
41
+ .state-fail[data-class='psu'], .state-fail[data-class='fan'] { filter: drop-shadow(0 0 1.4px #ef4444); }
42
+ </style>
43
+ <metadata>{"device":"Juniper MX960","device-version":"5.0.1","generator":{"tool":"portrayal-render","version":"0.2.0"},"resolved-components":{"juniper/mx960-psu-ac@1":"1.0.1","std/c20-inlet@1":"1.4.0"},"source-sha256":"e1d027c8ec84333ab12f1762068c1182b8a30e772de600a61c234a6e39e53340","view":"rear"}</metadata>
44
+ <rect id="chassis-faceplate" data-path="chassis" data-class="chassis" data-model="MX960" x="0" y="0" width="441.1" height="704.9" rx="1.2" fill="#3a3e43" stroke="#22262a" stroke-width="0.5" />
45
+ <defs>
46
+ <pattern id="portrayal-holes" width="5" height="5" patternUnits="userSpaceOnUse">
47
+ <circle cx="2.5" cy="2.5" r="1.1" fill="#3c4046" />
48
+ </pattern>
49
+ </defs>
50
+ <g id="--decor" data-class="decor">
51
+ <rect id="holes-field-0" data-kind="holes-field" x="10" y="4" width="421.1" height="86" rx="0.6" fill="url(#portrayal-holes)" />
52
+ <rect id="plate-0" data-kind="plate" x="4" y="94" width="433.1" height="42" rx="0.6" fill="#8a8f95" />
53
+ <rect id="holes-field-1" data-kind="holes-field" x="10" y="138" width="421.1" height="16" rx="0.6" fill="url(#portrayal-holes)" />
54
+ <rect id="plate-1" data-kind="plate" x="66" y="108" width="16" height="12" rx="1.4" fill="#111214" />
55
+ <rect id="plate-2" data-kind="plate" x="70.2" y="109.6" width="7.6" height="8.8" rx="1" fill="#565b61" />
56
+ <rect id="plate-3" data-kind="plate" x="169" y="108" width="16" height="12" rx="1.4" fill="#111214" />
57
+ <rect id="plate-4" data-kind="plate" x="173.2" y="109.6" width="7.6" height="8.8" rx="1" fill="#565b61" />
58
+ <rect id="plate-5" data-kind="plate" x="272" y="108" width="16" height="12" rx="1.4" fill="#111214" />
59
+ <rect id="plate-6" data-kind="plate" x="276.2" y="109.6" width="7.6" height="8.8" rx="1" fill="#565b61" />
60
+ <rect id="plate-7" data-kind="plate" x="375" y="108" width="16" height="12" rx="1.4" fill="#111214" />
61
+ <rect id="plate-8" data-kind="plate" x="379.2" y="109.6" width="7.6" height="8.8" rx="1" fill="#565b61" />
62
+ <rect id="plate-9" data-kind="plate" x="4" y="642" width="433.1" height="58" rx="0.6" fill="#cfc9b8" />
63
+ <rect id="plate-10" data-kind="plate" x="42" y="656" width="30" height="30" rx="15" fill="#b8b2a0" />
64
+ <rect id="plate-11" data-kind="plate" x="145" y="656" width="30" height="30" rx="15" fill="#b8b2a0" />
65
+ <rect id="plate-12" data-kind="plate" x="248" y="656" width="30" height="30" rx="15" fill="#b8b2a0" />
66
+ <rect id="plate-13" data-kind="plate" x="351" y="656" width="30" height="30" rx="15" fill="#b8b2a0" />
67
+ </g>
68
+ <g id="--cutouts" data-class="cutouts">
69
+ <rect x="26" y="105" width="32.4" height="24.4" fill="#101214" id="cutout--inlet-0" data-path="cutout:inlet-0" data-class="cutout" />
70
+ <rect x="129" y="105" width="32.4" height="24.4" fill="#101214" id="cutout--inlet-1" data-path="cutout:inlet-1" data-class="cutout" />
71
+ <rect x="232" y="105" width="32.4" height="24.4" fill="#101214" id="cutout--inlet-2" data-path="cutout:inlet-2" data-class="cutout" />
72
+ <rect x="335" y="105" width="32.4" height="24.4" fill="#101214" id="cutout--inlet-3" data-path="cutout:inlet-3" data-class="cutout" />
73
+ </g>
74
+ <g id="--silkscreen" data-class="silkscreen">
75
+ <text x="74" y="106.2" font-family="sans-serif" font-size="1.3" text-anchor="middle" fill="#e8eaec" data-path="silk:0" data-class="silkscreen" data-group="silkscreen" data-group-role="marking" data-for="pem0">I / O</text>
76
+ <text x="177" y="106.2" font-family="sans-serif" font-size="1.3" text-anchor="middle" fill="#e8eaec" data-path="silk:1" data-class="silkscreen" data-group="silkscreen" data-group-role="marking" data-for="pem1">I / O</text>
77
+ <text x="280" y="106.2" font-family="sans-serif" font-size="1.3" text-anchor="middle" fill="#e8eaec" data-path="silk:2" data-class="silkscreen" data-group="silkscreen" data-group-role="marking" data-for="pem2">I / O</text>
78
+ <text x="383" y="106.2" font-family="sans-serif" font-size="1.3" text-anchor="middle" fill="#e8eaec" data-path="silk:3" data-class="silkscreen" data-group="silkscreen" data-group-role="marking" data-for="pem3">I / O</text>
79
+ </g>
80
+ <g id="inlet-0" data-path="inlet-0" data-class="inlet" data-ref="std/c20-inlet@1:1.4.0" data-depth="19.0" data-wall="#141619" data-cavity="inlet-face" data-function="AC inlet PEM 0" data-input="ac" data-media="ac" data-rel-pos="0" transform="translate(26.0,105.0)" data-group="inlets" data-group-role="service" data-description="the four C20 receptacles at the rear, one per PEM. A separate group from `psus` because they are separate objects - the inlet is the cord's end and stays with the chassis while a PEM comes out - and because sharing `psus` would put two things at every rel-pos 0-3." data-for="pem0">
81
+ <title>inlet-0</title>
82
+ <rect id="inlet-0--opening" x="0" y="0" width="32.4" height="24.4" rx="4.5" fill="#17191c" data-path="inlet-0/opening" data-class="cutout" />
83
+ <rect id="inlet-0--inlet-face" x="1.7" y="1.7" width="29.0" height="21.0" rx="2.2" fill="#0d0f11" />
84
+ <rect id="inlet-0--pin-earth" x="13.1" y="7.1" width="6.2" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
85
+ <rect id="inlet-0--pin-line" x="7.05" y="15.1" width="5.3" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
86
+ <rect id="inlet-0--pin-neutral" x="20.05" y="15.1" width="5.3" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
87
+ <g data-cp="mate" data-cp-at="16.2 12.2" data-cp-dir="front" />
88
+ </g>
89
+ <g id="inlet-1" data-path="inlet-1" data-class="inlet" data-ref="std/c20-inlet@1:1.4.0" data-depth="19.0" data-wall="#141619" data-cavity="inlet-face" data-function="AC inlet PEM 1" data-input="ac" data-media="ac" data-rel-pos="1" transform="translate(129.0,105.0)" data-group="inlets" data-group-role="service" data-description="the four C20 receptacles at the rear, one per PEM. A separate group from `psus` because they are separate objects - the inlet is the cord's end and stays with the chassis while a PEM comes out - and because sharing `psus` would put two things at every rel-pos 0-3." data-for="pem1">
90
+ <title>inlet-1</title>
91
+ <rect id="inlet-1--opening" x="0" y="0" width="32.4" height="24.4" rx="4.5" fill="#17191c" data-path="inlet-1/opening" data-class="cutout" />
92
+ <rect id="inlet-1--inlet-face" x="1.7" y="1.7" width="29.0" height="21.0" rx="2.2" fill="#0d0f11" />
93
+ <rect id="inlet-1--pin-earth" x="13.1" y="7.1" width="6.2" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
94
+ <rect id="inlet-1--pin-line" x="7.05" y="15.1" width="5.3" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
95
+ <rect id="inlet-1--pin-neutral" x="20.05" y="15.1" width="5.3" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
96
+ <g data-cp="mate" data-cp-at="16.2 12.2" data-cp-dir="front" />
97
+ </g>
98
+ <g id="inlet-2" data-path="inlet-2" data-class="inlet" data-ref="std/c20-inlet@1:1.4.0" data-depth="19.0" data-wall="#141619" data-cavity="inlet-face" data-function="AC inlet PEM 2" data-input="ac" data-media="ac" data-rel-pos="2" transform="translate(232.0,105.0)" data-group="inlets" data-group-role="service" data-description="the four C20 receptacles at the rear, one per PEM. A separate group from `psus` because they are separate objects - the inlet is the cord's end and stays with the chassis while a PEM comes out - and because sharing `psus` would put two things at every rel-pos 0-3." data-for="pem2">
99
+ <title>inlet-2</title>
100
+ <rect id="inlet-2--opening" x="0" y="0" width="32.4" height="24.4" rx="4.5" fill="#17191c" data-path="inlet-2/opening" data-class="cutout" />
101
+ <rect id="inlet-2--inlet-face" x="1.7" y="1.7" width="29.0" height="21.0" rx="2.2" fill="#0d0f11" />
102
+ <rect id="inlet-2--pin-earth" x="13.1" y="7.1" width="6.2" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
103
+ <rect id="inlet-2--pin-line" x="7.05" y="15.1" width="5.3" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
104
+ <rect id="inlet-2--pin-neutral" x="20.05" y="15.1" width="5.3" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
105
+ <g data-cp="mate" data-cp-at="16.2 12.2" data-cp-dir="front" />
106
+ </g>
107
+ <g id="inlet-3" data-path="inlet-3" data-class="inlet" data-ref="std/c20-inlet@1:1.4.0" data-depth="19.0" data-wall="#141619" data-cavity="inlet-face" data-function="AC inlet PEM 3" data-input="ac" data-media="ac" data-rel-pos="3" transform="translate(335.0,105.0)" data-group="inlets" data-group-role="service" data-description="the four C20 receptacles at the rear, one per PEM. A separate group from `psus` because they are separate objects - the inlet is the cord's end and stays with the chassis while a PEM comes out - and because sharing `psus` would put two things at every rel-pos 0-3." data-for="pem3">
108
+ <title>inlet-3</title>
109
+ <rect id="inlet-3--opening" x="0" y="0" width="32.4" height="24.4" rx="4.5" fill="#17191c" data-path="inlet-3/opening" data-class="cutout" />
110
+ <rect id="inlet-3--inlet-face" x="1.7" y="1.7" width="29.0" height="21.0" rx="2.2" fill="#0d0f11" />
111
+ <rect id="inlet-3--pin-earth" x="13.1" y="7.1" width="6.2" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
112
+ <rect id="inlet-3--pin-line" x="7.05" y="15.1" width="5.3" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
113
+ <rect id="inlet-3--pin-neutral" x="20.05" y="15.1" width="5.3" height="2.2" rx="0.3" fill="#7a8087" data-z-top="17.0" data-z-color="#c0c5cb" />
114
+ <g data-cp="mate" data-cp-at="16.2 12.2" data-cp-dir="front" />
115
+ </g>
116
+ <g id="pem0" data-path="pem0" data-class="bay" data-group="psus" data-group-role="service" data-rel-pos="0">
117
+ <title>pem0</title>
118
+ <rect id="pem0--opening" x="14.5" y="158" width="103" height="480" fill="#101214" />
119
+ <g id="pem0--module" data-path="pem0/module" data-class="psu" data-behaviour="fills" data-ref="juniper/mx960-psu-ac@1:1.0.1" data-inlet="none" data-model="MX960 AC PSU" data-power-output-w="1700" data-redundancy="2+2" data-role="ac-power-supply" data-states="ok fault absent" transform="translate(66,398) translate(-51.5,-240)">
120
+ <title>pem0--module</title>
121
+ <rect id="pem0--module--face" x="0" y="0" width="103.0" height="480.0" rx="1.0" fill="#a7abaf" stroke="#8a8f95" stroke-width="0.5" />
122
+ <g id="pem0--module--up-chip">
123
+ <rect x="41.0" y="28.0" width="21.0" height="26.0" rx="1.2" fill="#f0f1f2" stroke="#c0c4c8" stroke-width="0.4" />
124
+ <path d="M 51.5 34.0 l 5.0 8.0 l -3.0 0 l 0 6.0 l -4.0 0 l 0 -6.0 l -3.0 0 Z" fill="#6d7278" />
125
+ <g id="pem0--module--up-silkscreen">
126
+ <text x="51.5" y="51.5" font-family="Arial" font-size="3.0" fill="#6d7278" text-anchor="middle">UP</text>
127
+ </g>
128
+ </g>
129
+ <g id="pem0--module--handle">
130
+ <rect x="41.0" y="230.0" width="21.0" height="42.0" rx="7.0" fill="none" stroke="#565b61" stroke-width="3.2" />
131
+ </g>
132
+ <g id="pem0--module--label-patch">
133
+ <rect x="12.0" y="290.0" width="30.0" height="150.0" rx="1.6" fill="#f0f1f2" stroke="#c0c4c8" stroke-width="0.4" />
134
+ <rect x="52.0" y="330.0" width="38.0" height="70.0" rx="1.6" fill="#e6e8ea" stroke="#c0c4c8" stroke-width="0.4" />
135
+ </g>
136
+ <g id="pem0--module--lamps">
137
+ <circle id="pem0--module--led-ps-fail" cx="40.0" cy="452.0" r="1.1" fill="#0f1113" stroke="#33373c" stroke-width="0.25" />
138
+ <circle id="pem0--module--led-dc-ok" cx="50.0" cy="452.0" r="1.1" fill="#0f1113" stroke="#33373c" stroke-width="0.25" />
139
+ <circle id="pem0--module--led-ac-ok" cx="60.0" cy="452.0" r="1.1" fill="var(--led-color, #3a3f44)" stroke="#33373c" stroke-width="0.25" />
140
+ </g>
141
+ <g id="pem0--module--fan">
142
+ <circle cx="51.5" cy="466.0" r="9.5" fill="#26292d" stroke="#17191c" stroke-width="0.5" />
143
+ <circle cx="51.5" cy="466.0" r="2.6" fill="#44484d" />
144
+ </g>
145
+ <g id="pem0--module--silkscreen">
146
+ <g id="pem0--module--t89-silkscreen">
147
+ <text x="40.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">PS</text>
148
+ </g>
149
+ <g id="pem0--module--t90-silkscreen">
150
+ <text x="50.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">DC</text>
151
+ </g>
152
+ <g id="pem0--module--t91-silkscreen">
153
+ <text x="60.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">AC</text>
154
+ </g>
155
+ </g>
156
+ </g>
157
+ </g>
158
+ <g id="pem1" data-path="pem1" data-class="bay" data-group="psus" data-group-role="service" data-rel-pos="1">
159
+ <title>pem1</title>
160
+ <rect id="pem1--opening" x="117.5" y="158" width="103" height="480" fill="#101214" />
161
+ <g id="pem1--module" data-path="pem1/module" data-class="psu" data-behaviour="fills" data-ref="juniper/mx960-psu-ac@1:1.0.1" data-inlet="none" data-model="MX960 AC PSU" data-power-output-w="1700" data-redundancy="2+2" data-role="ac-power-supply" data-states="ok fault absent" transform="translate(169,398) translate(-51.5,-240)">
162
+ <title>pem1--module</title>
163
+ <rect id="pem1--module--face" x="0" y="0" width="103.0" height="480.0" rx="1.0" fill="#a7abaf" stroke="#8a8f95" stroke-width="0.5" />
164
+ <g id="pem1--module--up-chip">
165
+ <rect x="41.0" y="28.0" width="21.0" height="26.0" rx="1.2" fill="#f0f1f2" stroke="#c0c4c8" stroke-width="0.4" />
166
+ <path d="M 51.5 34.0 l 5.0 8.0 l -3.0 0 l 0 6.0 l -4.0 0 l 0 -6.0 l -3.0 0 Z" fill="#6d7278" />
167
+ <g id="pem1--module--up-silkscreen">
168
+ <text x="51.5" y="51.5" font-family="Arial" font-size="3.0" fill="#6d7278" text-anchor="middle">UP</text>
169
+ </g>
170
+ </g>
171
+ <g id="pem1--module--handle">
172
+ <rect x="41.0" y="230.0" width="21.0" height="42.0" rx="7.0" fill="none" stroke="#565b61" stroke-width="3.2" />
173
+ </g>
174
+ <g id="pem1--module--label-patch">
175
+ <rect x="12.0" y="290.0" width="30.0" height="150.0" rx="1.6" fill="#f0f1f2" stroke="#c0c4c8" stroke-width="0.4" />
176
+ <rect x="52.0" y="330.0" width="38.0" height="70.0" rx="1.6" fill="#e6e8ea" stroke="#c0c4c8" stroke-width="0.4" />
177
+ </g>
178
+ <g id="pem1--module--lamps">
179
+ <circle id="pem1--module--led-ps-fail" cx="40.0" cy="452.0" r="1.1" fill="#0f1113" stroke="#33373c" stroke-width="0.25" />
180
+ <circle id="pem1--module--led-dc-ok" cx="50.0" cy="452.0" r="1.1" fill="#0f1113" stroke="#33373c" stroke-width="0.25" />
181
+ <circle id="pem1--module--led-ac-ok" cx="60.0" cy="452.0" r="1.1" fill="var(--led-color, #3a3f44)" stroke="#33373c" stroke-width="0.25" />
182
+ </g>
183
+ <g id="pem1--module--fan">
184
+ <circle cx="51.5" cy="466.0" r="9.5" fill="#26292d" stroke="#17191c" stroke-width="0.5" />
185
+ <circle cx="51.5" cy="466.0" r="2.6" fill="#44484d" />
186
+ </g>
187
+ <g id="pem1--module--silkscreen">
188
+ <g id="pem1--module--t89-silkscreen">
189
+ <text x="40.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">PS</text>
190
+ </g>
191
+ <g id="pem1--module--t90-silkscreen">
192
+ <text x="50.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">DC</text>
193
+ </g>
194
+ <g id="pem1--module--t91-silkscreen">
195
+ <text x="60.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">AC</text>
196
+ </g>
197
+ </g>
198
+ </g>
199
+ </g>
200
+ <g id="pem2" data-path="pem2" data-class="bay" data-group="psus" data-group-role="service" data-rel-pos="2">
201
+ <title>pem2</title>
202
+ <rect id="pem2--opening" x="220.5" y="158" width="103" height="480" fill="#101214" />
203
+ <g id="pem2--module" data-path="pem2/module" data-class="psu" data-behaviour="fills" data-ref="juniper/mx960-psu-ac@1:1.0.1" data-inlet="none" data-model="MX960 AC PSU" data-power-output-w="1700" data-redundancy="2+2" data-role="ac-power-supply" data-states="ok fault absent" transform="translate(272,398) translate(-51.5,-240)">
204
+ <title>pem2--module</title>
205
+ <rect id="pem2--module--face" x="0" y="0" width="103.0" height="480.0" rx="1.0" fill="#a7abaf" stroke="#8a8f95" stroke-width="0.5" />
206
+ <g id="pem2--module--up-chip">
207
+ <rect x="41.0" y="28.0" width="21.0" height="26.0" rx="1.2" fill="#f0f1f2" stroke="#c0c4c8" stroke-width="0.4" />
208
+ <path d="M 51.5 34.0 l 5.0 8.0 l -3.0 0 l 0 6.0 l -4.0 0 l 0 -6.0 l -3.0 0 Z" fill="#6d7278" />
209
+ <g id="pem2--module--up-silkscreen">
210
+ <text x="51.5" y="51.5" font-family="Arial" font-size="3.0" fill="#6d7278" text-anchor="middle">UP</text>
211
+ </g>
212
+ </g>
213
+ <g id="pem2--module--handle">
214
+ <rect x="41.0" y="230.0" width="21.0" height="42.0" rx="7.0" fill="none" stroke="#565b61" stroke-width="3.2" />
215
+ </g>
216
+ <g id="pem2--module--label-patch">
217
+ <rect x="12.0" y="290.0" width="30.0" height="150.0" rx="1.6" fill="#f0f1f2" stroke="#c0c4c8" stroke-width="0.4" />
218
+ <rect x="52.0" y="330.0" width="38.0" height="70.0" rx="1.6" fill="#e6e8ea" stroke="#c0c4c8" stroke-width="0.4" />
219
+ </g>
220
+ <g id="pem2--module--lamps">
221
+ <circle id="pem2--module--led-ps-fail" cx="40.0" cy="452.0" r="1.1" fill="#0f1113" stroke="#33373c" stroke-width="0.25" />
222
+ <circle id="pem2--module--led-dc-ok" cx="50.0" cy="452.0" r="1.1" fill="#0f1113" stroke="#33373c" stroke-width="0.25" />
223
+ <circle id="pem2--module--led-ac-ok" cx="60.0" cy="452.0" r="1.1" fill="var(--led-color, #3a3f44)" stroke="#33373c" stroke-width="0.25" />
224
+ </g>
225
+ <g id="pem2--module--fan">
226
+ <circle cx="51.5" cy="466.0" r="9.5" fill="#26292d" stroke="#17191c" stroke-width="0.5" />
227
+ <circle cx="51.5" cy="466.0" r="2.6" fill="#44484d" />
228
+ </g>
229
+ <g id="pem2--module--silkscreen">
230
+ <g id="pem2--module--t89-silkscreen">
231
+ <text x="40.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">PS</text>
232
+ </g>
233
+ <g id="pem2--module--t90-silkscreen">
234
+ <text x="50.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">DC</text>
235
+ </g>
236
+ <g id="pem2--module--t91-silkscreen">
237
+ <text x="60.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">AC</text>
238
+ </g>
239
+ </g>
240
+ </g>
241
+ </g>
242
+ <g id="pem3" data-path="pem3" data-class="bay" data-group="psus" data-group-role="service" data-rel-pos="3">
243
+ <title>pem3</title>
244
+ <rect id="pem3--opening" x="323.5" y="158" width="103" height="480" fill="#101214" />
245
+ <g id="pem3--module" data-path="pem3/module" data-class="psu" data-behaviour="fills" data-ref="juniper/mx960-psu-ac@1:1.0.1" data-inlet="none" data-model="MX960 AC PSU" data-power-output-w="1700" data-redundancy="2+2" data-role="ac-power-supply" data-states="ok fault absent" transform="translate(375,398) translate(-51.5,-240)">
246
+ <title>pem3--module</title>
247
+ <rect id="pem3--module--face" x="0" y="0" width="103.0" height="480.0" rx="1.0" fill="#a7abaf" stroke="#8a8f95" stroke-width="0.5" />
248
+ <g id="pem3--module--up-chip">
249
+ <rect x="41.0" y="28.0" width="21.0" height="26.0" rx="1.2" fill="#f0f1f2" stroke="#c0c4c8" stroke-width="0.4" />
250
+ <path d="M 51.5 34.0 l 5.0 8.0 l -3.0 0 l 0 6.0 l -4.0 0 l 0 -6.0 l -3.0 0 Z" fill="#6d7278" />
251
+ <g id="pem3--module--up-silkscreen">
252
+ <text x="51.5" y="51.5" font-family="Arial" font-size="3.0" fill="#6d7278" text-anchor="middle">UP</text>
253
+ </g>
254
+ </g>
255
+ <g id="pem3--module--handle">
256
+ <rect x="41.0" y="230.0" width="21.0" height="42.0" rx="7.0" fill="none" stroke="#565b61" stroke-width="3.2" />
257
+ </g>
258
+ <g id="pem3--module--label-patch">
259
+ <rect x="12.0" y="290.0" width="30.0" height="150.0" rx="1.6" fill="#f0f1f2" stroke="#c0c4c8" stroke-width="0.4" />
260
+ <rect x="52.0" y="330.0" width="38.0" height="70.0" rx="1.6" fill="#e6e8ea" stroke="#c0c4c8" stroke-width="0.4" />
261
+ </g>
262
+ <g id="pem3--module--lamps">
263
+ <circle id="pem3--module--led-ps-fail" cx="40.0" cy="452.0" r="1.1" fill="#0f1113" stroke="#33373c" stroke-width="0.25" />
264
+ <circle id="pem3--module--led-dc-ok" cx="50.0" cy="452.0" r="1.1" fill="#0f1113" stroke="#33373c" stroke-width="0.25" />
265
+ <circle id="pem3--module--led-ac-ok" cx="60.0" cy="452.0" r="1.1" fill="var(--led-color, #3a3f44)" stroke="#33373c" stroke-width="0.25" />
266
+ </g>
267
+ <g id="pem3--module--fan">
268
+ <circle cx="51.5" cy="466.0" r="9.5" fill="#26292d" stroke="#17191c" stroke-width="0.5" />
269
+ <circle cx="51.5" cy="466.0" r="2.6" fill="#44484d" />
270
+ </g>
271
+ <g id="pem3--module--silkscreen">
272
+ <g id="pem3--module--t89-silkscreen">
273
+ <text x="40.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">PS</text>
274
+ </g>
275
+ <g id="pem3--module--t90-silkscreen">
276
+ <text x="50.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">DC</text>
277
+ </g>
278
+ <g id="pem3--module--t91-silkscreen">
279
+ <text x="60.0" y="448.4" font-family="Arial" font-size="0.9" fill="#3a3e43" text-anchor="middle">AC</text>
280
+ </g>
281
+ </g>
282
+ </g>
283
+ </g>
284
+ </svg>
@@ -0,0 +1 @@
1
+ {"components":{},"config":"base","configs":["ac","base"],"device":"mx960","device-version":"5.0.1","elements":[{"box":{"h":704.9,"w":584.2,"x":0.0,"y":0.0},"class":"chassis","id":"chassis-faceplate","parent":null,"path":"chassis"}],"generator":{"tool":"portrayal-render","version":"0.2.0"},"source-sha256":"e1d027c8ec84333ab12f1762068c1182b8a30e772de600a61c234a6e39e53340","view":"right","viewBox":[0.0,0.0,584.2,704.9]}
@@ -0,0 +1,48 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="584.2mm" height="704.9mm" viewBox="0 0 584.2 704.9" data-device="mx960" data-view="right" data-weight-max-kg="169.64" data-power-typical-w="6520" data-power-envelope="unstated" data-power-typical-scope="AC typical power draw from the MX Series family datasheet, which names no configuration, ambient or side; DC 6670 W" data-base-system-w="50" data-cooling-system-w="640 W high-capacity at full speed (450 W typical at normal speed); normal-capacity 600 W (400 W typical) - Table 95" data-max-thermal-output="AC 27,007 BTU/h (7920 W); DC 18,987 BTU/h (5568 W) (Table 84; provisioning ceiling)">
3
+ <style>
4
+ [data-path] { cursor: pointer; }
5
+ .state-on { --led-color: #22c55e; }
6
+ .state-up { --led-color: #22c55e; }
7
+ /* link and up are the same fact on an Ethernet lamp; see docs/rj45-family-design.md */
8
+ .state-link { --led-color: #22c55e; }
9
+ .state-activity { --led-color: #86efac; }
10
+ .state-ok { --led-color: #22c55e; }
11
+ .state-fault { --led-color: #ef4444; }
12
+ .state-fail { --led-color: #ef4444; }
13
+ .state-locate { --led-color: #3b82f6; }
14
+ .state-absent { opacity: 0.35; }
15
+ /* A SWITCHED OUTLET WITH NO LAMP is dimmed when it is off, as absent is but
16
+ less (docs/pdu-model-design.md section 3.2): every switched PDU in the
17
+ library has a lamp per outlet, and this is the fallback so the first one
18
+ without does not invent a lamp. An outlet a lamp is bound to by `for:`
19
+ carries data-lamped (mark_lamped) and is never dimmed: its lamp says it. */
20
+ [data-class='inlet'][data-states~='off'].state-off:not([data-lamped]) { opacity: 0.55; }
21
+ /* A state is a colour AND a behaviour. Solid and blinking of the same colour
22
+ are different facts on real hardware: on the S9510-28DC a solid green PWR
23
+ is "system power good" and a blinking green PWR is "power good but BMC
24
+ power fail". A blinking state that renders solid is the same failure as a
25
+ state class nothing paints - it looks modelled and is not.
26
+ blink animates opacity rather than fill, because each skin carries its own
27
+ unlit colour in the fill fallback and a keyframe cannot name it. alternate
28
+ animates fill, because two colours is the whole point, and takes its first
29
+ value from the element's own fill. */
30
+ @keyframes portrayal-blink {
31
+ 0%, 49.9% { opacity: 1; }
32
+ 50%, 100% { opacity: 0; }
33
+ }
34
+ @keyframes portrayal-alternate {
35
+ 0%, 49.9% { fill: var(--led-color, #3a3f44); }
36
+ 50%, 100% { fill: var(--led-color-alt, #3a3f44); }
37
+ }
38
+ .portrayal-highlight { filter: drop-shadow(0 0 1.2px #f59e0b) drop-shadow(0 0 0.5px #f59e0b); }
39
+ .portrayal-dim { opacity: 0.25; }
40
+ [data-class='region'].portrayal-highlight { stroke: #f59e0b; stroke-width: 0.7; filter: none; }
41
+ .state-fail[data-class='psu'], .state-fail[data-class='fan'] { filter: drop-shadow(0 0 1.4px #ef4444); }
42
+ </style>
43
+ <metadata>{"device":"Juniper MX960","device-version":"5.0.1","generator":{"tool":"portrayal-render","version":"0.2.0"},"resolved-components":{},"source-sha256":"e1d027c8ec84333ab12f1762068c1182b8a30e772de600a61c234a6e39e53340","view":"right"}</metadata>
44
+ <rect id="chassis-faceplate" data-path="chassis" data-class="chassis" data-model="MX960" x="0" y="0" width="584.2" height="704.9" rx="1.2" fill="#3a3e43" stroke="#22262a" stroke-width="0.5" />
45
+ <g id="--decor" data-class="decor">
46
+ <rect id="plate-0" data-kind="plate" x="0" y="330" width="584.2" height="30" rx="0.6" fill="#33373c" />
47
+ </g>
48
+ </svg>
@@ -0,0 +1 @@
1
+ {"components":{},"config":"base","configs":["ac","base"],"device":"mx960","device-version":"5.0.1","elements":[{"box":{"h":584.2,"w":441.1,"x":0.0,"y":0.0},"class":"chassis","id":"chassis-faceplate","parent":null,"path":"chassis"}],"generator":{"tool":"portrayal-render","version":"0.2.0"},"source-sha256":"e1d027c8ec84333ab12f1762068c1182b8a30e772de600a61c234a6e39e53340","view":"top","viewBox":[0.0,0.0,441.1,584.2]}
@@ -0,0 +1,53 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="441.1mm" height="584.2mm" viewBox="0 0 441.1 584.2" data-device="mx960" data-view="top" data-weight-max-kg="169.64" data-power-typical-w="6520" data-power-envelope="unstated" data-power-typical-scope="AC typical power draw from the MX Series family datasheet, which names no configuration, ambient or side; DC 6670 W" data-base-system-w="50" data-cooling-system-w="640 W high-capacity at full speed (450 W typical at normal speed); normal-capacity 600 W (400 W typical) - Table 95" data-max-thermal-output="AC 27,007 BTU/h (7920 W); DC 18,987 BTU/h (5568 W) (Table 84; provisioning ceiling)">
3
+ <style>
4
+ [data-path] { cursor: pointer; }
5
+ .state-on { --led-color: #22c55e; }
6
+ .state-up { --led-color: #22c55e; }
7
+ /* link and up are the same fact on an Ethernet lamp; see docs/rj45-family-design.md */
8
+ .state-link { --led-color: #22c55e; }
9
+ .state-activity { --led-color: #86efac; }
10
+ .state-ok { --led-color: #22c55e; }
11
+ .state-fault { --led-color: #ef4444; }
12
+ .state-fail { --led-color: #ef4444; }
13
+ .state-locate { --led-color: #3b82f6; }
14
+ .state-absent { opacity: 0.35; }
15
+ /* A SWITCHED OUTLET WITH NO LAMP is dimmed when it is off, as absent is but
16
+ less (docs/pdu-model-design.md section 3.2): every switched PDU in the
17
+ library has a lamp per outlet, and this is the fallback so the first one
18
+ without does not invent a lamp. An outlet a lamp is bound to by `for:`
19
+ carries data-lamped (mark_lamped) and is never dimmed: its lamp says it. */
20
+ [data-class='inlet'][data-states~='off'].state-off:not([data-lamped]) { opacity: 0.55; }
21
+ /* A state is a colour AND a behaviour. Solid and blinking of the same colour
22
+ are different facts on real hardware: on the S9510-28DC a solid green PWR
23
+ is "system power good" and a blinking green PWR is "power good but BMC
24
+ power fail". A blinking state that renders solid is the same failure as a
25
+ state class nothing paints - it looks modelled and is not.
26
+ blink animates opacity rather than fill, because each skin carries its own
27
+ unlit colour in the fill fallback and a keyframe cannot name it. alternate
28
+ animates fill, because two colours is the whole point, and takes its first
29
+ value from the element's own fill. */
30
+ @keyframes portrayal-blink {
31
+ 0%, 49.9% { opacity: 1; }
32
+ 50%, 100% { opacity: 0; }
33
+ }
34
+ @keyframes portrayal-alternate {
35
+ 0%, 49.9% { fill: var(--led-color, #3a3f44); }
36
+ 50%, 100% { fill: var(--led-color-alt, #3a3f44); }
37
+ }
38
+ .portrayal-highlight { filter: drop-shadow(0 0 1.2px #f59e0b) drop-shadow(0 0 0.5px #f59e0b); }
39
+ .portrayal-dim { opacity: 0.25; }
40
+ [data-class='region'].portrayal-highlight { stroke: #f59e0b; stroke-width: 0.7; filter: none; }
41
+ .state-fail[data-class='psu'], .state-fail[data-class='fan'] { filter: drop-shadow(0 0 1.4px #ef4444); }
42
+ </style>
43
+ <metadata>{"device":"Juniper MX960","device-version":"5.0.1","generator":{"tool":"portrayal-render","version":"0.2.0"},"resolved-components":{},"source-sha256":"e1d027c8ec84333ab12f1762068c1182b8a30e772de600a61c234a6e39e53340","view":"top"}</metadata>
44
+ <rect id="chassis-faceplate" data-path="chassis" data-class="chassis" data-model="MX960" x="0" y="0" width="441.1" height="584.2" rx="1.2" fill="#3a3e43" stroke="#22262a" stroke-width="0.5" />
45
+ <defs>
46
+ <pattern id="portrayal-holes" width="5" height="5" patternUnits="userSpaceOnUse">
47
+ <circle cx="2.5" cy="2.5" r="1.1" fill="#3c4046" />
48
+ </pattern>
49
+ </defs>
50
+ <g id="--decor" data-class="decor">
51
+ <rect id="holes-field-0" data-kind="holes-field" x="40" y="420" width="361.1" height="140" rx="0.6" fill="url(#portrayal-holes)" />
52
+ </g>
53
+ </svg>