:root{
  --ink:#12283A; --blue:#1E66B0; --blue-d:#17518C; --blue-l:#7FA6C9;
  --muted:#54677A; --faint:#7C8B9B; --line:#D3DEE9; --line2:#E4ECF3;
  --ground:#F2F7FB; --ground2:#F5F9FC; --nav:#E4ECF3; --card:#FFFFFF;
  --green:#2F6B4F; --amber:#B4761A; --red:#A8321C; --red-bg:#FBEDE9;
  --mono:'JetBrains Mono',ui-monospace,monospace;
}
*{box-sizing:border-box}
body{margin:0;background:var(--ground2);color:var(--ink);
     font-family:'Zen Kaku Gothic New',system-ui,sans-serif;
     font-size:14px;line-height:1.8;-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit;color:inherit}
h1,h2,h3{margin:0;font-weight:500}
a{color:var(--blue)}
.mono{font-family:var(--mono)}
[hidden]{display:none !important}

.brand{display:flex;align-items:center;gap:9px;font-size:15px;font-weight:500;
       letter-spacing:.02em;white-space:nowrap}
.brand .dot{width:17px;height:17px;border:2px solid var(--blue);border-radius:50%;
            display:grid;place-items:center;flex:none}
.brand .dot::after{content:"";width:7px;height:7px;background:var(--blue);border-radius:50%}

/* login */
.login{min-height:100vh;display:grid;place-items:center;padding:24px;
       background:linear-gradient(160deg,var(--ground) 0%,#fff 60%)}
.login-card{background:#fff;border:1px solid var(--line);border-radius:4px;
            padding:38px 34px;width:min(400px,100%);
            box-shadow:0 22px 60px rgba(18,40,58,.10)}
.login-lede{margin:8px 0 26px;color:var(--faint);font-size:12px;
            font-family:var(--mono);letter-spacing:.05em}
.login-card label{display:block;margin-bottom:16px;font-size:12.5px;color:var(--muted)}
.login-card input{display:block;width:100%;margin-top:6px;padding:10px 12px;
                  border:1px solid var(--line);border-radius:3px;background:#fff}
.login-card input:focus{outline:2px solid var(--blue-l);outline-offset:-1px}
.login-card button{width:100%;margin-top:8px}

/* chrome */
header{display:flex;align-items:center;gap:20px;padding:0 22px;height:56px;
       background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}
nav{display:flex;gap:2px;margin-left:8px;flex:1;overflow:auto}
nav button{background:none;border:none;padding:8px 15px;border-radius:3px;
           color:var(--muted);cursor:pointer;white-space:nowrap}
nav button:hover{background:var(--ground)}
nav button.on{background:var(--nav);color:var(--ink);font-weight:500}
.who{color:var(--faint);font-size:12.5px;display:flex;align-items:center;gap:10px}
.link{background:none;border:none;color:var(--blue);cursor:pointer;padding:0;
      text-decoration:underline}
main{padding:26px 22px 80px;max-width:1180px;margin:0 auto}

/* building blocks */
.card{background:#fff;border:1px solid var(--line);border-radius:4px;padding:20px 22px;
      margin-bottom:16px}
.card h2{font-size:15px;margin-bottom:4px}
.card .sub{color:var(--faint);font-size:12.5px;margin-bottom:14px}
.row{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.grid{display:grid;gap:16px}
.g2{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}
.btn{padding:9px 18px;border:1px solid var(--line);border-radius:3px;background:#fff;
     cursor:pointer;white-space:nowrap}
.btn:hover{background:var(--ground)}
.btn-primary{background:var(--blue);border-color:var(--blue);color:#fff}
.btn-primary:hover{background:var(--blue-d)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn-sm{padding:5px 11px;font-size:12.5px}
label.f{display:block;margin-bottom:12px;font-size:12.5px;color:var(--muted)}
label.f input,label.f select,label.f textarea{display:block;width:100%;margin-top:5px;
  padding:9px 11px;border:1px solid var(--line);border-radius:3px;background:#fff}
label.f textarea{font-family:var(--mono);font-size:12.5px;min-height:120px}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 18px;font-size:13px}
.kv b{font-weight:400;color:var(--faint)}
.stat b{display:block;font-family:var(--mono);font-size:26px;font-weight:500;line-height:1.3}
.stat span{font-size:12px;color:var(--faint)}
.pill{display:inline-block;padding:2px 9px;border-radius:2px;font-size:11px;
      font-family:var(--mono)}
.pill.ok{background:#E8F1EC;color:var(--green)}
.pill.warn{background:#FBF2E3;color:var(--amber)}
.pill.bad{background:var(--red-bg);color:var(--red)}
.pill.mute{background:var(--ground);color:var(--faint)}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--line2);
      vertical-align:top}
th{background:var(--ground);color:var(--muted);font-weight:500;font-size:12px;
   position:sticky;top:0}
td.n,th.n{text-align:right;font-family:var(--mono);white-space:nowrap}
.scroll{overflow:auto;max-height:460px;border:1px solid var(--line);border-radius:3px}
.empty{text-align:center;padding:52px 20px;color:var(--faint)}
.empty b{display:block;color:var(--ink);font-weight:500;margin-bottom:8px;font-size:15px}
.empty p{max-width:34em;margin:0 auto 20px}
.error{background:var(--red-bg);border-left:3px solid var(--red);color:var(--red);
       padding:11px 14px;border-radius:2px;margin-top:12px;font-size:13px}
.notice{background:var(--ground);border-left:3px solid var(--blue);padding:11px 14px;
        border-radius:2px;margin:12px 0;font-size:13px;color:var(--muted)}
.busy{color:var(--faint);font-size:13px;padding:14px 0}
.busy::before{content:"";display:inline-block;width:9px;height:9px;margin-right:8px;
  border:2px solid var(--line);border-top-color:var(--blue);border-radius:50%;
  animation:spin .8s linear infinite;vertical-align:-1px}
@keyframes spin{to{transform:rotate(360deg)}}

/* screens */
.cards3{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:16px}
.pick{background:#fff;border:1px solid var(--line);border-radius:4px;padding:26px 22px;
      cursor:pointer;text-align:left;transition:border-color .15s,box-shadow .15s}
.pick:hover{border-color:var(--blue-l);box-shadow:0 10px 26px rgba(18,40,58,.07)}
.pick .ico{font-size:26px;line-height:1}
.pick b{display:block;margin:12px 0 5px;font-weight:500}
.pick span{color:var(--faint);font-size:12.5px}
.drop{border:2px dashed var(--line);border-radius:4px;padding:44px 20px;text-align:center;
      color:var(--faint);background:var(--ground2);cursor:pointer}
.drop.over{border-color:var(--blue);background:var(--ground)}
.split{display:grid;grid-template-columns:minmax(200px,260px) 1fr;gap:16px;
       align-items:start}
@media(max-width:820px){.split{grid-template-columns:1fr}}
.list{background:#fff;border:1px solid var(--line);border-radius:4px;overflow:hidden}
.list button{display:block;width:100%;text-align:left;background:none;border:none;
             padding:9px 14px;cursor:pointer;border-bottom:1px solid var(--line2);
             font-size:13px}
.list button:hover{background:var(--ground2)}
.list button.on{background:var(--nav);font-weight:500}
.list .head{padding:8px 14px;background:var(--ground);color:var(--faint);font-size:11px;
            font-family:var(--mono);letter-spacing:.08em;border-bottom:1px solid var(--line2)}
.score-hero{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap}
.score-hero b{font-family:var(--mono);font-size:56px;font-weight:500;line-height:1;
              color:var(--blue)}
.finding{border-left:3px solid var(--line);padding:2px 0 2px 15px;margin:16px 0}
.finding.high{border-color:var(--red)}
.finding.mid{border-color:var(--amber)}
.finding.low{border-color:var(--blue-l)}
.finding b{display:block;font-weight:500}
.finding .body{color:var(--muted);font-size:13px}
.finding .act{color:var(--blue);font-size:13px;margin-top:5px}
.bar{height:5px;background:var(--line2);border-radius:3px;overflow:hidden;margin-top:6px}
.bar i{display:block;height:100%;background:var(--blue)}
.evidence{background:var(--ground);border:1px solid var(--line);border-radius:3px;
          padding:14px 16px;margin-top:14px;font-size:13px}
.evidence summary{cursor:pointer;color:var(--muted);font-size:12.5px}
.answer{font-size:17px;line-height:1.9;white-space:pre-wrap}

/* ---- モーション ---------------------------------------------------------
   画面が入れ替わったことが分かる程度に留める。業務画面で派手に動くと、
   作業の邪魔になるだけでなく、変化そのものが見落とされる。 */
@keyframes riseIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes fillBar{from{width:0}}
@keyframes pulseSoft{0%,100%{opacity:.45}50%{opacity:1}}
@keyframes popIn{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}

main > *{animation:riseIn .28s ease both}
main > *:nth-child(2){animation-delay:.03s}
main > *:nth-child(3){animation-delay:.06s}
main > *:nth-child(4){animation-delay:.09s}
.bar i{animation:fillBar 1.1s cubic-bezier(.22,1,.36,1) both}
.busy{animation:pulseSoft 1.4s ease-in-out infinite}
.score-hero b{animation:popIn .5s cubic-bezier(.22,1,.36,1) both}
.finding{animation:riseIn .3s ease both}
.finding:nth-child(2){animation-delay:.04s}
.finding:nth-child(3){animation-delay:.08s}
.finding:nth-child(4){animation-delay:.12s}
.card,.pick{transition:box-shadow .25s ease,transform .25s ease,border-color .2s ease}
.pick:active{transform:translateY(1px)}
nav button{transition:background .18s ease,color .18s ease}
.btn{transition:background .18s ease,border-color .18s ease,transform .12s ease}
.btn:active{transform:translateY(1px)}
tbody tr{transition:background .15s ease}
tbody tr:hover{background:var(--ground2)}
.list button{transition:background .15s ease,padding-left .15s ease}
.list button:hover{padding-left:17px}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation:none !important;transition:none !important}
}

/* ---- 小さい画面 ---------------------------------------------------------
   1 行に詰め込むと、狭い画面でロゴと利用者名がナビの上に重なり、
   タブが押せなくなる（実測で全滅）。行を分ける。 */
@media(max-width:820px){
  header{height:auto;flex-wrap:wrap;padding:0 14px;row-gap:0}
  header .brand{order:1;height:52px;display:flex;align-items:center}
  header .who{order:2;margin-left:auto;height:52px;display:flex;align-items:center;
              font-size:11.5px;max-width:52vw;overflow:hidden;white-space:nowrap;
              text-overflow:ellipsis}
  header nav{order:3;flex:0 0 100%;margin:0 -14px;padding:0 8px 6px;
             border-top:1px solid var(--line2);overflow-x:auto;
             -webkit-overflow-scrolling:touch}
  header nav::-webkit-scrollbar{display:none}
  nav button{padding:9px 13px}
  main{padding:18px 14px 70px}
  .card{padding:16px 15px}
  .split{grid-template-columns:1fr}
  .score-hero b{font-size:42px}
  .grid.g3{grid-template-columns:1fr 1fr}
  .cards3{grid-template-columns:1fr}
  table{font-size:12.5px}
  th,td{padding:8px 10px}
  .login-card{padding:30px 22px}
}
@media(max-width:460px){
  .grid.g3,.grid.g2{grid-template-columns:1fr}
  header .who .link{display:none}
}

/* 公開デモ (/app/?demo=1)。**閲覧のみであることを黙っておかない。**
   実データが動く画面と見分けが付かないほうが、あとで問題になる。 */
.demo-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
          padding:9px 22px;background:#12283A;color:#C2D2E0;font-size:12.5px;
          border-bottom:1px solid #1B3B54}
.demo-bar b{color:#fff;font-weight:500}
.demo-bar a{color:#7FA6C9;margin-left:auto;white-space:nowrap}
.is-demo header{position:sticky;top:0;z-index:5}


/* 狭い画面。LP のデモ枠の中がちょうどこの幅で、タブが「届け…」で切れていた。
   畳むほどの数ではないので、横に流して指で送れるようにする。 */
@media (max-width:820px){
  header{height:auto;flex-wrap:wrap;gap:10px;padding:10px 14px}
  header nav{order:3;width:100%;display:flex;gap:4px;
             overflow-x:auto;-webkit-overflow-scrolling:touch;
             scrollbar-width:none}
  header nav::-webkit-scrollbar{display:none}
  header nav button{white-space:nowrap;flex:none;padding:9px 13px}
  .who{margin-left:auto;font-size:11.5px}
  main{padding:14px}
}
@media (max-width:520px){
  .demo-bar{padding:9px 14px;font-size:11.5px}
  .demo-bar a{margin-left:0}
}
