:root{
  --bg:#f6f9fc;
  --panel:#fff;
  --border:#e6ebf1;
  --accent:#635bff;
  --accent-hover:#5851ea;
  --text:#0a2540;
  --muted:#425466;
  --muted-2:#8898aa;
  --radius:8px;
  --radius-lg:12px;
  --shadow:0 4px 24px rgba(50,50,93,.08), 0 1px 5px rgba(0,0,0,.05);
  --shadow-sm:0 2px 5px rgba(50,50,93,.08);
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Hiragino Kaku Gothic ProN","Noto Sans JP",sans-serif;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-decoration:none}
a:hover{color:var(--accent-hover);text-decoration:underline}
/* Header - Stripe dashboard style */
header{height:64px;display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:#0a2540;color:#fff;position:sticky;top:0;z-index:1000;box-shadow:0 1px 0 rgba(255,255,255,.08) inset}
header h1{font-size:15px;margin:0;font-weight:600;letter-spacing:-0.01em;display:flex;align-items:center;gap:10px}
header h1::before{content:"◉";color:#635bff;font-size:18px}
header .sub{font-size:11px;opacity:.7;font-weight:400;margin-left:8px;letter-spacing:0}
header .actions{display:flex;gap:8px;align-items:center}
/* Buttons - Stripe style */
.btn{border:1px solid var(--border);background:var(--panel);padding:7px 14px;border-radius:6px;cursor:pointer;font-size:13px;font-weight:500;color:var(--text);box-shadow:var(--shadow-sm);transition:all .15s}
.btn:hover{border-color:#c1c9d2;transform:translateY(-1px);box-shadow:0 4px 12px rgba(50,50,93,.1)}
.btn:active{transform:translateY(0)}
.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 2px 5px rgba(99,91,255,.25)}
.btn.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover);box-shadow:0 4px 12px rgba(99,91,255,.3)}
.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}
/* Layout */
.layout{display:flex;height:calc(100vh - 64px)}
.sidebar{width:360px;min-width:320px;max-width:420px;background:var(--bg);border-right:1px solid var(--border);overflow:auto;padding:16px;display:flex;flex-direction:column;gap:16px}
.sidebar::-webkit-scrollbar{width:6px}
.sidebar::-webkit-scrollbar-thumb{background:#c1c9d2;border-radius:3px}
.maps{flex:1;display:flex;gap:0;background:#e6ebf1;position:relative;padding:12px}
.map-wrap{flex:1;position:relative;display:flex;flex-direction:column;background:#e6ebf1;min-width:0;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow);border:1px solid var(--border)}
.map-wrap .map{flex:1;min-height:0}
.map-title{position:absolute;top:12px;left:56px;z-index:400;background:rgba(255,255,255,.92);backdrop-filter:blur(8px);padding:8px 12px;border-radius:20px;font-size:12px;line-height:1.2;box-shadow:var(--shadow);border:1px solid rgba(255,255,255,.6);max-width:65%;font-weight:500}
.map-title b{font-size:12px;color:var(--text)}
.map-title span{color:var(--muted);font-size:11px}
.leaflet-control-zoom{margin-top:12px !important;margin-left:12px !important;border-radius:8px !important;overflow:hidden;box-shadow:var(--shadow) !important;border:1px solid var(--border) !important}
.leaflet-control-zoom a{width:32px !important;height:32px !important;line-height:32px !important;font-size:15px !important;color:var(--text) !important;background:#fff !important;border:none !important}
.leaflet-control-zoom a:hover{background:#f6f9fc !important;color:var(--accent) !important}
.divider{width:8px;background:transparent;cursor:col-resize;display:flex;align-items:center;justify-content:center;position:relative}
.divider::after{content:'';width:1px;height:40px;background:var(--border);border-radius:1px}
.divider:hover::after{background:var(--accent);width:2px}
/* Cards - Stripe style */
.card{border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px;background:var(--panel);box-shadow:var(--shadow)}
.card h3{margin:0 0 12px;font-size:12px;font-weight:600;letter-spacing:0.04em;text-transform:uppercase;color:var(--muted);display:flex;align-items:center;gap:8px}
.card h3::before{content:'';width:3px;height:14px;background:var(--accent);border-radius:2px}
.card h3 .badge{font-size:10px;background:#f6f9fc;color:var(--accent);padding:2px 8px;border-radius:999px;border:1px solid var(--border);font-weight:600;letter-spacing:0;text-transform:none}
.group{margin-bottom:14px}
.group-title{font-size:11px;font-weight:600;color:var(--text);margin:8px 0 6px;padding:0;display:flex;align-items:center;gap:6px}
.group-title::before{content:'';width:2px;height:10px;background:var(--accent);border-radius:1px;opacity:.6}
.checks{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.checks label{display:flex;align-items:center;gap:8px;font-size:12px;line-height:1.3;padding:7px 8px;border-radius:6px;cursor:pointer;border:1px solid var(--border);background:#fff;transition:all .12s;font-weight:400}
.checks label:hover{background:#f6f9fc;border-color:#c1c9d2;transform:translateY(-1px);box-shadow:var(--shadow-sm)}
.checks label:has(input:checked){background:#f5f3ff;border-color:var(--accent);color:var(--text);box-shadow:0 2px 5px rgba(99,91,255,.12)}
.checks input{accent-color:var(--accent);width:14px;height:14px}
.select{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:#fff;color:var(--text);transition:border-color .15s, box-shadow .15s}
.select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(99,91,255,.15)}
.range{width:100%;accent-color:var(--accent);height:4px}
.legend{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.legend span{font-size:11px;padding:4px 8px;border-radius:999px;color:#fff;font-weight:500;box-shadow:var(--shadow-sm)}
.hint{font-size:11px;color:var(--muted);line-height:1.6;background:#f6f9fc;padding:10px 12px;border-radius:6px;border:1px solid var(--border)}
.kpi{display:flex;flex-wrap:wrap;gap:8px}
.kpi div{background:#fff;border:1px solid var(--border);border-radius:8px;padding:12px;flex:1;min-width:90px;box-shadow:var(--shadow-sm)}
.kpi b{font-size:18px;display:block;color:var(--text);font-weight:600;letter-spacing:-0.02em}
.kpi em{font-size:10px;color:var(--muted);font-style:normal;font-weight:500;letter-spacing:0.04em;text-transform:uppercase}
.popup{font-size:12px;line-height:1.5;color:var(--text)}
.popup b{font-size:12px;color:var(--text)}
.popup table{border-collapse:collapse;margin-top:8px;width:100%;border:1px solid var(--border);border-radius:6px;overflow:hidden}
.popup td{padding:6px 8px;border-bottom:1px solid var(--border);font-size:11px}
.popup td:last-child{text-align:right;font-variant-numeric:tabular-nums;font-weight:500}
.kuiki-label{background:rgba(255,255,255,0.96);border:1px solid var(--border);border-radius:6px;padding:3px 6px;font-size:10px;font-weight:700;color:var(--text);box-shadow:var(--shadow);white-space:nowrap}
.mesh-tooltip{background:#0a2540;color:#fff;border:none;border-radius:6px;padding:6px 8px;font-size:11px;line-height:1.4;box-shadow:0 4px 12px rgba(0,0,0,0.15)}
.mesh-tooltip::before{border-top-color:#0a2540 !important}
.mesh-hover{position:absolute;pointer-events:none;z-index:500;background:#0a2540;color:#fff;border-radius:8px;padding:8px 10px;font-size:11px;line-height:1.4;box-shadow:0 4px 12px rgba(0,0,0,0.2);display:none;max-width:220px;transform:translate(-50%, -110%);font-weight:500}
.mesh-hover b{color:#fff}
.mesh-hover small{color:#8898aa}
.notice{font-size:11px;background:#fff8e1;border:1px solid #ffecb3;padding:10px 12px;border-radius:6px;color:#7a4a00}
.dropzone{border:1.5px dashed #c1c9d2;border-radius:8px;padding:16px;text-align:center;font-size:12px;color:var(--muted);background:#fff;cursor:pointer;transition:all .15s}
.dropzone:hover{border-color:var(--accent);background:#f5f3ff}
.dropzone.dragover{border-color:var(--accent);background:#f5f3ff;color:var(--accent);transform:scale(1.01)}
.layer-row{border:1px solid var(--border);border-radius:8px;padding:10px;background:#fff;display:flex;flex-direction:column;gap:8px;transition:box-shadow .15s}
.layer-row:hover{box-shadow:var(--shadow-sm)}
.layer-row-head{display:flex;align-items:center;gap:8px}
.layer-row-head input[type="text"]{flex:1;padding:6px 8px;border:1px solid var(--border);border-radius:6px;font-size:12px;min-width:0}
.layer-row-head input[type="text"]:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(99,91,255,.12)}
.layer-row-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.layer-row-controls label{font-size:11px;display:flex;align-items:center;gap:4px;color:var(--muted);font-weight:500}
.layer-row-controls input[type="color"]{width:28px;height:28px;padding:1px;border:1px solid var(--border);border-radius:6px;cursor:pointer}
.layer-row-controls input[type="range"]{width:90px}
.school-icon{background:transparent;border:none}
.school-icon div{width:34px;height:34px;background:var(--accent);color:#fff;border:2px solid #fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:18px;box-shadow:0 2px 8px rgba(50,50,93,.2);transition:transform 0.15s}
.school-icon div:hover{transform:scale(1.08);box-shadow:0 4px 12px rgba(50,50,93,.25)}
.chugaku-icon{background:transparent;border:none}
.chugaku-icon div{width:34px;height:34px;background:#dc2626;color:#fff;border:2px solid #fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:16px;box-shadow:0 2px 6px rgba(0,0,0,0.35);transition:transform 0.15s}
.chugaku-icon div:hover{transform:scale(1.08)}
.icon-btn{border:1px solid var(--border);background:#fff;border-radius:6px;cursor:pointer;padding:5px 8px;font-size:11px;line-height:1;font-weight:500;color:var(--text);transition:all .12s}
.icon-btn:hover{border-color:#c1c9d2;transform:translateY(-1px);box-shadow:var(--shadow-sm)}
.icon-btn.danger{color:#e25950;border-color:#ffddd6}
.icon-btn.danger:hover{background:#fff5f5}
@media(max-width:900px){.layout{flex-direction:column}.sidebar{width:100%;max-width:none;max-height:45vh}.maps{height:55vh;padding:8px}.map-title{left:48px;max-width:60%}}
