/* ── Dubdsgn App Styles ── 明るいモダンSaaSテーマ (2026-07 リデザイン) ──
   デザイントークンは :root に集約。模様替えは変数の変更だけで完結する。 */
:root{
  /* 基本トークン */
  --bg:#f4f6f9;            /* 画面背景（ごく薄いグレーブルー） */
  --card:#ffffff;          /* カード面 */
  --text:#1c2430;          /* 本文 */
  --muted:#5f6b7a;         /* 補助テキスト */
  --faint:#8a95a5;         /* さらに弱い注記 */
  --line:#e3e8ef;          /* 枠線 */
  --line-soft:#edf1f6;     /* 区切り線・薄い面 */
  --accent:#2a78d6;        /* アクセント（ブルー） */
  --accent-strong:#1f5fb0; /* アクセント hover */
  --accent-weak:#e9f2fc;   /* アクセント薄面 */
  --danger:#c0392b;  --danger-weak:#fceceb;
  --success:#1e8e4e; --success-weak:#e7f6ee;
  --warn:#b45309;    --warn-weak:#fdf3e2;
  --radius:12px; --radius-sm:8px;
  --shadow:0 1px 2px rgba(23,32,52,.05),0 4px 14px rgba(23,32,52,.05);
  --shadow-pop:0 12px 32px rgba(23,32,52,.16);
  /* ナビ5グループのアクセント色 */
  --g-quote:#2a78d6;   --g-quote-weak:#e9f2fc;   /* 見積・納品・請求・領収＝青 */
  --g-billing:#1e8e4e; --g-billing-weak:#e7f6ee; /* 入金＝緑 */
  --g-sales:#d97706;   --g-sales-weak:#fdf3e2;   /* 売上・会計＝琥珀 */
  --g-project:#7856d4; --g-project-weak:#f0ecfb; /* 案件・タスク＝紫 */
  --g-master:#5f6b7a;  --g-master-weak:#eef1f5;  /* マスタ・設定＝グレー */
}
*{box-sizing:border-box;margin:0;padding:0;}
body{font-family:system-ui,-apple-system,BlinkMacSystemFont,'Hiragino Sans','Yu Gothic UI',sans-serif;font-size:14px;background:var(--bg);color:var(--text);min-height:100vh;letter-spacing:.01em;}

/* ── ヘッダー（白基調） ── */
.header{background:var(--card);color:var(--text);padding:0 24px;display:flex;align-items:center;justify-content:space-between;height:54px;border-bottom:1px solid var(--line);}
.header h1{font-size:14px;font-weight:700;letter-spacing:0.1em;}
.header-sub{font-size:11px;color:var(--muted);}
.hdr-btn{background:var(--card);color:var(--muted);border:1px solid var(--line);border-radius:var(--radius-sm);padding:5px 13px;font-size:12px;cursor:pointer;font-family:inherit;transition:all .15s;}
.hdr-btn:hover{color:var(--text);border-color:#c9d4e0;background:var(--line-soft);}
.hdr-btn-danger{color:var(--danger);border-color:#eccfcb;}
.hdr-btn-danger:hover{background:var(--danger-weak);color:var(--danger);border-color:#e0b6b0;}

/* ── ナビ ── */
.nav{background:var(--card);border-bottom:1px solid var(--line);display:flex;padding:0 24px;flex-wrap:wrap;box-shadow:0 1px 2px rgba(23,32,52,.03);}
.nav-btn{background:none;border:none;border-bottom:2px solid transparent;padding:12px 20px;font-size:13px;color:var(--muted);cursor:pointer;transition:all 0.15s;white-space:nowrap;font-family:inherit;}
.nav-btn.active{color:var(--text);border-bottom-color:var(--grp,var(--accent));font-weight:600;}
.nav-btn:hover:not(.active){color:var(--text);background:var(--line-soft);}
.nav-group-label{display:flex;align-items:center;padding:0 6px 0 16px;font-size:10px;font-weight:700;color:var(--faint);text-transform:uppercase;letter-spacing:0.08em;border-left:1px solid var(--line-soft);margin-left:6px;}
.nav-group-label:first-child{border-left:none;margin-left:0;padding-left:0;}
.main{padding:22px 24px 40px;max-width:1300px;margin:0 auto;}
.panel{display:none;}.panel.active{display:block;}

/* ── カード ── */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;margin-bottom:14px;box-shadow:var(--shadow);}
.card-title{font-size:11px;font-weight:700;color:var(--faint);text-transform:uppercase;letter-spacing:0.08em;margin-bottom:12px;}
.section-note{font-size:11px;color:var(--faint);margin-left:6px;font-weight:400;text-transform:none;letter-spacing:0;}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:start;}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;}
.grid4{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:8px;}

/* ── フォーム ── */
label{display:block;font-size:11px;color:var(--muted);margin-bottom:4px;font-weight:600;}
input,select,textarea{width:100%;padding:8px 10px;border:1px solid #d6dee8;border-radius:var(--radius-sm);font-size:13px;color:var(--text);background:var(--card);outline:none;transition:border-color .15s,box-shadow .15s;font-family:inherit;}
textarea{resize:vertical;}
input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak);}
input[readonly]{background:var(--line-soft);color:var(--muted);}
input[type=checkbox],input[type=radio]{width:auto;padding:0;box-shadow:none;accent-color:var(--accent);}

/* ── ボタン ── */
.btn{padding:8px 16px;border-radius:var(--radius-sm);font-size:13px;cursor:pointer;border:1px solid #d6dee8;background:var(--card);color:var(--text);transition:all 0.15s;display:inline-flex;align-items:center;gap:5px;font-family:inherit;white-space:nowrap;}
.btn:hover{background:var(--line-soft);border-color:#c2cedd;}
.btn:focus-visible,.hdr-btn:focus-visible,.nav-btn:focus-visible,.nav-group:focus-visible{outline:2px solid var(--accent);outline-offset:1px;}
.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 1px 2px rgba(42,120,214,.25);}
.btn-primary:hover{background:var(--accent-strong);border-color:var(--accent-strong);}
.btn-danger{color:var(--danger);border-color:#eccfcb;}
.btn-danger:hover{background:var(--danger-weak);border-color:#e0b6b0;}
.btn-sm{padding:5px 10px;font-size:12px;}
.btn-block{width:100%;justify-content:center;}
/* サブタブ（入金消込などのパネル内タブ・CSS未定義だった孤児クラス） */
.subtab-btn{background:var(--card);border:1px solid #d6dee8;color:var(--muted);padding:6px 16px;border-radius:999px;font-size:12.5px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s;margin-right:4px;}
.subtab-btn:hover{border-color:var(--accent);color:var(--text);}
.subtab-btn.active{background:var(--accent);border-color:var(--accent);color:#fff;}

/* ── 旧インライン濃色ボタンの吸収（HTML/JS側は無改変で色だけ差し替え） ── */
.btn[style*="background:#333"],.btn[style*="background:#1a1a1a"],
button[style*="background:#333"],button[style*="background:#1a1a1a"]{background:var(--accent)!important;border-color:var(--accent)!important;color:#fff!important;}
.btn[style*="background:#2980b9"]{background:var(--accent)!important;border-color:var(--accent)!important;}
#pdf-progress-bar{background:var(--accent)!important;}
/* 旧ベージュ系のインライン背景／グレー枠線を新トーンへ調和（色のみ差し替え） */
[style*="background:#f0f0ec"],[style*="background:#f4f4f0"],[style*="background:#f8f8f4"],
[style*="background:#fafaf8"],[style*="background:#f8f8f8"]{background:var(--line-soft)!important;}
[style*="border:1px solid #ddd"],[style*="border:1px solid #e0e0e0"],[style*="border:1px solid #eee"]{border-color:var(--line)!important;}

/* ── ステータスバッジ（カラーチップ） ── */
.badge{display:inline-block;font-size:11px;font-weight:700;line-height:1.7;padding:1px 9px;border-radius:999px;background:var(--line-soft);color:var(--muted);white-space:nowrap;}
.badge-green{background:var(--success-weak);color:#146e3c;}
.badge-red{background:var(--danger-weak);color:#ad3124;}
.badge-yellow{background:var(--warn-weak);color:#8f5106;}
.badge-orange{background:#fdeadd;color:#bb4c0c;}
.badge-blue{background:var(--accent-weak);color:#1f5fb0;}
.badge-grey{background:#eceff3;color:var(--muted);}

/* ── アイテムセット ── */
.item-set{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:16px;box-shadow:var(--shadow);}
.item-set-header{background:#f8fafd;padding:12px 16px;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--line);border-radius:var(--radius) var(--radius) 0 0;}
.set-num{background:var(--accent);color:#fff;border-radius:50%;width:24px;height:24px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0;}
.set-label{font-weight:600;font-size:14px;flex:1;color:var(--text);}
.item-set-body{padding:14px 16px;}
.item-row{display:grid;grid-template-columns:2.5fr 1fr 1fr 70px 1fr 1fr 1fr auto;gap:6px;align-items:end;margin-bottom:8px;padding-bottom:10px;border-bottom:1px solid var(--line-soft);}
.print-spots{background:var(--accent-weak);border-radius:var(--radius-sm);padding:10px 12px;margin-top:4px;}
.print-spot-row{display:grid;grid-template-columns:120px 130px 110px 120px 80px 80px auto;gap:6px;align-items:end;margin-bottom:6px;}
.spot-dot{width:8px;height:8px;background:var(--accent);border-radius:50%;flex-shrink:0;margin-bottom:12px;}

/* ── 右カラム明細 ── */
.estimate-panel{position:sticky;top:20px;}
.est-section-label{font-size:10px;font-weight:700;color:var(--faint);text-transform:uppercase;letter-spacing:0.08em;padding:4px 12px 2px;}
.est-row{display:flex;justify-content:space-between;align-items:baseline;padding:6px 12px;border-radius:6px;font-size:13px;}
.est-row:hover{background:var(--line-soft);}
.est-row-label{color:var(--muted);flex:1;}
.est-row-sub{font-size:11px;color:var(--faint);margin-left:4px;}
.est-row-amt{font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap;}
.est-indent{padding-left:20px;}
.est-divider{height:1px;background:var(--line-soft);margin:6px 0;}
.totals-area{background:#f8fafd;border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:14px 16px;margin-top:10px;}
.total-row{display:flex;justify-content:space-between;padding:3px 0;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums;}
.total-row.grand{font-size:20px;font-weight:700;color:var(--text);border-top:1px solid var(--line);margin-top:8px;padding-top:10px;}
.profit-area{display:none;margin-top:10px;background:var(--warn-weak);border:1px solid #f2d9ae;border-radius:var(--radius-sm);padding:12px 16px;}
.profit-label{font-size:11px;font-weight:700;color:var(--warn);text-transform:uppercase;letter-spacing:0.06em;margin-bottom:8px;}

/* ── 見積モード切替（一覧上部の新規作成ボタン） ── */
.est-mode-switch{display:inline-flex;align-items:center;gap:6px;padding:5px 8px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);}
.est-mode-label{font-size:12px;font-weight:700;color:var(--muted);margin-right:2px;white-space:nowrap;}
.est-mode-btn{cursor:pointer;font-size:13px;font-weight:700;padding:7px 14px;border-radius:var(--radius-sm);border:1px solid #d6dee8;background:var(--card);color:var(--text);transition:all .15s;white-space:nowrap;text-align:left;font-family:inherit;}
.est-mode-btn:hover{border-color:var(--accent);background:var(--accent-weak);}
.est-mode-btn--wear{border-color:var(--accent);background:var(--accent);color:#fff;}
.est-mode-btn--wear:hover{border-color:var(--accent-strong);background:var(--accent-strong);}
.est-mode-btn--web{border-color:#0e9f6e;background:#0e9f6e;color:#fff;}
.est-mode-btn--web:hover{border-color:#057a55;background:#057a55;color:#fff;}
.est-mode-hint{display:block;font-size:10px;font-weight:400;opacity:.8;}
@media(max-width:640px){.est-mode-switch{flex-wrap:wrap;}}

/* ── 品目検索ドロップダウン ── */
.search-wrap{position:relative;}
.search-drop{display:none;position:absolute;top:100%;left:0;right:0;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);box-shadow:var(--shadow-pop);z-index:300;max-height:220px;overflow-y:auto;}
.search-drop-item{padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--line-soft);font-size:13px;display:flex;justify-content:space-between;align-items:center;}
.search-drop-item:hover{background:var(--accent-weak);}
.search-drop-item:last-child{border-bottom:none;}

/* ── 検索付きドロップダウン（得意先等） ── */
.sel-wrap{position:relative;}
.sel-dropdown{display:none;position:absolute;top:100%;left:0;right:0;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);box-shadow:var(--shadow-pop);z-index:200;overflow:hidden;max-height:260px;overflow-y:auto;}
.sel-search{padding:8px 10px;border-bottom:1px solid var(--line-soft);position:sticky;top:0;background:var(--card);}
.sel-search input{border:1px solid #d6dee8;border-radius:6px;font-size:13px;padding:5px 8px;}
.sel-item{padding:9px 12px;cursor:pointer;font-size:13px;border-bottom:1px solid var(--line-soft);display:flex;justify-content:space-between;align-items:center;}
.sel-item:hover{background:var(--accent-weak);}
.sel-item-sub{font-size:11px;color:var(--faint);}

/* ── テーブル（薄ゼブラ＋行ホバー・数字は等幅） ── */
table{width:100%;font-size:13px;border-collapse:collapse;}
th{text-align:left;font-size:11px;font-weight:700;color:var(--muted);padding:8px 8px;border-bottom:1px solid var(--line);letter-spacing:.03em;}
td{padding:9px 8px;border-bottom:1px solid var(--line-soft);vertical-align:middle;font-variant-numeric:tabular-nums;}
tbody tr:nth-child(even) td{background:#f8fafc;}
tr:last-child td{border-bottom:none;}
tbody tr:hover td{background:#eef5fd;}
.td-num{text-align:right;font-variant-numeric:tabular-nums;}
.tag{display:inline-block;font-size:11px;padding:2px 6px;border-radius:5px;background:var(--line-soft);color:var(--muted);font-family:ui-monospace,Consolas,monospace;}

/* ── Login screen ── */
#login-screen{position:fixed;inset:0;background:radial-gradient(1100px 560px at 50% -12%,var(--accent-weak) 0%,var(--bg) 62%);z-index:9999;display:flex;align-items:center;justify-content:center;}
#login-box{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:40px 36px;width:360px;box-shadow:var(--shadow-pop);}
#login-box h2{font-size:20px;font-weight:800;margin-bottom:6px;text-align:center;letter-spacing:0.05em;color:var(--text);}
#login-subtitle{font-size:12px;color:var(--muted);text-align:center;margin-bottom:28px;}
#login-error{display:none;background:var(--danger-weak);border:1px solid #eccfcb;border-radius:var(--radius-sm);padding:10px 12px;margin-bottom:14px;font-size:12px;color:var(--danger);}
#login-box label{display:block;font-size:11px;color:var(--muted);font-weight:600;margin-bottom:4px;}
#login-box input{width:100%;padding:10px 12px;border:1px solid #d6dee8;border-radius:var(--radius-sm);font-size:14px;margin-bottom:14px;font-family:inherit;}
#login-box input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-weak);outline:none;}
#btn-do-login{width:100%;padding:11px;background:var(--accent);color:#fff;border:none;border-radius:var(--radius-sm);font-size:14px;font-weight:700;cursor:pointer;font-family:inherit;transition:background .15s;}
#btn-do-login:hover{background:var(--accent-strong);}
/* ── Viewer mode ─────────────────────────────────────────────── */
body.viewer-mode .admin-only{display:none!important;}
/* admin-strict: 管理者のみ表示（スタッフ・閲覧者からは隠す＝銀行/入金/会計/粗利/システム） */
body:not([data-role="admin"]) .admin-strict{display:none!important;}

/* ── トップへ戻る（全ページ共通の常駐ボタン） ───────────────── */
#back-to-top{position:fixed;right:22px;bottom:22px;z-index:900;width:46px;height:46px;border:1px solid var(--line);border-radius:50%;background:var(--card);color:var(--text);box-shadow:0 2px 6px rgba(23,32,52,.12),0 6px 18px rgba(23,32,52,.14);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:20px;line-height:1;opacity:0;visibility:hidden;transform:translateY(8px);transition:opacity .18s,transform .18s,visibility .18s,background .15s,box-shadow .15s;}
#back-to-top.show{opacity:1;visibility:visible;transform:translateY(0);}
#back-to-top:hover{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 3px 8px rgba(23,32,52,.16),0 10px 24px rgba(23,32,52,.18);}
#back-to-top:active{transform:translateY(1px);}
#back-to-top svg{width:20px;height:20px;display:block;}
@media print{#back-to-top{display:none!important;}}
@media(max-width:600px){#back-to-top{right:14px;bottom:14px;width:42px;height:42px;}}

/* ── スマホ対応（2026-07-12・タブレット/スマホの操作性） ─────────────
   方針: 列は潰さず「表は指で横スライド」。入力は16px(iOSの自動ズーム防止)。
   ボタンは指のサイズ(40px)を確保。デスクトップ表示には影響しない。 */
@media(max-width:760px){
  /* ヘッダー: 1行に収まらない分は折り返す */
  .header{height:auto;min-height:54px;flex-wrap:wrap;padding:8px 12px;gap:6px 10px;}
  .header-sub{flex-wrap:wrap;gap:6px 8px!important;}
  #today-str{display:none;}
  .hdr-btn{padding:6px 10px;font-size:11.5px;}
  /* ナビ */
  .nav{padding:0 6px;}
  .nav-group{padding:12px 10px;font-size:13px;}
  .nav-btn{padding:11px 12px;}
  .main{padding:14px 10px 60px;}
  .card{padding:14px 12px;}
  /* 入力: 16px未満だとiOSがフォーカス時に画面を拡大してしまう */
  input,select,textarea{font-size:16px;}
  .btn{padding:10px 14px;min-height:40px;}
  .btn-sm{padding:8px 10px;min-height:36px;font-size:12.5px;}
  .subtab-btn{padding:8px 16px;}
  /* 表: 列を潰さず横スクロールに */
  .panel table,.modal table{display:block;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .panel table thead,.panel table tbody,.panel table tfoot,
  .modal table thead,.modal table tbody,.modal table tfoot{display:table;width:100%;}
  .panel th,.panel td,.modal th,.modal td{white-space:nowrap;}
  /* フォームの多列グリッドを段階的に縮める */
  .grid3,.grid4{grid-template-columns:1fr 1fr;}
  .home-cols{grid-template-columns:1fr;}
  /* モーダルは画面内に収める（インラインstyleに勝つため!important） */
  .modal-content{max-width:96vw!important;width:96vw;padding:14px 12px!important;max-height:92vh!important;overflow-y:auto;}
  /* 見積右カラムの追従をやめて縦に流す */
  .estimate-panel{position:static;}
  /* パネル内のインラインflex(フィルタ行等)は折り返し許可 */
  .panel [style*="display:flex"],.modal [style*="display:flex"]{flex-wrap:wrap;}
  #login-box{width:min(360px,92vw);padding:32px 22px;}
}
@media(max-width:540px){
  .grid2,.grid3,.grid4{grid-template-columns:1fr;}
  .home-stats{grid-template-columns:1fr 1fr;gap:10px;}
  .home-stat{padding:13px 14px 12px;}
  .home-stat-num{font-size:22px;}
}
