:root{color:#172024;background:#f2eee5;font-family:Aptos,Noto Sans SC,Microsoft YaHei,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:linear-gradient(135deg,rgba(216,92,69,.08),transparent 28%),linear-gradient(315deg,rgba(63,127,147,.12),transparent 30%),#f2eee5}button,input,select{font:inherit}button{cursor:pointer}.app{display:grid;grid-template-columns:minmax(310px,380px) minmax(0,1fr);min-height:100vh}.sidebar{display:flex;flex-direction:column;gap:12px;height:100vh;overflow:auto;padding:18px;background:#fffaf1eb;border-right:1px solid rgba(23,32,36,.12)}.brand,.stage-toolbar,.panel-title,.toolbar-actions,.participant-form,.record-row,.participant-row{display:flex;align-items:center}.brand,.stage-toolbar,.panel-title{justify-content:space-between;gap:16px}.brand h1,.stage-toolbar h2,.panel h3{margin:0;letter-spacing:0}.brand h1{font-size:22px;line-height:1.12}.stage-toolbar h2{font-size:22px}.panel h3{font-size:15px}.panel{flex:0 0 auto;padding:14px;background:#ffffffb8;border:1px solid rgba(23,32,36,.12);border-radius:8px;box-shadow:0 10px 24px #31362b0d}.stats-panel{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.stats-panel div{padding:8px;background:#f6f2e9;border-radius:6px}.stats-panel strong{display:block;font-size:22px}.stats-panel span,.participant-row span,.record-row span,.record-row em{color:#5f6a66;font-size:12px;font-style:normal}form{display:grid;gap:10px;margin-top:12px}label{display:grid;gap:5px;color:#3b484c;font-size:12px;font-weight:800}input,select{width:100%;min-height:38px;padding:8px 10px;color:#172024;background:#fffdf8;border:1px solid rgba(23,32,36,.18);border-radius:6px;outline:none}input:focus,select:focus{border-color:#3f7f93;box-shadow:0 0 0 3px #3f7f9329}.triple-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.primary-button,.tool-button,.icon-button,.text-button{border:0;border-radius:6px;align-items:center;justify-content:center}.primary-button,.tool-button{display:inline-flex;gap:6px;min-height:34px;padding:6px 10px;font-weight:800}.primary-button{color:#fffdf8;background:#172024}.icon-button{display:inline-grid;flex:0 0 32px;width:32px;height:32px;color:#172024;background:#ece6d9}.tool-button{color:#263238;background:#fffaf1;border:1px solid rgba(23,32,36,.13)}.tool-button.is-active{color:#fffdf8;background:#3f7f93}.tool-button.danger,.icon-button.danger{color:#9d2f20}.tool-button svg,.primary-button svg,.icon-button svg{width:15px;height:15px}.text-button{color:#58717c;background:transparent;font-size:12px;font-weight:800}.subtle{background:transparent}.compact-panel .participant-form{display:grid;grid-template-columns:1fr;gap:10px;margin-top:12px}.compact-panel .participant-form-row{display:grid;grid-template-columns:minmax(0,1fr) 110px 36px;gap:8px;align-items:center}.list-panel{min-height:0}.record-list,.participant-list{display:grid;gap:8px;margin-top:12px}.participant-list{max-height:260px;overflow:auto;padding-right:2px}.record-row,.participant-row{gap:8px;padding:9px;background:#fffdf8;border:1px solid rgba(23,32,36,.09);border-radius:6px}.record-row{align-items:flex-start}.record-row div,.participant-row div{display:grid;gap:2px;min-width:0;flex:1}.record-row strong,.participant-row strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.record-row span,.record-row em{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-dot{width:9px;height:9px;border-radius:999px;background:#b9b2a4}.participant-row.is-recorded .status-dot{background:#3f7f93}.empty{margin:0;color:#6b756f;font-size:13px}.stage{display:grid;grid-template-rows:auto minmax(0,1fr);min-width:0;height:100vh;padding:18px}.stage-toolbar{min-height:56px;margin-bottom:12px}.toolbar-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px}.file-button{position:relative;overflow:hidden}.file-button input{position:absolute;inset:0;opacity:0;cursor:pointer}.graph-shell{position:relative;min-height:0;overflow:hidden;background:linear-gradient(rgba(23,32,36,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(23,32,36,.035) 1px,transparent 1px),#fffaf1;background-size:34px 34px;border:1px solid rgba(23,32,36,.12);border-radius:8px}.graph-host,.graph-canvas{width:100%;height:100%;min-height:560px}.legend{position:absolute;bottom:14px;display:flex;flex-wrap:wrap;gap:8px;pointer-events:none}.legend-countries{left:16px;max-width:calc(100% - 220px)}.legend-edges{right:16px;justify-content:flex-end}.legend span{display:inline-flex;align-items:center;gap:6px;padding:5px 8px;background:#fffaf1e0;border:1px solid rgba(23,32,36,.1);border-radius:999px;font-size:12px;font-weight:800}.legend b{width:12px;height:12px;border-radius:999px}.legend b.shape-marker{display:inline-block;background:#d7d0c0;border:2px solid #172024;border-radius:999px}.legend b.shape-marker.circle-marker{border-radius:999px}.legend b.shape-marker.square-marker{border-radius:2px}.edge-legend:before{content:"";width:24px;height:0;border-top:2px solid #82939a}.intro-line:before{border-top:4px solid #263238}.toast{position:fixed;left:50%;bottom:24px;z-index:20;max-width:min(520px,calc(100vw - 32px));padding:10px 14px;color:#fffdf8;background:#172024;border-radius:6px;opacity:0;transform:translate(-50%,12px);transition:opacity .16s ease,transform .16s ease;pointer-events:none}.toast.is-visible{opacity:1;transform:translate(-50%)}.presentation-only{display:none}.is-presentation{grid-template-columns:1fr}.is-presentation .sidebar{display:none}.is-presentation .stage{padding:0}.is-presentation .stage-toolbar{position:absolute;z-index:3;top:12px;left:14px;right:14px;margin:0;min-height:0;padding:8px 10px;background:#fffaf1d1;border:1px solid rgba(23,32,36,.1);border-radius:8px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.is-presentation .stage-toolbar h2{font-size:22px}.is-presentation .toolbar-actions{gap:6px}.is-presentation .tool-button{min-height:34px;padding:6px 10px}.is-presentation .graph-shell{height:100vh;border:0;border-radius:0}.is-presentation .graph-canvas{min-height:100vh}.is-presentation .toolbar-actions .tool-button:not(.presentation-only):not([data-action=layout]):not([data-action=zoom-out]):not([data-action=zoom-in]):not([data-action=toggle-labels]):not([data-action=toggle-gender-shapes]):not([data-action=fit]):not([data-action=export-png]){display:none}.is-presentation .presentation-only{display:inline-flex}.boot{min-height:100vh}@media(max-width:980px){.app{grid-template-columns:1fr}.sidebar{height:auto;max-height:none;border-right:0;border-bottom:1px solid rgba(23,32,36,.12)}.stage{height:72vh}.graph-canvas{min-height:480px}}@media(max-width:680px){.triple-grid,.compact-panel .participant-form{grid-template-columns:1fr}.stage-toolbar{align-items:flex-start;flex-direction:column}.toolbar-actions{justify-content:flex-start}.tool-button span{display:none}}
