@layer hmi-components {
:where(.heat-exchanger) {
display: grid;
grid-template-columns: repeat(10, var(--_size-10));
grid-template-rows: repeat(20, var(--_size-10));
& [class*="base"] {
--_plate-color: var(--plate-color, var(--hmi-plate-color, black));
--_route-top-color: var(
--route-top-color,
var(--hmi-route-top-color, black)
);
--_route-bottom-color: var(
--route-bottom-color,
var(--hmi-route-bottom-color, black)
);
--_route-line-width: var(
--route-line-width,
clamp(2px, var(--_size-2, 2%), 5px)
);
--_route-center: var(--route-line-center, 50%);
border: var(--_size-2) solid var(--_border-color);
}
&.tubular {
& .base-1 {
grid-area: 1 / 1 / 21 / 21;
width: 100%;
height: 100%;
background: repeating-linear-gradient(
to right,
var(--_plate-color) 0 5%,
transparent 5% 20%
);
background-size: 40% 100%;
}
& .base-2 {
grid-area: 1 / 2 / 5 / 2;
border: none;
border-left: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-3 {
grid-area: 1 / 9 / 5 / 9;
border: none;
border-right: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-4 {
grid-area: 5 / 2 / 5 / 4;
border: none;
border-top: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-5 {
grid-area: 5 / 3 / 8 / 6;
border: none;
width: 100%;
height: 100%;
background: linear-gradient(
70deg,
transparent calc(var(--_route-center) - calc(var(
--_route-line-width
) / 2)),
var(--_route-top-color) calc(
var(--_route-center) - calc(var(--_route-line-width) / 2)
),
var(--_route-top-color) var(--_route-center),
var(--_route-top-color) calc(
var(--_route-center) + calc(var(--_route-line-width) / 2)
),
transparent calc(var(--_route-center) + calc(var(
--_route-line-width
) / 2))
);
background-size: 200% 200%;
background-position: 68% 90%;
}
& .base-6 {
grid-area: 7 / 5 / 7 / 7;
border: none;
border-bottom: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-7 {
grid-area: 5 / 6 / 8 / 9;
border: none;
border-color: transparent;
background: linear-gradient(
-70deg,
transparent calc(var(--_route-center) - calc(var(
--_route-line-width
) / 2)),
var(--_route-top-color) calc(
var(--_route-center) - calc(var(--_route-line-width) / 2)
),
var(--_route-top-color) var(--_route-center),
var(--_route-top-color) calc(
var(--_route-center) + calc(var(--_route-line-width) / 2)
),
transparent calc(var(--_route-center) + calc(var(
--_route-line-width
) / 2))
);
background-size: 200% 200%;
background-position: 41% 71%;
}
& .base-8 {
grid-area: 5 / 8 / 5 / 10;
border: none;
border-top: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-9 {
grid-area: -1 / 2 / -5 / 2;
border: none;
border-left: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-10 {
grid-area: -1 / 9 / -5 / 9;
border: none;
border-right: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-11 {
grid-area: -5 / 2 / -5 / 4;
border: none;
border-top: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-12 {
grid-area: -5 / 3 / -8 / 6;
border: none;
width: 100%;
height: 100%;
background: linear-gradient(
-70deg,
transparent calc(var(--_route-center) - calc(var(
--_route-line-width
) / 2)),
var(--_route-top-color) calc(
var(--_route-center) - calc(var(--_route-line-width) / 2)
),
var(--_route-top-color) var(--_route-center),
var(--_route-top-color) calc(
var(--_route-center) + calc(var(--_route-line-width) / 2)
),
transparent calc(var(--_route-center) + calc(var(
--_route-line-width
) / 2))
);
background-size: 200% 200%;
background-position: 37% 90%;
}
& .base-13 {
grid-area: -8 / 5 / -8 / 7;
border: none;
border-top: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-14 {
grid-area: -5 / 6 / -8 / 9;
border: none;
border-color: transparent;
background: linear-gradient(
70deg,
transparent calc(var(--_route-center) - calc(var(
--_route-line-width
) / 2)),
var(--_route-top-color) calc(
var(--_route-center) - calc(var(--_route-line-width) / 2)
),
var(--_route-top-color) var(--_route-center),
var(--_route-top-color) calc(
var(--_route-center) + calc(var(--_route-line-width) / 2)
),
transparent calc(var(--_route-center) + calc(var(
--_route-line-width
) / 2))
);
background-size: 200% 200%;
background-position: 56% 71%;
}
& .base-15 {
grid-area: -5 / 8 / -5 / 10;
border: none;
border-top: var(--_route-line-width) solid var(--_route-top-color);
}
}
&.plate {
& .base-1 {
grid-area: 1 / 1 / 19 / 3;
}
& .base-2 {
grid-area: 1 / 3 / 3 / 9;
}
& .base-3 {
grid-area: 1 / 9 / 19 / 11;
}
& .base-4 {
grid-area: 3 / 3 / 19 / 4;
}
& .base-5 {
grid-area: 3 / 4 / 18 / 9;
border: none;
width: 100%;
height: 100%;
background: repeating-linear-gradient(
to right,
var(--_plate-color) 0 5%,
transparent 5% 10%
);
background-size: 10% 100%;
}
& .base-6 {
grid-area: 18 / 4 / 19 / 9;
}
& .base-7 {
grid-area: 19 / 1 / 21 / 3;
border-bottom: calc(var(--_size-1) * 20) solid var(--_border-color);
border-left: calc(var(--_size-1) * 4) solid transparent;
border-right: calc(var(--_size-1) * 4) solid transparent;
}
& .base-8 {
grid-area: 19 / 9 / 21 / 11;
border-bottom: calc(var(--_size-1) * 20) solid var(--_border-color);
border-left: calc(var(--_size-1) * 4) solid transparent;
border-right: calc(var(--_size-1) * 4) solid transparent;
}
& .base-9 {
grid-area: 5 / 1 / 5 / 4;
border-color: transparent;
border-top: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-10 {
grid-area: 5 / 9 / 5 / 11;
border-color: transparent;
border-top: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-11 {
grid-area: 8 / 5 / 8 / 8;
border-color: transparent;
border-top: var(--_route-line-width) solid var(--_route-top-color);
}
& .base-12 {
grid-area: 5/3/8/7;
border-color: transparent;
background: linear-gradient(
70deg,
transparent calc(var(--_route-center) - calc(var(
--_route-line-width
) / 2)),
var(--_route-top-color) calc(
var(--_route-center) - calc(var(--_route-line-width) / 2)
),
var(--_route-top-color) var(--_route-center),
var(--_route-top-color) calc(
var(--_route-center) + calc(var(--_route-line-width) / 2)
),
transparent calc(var(--_route-center) + calc(var(
--_route-line-width
) / 2))
);
background-size: 200% 200%;
background-position: 74% 90%;
}
& .base-13 {
grid-area: 5/6/8/10;
border-color: transparent;
background: linear-gradient(
-70deg,
transparent calc(var(--_route-center) - calc(var(
--_route-line-width
) / 2)),
var(--_route-top-color) calc(
var(--_route-center) - calc(var(--_route-line-width) / 2)
),
var(--_route-top-color) var(--_route-center),
var(--_route-top-color) calc(
var(--_route-center) + calc(var(--_route-line-width) / 2)
),
transparent calc(var(--_route-center) + calc(var(
--_route-line-width
) / 2))
);
background-size: 200% 200%;
background-position: 31% 71%;
}
& .base-14 {
grid-area: 15 / 1 / 15 / 4;
border-color: transparent;
border-top: var(--_route-line-width) solid var(--_route-bottom-color);
}
& .base-15 {
grid-area: 15 / 9 / 15 / 11;
border-color: transparent;
border-top: var(--_route-line-width) solid var(--_route-bottom-color);
}
& .base-16 {
grid-area: 12 / 5 / 15 / 8;
border-color: transparent;
border-top: var(--_route-line-width) solid var(--_route-bottom-color);
}
& .base-17 {
grid-area: 12/3/15/7;
border-color: transparent;
background: linear-gradient(
-70deg,
transparent calc(var(--_route-center) - calc(var(
--_route-line-width
) / 2)),
var(--_route-bottom-color) calc(
var(--_route-center) - calc(var(--_route-line-width) / 2)
),
var(--_route-bottom-color) var(--_route-center),
var(--_route-bottom-color) calc(
var(--_route-center) + calc(var(--_route-line-width) / 2)
),
transparent calc(var(--_route-center) + calc(var(
--_route-line-width
) / 2))
);
background-size: 200% 200%;
background-position: 53% 90%;
}
& .base-18 {
grid-area: 12/6/15/10;
border-color: transparent;
background: linear-gradient(
70deg,
transparent calc(var(--_route-center) - calc(var(
--_route-line-width
) / 2)),
var(--_route-bottom-color) calc(
var(--_route-center) - calc(var(--_route-line-width) / 2)
),
var(--_route-bottom-color) var(--_route-center),
var(--_route-bottom-color) calc(
var(--_route-center) + calc(var(--_route-line-width) / 2)
),
transparent calc(var(--_route-center) + calc(var(
--_route-line-width
) / 2))
);
background-size: 200% 200%;
background-position: 41% 71%;
}
}
}
}