:root{--bg:#f6f7fb;--card:#ffffff;--border:#e5e7eb;--text:#0f172a;--muted:#6b7280;--primary:#2563eb;--ok:#16a34a;--warn:#dc2626;--shadow:0 6px 20px rgba(15,23,42,.06)}*{box-sizing:border-box}html,body{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans JP,sans-serif}.wrap{max-width:1200px;margin:32px auto;padding:0 20px}.header{margin-bottom:16px}.title{font-size:28px;font-weight:800;margin:0}.subtitle{color:var(--muted);margin:6px 0 0}.layout{display:grid;grid-template-columns:480px 1fr;gap:24px}@media (max-width:1000px){.layout{grid-template-columns:1fr}}.left,.right{display:flex;flex-direction:column;gap:16px}.panel{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:16px;box-shadow:var(--shadow)}.panel.light{background:#f9fafb}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.panel-title{margin:0;font-size:16px;font-weight:800}.step{font-size:12px;color:var(--muted);border:1px solid var(--border);padding:2px 8px;border-radius:999px}.zone{border:2px dashed var(--border);border-radius:16px;padding:24px;text-align:center;background:#fbfbfe;transition:.15s background,.15s border-color}.zone.dragover{background:#eef6ff;border-color:#93c5fd}.drop-title{font-weight:800;font-size:16px;margin-bottom:6px}.preview-wrap{margin-top:12px}.preview{width:100%;max-height:360px;object-fit:contain;border-radius:12px;background:#f1f5f9}.actions{display:flex;gap:8px;margin-top:12px}.btn{padding:10px 14px;border:0;border-radius:10px;background:var(--primary);color:#fff;cursor:pointer;box-shadow:0 2px 8px #2563eb26}.btn[disabled]{opacity:.6;cursor:not-allowed}.btn-ghost{background:#f3f4f6;color:#111827}.textarea{width:100%;padding:12px;border:1px solid var(--border);border-radius:12px;font-size:14px;resize:vertical;background:#fff}.sticky{position:sticky;top:12px;z-index:1}.banner{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:14px;border:1px solid var(--border);background:#fafafa}.icon{font-size:22px}.bdesc{color:var(--muted);font-size:13px}.pill{font-size:12px;padding:6px 10px;border-radius:999px;background:#eef2ff;color:#1e293b;border:1px solid var(--border)}.list{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:10px}.item{display:grid;grid-template-columns:170px 1fr 80px;gap:10px;align-items:center}.item-label{font-weight:700}.sev{text-align:right;font-variant-numeric:tabular-nums;color:var(--muted)}.bar{height:12px;background:#e5e7eb;border-radius:999px;overflow:hidden}.fill{height:100%;width:0%;transition:width .4s ease;background:linear-gradient(90deg,#60a5fa,#3b82f6)}.legend{margin:8px 0 0 18px;font-size:14px;color:#374151}.hint{color:var(--muted);font-size:12px;margin-top:8px}.note{border-radius:10px;padding:10px 12px;font-size:13px;margin-top:10px}.note.warning{background:#fff7ed;border:1px solid #fed7aa;color:#9a3412}.note.error{background:#fef2f2;border:1px solid #fecaca;color:#991b1b}.footer{margin:28px 0 0;text-align:center;color:var(--muted);font-size:12px}.app-shell{display:flex;min-height:100vh;background:#f6f7fb;color:#0f172a}.app-main{flex:1;display:flex;flex-direction:column;min-width:0}.topbar{height:56px;display:flex;align-items:center;gap:12px;padding:0 16px;background:#fff;border-bottom:1px solid #e5e7eb}.burger{display:none;background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:6px 10px;cursor:pointer}.brand{font-weight:800}.content{padding:16px;max-width:1100px;width:100%}.sidebar{width:220px;flex:0 0 220px;background:#fff;border-right:1px solid #e5e7eb;display:flex;flex-direction:column;gap:12px;padding:12px;position:sticky;top:0;height:100vh}.logo{font-weight:900;font-size:18px;padding:6px 8px}.nav{display:flex;flex-direction:column;gap:6px}.nav-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;color:#111827;text-decoration:none;border:1px solid transparent}.nav-item:hover{background:#f3f4f6}.nav-item.active{background:#eef2ff;border-color:#e5e7eb}.nav-ico{width:20px;text-align:center}.flex-spacer{flex:1}.sidebar-foot{color:#6b7280;font-size:12px;padding:8px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000026;opacity:0;visibility:hidden;transition:.15s}.overlay.show{opacity:1;visibility:visible}@media (max-width: 900px){.sidebar{position:fixed;left:-240px;top:0;height:100vh;z-index:30;transition:left .2s ease;box-shadow:0 8px 28px #0000001f}.sidebar.open{left:0}.burger{display:inline-block}.content{padding:12px}}.panel{background:#fff;border:1px solid #e5e7eb;border-radius:16px;padding:16px;box-shadow:0 6px 20px #0f172a0f}.panel-title{margin:0;font-size:18px;font-weight:800}.helper{color:#6b7280;font-size:13px}.uploader{display:flex;gap:8px;align-items:center;margin-top:12px}.btn{padding:10px 14px;border:0;border-radius:10px;background:#2563eb;color:#fff;cursor:pointer}.btn:disabled{opacity:.6;cursor:not-allowed}.placeholder{margin-top:16px;border:1px dashed #e5e7eb;border-radius:12px;padding:24px;background:#fbfbfe;color:#6b7280;text-align:center}.yolo-canvas{margin-top:12px;display:inline-block;background:transparent}.img-wrap-tight{position:relative;display:inline-block;line-height:0;border-radius:12px;overflow:hidden;box-shadow:0 6px 20px #0f172a14;border:1px solid #e5e7eb}.overlay-el-tight{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.yolo-pill{position:absolute;left:6px;top:6px;padding:4px 8px;font-size:12px;color:#0b1220;background:#fff;border:1px solid #dbe2f0;border-radius:999px;box-shadow:0 2px 8px #0000001f;max-width:calc(100% - 12px);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;-webkit-backdrop-filter:saturate(120%) blur(2px);backdrop-filter:saturate(120%) blur(2px)}.yolo-pill{position:absolute;left:6px;top:6px;padding:6px 10px;font-size:13px;color:#0b1220;background:#fff;border:1px solid #dbe2f0;border-radius:12px;box-shadow:0 2px 8px #0000001f;max-width:200px;white-space:normal;line-height:1.3;-webkit-backdrop-filter:saturate(120%) blur(2px);backdrop-filter:saturate(120%) blur(2px)}.sns-grid{display:grid;grid-template-columns:minmax(0,640px) minmax(300px,1fr);gap:20px}@media (max-width:1100px){.sns-grid{grid-template-columns:1fr}}.col-left{display:flex;flex-direction:column;gap:16px}.col-right{display:flex;flex-direction:column;gap:12px}.sticky-md{position:sticky;top:12px}.card-flat,.card-tight,.card-muted,.banner-card{background:#fff;border:1px solid #e5e7eb;border-radius:16px;padding:16px;box-shadow:0 6px 20px #0f172a0f}.card-muted{background:#f9fafb}.card-tight{padding:14px}.card-title{margin:0;font-weight:800}.step{font-size:12px;color:#6b7280;border:1px solid #e5e7eb;padding:2px 8px;border-radius:999px}.zone-lg{border:2px dashed #e5e7eb;border-radius:16px;padding:22px;text-align:center;background:#fbfbfe;transition:.15s}.zone-lg.dragover{background:#eef6ff;border-color:#93c5fd}.drop-sub{color:#6b7280;font-size:13px}.textarea-xl{width:100%;padding:12px;border:1px solid #e5e7eb;border-radius:12px;font-size:14px;background:#fff}.banner{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:14px;border:1px solid #e5e7eb;background:#fafafa}.banner.ok{border-color:#86efac;background:#f0fdf4}.banner.warn{border-color:#fecaca;background:#fef2f2}.icon{font-size:20px}.btext{display:flex;flex-direction:column;gap:4px}.btitle{font-weight:800}.bdesc{color:#6b7280;font-size:13px}.row-sev{text-align:right;color:#6b7280;font-variant-numeric:tabular-nums}.row-fill{height:100%;width:0%;transition:width .35s ease;background:linear-gradient(90deg,#60a5fa,#3b82f6)}.mt-6{margin-top:6px}.mt-10{margin-top:10px}.chip{padding:4px 8px;font-size:12px;color:#0b1220;background:#fff;border:1px solid #dbe2f0;border-radius:999px;box-shadow:0 2px 8px #0000001a;pointer-events:none}.status-wrap{display:flex;gap:8px;margin:8px 0;min-height:24px}.status-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;font-size:12px;border-radius:999px;border:1px solid #dbe2f0;background:#fff;color:#0b1220;box-shadow:0 2px 8px #0000000f}.img-wrap-tight{position:relative;display:inline-block;line-height:0;border-radius:12px;box-shadow:0 6px 20px #0f172a14;border:1px solid #e5e7eb}.chip{padding:4px 8px;font-size:12px;color:#0b1220;background:#fff;border:1px solid #dbe2f0;border-radius:999px;box-shadow:0 2px 8px #0000001a}.yolo-count-pill{position:absolute;right:8px;bottom:8px;padding:4px 10px;font-size:12px;color:#0b1220;background:#fff;border:1px solid #dbe2f0;border-radius:999px;box-shadow:0 2px 8px #0000001f}.face-list li{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:8px 10px;border:1px solid #e5e7eb;border-radius:10px;background:#fff}:root{--bg:#f6f7fb;--card:#fff;--line:#e5e7eb;--text:#0b1220;--muted:#6b7280;--brand:#2563eb;--ok:#16a34a;--warn:#ea580c;--danger:#b91c1c;--shadow:0 6px 20px rgba(15,23,42,.06)}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial}.app-shell{display:flex;min-height:100vh}.main{flex:1;display:flex;flex-direction:column;min-width:0;margin-left:240px}.topbar{height:56px;display:flex;align-items:center;gap:12px;padding:0 16px;border-bottom:1px solid var(--line);background:var(--card)}.top-title{font-weight:800}.burger{display:none;background:none;border:none;font-size:20px}@media (max-width:980px){.burger{display:inline-flex}}.content{padding:16px}.sidebar{position:fixed;z-index:30;left:0;top:0;bottom:0;width:240px;height:100vh;background:var(--card);border-right:1px solid var(--line);box-shadow:var(--shadow);display:flex;flex-direction:column;gap:12px;padding:16px}.sb-brand{font-weight:900;font-size:18px}.sb-nav{display:flex;flex-direction:column;gap:6px}.sb-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;color:var(--text);text-decoration:none;border:1px solid transparent}.sb-item:hover{background:#f5f7ff;border-color:#eaf0ff}.sb-item.active{background:#eef2ff;border-color:#dbe2f0;box-shadow:inset 3px 0 0 var(--brand)}.sb-ico{width:22px;text-align:center}.sb-foot{margin-top:auto;color:var(--muted);font-size:12px}@media (max-width:980px){.main{margin-left:0}.sidebar{left:-260px;transition:transform .2s ease;width:240px}.sidebar.open{left:0}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0003;z-index:20}}.page-head{margin:6px 0 12px}.page-head h1{margin:0;font-size:22px;font-weight:900}.page-head .sub{margin:6px 0 0;color:var(--muted)}.two-col{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:16px}@media (max-width:1100px){.two-col{grid-template-columns:1fr}}.stack{display:flex;flex-direction:column;gap:12px}.sticky{position:sticky;top:12px;align-self:start}.card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px;box-shadow:var(--shadow)}.card.tight{padding:14px}.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.card-title{display:flex;align-items:center;gap:10px}.card-title h2,.card-title h3{margin:0}.emoji{font-size:18px}.banner{display:flex;gap:12px;border-radius:14px;border:1px solid var(--line);padding:14px 16px;background:#fafafa}.banner.ok{background:#f0fdf4;border-color:#bbf7d0}.banner.warn{background:#fef2f2;border-color:#fecaca}.banner.neutral{background:#f9fafb}.b-ico{font-size:20px}.b-title{font-weight:800}.b-desc{color:var(--muted);font-size:13px}.pill{font-size:12px;padding:6px 10px;border-radius:999px;background:#eef2ff;color:#1e293b;border:1px solid #e5e7eb}.pill.ok{background:#dcfce7;color:#166534;border-color:#bbf7d0}.pill.warn{background:#fee2e2;color:#991b1b;border-color:#fecaca}.status-chip{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;border:1px solid #dbe2f0;background:#fff;box-shadow:0 2px 8px #0000000f;font-size:12px}.status-chip.ok{background:#f0fdf4;border-color:#bbf7d0;color:#166534}.textarea-xl{width:100%;padding:12px;border:1px solid var(--line);border-radius:12px;font-size:14px;background:#fff}.muted{color:var(--muted);font-size:13px}.drop.zone-lg{border:2px dashed var(--line);border-radius:16px;padding:22px;text-align:center;background:#fbfbfe;transition:.15s}.drop.zone-lg.dragover{background:#eef6ff;border-color:#93c5fd}.drop-title{font-weight:800}.drop-sub{color:var(--muted);font-size:13px}.preview-wrap{background:#f6f7fb;border:1px solid var(--line);border-radius:12px;padding:12px}.preview{max-width:100%;border-radius:8px}.list-compact{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:10px}.row{display:grid;grid-template-columns:1fr 1fr 86px;gap:10px;align-items:center}.row-label{font-weight:700}.row-sev{text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}.row-bar{height:10px;background:#e5e7eb;border-radius:999px;overflow:hidden}.row-fill{height:100%;transition:width .35s ease;background:linear-gradient(90deg,#60a5fa,#3b82f6)}.note.error{color:#991b1b;background:#fee2e2;border:1px solid #fecaca;padding:10px 12px;border-radius:10px;font-size:14px}.note.warning{color:#7c2d12;background:#ffedd5;border:1px solid #fed7aa;padding:8px 10px;border-radius:10px;font-size:13px}.hint{color:var(--muted);font-size:13px}.overlay-el-tight{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:visible}.img-wrap-tight{position:relative;display:inline-block;line-height:0;border-radius:12px;box-shadow:var(--shadow);border:1px solid var(--line)}.img-el-tight{display:block;max-width:100%;max-height:560px;width:auto;height:auto}.chip{padding:4px 8px;font-size:12px;color:var(--text);background:#fff;border:1px solid #dbe2f0;border-radius:999px;box-shadow:0 2px 8px #0000001a}.chip-age{padding:6px 10px;font-weight:700;font-size:13px}.yolo-count-pill{position:absolute;right:8px;bottom:8px;padding:4px 10px;font-size:12px;color:var(--text);background:#fff;border:1px solid #dbe2f0;border-radius:999px;box-shadow:0 2px 8px #0000001f}.face-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}.face-list li{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:#fff}.face-list .id{font-weight:800;color:#334155;margin-right:4px}.yolo-canvas.busy{position:relative}.spinner{width:28px;height:28px;border:3px solid rgba(30,64,175,.2);border-top-color:var(--brand);border-radius:50%;animation:spin .9s linear infinite}.progress-text{font-size:12px;color:var(--text)}.mt-8{margin-top:8px}.mt-12{margin-top:12px}.face-list li{align-items:center}.face-thumb{width:72px;height:72px;object-fit:cover;border-radius:8px;border:1px solid var(--line);margin-right:8px;flex:0 0 auto}.ba-wrap{position:relative;display:inline-block;max-width:100%;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#f6f7fb}.ba-img{display:block;max-width:100%;height:auto}.ba-after{position:absolute;top:0;right:0;bottom:0;left:0;object-fit:contain;width:100%;height:100%}.ba-slider{position:absolute;left:0;right:0;bottom:8px;width:60%;margin:0 auto;display:block;background:transparent}.toast{margin-top:12px;padding:10px 12px;border-radius:10px;border:1px solid #dbe2f0;background:#fff;box-shadow:0 4px 16px #0f172a14;font-size:14px}.toast.error{border-color:#fecaca;background:#fef2f2;color:#991b1b}.glass-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#ffffff80;-webkit-backdrop-filter:blur(2px) saturate(120%);backdrop-filter:blur(2px) saturate(120%);border-radius:12px;display:flex;align-items:center;justify-content:center}.spinner{width:28px;height:28px;border:3px solid rgba(30,64,175,.2);border-top-color:#2563eb;border-radius:50%;animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.progress-pill{position:absolute;right:8px;bottom:8px;pointer-events:none;display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:999px;background:#fff;border:1px solid #dbe2f0;box-shadow:0 2px 8px #0000001f}.progress-bar{width:80px;height:6px;border-radius:999px;background:#eef2ff;overflow:hidden;position:relative}.progress-bar:after{content:"";position:absolute;left:-40%;top:0;width:40%;height:100%;background:linear-gradient(90deg,#60a5fa,#3b82f6);animation:indet 1.2s ease-in-out infinite}@keyframes indet{0%{left:-40%;width:40%}50%{left:20%;width:60%}to{left:100%;width:40%}}.progress-text{font-size:12px;color:#0b1220}
