:root{
  --bg:#faf9f5;
  --surface:#ffffff;
  --text:#1f1e1d;
  --muted:#5e5d59;
  --faint:#807f78;
  --border:#e3e0d6;
  --control-hover:#f0eee6;
  --control-active:#e8e5da;
  --row-hover:#f4f2eb;
  --accent:#ae4d2c;
  --accent-hover:#98421f;
  --accent-active:#8a3b1c;
  --accent-soft:#f7ebe4;
  --accent-soft-active:#f2dfd4;
  --focus-ring:rgb(174 77 44 / 30%);
  --retype:#3d6b5f;
  --retype-soft:#e6efeb;
  --warn:#8a4f1c;
  --warn-soft:#f5ecd7;
  --danger:#b3261e;
  --danger-soft:#f9ece9;
  --tag-bg:#efece3;
  --sat:#2f5d8a;
  --sat-soft:#f1f5f9;
  --shadow-bar:0 1px 0 var(--border),0 2px 6px rgb(31 30 29 / 5%);
  --shadow-menu:0 0 0 1px rgb(31 30 29 / 8%),0 4px 12px rgb(31 30 29 / 10%);
  color:var(--text);
  font-family:"Segoe UI","Yu Gothic UI","Hiragino Sans","Hiragino Kaku Gothic ProN",Meiryo,system-ui,sans-serif;
  font-size:15px;
  line-height:1.6;
  font-variant-numeric:tabular-nums;
}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--text);min-height:100vh;font-size:15px;--dw:28px;--task-w:312px}
body[data-dw=narrow]{--dw:20px}
body[data-dw=wide]{--dw:36px}
button,input,select{font:inherit;color:inherit}

/* ── Sidebar ── */
.sidebar{position:fixed;inset:0 auto 0 0;width:276px;transition:width 120ms ease,padding 120ms ease;overflow:hidden auto;background:var(--surface);border-right:1px solid var(--border);z-index:50;display:flex;flex-direction:column;padding:22px 18px;gap:20px}
.side-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.side-toggle,.rail-btn{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:36px;height:36px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--muted);cursor:pointer;transition:background-color 100ms ease,border-color 100ms ease,color 100ms ease,box-shadow 100ms ease}
.side-toggle:hover,.rail-btn:hover{background:var(--control-hover);color:var(--text)}
.side-toggle:active,.rail-btn:active{background:var(--control-active)}
.side-toggle:focus-visible,.rail-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--focus-ring)}
.side-toggle svg{transition:transform 120ms ease}
.rail{display:none;flex-direction:column;align-items:center;gap:10px}
.rail-btn{width:40px;height:40px}
.rail-btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.rail-btn.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:#fff}
.rail-btn.primary:active{background:var(--accent-active);border-color:var(--accent-active)}
.rail-view-txt{font-size:.8rem;font-weight:800;line-height:1;color:var(--accent)}
.side-brand{display:flex;align-items:center;gap:11px;color:var(--text)}
.side-brand svg{color:var(--accent)}
.side-brand h1{font-size:1.2rem;font-weight:800;letter-spacing:0}
.side-sub{font-size:.8rem;color:var(--muted);margin-top:3px}
.side-section{display:flex;flex-direction:column;gap:9px}
.side-label{font-size:.8rem;font-weight:800;color:var(--muted);letter-spacing:.06em}
.side-actions{margin-top:auto;display:flex;flex-direction:column;gap:8px}
.side-btn{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;min-height:38px;padding:8px 12px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--text);cursor:pointer;font-size:.88rem;font-weight:700;font-family:inherit;transition:background-color 100ms ease,border-color 100ms ease,color 100ms ease,box-shadow 100ms ease;white-space:nowrap}
.side-btn:hover{background:var(--control-hover)}
.side-btn:active{background:var(--control-active)}
.side-btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.side-btn.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}
.side-btn.primary:active{background:var(--accent-active);border-color:var(--accent-active)}
.side-btn.soft{background:var(--bg)}
.side-btn.soft:hover{background:var(--control-hover)}
.side-btn:focus-visible,.mnav-btn:focus-visible,.today-btn:focus-visible,.view-btn:focus-visible,.btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--focus-ring)}

/* ── Sidebar controls ── */
.month-nav{display:grid;grid-template-columns:38px 1fr 38px;align-items:center;background:var(--control-hover);border-radius:6px;overflow:hidden}
.mnav-btn{height:38px;border:none;background:transparent;cursor:pointer;font-size:1.25rem;color:var(--muted);line-height:1;transition:background-color 100ms ease,color 100ms ease}
.mnav-btn:hover{background:var(--control-active);color:var(--text)}
.mnav-btn:active{background:var(--border)}
.mnav-label{font-size:.95rem;font-weight:800;color:var(--text);padding:9px 8px;text-align:center;letter-spacing:0}
.today-btn{min-height:36px;border:1px solid var(--accent);border-radius:6px;background:var(--accent-soft);color:var(--accent);font-size:.88rem;font-weight:800;cursor:pointer;transition:background-color 100ms ease,color 100ms ease;font-family:inherit}
.today-btn:hover{background:var(--accent-soft-active);color:var(--accent-hover)}
.today-btn:active{background:var(--accent-soft-active);color:var(--accent-active)}
.view-toggle{display:grid;grid-template-columns:1fr 1fr;align-items:center;background:var(--control-hover);border-radius:6px;padding:3px;gap:2px}
.view-btn{border:none;background:transparent;color:var(--muted);border-radius:4px;padding:8px 10px;font-size:.88rem;font-weight:800;font-family:inherit;cursor:pointer;transition:background-color 100ms ease,color 100ms ease,box-shadow 100ms ease}
.view-btn:hover{background:var(--control-active);color:var(--text)}
.view-toggle.three{grid-template-columns:1fr 1fr 1fr}
.dw-row{display:flex;flex-direction:column;gap:6px}
.dw-label{font-size:.8rem;font-weight:700;color:var(--muted)}
.month-nav[hidden]{display:none}
.view-btn.active{background:var(--surface);color:var(--accent);box-shadow:var(--shadow-bar)}
.tgl-row{display:flex;flex-direction:column;gap:9px}
.tgl-item{display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer;user-select:none;background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:9px 10px;transition:background-color 100ms ease}
.tgl-item:hover{background:var(--row-hover)}
.tgl-item span{font-size:.88rem;font-weight:700;color:var(--text)}
.switch{position:relative;display:inline-block;width:38px;height:22px;flex-shrink:0}
.switch input{opacity:0;width:0;height:0}
.slider{position:absolute;cursor:pointer;inset:0;background:var(--faint);border-radius:20px;transition:background-color 100ms ease}
.slider::before{content:'';position:absolute;height:16px;width:16px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:transform 100ms ease;box-shadow:0 1px 3px rgb(31 30 29 / 25%)}
input:checked+.slider{background:var(--accent)}
input:checked+.slider::before{transform:translateX(16px)}
.switch input:focus-visible+.slider{box-shadow:0 0 0 3px var(--focus-ring)}

/* ── 休工日（サイドバー「カレンダー」） ── */
.od-head{margin-top:4px}
.od-list{display:flex;flex-direction:column;gap:6px;max-height:150px;overflow-y:auto}
.od-empty{font-size:.8rem;color:var(--muted)}
.od-item{display:flex;align-items:center;justify-content:space-between;gap:6px;background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:5px 6px 5px 10px}
.od-main{min-width:0}
.od-name{font-size:.88rem;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.od-date{font-size:.8rem;color:var(--muted);white-space:nowrap}
.od-del{flex-shrink:0;width:26px;height:26px;border:none;border-radius:4px;background:transparent;color:var(--muted);font-size:1.05rem;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color 100ms ease,color 100ms ease}
.od-del:hover,.od-del:active{background:var(--danger-soft);color:var(--danger)}
.od-del:focus-visible{outline:none;box-shadow:0 0 0 3px var(--focus-ring)}
.off-form{display:flex;flex-direction:column;gap:8px}
.off-form[hidden]{display:none}
.off-field{display:flex;flex-direction:column;gap:3px;font-size:.8rem;font-weight:700;color:var(--muted)}
.off-field input{width:100%;min-height:32px;padding:4px 8px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--text);font-size:.88rem;outline:none;transition:background-color 100ms ease,border-color 100ms ease,box-shadow 100ms ease}
.off-field input:hover{background:var(--row-hover)}
.off-field input:focus{border-color:var(--accent);background:var(--surface);box-shadow:0 0 0 3px var(--focus-ring)}
.off-field input::placeholder{color:var(--faint)}
.off-err{font-size:.8rem;font-weight:700;color:var(--danger)}
.off-err:empty{display:none}
.off-btns{display:flex;gap:8px;justify-content:flex-end}
#offAdd:focus-visible{outline:none;box-shadow:0 0 0 3px var(--focus-ring)}

/* ── Sidebar collapsed (56px rail) ── */
body.side-collapsed .sidebar{width:56px;padding:22px 8px;gap:14px;align-items:center}
body.side-collapsed .side-brand{display:none}
body.side-collapsed .side-head{justify-content:center}
body.side-collapsed .side-toggle svg{transform:rotate(180deg)}
body.side-collapsed .side-full{display:none}
body.side-collapsed .rail{display:flex}

/* ── Container ── */
.container{padding:24px 24px 24px 300px;max-width:none;margin:0;display:flex;flex-direction:column;gap:14px;transition:padding-left 120ms ease}
body.side-collapsed .container{padding-left:80px}

/* ── Panel ── */
.panel{background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-bar);overflow:hidden}

/* ── Gantt chart ── */
.gantt-scroll{position:relative;overflow:auto;max-height:calc(100vh - 74px);scroll-padding-top:88px;scroll-padding-bottom:8px}
.g-table{border-collapse:separate;border-spacing:0;background:var(--surface)}
.g-table th,.g-table td{white-space:nowrap}

/* Gantt header */
.g-table thead tr:first-child th{position:sticky;top:0;z-index:31}
.g-table thead tr:nth-child(2) th{position:sticky;top:37px;z-index:30;box-shadow:0 1px 0 var(--border)}
.g-th-task{background:var(--bg);color:var(--text);text-align:left;padding:12px 14px;font-size:.88rem;font-weight:800;position:sticky!important;left:0;top:0!important;z-index:42!important;border-right:1px solid var(--border);border-bottom:1px solid var(--border);min-width:var(--task-w);width:var(--task-w);box-shadow:1px 0 0 var(--border),0 1px 0 var(--border)}
.g-th-month{background:var(--bg);color:var(--text);font-size:.88rem;font-weight:800;text-align:left;padding:0;border-right:1px solid var(--border);border-bottom:1px solid var(--border)}
.g-th-month-label{display:inline-block;position:sticky;left:var(--task-w);padding:9px 8px;white-space:nowrap}
.g-th-day{background:var(--surface);min-width:var(--dw);width:var(--dw);padding:0;border-right:1px solid var(--border);border-bottom:1px solid var(--border);text-align:center}
.g-th-day-in{display:flex;flex-direction:column;align-items:center;padding:5px 2px;gap:1px}
.g-th-day-num{font-size:.88rem;font-weight:800;color:var(--text)}
body[data-dw=narrow] .g-th-day-dow{display:none}
.g-th-day-dow{font-size:.8rem;color:var(--muted);font-weight:700;line-height:1.3}
.g-th-day.sun,.g-th-day.hol{background:var(--danger-soft)}
.g-th-day.sun .g-th-day-num,.g-th-day.sun .g-th-day-dow{color:var(--danger)}
.g-th-day-tag{font-size:.8rem;font-weight:800;line-height:1.2;color:var(--danger)}
.g-th-day.sat{background:var(--sat-soft)}
.g-th-day.sat .g-th-day-num,.g-th-day.sat .g-th-day-dow{color:var(--sat)}
.g-th-day.tod{background:var(--accent-soft)}
.g-th-day.tod .g-th-day-in{padding-left:0;padding-right:0}
.g-th-day-tag.tod{color:var(--accent);white-space:nowrap}
.g-th-day-tag .t-short{display:none}
body[data-dw=narrow] .g-th-day-tag .t-full{display:none}
body[data-dw=narrow] .g-th-day-tag .t-short{display:inline}
.g-th-day.tod .g-th-day-num,.g-th-day.tod .g-th-day-dow{color:var(--accent);font-weight:800}

/* Gantt body */
.g-td-task{background:var(--surface);position:sticky;left:0;z-index:10;padding:4px 8px 4px 4px;border-right:1px solid var(--border);border-bottom:1px solid var(--border);min-width:var(--task-w);width:var(--task-w);box-shadow:1px 0 0 var(--border)}
.tr-odd .g-td-task{background:var(--bg)}
.g-task-edit{display:grid;grid-template-columns:14px 28px minmax(0,1fr) 52px 48px 24px;grid-template-rows:24px 22px;gap:2px 4px;align-items:center}
.g-grip{grid-area:1/1/3/2;align-self:stretch;display:flex;align-items:center;justify-content:center;width:14px;padding:0;border:none;border-radius:4px;background:transparent;color:var(--muted);cursor:grab;touch-action:none;user-select:none;transition:background-color 100ms ease,color 100ms ease,box-shadow 100ms ease}
.g-grip:hover{background:var(--control-hover);color:var(--text)}
.g-grip:active{background:var(--control-active);cursor:grabbing}
.g-grip:focus-visible{outline:none;box-shadow:0 0 0 3px var(--focus-ring)}
.g-drop-line{position:absolute;left:0;height:2px;background:var(--accent);z-index:20;pointer-events:none}
tr.dragging .g-td-task,tr.dragging .g-td-bar{opacity:.45}
body.row-dragging,body.row-dragging *{cursor:grabbing!important;user-select:none!important}
.g-task-edit input{min-width:0;padding:2px 6px;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--text);font:inherit;font-size:.8rem;line-height:1.2;height:22px;outline:none;text-overflow:ellipsis;transition:background-color 100ms ease,border-color 100ms ease,box-shadow 100ms ease}
.g-task-edit input:hover{border-color:var(--border);background:var(--surface)}
.g-task-edit input:focus{border-color:var(--accent);background:var(--surface);box-shadow:0 0 0 3px var(--focus-ring)}
.g-task-edit input[type=color]{grid-area:1/2;width:24px;height:24px;padding:2px;border:1.5px solid var(--border);background:var(--surface);cursor:pointer;border-radius:6px}
.g-task-name{grid-area:1/3;font-weight:800;font-size:.88rem!important;height:24px!important}
.g-task-type{grid-area:1/4/2/6}
.g-task-del{grid-area:1/6}
.g-start-wrap{grid-area:2/2/3/4;display:flex;align-items:center;gap:2px;min-width:0}
.g-task-start{flex:1 1 auto;min-width:0}
.g-start-pred{height:22px;padding:0 6px;font-size:.8rem;line-height:22px;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:default}
.g-pred-btn{flex:none;display:flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--muted);cursor:pointer;transition:background-color 100ms ease,border-color 100ms ease,color 100ms ease,box-shadow 100ms ease}
.g-pred-btn:hover{background:var(--control-hover);border-color:var(--border);color:var(--text)}
.g-pred-btn:active{background:var(--control-active)}
.g-pred-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--focus-ring)}
.g-pred-btn.has-pred{color:var(--accent);background:var(--accent-soft)}
.g-pred-btn.has-pred:hover{background:var(--accent-soft-active);color:var(--accent-hover)}
.g-pred-btn[aria-expanded=true]{background:var(--control-active);border-color:var(--border)}
.g-task-days{grid-area:2/4;text-align:right}
.g-task-meta{grid-area:2/5/3/7}
.g-task-del{width:24px;height:24px;border:none;border-radius:4px;background:transparent;color:var(--muted);font-size:1.05rem;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color 100ms ease,color 100ms ease}
.g-task-del:hover{background:var(--danger-soft);color:var(--danger)}
.g-task-del:active{background:var(--danger-soft);color:var(--danger)}
.g-task-del:focus-visible{outline:none;box-shadow:0 0 0 3px var(--focus-ring)}
.g-task-meta{font-size:.8rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.g-td-bar{padding:0;border-right:none;border-bottom:1px solid var(--border);min-width:var(--dw);width:var(--dw);vertical-align:middle;background:var(--surface)}
.tr-odd .g-td-bar{background:var(--bg)}
.g-td-bar.sun{background:var(--danger-soft)}
.g-td-bar.sat{background:var(--sat-soft)}
.g-td-bar.tod{background:var(--accent-soft);position:relative}
.g-td-bar.tod::after{content:'';position:absolute;top:0;bottom:-1px;left:50%;width:2px;margin-left:-1px;background:var(--accent);pointer-events:none;z-index:3}
.bar{height:18px;border-radius:0;position:relative;box-shadow:inset 0 -1px 0 rgb(31 30 29 / 12%);touch-action:none}
.g-td-bar{user-select:none;-webkit-user-select:none}
/* バーのドラッグ（T-008）: 動かした後のバーを重ねて出す。操作は邪魔しない */
body.bar-dragging,body.bar-dragging *{user-select:none!important}
body.bar-dragging.bd-move,body.bar-dragging.bd-move *{cursor:grabbing!important}
body.bar-dragging.bd-resize,body.bar-dragging.bd-resize *{cursor:ew-resize!important}
tr.bar-moving .bar{opacity:.2!important}
.g-ghost{position:absolute;display:flex;height:18px;z-index:6;pointer-events:none;box-shadow:0 0 0 1.5px var(--muted);background:transparent}
.g-ghost.main{box-shadow:0 0 0 2px var(--accent)}
.g-ghost.bl{border-top-left-radius:7px;border-bottom-left-radius:7px}
.g-ghost.br{border-top-right-radius:7px;border-bottom-right-radius:7px}
.g-ghost i{display:block;height:100%;flex:none;background:var(--c);opacity:.85}
.g-ghost i.off{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--c) 60%,transparent) 0 2px,transparent 2px 6px),color-mix(in srgb,var(--c) 30%,var(--surface));opacity:1}
.g-ghost.bl i:first-child{border-top-left-radius:7px;border-bottom-left-radius:7px}
.g-ghost.br i:last-child{border-top-right-radius:7px;border-bottom-right-radius:7px}
.drag-tip{position:fixed;z-index:80;pointer-events:none;padding:4px 10px;border-radius:6px;background:var(--text);color:var(--surface);font-size:.8rem;font-weight:700;white-space:nowrap;box-shadow:var(--shadow-menu)}
.bar.bl{border-top-left-radius:7px;border-bottom-left-radius:7px}
.bar.br{border-top-right-radius:7px;border-bottom-right-radius:7px}
.bar.off{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--c) 60%,transparent) 0 2px,transparent 2px 6px),color-mix(in srgb,var(--c) 30%,transparent);box-shadow:none}
/* 先行の矢印（表の上に重ねる。操作は邪魔しない） */
.g-arrows{position:absolute;left:0;top:0;z-index:5;pointer-events:none;overflow:hidden}
.arrow-line{fill:none;stroke:var(--muted);stroke-width:1.3;stroke-linejoin:round;opacity:.85}
.arrow-head{fill:var(--muted);stroke:none;opacity:.9}

/* 先行タスクの選択一覧 */
.pred-pop{position:fixed;z-index:70;min-width:200px;max-width:300px;max-height:280px;overflow-y:auto;padding:4px;background:var(--surface);border-radius:8px;box-shadow:var(--shadow-menu)}
.pp-opt{display:flex;flex-direction:column;gap:0;padding:6px 10px;border-radius:4px;font-size:.88rem;font-weight:700;color:var(--text);cursor:pointer;outline:none;transition:background-color 100ms ease}
.pp-opt:hover{background:var(--control-hover)}
.pp-opt:active{background:var(--control-active)}
.pp-opt:focus-visible{background:var(--control-hover);box-shadow:inset 0 0 0 2px var(--accent)}
.pp-opt[aria-selected=true]{background:var(--accent-soft);color:var(--accent)}
.pp-opt[aria-selected=true]{flex-direction:row;justify-content:space-between;align-items:baseline;gap:8px}
.pp-opt[aria-selected=true]::after{flex-shrink:0;content:"選択中";font-size:.8rem;font-weight:700}
.pp-opt.disabled{color:var(--muted);cursor:not-allowed;font-weight:400}
.pp-opt.disabled:hover,.pp-opt.disabled:active{background:transparent}
.pp-lb{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pp-note{font-size:.8rem;font-weight:400}

.g-empty{text-align:center;padding:50px 20px;color:var(--faint)}
.g-empty p{font-size:.9rem;margin-top:12px;color:var(--muted)}
.g-no-tasks-month{text-align:center;padding:40px;color:var(--muted);font-size:.88rem}
.g-no-tasks-month small{font-size:.8rem;color:var(--muted)}

/* Legend */
.g-legend{display:flex;gap:14px;flex-wrap:wrap;padding:9px 14px;border-top:1px solid var(--border)}
.lg-item{display:flex;align-items:center;gap:6px;font-size:.8rem;color:var(--muted)}
.lg-box{width:12px;height:12px;border-radius:3px;flex-shrink:0}
.lg-sun{background:var(--danger-soft);border:1px solid var(--danger)}
.lg-sat{background:var(--sat-soft);border:1px solid var(--sat)}
.lg-tod{background:linear-gradient(90deg,transparent 4px,var(--accent) 4px 6px,transparent 6px),var(--accent-soft);border:1px solid var(--accent)}
.lg-work{background:var(--muted);opacity:.85}
.lg-arrow{flex-shrink:0}
.lg-off{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--muted) 60%,transparent) 0 2px,transparent 2px 5px),color-mix(in srgb,var(--muted) 30%,transparent)}

@media (max-width: 980px){
  .sidebar{position:static;width:auto;border-right:none;border-bottom:1px solid var(--border);padding:16px;display:grid;grid-template-columns:1fr;gap:14px;overflow:visible}
  .side-actions{margin-top:0}
  .container,body.side-collapsed .container{padding:16px}
  body.side-collapsed .sidebar{width:auto;padding:16px;gap:14px;align-items:stretch}
  body.side-collapsed .side-brand{display:flex}
  body.side-collapsed .side-head{justify-content:space-between}
  body.side-collapsed .rail{display:none}
  .side-toggle svg{transform:rotate(90deg)}
  body.side-collapsed .side-toggle svg{transform:rotate(-90deg)}
}

/* ── Modals ── */
.m-overlay{position:fixed;inset:0;background:rgb(31 30 29 / 45%);z-index:100;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;visibility:hidden;transition:opacity .2s,visibility 0s linear .2s}
.m-overlay.open{opacity:1;pointer-events:all;visibility:visible;transition:opacity .2s}
.modal{background:var(--surface);border-radius:8px;padding:22px;width:360px;max-width:95vw;box-shadow:var(--shadow-menu);transform:translateY(10px) scale(.98);transition:transform .2s}
.m-overlay.open .modal{transform:none}
.modal-lg{width:680px}
.m-title{font-size:.95rem;font-weight:800;margin-bottom:16px;display:flex;align-items:center;gap:7px;color:var(--text)}
.m-title svg{color:var(--accent)}
.m-body{display:flex;flex-direction:column;gap:12px}
.m-footer{display:flex;gap:8px;justify-content:flex-end;margin-top:18px;padding-top:14px;border-top:1px solid var(--border)}
.m-footer-l{flex:1;display:flex;gap:8px;align-items:center}
.btn{padding:7px 16px;border:none;border-radius:6px;cursor:pointer;font-size:.88rem;font-weight:700;font-family:inherit;transition:background-color 100ms ease,color 100ms ease,box-shadow 100ms ease}
.btn-p{background:var(--accent);color:#fff}
.btn-p:hover{background:var(--accent-hover)}
.btn-p:active{background:var(--accent-active)}
.btn-s{background:var(--control-hover);color:var(--text)}
.btn-s:hover{background:var(--control-active)}
.btn-s:active{background:var(--border)}
.btn-danger{background:var(--danger);color:#fff}
.btn-danger:hover{background:color-mix(in srgb,var(--danger) 85%,#000)}
.btn-danger:active{background:color-mix(in srgb,var(--danger) 70%,#000)}
.btn-s:focus-visible,.btn-danger:focus-visible{outline:none;box-shadow:0 0 0 3px var(--focus-ring)}
.confirm-msg{font-size:.95rem;line-height:1.7;color:var(--text);overflow-wrap:anywhere}
#confirmModal .m-title svg{color:var(--danger)}
.note{font-size:.8rem;color:var(--muted);background:var(--bg);border-radius:6px;padding:9px 11px;line-height:1.65;border-left:3px solid var(--accent)}
.note strong{color:var(--accent)}
.exp-ta{width:100%;height:300px;font-family:'Consolas',monospace;font-size:.8rem;line-height:1.65;padding:10px;border:1.5px solid var(--border);border-radius:6px;resize:vertical;outline:none;background:var(--bg);color:var(--text)}
.exp-ta:focus{border-color:var(--accent);background:var(--surface);box-shadow:0 0 0 3px var(--focus-ring)}
.exp-ta::placeholder{color:var(--faint)}
.file-btn{display:inline-flex;align-items:center;gap:5px;padding:6px 11px;background:var(--control-hover);color:var(--text);border-radius:6px;cursor:pointer;font-size:.8rem;font-weight:700;transition:background-color 100ms ease}
.file-btn:hover{background:var(--control-active)}
.file-btn:active{background:var(--border)}
.cp-ok{font-size:.8rem;color:var(--retype);font-weight:800;opacity:0;transition:opacity .3s}
.cp-ok.show{opacity:1}
.imp-err{font-size:.8rem;color:var(--danger);font-weight:700}
.m-body[hidden],.m-footer[hidden]{display:none !important}
#importDiffView{max-height:min(58vh,520px);overflow-y:auto;padding-right:4px}
.import-warn-title{margin:0 0 6px;font-size:.82rem;font-weight:800;color:var(--danger)}
.import-warning{margin:0 0 6px;padding:8px 10px;border-left:3px solid var(--danger);border-radius:4px;background:var(--danger-soft);color:var(--danger);font-size:.8rem;font-weight:700;line-height:1.6;overflow-wrap:anywhere}
.import-change{margin:0;padding:4px 2px;border-bottom:1px solid var(--border);font-size:.85rem;line-height:1.6;overflow-wrap:anywhere}
.import-change:last-child{border-bottom:0}
.import-change.is-add{color:var(--retype);font-weight:700}
.import-change.is-remove{color:var(--danger);font-weight:700}
.import-change.is-setting{color:var(--muted)}
.import-empty{color:var(--muted);font-size:.85rem}

/* ── Print area (hidden on screen) ── */
#printArea{display:none}

/* ── Print styles ── */
@media print{
  *{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}
  body{background:white!important}
  body>*:not(#printArea){display:none!important}
  #printArea{display:block!important}
  .pp{page-break-after:always;padding:0}
  .pp:last-child{page-break-after:avoid}
}
@page{size:A4 landscape;margin:10mm 14mm}
