html, body { margin: 0; padding: 0; font-family: 'Source Sans Pro', ui-sans-serif, system-ui, sans-serif; overflow: auto; } body { margin: auto; min-height: 95vh; /* full page height */ width: fit-content; display: flex; justify-content: center; /* horizontal center */ align-items: center; /* vertical center */ } .container { display: flex; flex-direction: row; justify-content: center; align-items: stretch; font-size: 1rem; line-height: 1.5rem; box-sizing: border-box; min-width: 700px; gap: max(4.5vw, 50px); } .col { display: flex; flex-direction: column; justify-content: center; align-items: center; min-height: 200px; min-width: 200px; max-width: max(33.3vw, 550px); width: 100%; gap: max(2.5vw, 20px); /* background-color: rgba(173, 216, 230, 0.2); */ } .col.mid { max-width: max(25vw, 375px); } .image-wrapper { position: relative; /* Needed for SVG absolute positioning */ display: flex; } .image-wrapper img { display: flex; min-width: 200px; max-width: 100%; } .svg { width: 100%; height: 100%; pointer-events: none; /* allow hover to pass through*/ position: absolute; top: 0; left: 0; opacity: 0.7; transition: 0.5s ease; } .svg:has(.outer:hover) { opacity: 1; } /* Clipping mask */ .svg .mask .outer { stroke-width: 2; stroke: white !important; fill: white !important; vector-effect: non-scaling-stroke; } .svg .mask .inner { fill: black !important; } /* fill */ .svg .level0 { fill: #fa761733; transition: 0.4s ease; } .svg:has(.outer:hover) .level0 { fill: transparent !important; } /* stroke */ .svg .outer, .svg .inner { fill: transparent; stroke: #fa7617; stroke-width: 2; vector-effect: non-scaling-stroke; /* keep stroke width after resizing */ transition: 0.4s ease; } .svg .outer { cursor: pointer; pointer-events: visibleFill; } .svg:has(.outer:hover) .outer, .svg:has(.outer:hover) .inner { stroke-width: 3px; } /* Backgroound mask -> inverse of Clipping mask */ .svg .bg-mask .outer { fill: black; stroke: none; } .svg .bg-mask .inner { fill: white; stroke: none; } /* Darken background when hover */ .svg .bg { fill: transparent; } .svg:has(.outer:hover) .bg { fill: rgba(0, 0, 0, 0.5); } {{svgs}} .tbox { width: 100%; padding-left: 10px; padding-right: 10px; box-sizing: border-box; cursor: pointer; position: relative; border-color: rgba(0, 0, 0, 0.2); } .tbox.left { text-align: right; border-right-style: solid; border-right-width: max(0.4vw, 5px); } .tbox.right { text-align: left; border-left-style: solid; border-left-width: max(0.4vw, 5px); } .tbox .heading { font-size: max(1.2vw, 13px); font-weight: bold; padding-bottom: max(0.25vw, 2px); } .tbox .highlight { background-color: rgba(0, 0, 0, 0.2); } .tbox .content { font-size: max(calc(1.2vw - 1.2px), 12px); line-height: 1.5; } .tbox::before { content: ""; position: absolute; top: 50%; /* start from vertical center */ width: max(0.4vw, 5px); height: 0; /* expand height from 0 */ background-color: transparent; transform: translateY(-50%); /* anchor at center */ transition: height 0.4s ease, background-color 0.4s ease; } .tbox.left::before { right: calc(-1 * max(0.4vw, 5px)); } .tbox.right::before { left: calc(-1 * max(0.4vw, 5px)); } .tbox:hover::before { height: 100%; /* grow to full height of .tbox only */ background-color: black; } {{tboxs}} .connector { position: absolute; z-index: 3; overflow: visible; opacity: 0.5; transition: opacity 0.3s ease; } .connector line { stroke-linecap: round; stroke-width: max(0.28vw, 2.5px); } .connector:hover { opacity: 1; } .connector:hover line { stroke-width: 3.2px; } {{connectors}}