/* 決め 181 手 1(2026-10-21): 訪販 single の土台 v2。app.css(v1)のあとに読み、画面の殻(上のメニュー・下のメニュー・文字の大きさ)を差し替える。
   v1 の画面の中身(表・フォーム)は v1 の CSS のまま動く(手 2 以降で置き換える) */
:root{--v2-font:15px; --v2-font-sp:15.5px; --appbar-h:56px; --bottomnav-h:66px;}
body.v2{font-size:var(--v2-font); line-height:1.6;}
body.v2 .page{max-width:1180px; margin:0 auto; padding:22px 20px 40px;}
/* 上 */
.v2top{background:var(--color-navy); color:#fff; height:var(--appbar-h); position:sticky; top:0; z-index:20;}
.v2top__in{max-width:1180px; margin:0 auto; height:100%; display:flex; align-items:center; gap:14px; padding:0 20px;}
.v2top__brand{color:#fff; text-decoration:none; font-weight:700; font-size:15px; white-space:nowrap; display:flex; align-items:center; gap:8px;}
.v2top__brand .appbar__mark{display:inline-flex; width:28px; height:28px; border-radius:7px; background:#fff; align-items:center; justify-content:center; overflow:hidden;}
.v2top__brand .appbar__mark img{width:22px; height:22px; object-fit:contain;}
.v2nav{display:flex; gap:2px; margin-left:10px;}
.v2nav a{color:#fff; text-decoration:none; padding:8px 14px; border-radius:8px; font-size:14px; opacity:.85;}
.v2nav a[aria-current="page"]{background:rgba(255,255,255,.14); opacity:1; font-weight:700;}
.v2top__sp{flex:1;}
.v2top__user{display:flex; align-items:center; gap:10px; font-size:13px; opacity:.95;}
.v2top__user b{display:inline-flex; width:28px; height:28px; border-radius:50%; background:#2f4f86; align-items:center; justify-content:center; font-size:12px; font-weight:700;}
.v2top__logout{background:none; border:1px solid rgba(255,255,255,.4); color:#fff; border-radius:8px; padding:6px 10px; font-size:13px; cursor:pointer;}
.demo-badge{font-size:11px; background:#f79009; color:#fff; border-radius:999px; padding:2px 8px; margin-left:6px;}
/* 見出し・カード */
.v2h1{font-size:21px; margin:0 0 4px; font-weight:700;}
.v2lead{color:var(--color-text-sub); font-size:13.5px; margin:0 0 18px;}
.v2grid{display:grid; gap:14px;} .v2g2{grid-template-columns:repeat(2,1fr);} .v2g3{grid-template-columns:repeat(3,1fr);}
.v2card{background:#fff; border:1px solid var(--color-border); border-radius:12px; padding:16px 18px; box-shadow:var(--shadow);}
.v2card h2{font-size:14px; margin:0 0 10px; color:var(--color-text-sub); font-weight:700;}
.todo{display:flex; align-items:center; gap:14px; text-decoration:none; color:inherit;}
.todo:hover{box-shadow:0 2px 6px rgba(16,24,40,.08);}
.todo .n{font-size:30px; font-weight:700; line-height:1; min-width:48px;}
.todo .t{font-size:14px; font-weight:700;} .todo .s{font-size:12.5px; color:var(--color-text-sub);}
.todo .go{margin-left:auto; color:var(--color-primary); font-weight:700; font-size:13px; white-space:nowrap;}
.todo.or .n{color:#b35c00;} .todo.pu .n{color:var(--color-purple);} .todo.gr .n{color:#0a7a46;} .todo.p .n{color:var(--color-primary-dark);} .todo.gy .n{color:var(--color-text-sub);}
.v2btn{display:inline-flex; align-items:center; justify-content:center; gap:6px; background:var(--color-primary); color:#fff; border:1.5px solid var(--color-primary); border-radius:10px; padding:11px 18px; font-size:15px; font-weight:700; text-decoration:none; min-height:44px; white-space:nowrap; cursor:pointer;}
.v2btn.big{width:100%; padding:15px 24px; font-size:16px;} .v2btn.sec{background:#fff; color:var(--color-text); border-color:var(--color-border);}
.v2row{display:flex; gap:10px; align-items:center; flex-wrap:wrap;}
.v2dl{display:grid; grid-template-columns:max-content 1fr; gap:9px 12px; font-size:14px;} .v2dl dt{color:var(--color-text-sub); white-space:nowrap;} .v2dl dd{margin:0;}   /* 10/22 気づき 3: 契約番号を折らない */
.v2since{display:block; white-space:nowrap; font-size:12.5px; color:var(--color-text-sub);}   /* 10/22 残り 1: 「締結から N 時間/N 日」はお客様名と 2 行に分け、必ず 1 行 */
/* 10/22 U7 の気づき: iPhone(WebKit)の date の欄は自分の幅を持ち、-webkit-appearance が残ると width:100% が効かず、枠からはみ出して画面が横に動く。
   幅に関係なく v2 では「見た目を外して(appearance:none)ブロックで枠の幅まで」。空のときに高さが変わらないよう min-height。中の文字は左寄せ */
body.v2 input[type=date], body.v2 input[type=time], body.v2 input[type=datetime-local]{-webkit-appearance:none; appearance:none; display:block; box-sizing:border-box; width:100%; max-width:100%; min-width:0; min-height:44px; background:#fff; text-align:left;}
body.v2 input[type=date]::-webkit-date-and-time-value, body.v2 input[type=time]::-webkit-date-and-time-value, body.v2 input[type=datetime-local]::-webkit-date-and-time-value{text-align:left; min-height:1.4em;}
/* 横のはみ出しの保険は html と body の両方(iOS は body だけでは効かないことがある)。中身の直しが本体で、これは保険 */
html.v2, body.v2{overflow-x:clip;}
.v2pill{display:inline-block; border-radius:999px; padding:3px 10px; font-size:12px; font-weight:700; white-space:nowrap; background:var(--color-gray-pale); color:var(--color-text-sub);}
.v2pill.blue{background:var(--color-primary-pale); color:var(--color-primary-dark);} .v2pill.green{background:var(--color-green-pale); color:#0a7a46;}
.v2pill.orange{background:var(--color-orange-pale); color:#b35c00;} .v2pill.purple{background:var(--color-purple-pale); color:#5b3fb0;} .v2pill.red{background:var(--color-red-pale); color:#b42318;}
.v2sub{display:flex; gap:4px; border-bottom:1px solid var(--color-border); margin:0 0 14px; overflow-x:auto;}
.v2sub a{padding:10px 13px; font-size:14px; color:var(--color-text-sub); text-decoration:none; border-bottom:2px solid transparent; white-space:nowrap; font-weight:600;}
.v2sub a[aria-current="page"]{color:var(--color-primary); border-color:var(--color-primary); font-weight:700;}
.v2side{display:grid; grid-template-columns:230px 1fr; gap:18px; align-items:start;}
.v2side--settings{grid-template-columns:280px 1fr;}   /* 10/22 気づき 8: 「記録の取得(一括ダウンロード)」が折れない幅 */
.v2menu{background:#fff; border:1px solid var(--color-border); border-radius:12px; padding:8px;}
.v2menu .h{font-size:11.5px; color:var(--color-text-sub); padding:12px 12px 4px; font-weight:700;}
.v2menu a{display:block; padding:10px 12px; border-radius:8px; font-size:14px; color:var(--color-text); text-decoration:none;}
.v2menu a[aria-current="page"]{background:var(--color-primary-pale); color:var(--color-primary-dark); font-weight:700;}
.v2menu a .lk{float:right; font-size:11px; color:var(--color-text-sub);}
.v2table{width:100%; border-collapse:collapse; font-size:14px;} .v2table th{text-align:left; color:var(--color-text-sub); font-weight:700; font-size:12.5px; padding:8px 10px; border-bottom:1px solid var(--color-border);}
.v2table td{padding:12px 10px; border-bottom:1px solid var(--color-border-soft); vertical-align:top;}
.v2notice{border-radius:10px; padding:12px 14px; font-size:14px; margin:0 0 14px; background:var(--color-primary-pale); color:var(--color-primary-dark);}
.v2cards{display:none;}
/* 下のメニュー(スマホ) */
.v2bottom{display:none;}
@media (max-width:640px){
  /* 10/22 気づき 2: 本文の下に「下のタブ+丸ボタン(上に 30px はみ出す)+safe-area」の分の余白。気づき 1: 横のはみ出しを画面に出さない(中身の直しは下) */
  body.v2{font-size:var(--v2-font-sp); padding-bottom:calc(var(--bottomnav-h) + 44px + env(safe-area-inset-bottom));}
  body.v2 .page{padding:14px 14px 30px;}
  body.v2 .sitefoot{padding-bottom:12px;}
  /* 10/22 気づき 1: 日付の入力欄は枠の幅まで(iPhone の Safari は date の入力欄が縮まない)。横に並べた入力の組はスマホでは 1 列 */
  body.v2 input[type=number], body.v2 select{min-width:0; width:100%; max-width:100%; box-sizing:border-box;}
  body.v2 .field > div[style*="flex"] > div[style*="min-width"]{flex:1 1 100% !important; min-width:0 !important;}
  body.v2 .v2table, body.v2 .tblwrap{max-width:100%; overflow-x:auto;}
  body.v2 .card{overflow-x:auto;}   /* 10/22: v1 の画面の広い表(利用者など)はカードの中で横に動かす(画面は動かさない) */
  /* 10/22 気づき 2: 入力中の画面(下に formbar がある)では丸ボタンを出さない。formbar は下のタブの上に */
  body.v2:has(.formbar) .v2bottom a.add, body.v2.v2--noadd .v2bottom a.add{display:none;}
  body.v2 .formbar{bottom:calc(var(--bottomnav-h) + 8px + env(safe-area-inset-bottom)); z-index:20;}
  /* 10/22 気づき 4: 「その他」のボタンは右下なので、引き出しは右から */
  body.v2 .drawer__panel{left:auto; right:0; border-radius:18px 0 0 18px;}
  .v2top{height:54px;} .v2top__in{padding:0 14px;} .v2nav, .v2top__user span, .v2top__logout{display:none;}
  .v2g2, .v2g3, .v2side, .v2side--settings{grid-template-columns:1fr;} .v2dl{grid-template-columns:max-content 1fr; gap:8px 10px;}
  .todo .n{font-size:26px;}
  .v2table.v2cardify{display:none;} .v2cards{display:block;}
  .v2ccard{background:#fff; border:1px solid var(--color-border); border-radius:12px; padding:12px 14px; margin:0 0 10px; box-shadow:var(--shadow);}
  .v2ccard .no{font-weight:700; color:var(--color-primary-dark); font-size:15px;} .v2ccard .sub{font-size:13px; color:var(--color-text-sub); margin-top:4px;}
  .v2side--settings .v2card{display:none;} .v2side--settings .v2menu a{padding:14px 12px; border-bottom:1px solid var(--color-border-soft); font-size:15px;}
  .v2side--settings .v2menu a:after{content:"›"; float:right; color:var(--color-text-sub);}
  .v2bottom{display:flex; position:fixed; left:0; right:0; bottom:0; background:#fff; border-top:1px solid var(--color-border); height:var(--bottomnav-h); justify-content:space-around; align-items:center; z-index:30; padding-bottom:env(safe-area-inset-bottom);}
  .v2bottom a, .v2bottom button{text-align:center; font-size:11px; color:var(--color-text-sub); flex:1; text-decoration:none; background:none; border:0; font-family:inherit; cursor:pointer;}
  .v2bottom a[aria-current="page"]{color:var(--color-primary); font-weight:700;}
  .v2bottom i{display:block; font-style:normal; font-size:19px; line-height:1.1;} .v2bottom i svg{display:block; margin:0 auto 1px;}
  .v2bottom button[aria-current="page"]{color:var(--color-primary); font-weight:700;}
  .v2bottom a.add i{display:flex; width:52px; height:52px; border-radius:50%; background:var(--color-primary); color:#fff; align-items:center; justify-content:center; font-size:30px; margin:-30px auto 2px; box-shadow:0 4px 10px rgba(21,94,239,.35);}
  .bottomnav{display:none !important;}   /* v1 の下のメニューは出さない */
}
/* 決め 181 手 2(2026-10-22): 契約の一覧(状態の群のタブ・5 列・次にやること)と詳細の頭(帯・次にやること) */
.v2tabs{display:flex; gap:6px; margin:-6px 0 12px; overflow-x:auto; padding-bottom:4px; -webkit-overflow-scrolling:touch;}
.v2tabs a{white-space:nowrap; padding:7px 12px; border-radius:999px; border:1px solid var(--color-border); background:#fff; color:var(--color-text-sub); font-size:13.5px; text-decoration:none; font-weight:600;}
.v2tabs a i{font-style:normal; font-size:12px; opacity:.8; margin-left:2px;}
.v2tabs a[aria-current="page"]{background:var(--color-primary); border-color:var(--color-primary); color:#fff;}
.v2filter{display:flex; flex-wrap:wrap; gap:10px 12px; align-items:flex-end; margin:0 0 12px;}
.v2f{display:flex; flex-direction:column; gap:4px; font-size:12.5px; color:var(--color-text-sub); min-width:0;}
.v2f input, .v2f select{font:inherit; font-size:14px; color:var(--color-text); border:1px solid var(--color-border); border-radius:10px; padding:9px 11px; min-height:42px; background:#fff; box-sizing:border-box;}
.v2f--q{flex:1 1 240px;} .v2f--q input{width:100%;} .v2f--n input{width:120px;} .v2f--act{flex-direction:row; align-items:center; gap:8px;}
.v2listcard{padding:0 6px;}
.v2list td small, .v2no small{display:block; font-weight:400; color:var(--color-text-sub); font-size:12.5px; margin-top:2px;}
.v2no a{font-weight:700; color:var(--color-primary-dark); text-decoration:none; white-space:nowrap;}
.v2next{font-size:13.5px;} .v2next b{display:block; font-weight:700;} .v2next small{display:block; color:var(--color-text-sub); font-size:12.5px; margin-top:2px;}
.v2next.due b{color:#b35c00;} .v2next.now b{color:var(--color-primary-dark);}
.v2act{text-align:right; white-space:nowrap;} .v2btn.small{padding:7px 12px; min-height:36px; font-size:13px;}
.v2muted{color:var(--color-text-sub);} .v2empty{color:var(--color-text-sub); padding:18px 10px;}
.v2pager{display:flex; flex-wrap:wrap; align-items:center; gap:10px 16px; padding:12px 10px; font-size:13.5px; color:var(--color-text-sub);} .v2pager p{margin:0;}
.v2pager__nav{display:flex; gap:10px; align-items:center;} .v2pager__nav a{color:var(--color-primary); text-decoration:none; font-weight:700;} .v2pager__nav span[aria-hidden]{opacity:.45;}
.v2pager form{margin-left:auto;} .v2pager select{font:inherit; font-size:13.5px; border:1px solid var(--color-border); border-radius:8px; padding:6px 8px; background:#fff;}
.v2band{display:flex; list-style:none; margin:0 0 14px; padding:0; gap:4px; overflow-x:auto; font-size:12.5px;}
.v2band li{flex:1 0 auto; text-align:center; padding:8px 10px; border-radius:8px; background:var(--color-gray-pale); color:var(--color-text-sub); white-space:nowrap; counter-increment:band;}
.v2band li.is-done{background:var(--color-green-pale); color:#0a7a46;} .v2band li.is-on{background:var(--color-primary); color:#fff; font-weight:700;}
.v2nextcard{border-color:var(--color-primary); margin:0 0 14px;}
@media (max-width:640px){
  .v2filter{gap:8px;} .v2f{flex:1 1 46%;} .v2f--q{flex-basis:100%;} .v2f--n input{width:100%;} .v2f--act{flex-basis:100%;}
  .v2f input, .v2f select{width:100%;}
  .v2listcard{padding:8px 10px;}
  .v2ccard .no{text-decoration:none;}
  .v2pager form{margin-left:0;}
}
/* 決め 181 手 3(2026-10-23): 新規契約の 4 段 */
.v2steps{display:flex; gap:6px; list-style:none; margin:0 0 14px; padding:0; flex-wrap:nowrap; overflow-x:auto; font-size:12.5px; color:var(--color-text-sub);}
.v2steps li{display:inline-flex; align-items:center; gap:5px; padding:6px 11px; border-radius:999px; background:var(--color-gray-pale); white-space:nowrap;}
.v2steps li b{font-weight:700;} .v2steps li em{font-style:normal;}
.v2btn[disabled]{opacity:.45; cursor:not-allowed;} .v2steps li.on{background:var(--color-primary); color:#fff; font-weight:700;} .v2steps li.ok{background:var(--color-green-pale); color:#0a7a46;}
.v2steps li.ok b:before{content:"✓ ";}
.v2side--new{grid-template-columns:1fr 300px;} .v2after{align-self:start;}
.v2step[hidden]{display:none;}
.v2form .v2card h2 .v2sub2{display:block; font-weight:400; font-size:12.5px; color:var(--color-text-sub); margin-top:2px;}
.v2form .v2f{margin:0 0 12px;} .v2form .v2f > span{font-weight:700; color:var(--color-text); font-size:13.5px;} .v2form .v2f.req > span:after{content:" 必須"; color:#b42318; font-size:11px; margin-left:4px;}
.v2form .v2f input, .v2form .v2f select{width:100%; max-width:100%; font-size:16px; min-height:46px;} .v2form .v2f small{color:var(--color-text-sub); font-size:12.5px;}
.v2form .v2faint{opacity:.8;} .v2more summary{color:var(--color-primary); cursor:pointer; font-size:14px; margin:4px 0 10px;}
.v2grid.v2g3 .v2f{min-width:0;}
.v2chk{display:block; margin-top:6px; font-size:14px;} .v2notice.warn{background:#fff6e5; color:#7a4a00; border:1.5px solid #e0a93b;}
.v2stepnav{margin-top:14px; gap:8px;} .v2alert{color:#b42318;}
.v2opt{display:flex; flex-direction:column; gap:8px;} .v2opt label{display:flex; gap:10px; align-items:flex-start; border:1.5px solid var(--color-border); border-radius:10px; padding:12px; font-size:15px; background:#fff; cursor:pointer;}
.v2opt label:has(input:checked){border-color:var(--color-primary); background:var(--color-primary-pale);} .v2opt input{margin-top:3px; width:18px; height:18px; flex:none;} .v2opt small{display:block; color:var(--color-text-sub); font-size:12.5px;}
.v2sum{display:grid; grid-template-columns:140px 1fr; gap:8px 12px; font-size:14px; margin:0;} .v2sum dt{color:var(--color-text-sub);} .v2sum dd{margin:0;} .v2sum .ed{float:right; color:var(--color-primary); font-size:13px; text-decoration:none; margin-left:8px;}
.v2opt3{display:grid; grid-template-columns:repeat(3,1fr); gap:10px;} .v2opt3 label{border:1.5px solid var(--color-border); border-radius:12px; padding:14px; text-align:center; background:#fff; cursor:pointer; position:relative;}
.v2opt3 label:has(input:checked){border-color:var(--color-primary); background:var(--color-primary-pale);} .v2opt3 label:has(input:disabled){opacity:.5; cursor:default;}
.v2opt3 input{position:absolute; opacity:0; width:0; height:0;} .v2opt3 b{display:block; font-size:15px; margin-bottom:4px;} .v2opt3 small{color:var(--color-text-sub); font-size:12.5px;}
.v2issues ul, .v2ul{margin:0; padding-left:20px; font-size:14px;} .v2issues li{margin:4px 0;}
.v2dl--after{grid-template-columns:28px 1fr;}
.v2qr svg{width:220px; height:220px;} .v2url{font-size:13px; border:1px solid var(--color-border); border-radius:8px; padding:8px 10px; width:100%; max-width:420px; box-sizing:border-box;}
@media (max-width:640px){
  .v2side--new{grid-template-columns:1fr;}
  /* 10/23 taka さんの直し: 段の札はスマホで 1 行=今の段だけ言葉、ほかは番号だけ */
  .v2steps li:not(.on) em{display:none;} .v2steps li{padding:6px 10px;}
  .v2sum{grid-template-columns:1fr;} .v2sum dt{font-size:12.5px; margin-top:4px;}
  .v2opt3{grid-template-columns:1fr;} .v2stepnav{flex-wrap:wrap;} .v2stepnav .v2btn{flex:1 1 auto;}
}
