*{box-sizing:border-box}body{margin:0;font:14px system-ui,sans-serif;color:#222}.app{display:flex;height:100vh}aside{width:320px;overflow:auto;padding:12px;border-right:1px solid #ddd;display:flex;flex-direction:column;gap:8px;background:#fafafa}main{flex:1;position:relative}.graph{position:absolute;top:0;right:0;bottom:0;left:0}.empty{position:absolute;top:40%;width:100%;text-align:center;color:#888;pointer-events:none;z-index:1}header{display:flex;justify-content:space-between;align-items:center}h1{font-size:18px;margin:0}label{display:flex;flex-direction:column;gap:2px}label.check{flex-direction:row;align-items:center}input,select,textarea,button{font:inherit;padding:5px 8px;border:1px solid #bbb;border-radius:6px;background:#fff}button{cursor:pointer}button:disabled{opacity:.5;cursor:default}.primary{background:#1976d2;color:#fff;border-color:#1976d2}.danger{color:#c62828;border-color:#c62828}.panel{display:flex;flex-direction:column;gap:6px;padding:8px;border:1px solid #e0e0e0;border-radius:8px;background:#fff}.row{display:flex;gap:6px;align-items:center}.wrap{flex-wrap:wrap}.grow{flex:1}.err{color:#c62828}.warn{color:#e65100}.ok{color:#2e7d32}.avatar{width:40px;height:40px;border-radius:50%}.rels{padding:0;margin:0;list-style:none}.rels li{display:flex;gap:4px;align-items:center;font-size:12px}.rels button{margin-left:auto;padding:1px 6px}.dot{width:10px;height:10px;border-radius:50%;flex:none}summary{cursor:pointer;font-weight:600}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#0008;display:flex;align-items:center;justify-content:center;z-index:10}.dialog{background:#fff;padding:16px;border-radius:10px;width:min(420px,95vw);display:flex;flex-direction:column;gap:8px}.cropbox{position:relative;height:300px;background:#333}@media (max-width:700px){.app{flex-direction:column}aside{width:100%;max-height:45vh}}.zoomctl{position:absolute;right:12px;bottom:12px;display:flex;flex-direction:column;gap:4px;z-index:2}.zoomctl button{width:34px;height:34px;padding:0;font-size:18px;line-height:1;box-shadow:0 1px 3px #0003}.danger-solid{background:#c62828;color:#fff;border-color:#c62828}.row.end{justify-content:flex-end}.dialog h3{margin:0}.dialog p{margin:0 0 8px}button:focus-visible{outline:3px solid #90caf9;outline-offset:1px}.panelbody{display:flex;flex-direction:column;gap:8px}.notice{display:flex;gap:8px;align-items:flex-start;background:#fff8e1;border:1px solid #ffe082;border-radius:8px;padding:6px 8px;font-size:13px}.notice span{flex:1}.notice button{padding:0 8px;font-size:18px;line-height:1.2}.paneltoggle{display:none;padding:3px 8px;font-size:12px}header{gap:6px;flex-wrap:wrap}@media (max-width:767px){.app{flex-direction:column;height:100dvh}aside{width:100%;max-height:50dvh;border-right:0;border-bottom:1px solid #ddd;flex:none}aside.collapsed{max-height:none}aside.collapsed .panelbody{display:none}.paneltoggle{display:inline-block;margin-left:auto}main{flex:1;min-height:200px}.zoomctl button{width:40px;height:40px}.dialog{max-height:90dvh;overflow:auto}.cropbox{height:min(300px,50dvh)}}.toast{position:absolute;left:50%;bottom:16px;transform:translate(-50%);z-index:5;max-width:min(520px,calc(100% - 80px));display:flex;gap:8px;align-items:flex-start;background:#fff;border:1px solid #ccc;border-left:4px solid #2e7d32;border-radius:8px;padding:8px 10px;box-shadow:0 2px 8px #0003}.toast.err{border-left-color:#c62828}.toast button{padding:0 6px;border:0;font-size:18px;line-height:1}button.link{border:0;background:none;color:#1976d2;padding:0;align-self:flex-start;text-decoration:underline}
