| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>BambuTrack Control - Bambu Studio Exact</title>
- <style>
- * {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
- }
- :root {
- --bg-main: #f5f5f5;
- --bg-white: #ffffff;
- --bg-light: #fafafa;
- --bg-hover: #f0f0f0;
- --text-primary: #333333;
- --text-secondary: #666666;
- --text-muted: #999999;
- --border: #e0e0e0;
- --border-light: #eeeeee;
- --accent: #00ae42;
- --accent-light: #e8f5e9;
- }
- body {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
- background: var(--bg-main);
- color: var(--text-primary);
- font-size: 13px;
- }
- /* Main Layout */
- .main-layout {
- display: grid;
- grid-template-columns: 1fr 320px;
- height: 100vh;
- }
- /* Left Panel - Camera */
- .left-panel {
- display: flex;
- flex-direction: column;
- background: var(--bg-main);
- }
- .camera-header {
- display: flex;
- align-items: center;
- padding: 8px 12px;
- background: var(--bg-white);
- border-bottom: 1px solid var(--border);
- gap: 4px;
- }
- .camera-title {
- font-size: 12px;
- color: var(--text-secondary);
- margin-right: auto;
- }
- .camera-icon-btn {
- width: 28px;
- height: 28px;
- border: none;
- background: none;
- cursor: pointer;
- border-radius: 4px;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .camera-icon-btn:hover {
- background: var(--bg-hover);
- }
- .camera-icon-btn img {
- width: 18px;
- height: 18px;
- opacity: 0.6;
- }
- .camera-feed {
- flex: 1;
- background: #1a1a1a;
- display: flex;
- align-items: center;
- justify-content: center;
- color: #666;
- }
- /* Print Progress */
- .print-progress {
- background: var(--bg-white);
- border-top: 1px solid var(--border);
- padding: 12px 16px;
- }
- .progress-header {
- font-size: 11px;
- color: var(--text-muted);
- margin-bottom: 10px;
- }
- .progress-content {
- display: flex;
- gap: 12px;
- }
- .progress-thumb {
- width: 60px;
- height: 60px;
- background: var(--bg-light);
- border: 1px solid var(--border);
- border-radius: 6px;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .progress-thumb img {
- width: 40px;
- opacity: 0.5;
- }
- .progress-info {
- flex: 1;
- }
- .progress-name {
- font-weight: 500;
- margin-bottom: 2px;
- }
- .progress-status {
- color: var(--accent);
- font-size: 12px;
- margin-bottom: 6px;
- }
- .progress-bar-container {
- height: 4px;
- background: var(--border-light);
- border-radius: 2px;
- margin-bottom: 6px;
- }
- .progress-bar-fill {
- height: 100%;
- background: var(--accent);
- border-radius: 2px;
- width: 0%;
- }
- .progress-details {
- display: flex;
- gap: 16px;
- font-size: 11px;
- color: var(--text-muted);
- }
- .progress-actions {
- display: flex;
- flex-direction: column;
- gap: 4px;
- align-items: flex-end;
- }
- .progress-icons {
- display: flex;
- gap: 4px;
- }
- .progress-icon-btn {
- width: 24px;
- height: 24px;
- border: 1px solid var(--border);
- background: var(--bg-white);
- border-radius: 4px;
- cursor: pointer;
- font-size: 10px;
- color: var(--text-muted);
- }
- .progress-icon-btn:hover {
- background: var(--bg-hover);
- }
- /* Right Panel - Control */
- .right-panel {
- background: var(--bg-white);
- border-left: 1px solid var(--border);
- overflow-y: auto;
- display: flex;
- flex-direction: column;
- }
- .control-header {
- display: flex;
- align-items: center;
- padding: 8px 12px;
- border-bottom: 1px solid var(--border);
- gap: 8px;
- }
- .control-title {
- font-size: 13px;
- color: var(--text-primary);
- margin-right: auto;
- }
- .header-btn {
- padding: 4px 10px;
- font-size: 11px;
- border: none;
- border-radius: 4px;
- cursor: pointer;
- background: var(--accent);
- color: white;
- }
- .header-btn:hover {
- opacity: 0.9;
- }
- .control-content {
- padding: 12px;
- display: flex;
- flex-direction: column;
- gap: 16px;
- }
- /* Temperature Section */
- .temp-list {
- display: flex;
- flex-direction: column;
- gap: 4px;
- }
- .temp-row {
- display: flex;
- align-items: center;
- gap: 8px;
- padding: 6px 0;
- }
- .temp-icon {
- width: 20px;
- height: 20px;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .temp-icon img {
- width: 18px;
- height: 18px;
- opacity: 0.7;
- }
- .temp-badge {
- font-size: 10px;
- font-weight: 600;
- color: var(--accent);
- background: var(--accent-light);
- padding: 1px 4px;
- border-radius: 3px;
- }
- .temp-value {
- font-size: 15px;
- font-weight: 500;
- }
- .temp-target {
- font-size: 13px;
- color: var(--text-muted);
- }
- .temp-unit {
- font-size: 13px;
- color: var(--text-muted);
- }
- /* Air Condition */
- .air-row {
- display: flex;
- align-items: center;
- gap: 12px;
- padding: 8px 0;
- border-top: 1px solid var(--border-light);
- }
- .air-label {
- display: flex;
- align-items: center;
- gap: 6px;
- font-size: 12px;
- color: var(--text-secondary);
- }
- .air-label img {
- width: 16px;
- height: 16px;
- opacity: 0.6;
- }
- .air-item {
- display: flex;
- align-items: center;
- gap: 6px;
- padding: 6px 12px;
- background: var(--bg-light);
- border-radius: 6px;
- cursor: pointer;
- }
- .air-item:hover {
- background: var(--bg-hover);
- }
- .air-item img {
- width: 16px;
- height: 16px;
- opacity: 0.6;
- }
- .lamp-dot {
- width: 10px;
- height: 10px;
- border-radius: 50%;
- background: var(--accent);
- }
- /* Movement Section */
- .movement-section {
- display: flex;
- gap: 12px;
- padding-top: 8px;
- border-top: 1px solid var(--border-light);
- }
- .jog-area {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 8px;
- }
- .nozzle-toggle {
- display: flex;
- border-radius: 6px;
- overflow: hidden;
- border: 1px solid var(--border);
- }
- .nozzle-toggle button {
- padding: 4px 16px;
- border: none;
- background: var(--bg-white);
- font-size: 11px;
- cursor: pointer;
- color: var(--text-secondary);
- }
- .nozzle-toggle button.active {
- background: var(--accent);
- color: white;
- }
- .jog-pad {
- position: relative;
- width: 120px;
- height: 120px;
- }
- .jog-ring {
- width: 100%;
- height: 100%;
- border-radius: 50%;
- background: var(--bg-light);
- border: 1px solid var(--border);
- position: relative;
- }
- .jog-label {
- position: absolute;
- font-size: 10px;
- color: var(--text-muted);
- }
- .jog-label.y-plus { top: 8px; left: 50%; transform: translateX(-50%); }
- .jog-label.y-minus { bottom: 8px; left: 50%; transform: translateX(-50%); }
- .jog-label.x-minus { left: 8px; top: 50%; transform: translateY(-50%); }
- .jog-label.x-plus { right: 8px; top: 50%; transform: translateY(-50%); }
- .jog-btn {
- position: absolute;
- width: 24px;
- height: 24px;
- background: var(--bg-white);
- border: 1px solid var(--border);
- border-radius: 4px;
- cursor: pointer;
- font-size: 10px;
- color: var(--text-secondary);
- }
- .jog-btn:hover {
- background: var(--accent);
- color: white;
- border-color: var(--accent);
- }
- .jog-btn.up { top: 20px; left: 50%; transform: translateX(-50%); }
- .jog-btn.down { bottom: 20px; left: 50%; transform: translateX(-50%); }
- .jog-btn.left { left: 20px; top: 50%; transform: translateY(-50%); }
- .jog-btn.right { right: 20px; top: 50%; transform: translateY(-50%); }
- .jog-home {
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- width: 36px;
- height: 36px;
- border-radius: 50%;
- background: var(--accent);
- border: none;
- cursor: pointer;
- }
- .jog-home img {
- width: 18px;
- height: 18px;
- filter: brightness(0) invert(1);
- }
- .step-col {
- display: flex;
- flex-direction: column;
- gap: 2px;
- font-size: 10px;
- }
- .step-btn {
- padding: 4px 8px;
- background: var(--bg-light);
- border: 1px solid var(--border);
- border-radius: 4px;
- cursor: pointer;
- color: var(--text-secondary);
- font-size: 10px;
- }
- .step-btn:hover, .step-btn.active {
- background: var(--bg-hover);
- color: var(--text-primary);
- }
- .step-label {
- text-align: center;
- color: var(--text-muted);
- padding: 2px 0;
- }
- /* Extruder */
- .extruder-area {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 4px;
- }
- .extruder-label {
- font-size: 10px;
- color: var(--text-muted);
- }
- .extruder-graphic {
- height: 80px;
- }
- .extruder-graphic img {
- height: 100%;
- }
- .extruder-btns {
- display: flex;
- flex-direction: column;
- gap: 2px;
- }
- .ext-btn {
- width: 24px;
- height: 20px;
- background: var(--bg-light);
- border: 1px solid var(--border);
- border-radius: 4px;
- cursor: pointer;
- font-size: 9px;
- color: var(--text-secondary);
- }
- .ext-btn:hover {
- background: var(--bg-hover);
- }
- /* AMS Nozzle Colors */
- .nozzle-colors-row {
- display: flex;
- gap: 8px;
- padding: 8px 0;
- border-top: 1px solid var(--border-light);
- }
- .nozzle-color-box {
- flex: 1;
- display: flex;
- align-items: center;
- gap: 4px;
- padding: 6px 10px;
- background: var(--bg-light);
- border: 1px solid var(--border);
- border-radius: 6px;
- }
- .nozzle-color-box.active {
- border-color: var(--accent);
- }
- .color-dot {
- width: 14px;
- height: 14px;
- border-radius: 3px;
- border: 1px solid rgba(0,0,0,0.1);
- }
- .color-dot.empty {
- background: var(--bg-light) !important;
- border: 1px dashed var(--border);
- }
- /* AMS Section */
- .ams-section {
- border-top: 1px solid var(--border-light);
- padding-top: 12px;
- }
- .ams-header-row {
- display: flex;
- align-items: center;
- gap: 8px;
- margin-bottom: 8px;
- }
- .ams-humidity {
- display: flex;
- align-items: center;
- gap: 4px;
- font-size: 11px;
- color: var(--text-muted);
- }
- .ams-humidity img {
- width: 12px;
- height: 12px;
- opacity: 0.5;
- }
- .ams-slots-row {
- display: flex;
- gap: 4px;
- margin-bottom: 8px;
- }
- .ams-slot-label {
- font-size: 9px;
- color: var(--text-muted);
- display: flex;
- align-items: center;
- gap: 2px;
- }
- .ams-slots {
- display: flex;
- gap: 6px;
- }
- .ams-slot {
- width: 52px;
- border: 2px solid var(--border);
- border-radius: 8px;
- overflow: hidden;
- cursor: pointer;
- background: var(--bg-white);
- }
- .ams-slot:hover {
- border-color: var(--text-muted);
- }
- .ams-slot.active {
- border-color: var(--accent);
- }
- .ams-slot-color {
- height: 36px;
- display: flex;
- align-items: flex-end;
- justify-content: center;
- padding-bottom: 4px;
- }
- .ams-slot-color img {
- width: 14px;
- height: 14px;
- opacity: 0.5;
- }
- .ams-slot-info {
- background: var(--bg-light);
- padding: 4px;
- text-align: center;
- border-top: 1px solid var(--border-light);
- }
- .ams-slot-type {
- font-size: 10px;
- font-weight: 600;
- color: var(--text-primary);
- }
- /* AMS Connector Lines */
- .ams-connector {
- display: flex;
- justify-content: center;
- padding: 8px 0;
- position: relative;
- }
- .connector-lines {
- display: flex;
- gap: 20px;
- }
- .connector-line {
- width: 2px;
- height: 20px;
- background: var(--border);
- }
- .connector-hub {
- position: absolute;
- bottom: 0;
- display: flex;
- align-items: center;
- gap: 4px;
- }
- /* External Spool */
- .ext-spool-row {
- display: flex;
- align-items: center;
- gap: 8px;
- padding: 8px 0;
- }
- .ext-label {
- font-size: 11px;
- color: var(--text-muted);
- width: 24px;
- }
- .ext-slot {
- width: 52px;
- height: 52px;
- background: var(--bg-light);
- border: 1px solid var(--border);
- border-radius: 8px;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- font-size: 16px;
- color: var(--text-muted);
- cursor: pointer;
- }
- .ext-slot:hover {
- background: var(--bg-hover);
- }
- .ext-slot-label {
- font-size: 8px;
- }
- .spool-graphic {
- flex: 1;
- height: 52px;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .spool-graphic img {
- height: 45px;
- opacity: 0.8;
- }
- /* AMS Buttons */
- .ams-actions {
- display: flex;
- gap: 8px;
- padding-top: 8px;
- }
- .ams-action-btn {
- padding: 6px 12px;
- font-size: 11px;
- border-radius: 6px;
- cursor: pointer;
- }
- .ams-action-btn.auto {
- background: var(--bg-light);
- border: 1px solid var(--border);
- color: var(--text-secondary);
- display: flex;
- align-items: center;
- gap: 4px;
- }
- .ams-action-btn.auto img {
- width: 14px;
- height: 14px;
- opacity: 0.5;
- }
- .ams-action-btn.auto:hover {
- background: var(--bg-hover);
- }
- .ams-spacer {
- flex: 1;
- }
- .ams-action-btn.unload {
- background: var(--bg-light);
- border: 1px solid var(--border);
- color: var(--text-secondary);
- }
- .ams-action-btn.unload:hover {
- background: var(--bg-hover);
- }
- .ams-action-btn.load {
- background: var(--accent);
- border: none;
- color: white;
- }
- .ams-action-btn.load:hover {
- opacity: 0.9;
- }
- /* Hub Graphic */
- .hub-area {
- display: flex;
- justify-content: center;
- padding: 12px 0;
- }
- .hub-graphic {
- display: flex;
- align-items: center;
- gap: 4px;
- }
- .hub-line {
- width: 30px;
- height: 2px;
- background: var(--border);
- }
- .hub-box {
- padding: 4px 12px;
- background: var(--bg-light);
- border: 1px solid var(--border);
- border-radius: 4px;
- font-size: 10px;
- color: var(--text-muted);
- }
- </style>
- </head>
- <body>
- <div class="main-layout">
- <!-- Left Panel -->
- <div class="left-panel">
- <div class="camera-header">
- <span class="camera-title">Camera</span>
- <button class="camera-icon-btn"><img src="icons/video-camera.svg" alt=""></button>
- <button class="camera-icon-btn"><img src="icons/webcam.svg" alt=""></button>
- <button class="camera-icon-btn"><img src="icons/settings.svg" alt=""></button>
- <button class="camera-icon-btn"><img src="icons/reload.svg" alt=""></button>
- </div>
- <div class="camera-feed">
- Camera Feed
- </div>
- <div class="print-progress">
- <div class="progress-header">Printing Progress</div>
- <div class="progress-content">
- <div class="progress-thumb">
- <img src="icons/micro-sd.svg" alt="">
- </div>
- <div class="progress-info">
- <div class="progress-name">N/A</div>
- <div class="progress-status">N/A</div>
- <div class="progress-bar-container">
- <div class="progress-bar-fill"></div>
- </div>
- <div class="progress-details">
- <span>Layer: N/A N/A</span>
- </div>
- <div class="progress-details" style="margin-top: 4px;">
- <span>Estimated finish time: N/A</span>
- </div>
- </div>
- <div class="progress-actions">
- <div class="progress-icons">
- <button class="progress-icon-btn">⌂</button>
- <button class="progress-icon-btn">⏸</button>
- <button class="progress-icon-btn">⏹</button>
- </div>
- </div>
- </div>
- </div>
- </div>
- <!-- Right Panel -->
- <div class="right-panel">
- <div class="control-header">
- <span class="control-title">Control</span>
- <button class="header-btn">Printer Parts</button>
- <button class="header-btn">Print Options</button>
- <button class="header-btn">Calibration</button>
- </div>
- <div class="control-content">
- <!-- Temperature -->
- <div class="temp-list">
- <div class="temp-row">
- <div class="temp-icon"><img src="icons/hotend.svg" alt=""></div>
- <span class="temp-badge">L</span>
- <span class="temp-value">22</span>
- <span class="temp-target">/0</span>
- <span class="temp-unit">°C</span>
- </div>
- <div class="temp-row">
- <div class="temp-icon"><img src="icons/hotend.svg" alt=""></div>
- <span class="temp-badge">R</span>
- <span class="temp-value">21</span>
- <span class="temp-target">/0</span>
- <span class="temp-unit">°C</span>
- </div>
- <div class="temp-row">
- <div class="temp-icon"><img src="icons/heatbed.svg" alt=""></div>
- <span class="temp-value">21</span>
- <span class="temp-target">/0</span>
- <span class="temp-unit">°C</span>
- </div>
- <div class="temp-row">
- <div class="temp-icon"><img src="icons/chamber.svg" alt=""></div>
- <span class="temp-value">21</span>
- <span class="temp-target">/0</span>
- <span class="temp-unit">°C</span>
- </div>
- </div>
- <!-- Air Condition -->
- <div class="air-row">
- <div class="air-label">
- <img src="icons/ventilation.svg" alt="">
- Air Condition
- </div>
- <div class="air-item">
- <img src="icons/ventilation.svg" alt="">
- <span>100%</span>
- </div>
- <div class="air-item">
- <span>Lamp</span>
- <div class="lamp-dot"></div>
- </div>
- </div>
- <!-- Movement -->
- <div class="movement-section">
- <div class="jog-area">
- <div class="jog-pad">
- <div class="jog-ring">
- <span class="jog-label y-plus">Y</span>
- <span class="jog-label y-minus">-Y</span>
- <span class="jog-label x-minus">-X</span>
- <span class="jog-label x-plus">X</span>
- <button class="jog-btn up">▲</button>
- <button class="jog-btn down">▼</button>
- <button class="jog-btn left">◀</button>
- <button class="jog-btn right">▶</button>
- <button class="jog-home">
- <img src="icons/home.svg" alt="">
- </button>
- </div>
- </div>
- </div>
- <div class="step-col">
- <button class="step-btn">↑ 10</button>
- <button class="step-btn active">↑ 1</button>
- <span class="step-label">Bed</span>
- <button class="step-btn">↓ 1</button>
- <button class="step-btn">↓ 10</button>
- </div>
- <div class="extruder-area">
- <div class="nozzle-toggle">
- <button class="active">Left</button>
- <button>Right</button>
- </div>
- <div class="extruder-graphic">
- <img src="icons/dual-extruder.png" alt="">
- </div>
- <span class="extruder-label">Extruder</span>
- <div class="extruder-btns">
- <button class="ext-btn">▲</button>
- <button class="ext-btn">▼</button>
- </div>
- </div>
- </div>
- <!-- Nozzle Color Assignment -->
- <div class="nozzle-colors-row">
- <div class="nozzle-color-box active">
- <div class="color-dot" style="background: #FFD700;"></div>
- <div class="color-dot" style="background: #8B4513;"></div>
- <div class="color-dot" style="background: #1a1a1a;"></div>
- <div class="color-dot" style="background: #222;"></div>
- </div>
- <div class="nozzle-color-box">
- <div class="color-dot empty"></div>
- </div>
- </div>
- <!-- AMS -->
- <div class="ams-section">
- <div class="ams-header-row">
- <div class="ams-humidity">
- <img src="icons/water.svg" alt="">
- 18 %
- </div>
- <div class="ams-humidity">
- ☀
- </div>
- </div>
- <div class="ams-slots-row">
- <span class="ams-slot-label">A1 <img src="icons/reload.svg" style="width:10px;opacity:0.4"></span>
- <span class="ams-slot-label">A2 <img src="icons/reload.svg" style="width:10px;opacity:0.4"></span>
- <span class="ams-slot-label">A3 <img src="icons/reload.svg" style="width:10px;opacity:0.4"></span>
- <span class="ams-slot-label">A4 <img src="icons/reload.svg" style="width:10px;opacity:0.4"></span>
- <span style="flex:1"></span>
- <span class="ams-slot-label">Ext</span>
- </div>
- <div style="display: flex; gap: 12px;">
- <div class="ams-slots">
- <div class="ams-slot active">
- <div class="ams-slot-color" style="background: linear-gradient(180deg, #FFD700 60%, #E6C200 100%);">
- <img src="icons/eye.svg" alt="">
- </div>
- <div class="ams-slot-info">
- <div class="ams-slot-type">PLA</div>
- </div>
- </div>
- <div class="ams-slot">
- <div class="ams-slot-color" style="background: linear-gradient(180deg, #1a1a1a 60%, #0a0a0a 100%);">
- <img src="icons/eye.svg" alt="" style="filter: invert(1);">
- </div>
- <div class="ams-slot-info">
- <div class="ams-slot-type">PETG</div>
- </div>
- </div>
- <div class="ams-slot">
- <div class="ams-slot-color" style="background: linear-gradient(180deg, #8B4513 60%, #6B3510 100%);">
- <img src="icons/eye.svg" alt="" style="filter: invert(1);">
- </div>
- <div class="ams-slot-info">
- <div class="ams-slot-type">PETG</div>
- </div>
- </div>
- <div class="ams-slot">
- <div class="ams-slot-color" style="background: linear-gradient(180deg, #222 60%, #111 100%);">
- <img src="icons/eye.svg" alt="" style="filter: invert(1);">
- </div>
- <div class="ams-slot-info">
- <div class="ams-slot-type">PLA</div>
- </div>
- </div>
- </div>
- <div style="display: flex; flex-direction: column; align-items: center; gap: 4px;">
- <div class="ext-slot">
- ?
- <span class="ext-slot-label">∠</span>
- </div>
- <div class="spool-graphic">
- <img src="icons/single-extruder1.png" alt="">
- </div>
- </div>
- </div>
- <!-- Actions -->
- <div class="ams-actions">
- <button class="ams-action-btn auto">
- Auto-refill
- <img src="icons/ams-settings.svg" alt="">
- </button>
- <div class="ams-spacer"></div>
- <button class="ams-action-btn unload">Unload</button>
- <button class="ams-action-btn load">Load</button>
- </div>
- <!-- Hub -->
- <div class="hub-area">
- <div class="hub-graphic">
- <div class="hub-line"></div>
- <div class="hub-box">HUB</div>
- <div class="hub-line"></div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </body>
- </html>
|