/* ==========================================================================
   備品発注システム — 共通デザインシステム (2025 リニューアル)
   白基調 / 濃紺(プライマリ) / ブルー(アクセント1色) / レスポンシブ
   ========================================================================== */
:root{
  --bg:#eceff3; --surface:#ffffff; --surface-2:#f4f6f9;
  --primary:#1c2733; --primary-2:#26333f; --sidebar:#1a232e; --sidebar-hover:#26313d;
  --accent:#2563c9; --accent-d:#1f52a8; --accent-soft:#e7eefb;
  --text:#1c242e; --muted:#5c6874; --line:#dbe1e8; --line-2:#e9edf1;
  --danger:#c62f2f; --danger-soft:#fbe9e9; --success:#1c7d47; --success-soft:#e6f2ea;
  --warn:#b5710f; --warn-soft:#fbf1e1;
  --radius:3px; --radius-sm:3px; --shadow:0 1px 2px rgba(20,28,38,.06);
  --shadow-md:0 6px 20px rgba(20,28,38,.14); --sidebar-w:224px; --header-h:56px;
  --fs:13.5px;
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  font-family:"Inter","Hiragino Kaku Gothic ProN","Hiragino Sans","Noto Sans JP","Meiryo",system-ui,-apple-system,sans-serif;
  background:var(--bg); color:var(--text); font-size:var(--fs); line-height:1.5; -webkit-font-smoothing:antialiased;
}
a{color:var(--accent); text-decoration:none;}
img{max-width:100%;}
:focus-visible{outline:2px solid var(--accent); outline-offset:2px;}

/* ---------- ログイン ---------- */
.login-wrap{min-height:100vh; display:flex; align-items:center; justify-content:center; padding:20px;
  background:linear-gradient(135deg,#1e2a3a 0%,#2a3d59 100%);}
.login-card{width:100%; max-width:380px; background:var(--surface); border-radius:16px; box-shadow:var(--shadow-md); padding:34px 30px;}
.login-card .brand{text-align:center; margin-bottom:22px;}
.login-card .brand .logo{width:52px;height:52px;border-radius:14px;background:var(--accent);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:24px;font-weight:800;}
.login-card h1{font-size:19px; margin:12px 0 2px; text-align:center;}
.login-card .sub{color:var(--muted); font-size:13px; text-align:center; margin-bottom:22px;}
.login-card label{display:block; font-size:12.5px; font-weight:600; color:var(--muted); margin:0 0 6px;}
.login-card .field{margin-bottom:16px;}
.login-error{color:var(--danger); font-size:13px; margin-top:12px; min-height:18px; text-align:center;}

/* ---------- 入力 ---------- */
.input, input[type=text].input, input[type=password].input, input[type=number].input, select.input, textarea.input{
  width:100%; height:42px; padding:0 12px; border:1px solid var(--line); border-radius:var(--radius-sm);
  background:var(--surface); color:var(--text); font-size:14px; transition:border-color .15s,box-shadow .15s;
}
select.input{appearance:none; background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7684' stroke-width='2'><path d='M6 9l6 6 6-6'/></svg>"); background-repeat:no-repeat; background-position:right 10px center; padding-right:32px;}
textarea.input{height:auto; padding:10px 12px; resize:vertical;}
.input:focus, select.input:focus, textarea.input:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft); outline:none;}
.input-sm{height:36px; font-size:13px;}

/* ---------- ボタン ---------- */
.btn{display:inline-flex; align-items:center; justify-content:center; gap:7px; height:40px; padding:0 16px;
  border:1px solid transparent; border-radius:var(--radius-sm); font-size:13.5px; font-weight:600; cursor:pointer;
  background:var(--surface); color:var(--text); transition:background .15s,border-color .15s,box-shadow .15s,transform .04s; white-space:nowrap;}
.btn:active{transform:translateY(1px);}
.btn i{font-size:13px;}
.btn-primary{background:var(--primary); color:#fff;}
.btn-primary:hover{background:var(--primary-2);}
.btn-accent{background:var(--accent); color:#fff;}
.btn-accent:hover{background:var(--accent-d);}
.btn-ghost{background:var(--surface); color:var(--text); border-color:var(--line);}
.btn-ghost:hover{background:var(--surface-2); border-color:#d3dae4;}
.btn-danger{background:var(--surface); color:var(--danger); border-color:#f2c4c4;}
.btn-danger:hover{background:var(--danger-soft);}
.btn-danger-solid{background:var(--danger); color:#fff;}
.btn-success{background:var(--success); color:#fff;}
.btn-warn{background:var(--warn); color:#fff;}
.btn-sm{height:34px; padding:0 12px; font-size:12.5px; gap:5px;}
.btn-xs{height:30px; padding:0 10px; font-size:12px; gap:4px;}
.btn-block{width:100%;}
.btn[disabled]{opacity:.55; cursor:not-allowed;}
.btn.is-added{background:var(--success-soft); color:var(--success); border-color:#bfe6cd;}

/* ---------- レイアウト ---------- */
#app{min-height:100vh;}
.sidebar{position:fixed; top:0; left:0; width:var(--sidebar-w); height:100vh; background:var(--sidebar); color:#c4cfdd;
  display:flex; flex-direction:column; z-index:60; transition:transform .22s ease;}
.sidebar .brand{display:flex; align-items:center; gap:10px; height:var(--header-h); padding:0 18px; color:#fff; font-weight:700; font-size:15px; border-bottom:1px solid rgba(255,255,255,.06);}
.sidebar .brand .logo{width:30px;height:30px;border-radius:8px;background:var(--accent);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px;color:#fff;}
.sidebar-menu{list-style:none; margin:0; padding:8px 0; overflow-y:auto; flex:1;}
.sidebar-menu .sec{font-size:10.5px; letter-spacing:.08em; color:#67768a; padding:14px 16px 6px; text-transform:uppercase; font-weight:600;}
.sidebar-menu li a{display:flex; align-items:center; gap:12px; padding:10px 16px 10px 15px; border-left:3px solid transparent; color:#b7c2d0; font-size:13.5px; font-weight:500;}
.sidebar-menu li a i{width:17px; text-align:center; font-size:14px; color:#7f8ea1;}
.sidebar-menu li a:hover{background:var(--sidebar-hover); color:#fff;}
.sidebar-menu li.active a{background:rgba(255,255,255,.06); border-left-color:var(--accent); color:#fff; font-weight:600;}
.sidebar-menu li.active a i{color:#fff;}

.main{margin-left:var(--sidebar-w); min-height:100vh; display:flex; flex-direction:column;}
.header{position:sticky; top:0; height:var(--header-h); background:var(--surface); border-bottom:1px solid var(--line); display:flex; align-items:center; gap:12px; padding:0 18px; z-index:50;}
.header .hamburger{display:none; width:38px; height:38px; border:1px solid var(--line); border-radius:8px; background:var(--surface); cursor:pointer; align-items:center; justify-content:center; color:var(--text);}
.header .page-title{font-size:16px; font-weight:700; margin:0; flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.header .spacer{flex:1;}
.header .hchip{display:inline-flex; align-items:center; gap:7px; height:36px; padding:0 12px; border-radius:8px; background:var(--surface-2); border:1px solid var(--line); font-size:13px; color:var(--text); max-width:230px;}
.header .hchip i{color:var(--muted);}
.header .hchip .txt{white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.header .role{font-size:11px; font-weight:700; padding:2px 7px; border-radius:5px; background:var(--accent-soft); color:var(--accent-d);}
.header .role.general{background:#eef1f5; color:var(--muted);}
.cart-btn{position:relative; width:40px; height:40px; border:1px solid var(--line); border-radius:8px; background:var(--surface); display:inline-flex; align-items:center; justify-content:center; color:var(--text); cursor:pointer;}
.cart-btn .badge{position:absolute; top:-6px; right:-6px; min-width:18px; height:18px; padding:0 5px; border-radius:9px; background:var(--danger); color:#fff; font-size:11px; font-weight:700; display:flex; align-items:center; justify-content:center;}
.content{padding:20px; flex:1;}
@media (min-width:1500px){ .content{max-width:1440px; margin:0 auto; width:100%;} }

/* ---------- カード ---------- */
.card{background:var(--surface); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); margin-bottom:16px; overflow:hidden;}
.card-head{display:flex; align-items:center; gap:12px; flex-wrap:wrap; padding:14px 16px; border-bottom:1px solid var(--line-2);}
.card-head h2{font-size:14.5px; font-weight:700; margin:0;}
.card-head .spacer{flex:1;}
.card-body{padding:16px;}
.card-body.flush{padding:0;}
.card-foot{padding:14px 16px; border-top:1px solid var(--line-2); display:flex; gap:10px; flex-wrap:wrap; align-items:center;}

/* ---------- ツールバー / 検索 ---------- */
.toolbar{display:grid; grid-template-columns:repeat(auto-fit,minmax(160px,1fr)); gap:10px; align-items:end;}
.toolbar .field label{display:block; font-size:11.5px; font-weight:600; color:var(--muted); margin-bottom:5px;}
.toolbar-actions{display:flex; gap:8px; flex-wrap:wrap;}

/* ---------- テーブル ---------- */
.table-wrap{overflow-x:auto;}
table.tbl{width:100%; border-collapse:separate; border-spacing:0; font-size:13.5px;}
table.tbl thead th{position:sticky; top:0; background:var(--surface-2); color:var(--muted); font-weight:700; font-size:12px; text-align:left; padding:11px 12px; border-bottom:1px solid var(--line); white-space:nowrap; z-index:1;}
table.tbl tbody td{padding:11px 12px; border-bottom:1px solid var(--line-2); vertical-align:middle;}
table.tbl tbody tr:hover{background:var(--surface-2);}
table.tbl tbody tr:last-child td{border-bottom:none;}
table.tbl .num{text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap;}
table.tbl tfoot td, table.tbl tfoot th{padding:12px; background:var(--surface-2); font-weight:700; border-top:2px solid var(--line);}
.col-img{width:56px;}
.thumb{width:46px; height:46px; border-radius:2px; object-fit:contain; border:1px solid var(--line); background:#fff;}
.thumb.sm{width:40px;height:40px;}
.pname{font-weight:600; color:var(--text); display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; line-height:1.35; max-width:340px;}
.pcode{font-size:11.5px; color:var(--muted); font-variant-numeric:tabular-nums;}
.psub{font-size:12px; color:var(--muted);}
/* NO IMAGE プレースホルダ */
.noimg{display:flex; align-items:center; justify-content:center; border:1px solid var(--line); background:var(--surface-2); color:#9aa6b2; font-size:9.5px; font-weight:700; letter-spacing:.05em; border-radius:2px;}

/* ---------- 発注リスト（商品一覧） ---------- */
.plist-head{display:grid; grid-template-columns:100px minmax(0,1fr) 116px 250px; gap:18px; padding:9px 18px; background:var(--surface-2); border-bottom:1px solid var(--line); font-size:11px; font-weight:700; letter-spacing:.02em; color:var(--muted); position:sticky; top:calc(var(--header-h)); z-index:5;}
.plist-head .r{text-align:right;}
.prow{display:grid; grid-template-columns:100px minmax(0,1fr) 116px 250px; gap:18px; align-items:center; padding:14px 18px; border-bottom:1px solid var(--line-2);}
.prow:hover{background:var(--surface-2);}
.prow:last-child{border-bottom:none;}
.pimg,.pimg img,.pimg .noimg{width:96px; height:96px;}
.pimg img{object-fit:contain; border:1px solid var(--line); background:#fff; border-radius:2px; cursor:zoom-in; display:block;}
.pinfo{min-width:0;}
.pinfo .nm{font-size:14.5px; font-weight:600; line-height:1.42; color:var(--text); display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;}
.pinfo .meta{margin-top:7px; display:flex; flex-wrap:wrap; gap:4px 16px; font-size:12px; color:var(--muted);}
.pinfo .meta .k{color:#9aa6b2;}
.pinfo .meta b{color:var(--text); font-weight:600;}
.pprice{text-align:right; white-space:nowrap;}
.pprice .amt{font-size:17px; font-weight:700; font-variant-numeric:tabular-nums; letter-spacing:-.01em;}
.pprice .past{font-size:11.5px; color:var(--muted); margin-top:4px; font-variant-numeric:tabular-nums;}
.pctl{display:flex; align-items:center; gap:8px; justify-content:flex-end;}
.pctl .stepper button{width:34px; height:38px;}
.pctl .stepper input{width:44px; height:38px;}
.pctl .btn-add{flex:0 0 auto; height:38px; padding:0 12px; font-size:12.5px;}

/* ---------- ヘッダー：カート要約 ---------- */
.cart-chip{display:inline-flex; align-items:center; gap:9px; height:38px; padding:0 12px; border:1px solid var(--line); border-radius:2px; background:var(--surface); color:var(--text); font-size:13px;}
.cart-chip:hover{background:var(--surface-2);}
.cart-chip .ic{color:var(--muted); font-size:14px;}
.cart-chip .n{font-weight:700; font-variant-numeric:tabular-nums;}
.cart-chip .amt{color:var(--muted); font-variant-numeric:tabular-nums; padding-left:2px;}
.cart-chip .amt:empty{display:none;}

/* ---------- 画像ズーム ---------- */
.zoom-img{max-width:100%; max-height:72vh; display:block; margin:0 auto; border:1px solid var(--line); background:#fff;}
.storecell{white-space:nowrap;}
.right{text-align:right;} .center{text-align:center;} .nowrap{white-space:nowrap;}

/* ---------- バッジ/チップ ---------- */
.badge-soft{display:inline-block; padding:2px 7px; border-radius:2px; font-size:11.5px; font-weight:600; background:var(--surface-2); color:var(--muted); border:1px solid var(--line);}
.badge-soft.ok{background:var(--success-soft); color:var(--success); border-color:#bfe6cd;}
.badge-soft.acc{background:var(--accent-soft); color:var(--accent-d); border-color:#c9dcfb;}
.badge-soft.warn{background:var(--warn-soft); color:var(--warn); border-color:#f3d9b3;}
.stat{display:inline-flex; flex-direction:column; line-height:1.25;}
.stat b{font-variant-numeric:tabular-nums;}

/* ---------- 数量ステッパー ---------- */
.stepper{display:inline-flex; align-items:center; border:1px solid var(--line); border-radius:2px; overflow:hidden; background:var(--surface);}
.stepper button{width:38px; height:40px; border:none; background:var(--surface-2); color:var(--text); font-size:18px; line-height:1; cursor:pointer;}
.stepper button:hover{background:#e6ebf1;}
.stepper button:active{background:#dbe2ea;}
.stepper input{width:54px; height:40px; border:none; border-left:1px solid var(--line); border-right:1px solid var(--line); text-align:center; font-size:15px; font-weight:600; font-variant-numeric:tabular-nums; -moz-appearance:textfield;}
.stepper input::-webkit-outer-spin-button,.stepper input::-webkit-inner-spin-button{-webkit-appearance:none; margin:0;}

/* ---------- サマリーバー (固定) ---------- */
.summary{position:sticky; top:calc(var(--header-h) + 0px); z-index:20; background:var(--surface); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); padding:12px 16px; display:flex; gap:18px; align-items:center; flex-wrap:wrap; margin-bottom:16px;}
.summary .metric{display:flex; flex-direction:column;}
.summary .metric .lbl{font-size:11.5px; color:var(--muted); font-weight:600;}
.summary .metric .val{font-size:20px; font-weight:800; font-variant-numeric:tabular-nums;}
.summary .metric .val.accent{color:var(--accent-d);}
.summary .spacer{flex:1;}

/* ---------- ページネーション ---------- */
.card-foot.pager-foot{justify-content:center; gap:14px;}
.pager-info{font-size:13px; color:var(--muted); font-variant-numeric:tabular-nums; min-width:96px; text-align:center;}

/* ---------- 空状態 ---------- */
.empty{text-align:center; padding:48px 20px; color:var(--muted);}
.empty i{font-size:34px; color:#c3ccd8; margin-bottom:12px; display:block;}

/* ---------- トースト ---------- */
#toast-wrap{position:fixed; top:16px; right:16px; z-index:2000; display:flex; flex-direction:column; gap:8px;}
.toast{min-width:240px; max-width:360px; background:var(--surface); border:1px solid var(--line); border-left:4px solid var(--accent); border-radius:8px; box-shadow:var(--shadow-md); padding:12px 14px; font-size:13.5px; display:flex; gap:10px; align-items:flex-start; animation:toastin .2s ease;}
.toast.success{border-left-color:var(--success);} .toast.success i{color:var(--success);}
.toast.warning{border-left-color:var(--warn);} .toast.warning i{color:var(--warn);}
.toast.danger{border-left-color:var(--danger);} .toast.danger i{color:var(--danger);}
.toast i{margin-top:1px; color:var(--accent);}
@keyframes toastin{from{opacity:0; transform:translateX(12px);} to{opacity:1; transform:none;}}

/* ---------- モーダル ---------- */
.modal-backdrop{position:fixed; inset:0; background:rgba(15,23,35,.5); z-index:1000; display:none; align-items:center; justify-content:center; padding:16px;}
.modal-backdrop.open{display:flex;}
.modal-box{background:var(--surface); border-radius:14px; box-shadow:var(--shadow-md); width:100%; max-width:560px; max-height:90vh; display:flex; flex-direction:column; animation:toastin .18s ease;}
.modal-box.lg{max-width:760px;}
.modal-head{display:flex; align-items:center; padding:16px 18px; border-bottom:1px solid var(--line-2);}
.modal-head h3{margin:0; font-size:15.5px; font-weight:700; flex:1;}
.modal-head .x{width:34px;height:34px;border:none;background:var(--surface-2);border-radius:8px;cursor:pointer;color:var(--muted);font-size:18px;}
.modal-body{padding:18px; overflow-y:auto;}
.modal-foot{padding:14px 18px; border-top:1px solid var(--line-2); display:flex; gap:10px; justify-content:flex-end; flex-wrap:wrap;}
.form-row{display:grid; grid-template-columns:1fr 1fr; gap:12px;}
.form-row.three{grid-template-columns:1fr 1fr 1fr;}
.form-group{margin-bottom:14px;}
.form-group label{display:block; font-size:12.5px; font-weight:600; color:var(--muted); margin-bottom:6px;}

/* ---------- カード表示(モバイル) 用ラベル ---------- */
.dl{display:none;}

/* ==========================================================================
   レスポンシブ
   ========================================================================== */
@media (max-width:1024px){
  .pname{max-width:220px;}
}
/* タブレット・スマホ: サイドバーをドロワー化 */
@media (max-width:900px){
  .sidebar{transform:translateX(-100%);}
  .sidebar.open{transform:translateX(0); box-shadow:var(--shadow-md);}
  .main{margin-left:0;}
  .header .hamburger{display:inline-flex;}
  .scrim{position:fixed; inset:0; background:rgba(15,23,35,.4); z-index:55; display:none;}
  .scrim.open{display:block;}
  .header .hchip.store{max-width:150px;}
}
/* スマホ・タブレット: テーブル → カード切替 */
@media (max-width:820px){
  .content{padding:14px;}
  table.tbl.cards thead{display:none;}
  table.tbl.cards, table.tbl.cards tbody, table.tbl.cards tr, table.tbl.cards td{display:block; width:100%;}
  table.tbl.cards tr{background:var(--surface); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); margin-bottom:12px; padding:12px; position:relative;}
  table.tbl.cards tr:hover{background:var(--surface);}
  table.tbl.cards td{border:none; padding:6px 0; display:flex; justify-content:space-between; gap:12px; align-items:center;}
  table.tbl.cards td .dl{display:inline; font-size:12px; color:var(--muted); font-weight:600;}
  table.tbl.cards td.num{justify-content:space-between;}
  table.tbl.cards td.cell-main{display:flex; align-items:flex-start; gap:12px; padding-bottom:10px; margin-bottom:6px; border-bottom:1px solid var(--line-2);}
  table.tbl.cards td.cell-main .dl{display:none;}
  table.tbl.cards .pname{max-width:none;}
  table.tbl.cards tfoot{display:none;}
  .summary{position:static;}
  .summary .metric .val{font-size:18px;}
  /* 発注リスト: 画像＋情報／価格＋操作を縦に整理 */
  .plist-head{display:none;}
  .prow{grid-template-columns:84px minmax(0,1fr); gap:14px; row-gap:12px; padding:14px;}
  .pimg,.pimg img,.pimg .noimg{width:84px; height:84px;}
  .pprice{grid-column:2; text-align:left; display:flex; align-items:baseline; gap:14px;}
  .pprice .past{margin-top:0;}
  .pctl{grid-column:1 / -1; justify-content:space-between; border-top:1px solid var(--line-2); padding-top:12px;}
  .pctl .btn-add{flex:1;}
  .toolbar{grid-template-columns:1fr 1fr;}
  .header .page-title{font-size:15px;}
  .modal-box{max-width:100%;}
  .form-row, .form-row.three{grid-template-columns:1fr;}
  #toast-wrap{left:12px; right:12px; top:12px;} .toast{max-width:none;}
}
@media (max-width:520px){
  .toolbar{grid-template-columns:1fr;}
  .header .hchip.store{display:none;}
  .card-head{gap:8px;}
}
/* 印刷（注文書） */
@media print{
  .sidebar,.header,.card-head,.card-foot,#toast-wrap,.modal-foot,.no-print{display:none !important;}
  .main{margin:0;} .modal-backdrop{position:static; background:none; display:block;}
  .modal-box{box-shadow:none; max-width:100%; max-height:none;}
}
