:root{--bg:#f8f3eb;--panel:#fffaf3;--line:rgba(139,99,57,.18);--brown:#7c5633;--brown2:#3d2815;--muted:#9b7755;--blue:#4c78a8;--green:#5a8a5a;--orange:#c0784a;--shadow:0 18px 40px rgba(61,40,21,.08)}
*{box-sizing:border-box}body{margin:0;background:var(--bg);font-family:-apple-system,BlinkMacSystemFont,"Hiragino Sans","Yu Gothic",Meiryo,sans-serif;color:var(--brown2)}.shell{display:grid;grid-template-columns:250px 1fr;min-height:100vh}.sidebar{background:#fbf6ef;border-right:1px solid var(--line);padding:22px 16px;position:sticky;top:0;height:100vh;overflow:auto}.brand{display:flex;gap:12px;align-items:center;margin-bottom:26px}.brand-mark{width:42px;height:42px;border-radius:14px;background:var(--brown);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:20px;box-shadow:var(--shadow)}.brand h1{font-size:18px;margin:0;letter-spacing:.08em}.brand p{margin:2px 0 0;color:var(--muted);font-size:12px}.side-title{font-size:11px;color:var(--muted);letter-spacing:.12em;margin-bottom:10px}.area{border:1px solid var(--line);border-radius:14px;margin-bottom:12px;overflow:hidden;background:#fffaf3}.area-btn{width:100%;border:0;background:#fff3e5;padding:12px 12px;text-align:left;font-weight:700;color:var(--brown2);cursor:pointer}.area-btn.active{background:var(--brown);color:white}.store-btn{display:block;width:100%;border:0;border-top:1px solid rgba(139,99,57,.1);background:transparent;text-align:left;padding:10px 15px 10px 24px;color:#654320;cursor:pointer}.store-btn:hover,.store-btn.active{background:#eadbc5;font-weight:700}.side-note{font-size:12px;line-height:1.55;color:var(--muted);background:#fffaf3;border:1px solid var(--line);padding:14px;border-radius:14px;margin-top:18px}.main{padding:24px;overflow:auto}.topbar{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:18px}.eyebrow{text-transform:uppercase;letter-spacing:.16em;color:var(--muted);font-size:11px;font-weight:700}h2{margin:4px 0 0;font-size:28px}.controls{display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.controls label{font-size:12px;color:var(--muted);display:flex;gap:6px;align-items:center}.controls input,.controls select{border:1px solid var(--line);background:#fffaf3;border-radius:10px;padding:9px;color:var(--brown2)}.check input{accent-color:var(--brown)}button#refreshBtn{border:0;background:var(--brown);color:#fff;border-radius:10px;padding:10px 15px;font-weight:700;cursor:pointer}.summary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:16px}.metric-card{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:18px;box-shadow:var(--shadow)}.metric-card span{display:block;font-size:12px;color:var(--muted);margin-bottom:8px}.metric-card strong{font-size:22px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:18px;box-shadow:var(--shadow);margin-bottom:16px}.panel-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:14px}.panel h3{margin:0;font-size:18px}.panel p{margin:0;color:var(--muted);font-size:12px}.forecast-cards{display:grid;grid-template-columns:repeat(7,1fr);gap:10px}.day-card{background:#fff3e5;border:1px solid rgba(139,99,57,.16);border-radius:16px;padding:13px 10px;cursor:pointer;transition:.15s;min-height:122px}.day-card:hover{transform:translateY(-2px);box-shadow:0 12px 25px rgba(61,40,21,.11)}.day-card.active{background:var(--brown);color:#fff}.day-card.rain{background:#edf4fb;border-color:rgba(76,120,168,.25)}.day-card.active.rain{background:var(--blue)}.day-date{font-size:12px;color:var(--muted);margin-bottom:6px}.day-card.active .day-date{color:#f6e8d8}.day-weather{font-size:20px;margin-bottom:6px}.day-main{font-weight:800;font-size:18px;margin-bottom:4px}.day-sub{font-size:12px;color:#8b6339}.day-card.active .day-sub{color:#f6e8d8}.detail-grid{display:grid;grid-template-columns:1.8fr .9fr;gap:16px}.detail-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}.dm{background:#f0e3d0;border-radius:14px;padding:13px}.dm span{display:block;color:var(--muted);font-size:11px;margin-bottom:6px}.dm strong{font-size:20px}.chart-wrap{height:330px}.peak-list{display:flex;flex-direction:column;gap:10px}.peak{display:flex;align-items:center;gap:12px;background:#fff3e5;border:1px solid rgba(139,99,57,.14);border-radius:14px;padding:12px}.rank{width:28px;height:28px;border-radius:50%;background:var(--brown);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800}.peak-time{font-weight:800;flex:1}.peak-value{color:var(--muted);font-size:13px}.weather-box{margin-top:15px;background:#f0e3d0;border-radius:16px;padding:14px;color:#5e3d1e;font-size:13px;line-height:1.8}.loading{opacity:.55;pointer-events:none}@media(max-width:1100px){.shell{grid-template-columns:1fr}.sidebar{height:auto;position:relative}.summary-grid,.detail-metrics{grid-template-columns:repeat(2,1fr)}.forecast-cards{grid-template-columns:repeat(2,1fr)}.detail-grid{grid-template-columns:1fr}.topbar{display:block}.controls{justify-content:flex-start;margin-top:12px}}
.actual-panel{margin-top:4px}.actual-grid{display:grid;grid-template-columns:repeat(6,1fr) auto;gap:10px;align-items:end}.actual-grid label{font-size:12px;color:var(--muted);display:flex;flex-direction:column;gap:6px}.actual-grid input,.actual-grid select{border:1px solid var(--line);background:#fffaf3;border-radius:12px;padding:10px;color:var(--brown2);min-width:0}.actual-memo{grid-column:span 2}.save-actual-btn{border:0;background:var(--brown);color:white;border-radius:12px;padding:11px 18px;font-weight:800;cursor:pointer}.actual-message{margin-top:10px;font-size:13px}.actual-message.ok{color:#2d6a3e}.actual-message.err{color:#b13d2d}.actual-history-wrap{margin-top:16px}.actual-history-wrap h4{margin:0 0 8px;font-size:14px}.actual-history table{width:100%;border-collapse:collapse;font-size:12px;background:#fffaf3;border-radius:12px;overflow:hidden}.actual-history th,.actual-history td{padding:9px 8px;border-bottom:1px solid rgba(139,99,57,.12);text-align:left}.actual-history th{color:var(--muted);font-weight:700;background:#f0e3d0}@media(max-width:1100px){.actual-grid{grid-template-columns:repeat(2,1fr)}.actual-memo{grid-column:span 2}.save-actual-btn{grid-column:span 2}}
.model-panel{margin-top:4px}.model-status-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}.save-actual-btn.secondary{background:#5a8a5a}.model-metrics-wrap{margin-top:16px}.model-metrics-wrap h4{margin:0 0 8px;font-size:14px}@media(max-width:1100px){.model-status-grid{grid-template-columns:repeat(2,1fr)}}
.user-box{background:#fffaf3;border:1px solid var(--line);border-radius:14px;padding:12px;margin:-10px 0 18px}.user-name{font-weight:800;color:var(--brown2);font-size:14px}.user-role{color:var(--muted);font-size:12px;margin-top:3px}.user-box a{display:inline-block;margin-top:8px;color:var(--brown);font-weight:700;font-size:12px;text-decoration:none}.user-box a:hover{text-decoration:underline}.login-body{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#f8f3eb,#fffaf3)}.login-card{width:min(420px,92vw);background:var(--panel);border:1px solid var(--line);border-radius:24px;padding:32px;box-shadow:var(--shadow)}.login-brand{margin-bottom:24px}.login-card h2{font-size:24px;margin:0 0 6px}.login-help{margin:0 0 20px;color:var(--muted);font-size:13px}.login-error{background:#fff1ef;color:#b13d2d;border:1px solid rgba(177,61,45,.25);border-radius:12px;padding:10px 12px;font-size:13px;margin-bottom:14px}.login-form{display:flex;flex-direction:column;gap:14px}.login-form label{font-size:12px;color:var(--muted);display:flex;flex-direction:column;gap:7px}.login-form input{border:1px solid var(--line);background:#fffaf3;border-radius:12px;padding:13px;color:var(--brown2);font-size:15px}.login-form button{border:0;background:var(--brown);color:white;border-radius:12px;padding:13px 18px;font-weight:800;cursor:pointer;margin-top:4px}.login-note{margin-top:16px;color:var(--muted);font-size:11px;line-height:1.6}.user-panel{margin-top:4px}
.loading-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(255, 255, 255, 0.85);
    z-index: 99999;

    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

.spinner {
    width: 70px;
    height: 70px;

    border: 8px solid #e5e7eb;
    border-top: 8px solid #2563eb;

    border-radius: 50%;

    animation: spin 1s linear infinite;
}

.loading-text {
    margin-top: 20px;
    font-size: 18px;
    font-weight: 600;
}
button:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}
@keyframes spin {
    from {
        transform: rotate(0deg);
    }

    to {
        transform: rotate(360deg);
    }
}