:root{--bg:#0f1419;--surface:#1a2332;--surface2:#243044;--text:#e8eef7;--muted:#94a3b8;--accent:#3b82f6;--accent-hover:#2563eb;--success:#22c55e;--warn:#f59e0b;--danger:#ef4444;--radius:10px;--font:"Segoe UI","Hiragino Sans","Noto Sans JP",sans-serif;--mobile-header-h:52px;--bottom-nav-h:64px;--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px)}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font);background:var(--bg);color:var(--text);overflow-x:hidden}body.nav-open{overflow:hidden}a{color:var(--accent);text-decoration:none}.app-shell{display:flex;min-height:100vh;min-height:100dvh}.sidebar{width:240px;background:var(--surface);border-right:1px solid var(--surface2);display:flex;flex-direction:column;padding:1rem;flex-shrink:0;transition:width .25s ease,padding .25s ease,opacity .2s ease,border-color .25s ease;overflow:hidden}.app-shell.sidebar-closed .sidebar{width:0;padding-left:0;padding-right:0;border-right-color:transparent;opacity:0;pointer-events:none}.main-column{flex:1 1;display:flex;flex-direction:column;min-width:0}.sidebar-project-select{display:flex;flex-direction:column;gap:.35rem;margin-bottom:1rem;font-size:.8rem;color:var(--muted)}.sidebar-project-select select{width:100%;padding:.5rem .6rem;border-radius:8px;border:1px solid var(--surface2);background:var(--surface2);color:var(--text);font-size:.85rem}.main-topbar{display:flex;align-items:center;gap:.75rem;padding:.75rem 2rem 0;flex-shrink:0}.main-topbar-project{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.map-current-project{display:flex;align-items:center;gap:.5rem;margin:0 0 .75rem;font-size:.9rem}.stat-card--current{border:1px solid var(--accent);box-shadow:0 0 0 1px rgba(59,130,246,.25)}.sidebar-toggle{display:inline-flex}.sidebar-top{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem}.sidebar-close{display:inline-flex}.bottom-nav,.mobile-header,.sidebar-backdrop{display:none}.brand{display:flex;gap:.75rem;align-items:center;margin-bottom:1.5rem}.brand-mark{width:40px;height:40px;border-radius:10px;background:linear-gradient(135deg,var(--accent),#8b5cf6);display:grid;place-items:center;font-weight:700}.brand small{display:block;color:var(--muted);font-size:.75rem}.sidebar-nav{display:flex;flex-direction:column;gap:.25rem;flex:1 1}.sidebar-nav a{padding:.6rem .75rem;border-radius:8px;color:var(--muted);display:flex;align-items:center;gap:.5rem}.sidebar-nav a.active{background:var(--surface2);color:var(--text)}.nav-icon{width:1.25rem;text-align:center}.nav-divider{height:1px;background:var(--surface2);margin:.5rem 0}.sidebar-footer{font-size:.85rem;color:var(--muted);display:flex;flex-direction:column;gap:.5rem}.main{flex:1 1;padding:.75rem 2rem 1.5rem;overflow:auto;min-width:0}.page-header{margin-bottom:1.25rem}.page-header.row{display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;flex-wrap:wrap}.page-header h1{margin:0 0 .25rem;font-size:1.5rem}.tab-bar{display:flex;gap:.5rem;margin-bottom:1rem;border-bottom:1px solid var(--surface2)}.tab-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;color:var(--muted);padding:.65rem 1rem;font-size:.95rem;font-weight:600;cursor:pointer;border:none;border-bottom:2px solid transparent;margin-bottom:-1px}.tab-btn:hover{color:var(--text)}.tab-btn.active{color:var(--accent);border-bottom-color:var(--accent)}.muted{color:var(--muted)}.small{font-size:.85rem}.card{background:var(--surface);border:1px solid var(--surface2);border-radius:var(--radius);padding:1.25rem}.grid.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));grid-gap:1rem;gap:1rem}.stat-card h3{margin:.5rem 0}.badge{font-size:.75rem;background:var(--surface2);padding:.2rem .5rem;border-radius:4px}.btn{border:none;border-radius:8px;padding:.55rem 1rem;cursor:pointer;font-size:.9rem;min-height:44px;touch-action:manipulation}.btn.primary{background:var(--accent);color:white}.btn.primary:hover{background:var(--accent-hover)}.btn.secondary{background:var(--surface2);color:var(--text)}.btn.full-width{width:100%;margin-top:.5rem}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border:none;border-radius:10px;background:var(--surface2);color:var(--text);font-size:1.25rem;flex-shrink:0}.icon-btn,.link-btn{cursor:pointer;touch-action:manipulation}.link-btn{background:none;border:none;color:var(--accent);padding:.5rem 0;text-align:left;min-height:44px}.login-page{min-height:100vh;min-height:100dvh;display:grid;place-items:center;padding:1rem;padding-bottom:calc(1rem + var(--safe-bottom))}.login-card{width:100%;max-width:400px}.login-card h1{margin-top:0;font-size:1.35rem}label{display:flex;flex-direction:column;gap:.35rem;margin-bottom:.85rem;font-size:.9rem}input,select,textarea{padding:.65rem .75rem;border-radius:8px;border:1px solid var(--surface2);background:var(--bg);color:var(--text);font-size:16px;min-height:44px}input[type=file]{min-height:auto;padding:.5rem}.search-input{min-width:280px;width:100%;max-width:360px}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}table{width:100%;border-collapse:collapse;font-size:.9rem;min-width:520px}td,th{text-align:left;padding:.6rem .75rem;border-bottom:1px solid var(--surface2)}.alert{padding:.65rem .85rem;border-radius:8px;margin-bottom:1rem}.alert.error{background:rgba(239,68,68,.15);color:#fca5a5}.alert.warn{background:rgba(245,158,11,.15);color:#fcd34d}.hint{font-size:.8rem;color:var(--muted)}.center{display:grid;place-items:center;min-height:200px}.form-row{display:flex;gap:.75rem;align-items:flex-end;flex-wrap:wrap}.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));grid-gap:.75rem;gap:.75rem;align-items:end}.form-row input{flex:1 1;min-width:120px}.feature-list{line-height:1.7;color:var(--muted);padding-left:1.2rem}.map-page{display:flex;gap:1rem;height:calc(100vh - 3rem);height:calc(100dvh - 3rem);margin:-.5rem -1rem 0;position:relative}.map-sidebar{width:280px;flex-shrink:0;overflow:auto}.map-sidebar h2{margin-top:0}.map-canvas-wrap{position:relative;flex:1 1;min-width:0;min-height:400px;display:flex}.map-canvas{flex:1 1;border-radius:var(--radius);overflow:hidden;border:1px solid var(--surface2);min-height:400px}.visit-modal-backdrop{position:fixed;inset:0;z-index:499;border:none;background:rgba(0,0,0,.45);cursor:pointer}.visit-panel-overlay{position:fixed;inset:0;z-index:500;display:flex;align-items:center;justify-content:center;padding:1rem;pointer-events:none}.visit-panel-overlay .visit-panel{--visit-modal-height:min(80vh,calc(100dvh - 2rem));width:50vw;max-width:50vw;height:var(--visit-modal-height);min-height:var(--visit-modal-height);max-height:var(--visit-modal-height);display:flex;flex-direction:column;background:#fff;border-radius:var(--radius);box-shadow:0 8px 32px rgba(15,23,42,.18);border:1px solid var(--surface2);padding:.75rem 1rem 1rem;overflow:hidden;pointer-events:auto}.map-fallback{height:100%;overflow:auto}.map-fallback-list{list-style:none;padding:0;margin:0}.map-fallback-list li{border-bottom:1px solid var(--surface2)}.map-filter-fab,.map-filters-sheet,.sheet-backdrop,.visit-modal-backdrop,.visit-panel-overlay,.visit-sheet{display:none}.route-summary{font-weight:600;color:var(--success)}.visit-panel{box-sizing:border-box;color:#111;display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.visit-panel-header{flex-shrink:0}.visit-panel-title{display:flex;align-items:baseline;gap:.75rem;flex-wrap:wrap;margin-right:2.5rem;margin-bottom:.65rem}.visit-panel-meta{margin:0 0 .75rem;padding:0;display:flex;flex-direction:column;gap:.4rem}.visit-panel-meta-row{display:flex;align-items:flex-start;gap:.75rem;font-size:.85rem;line-height:1.45}.visit-panel-meta-row dt{flex:0 0 2.75rem;margin:0;color:var(--muted,#64748b);font-weight:600}.visit-panel-meta-row dt:after{content:"："}.visit-panel-meta-row dd{flex:1 1;min-width:0;margin:0}.visit-panel-meta-coords{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.82rem}.visit-panel-tabs{margin:.75rem 0 .5rem}.visit-panel-customer-no{flex-shrink:0;font-size:1.05rem}.visit-panel-customer-name{font-size:1rem;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.visit-panel--mobile{width:100%;max-width:100%;min-width:0;color:var(--text)}.visit-panel .close-btn{float:right;border:none;background:none;font-size:1.5rem;cursor:pointer;width:44px;height:44px;line-height:1}.visit-actions{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.75rem}.visit-actions button,.visit-status-btn{flex:1 1;min-width:80px;padding:.75rem .5rem;font-size:.95rem;font-weight:600;border-radius:8px;border:none;cursor:pointer;min-height:48px;touch-action:manipulation}.visit-status-btn.home{background:rgba(34,197,94,.2);color:#86efac}.visit-status-btn.absent{background:rgba(245,158,11,.2);color:#fcd34d}.visit-status-btn.excluded{background:rgba(100,116,139,.25);color:#cbd5e1}.visit-panel:not(.visit-panel--mobile) .visit-status-btn.home{color:#166534}.visit-panel:not(.visit-panel--mobile) .visit-status-btn.absent{color:#92400e}.visit-panel:not(.visit-panel--mobile) .visit-status-btn.excluded{color:#334155}.visit-panel-body{flex:1 1;min-height:0;overflow-x:hidden;overflow-y:auto;padding-right:.25rem;word-break:break-word}.visit-panel-body--history{display:flex;flex-direction:column;overflow:hidden}.visit-history-layout{display:flex;flex-direction:column;flex:1 1;min-height:0;gap:.5rem}.visit-history-split{display:flex;flex:1 1;min-height:0;gap:.75rem;overflow:hidden}.visit-history-list-section{flex:0 0 38%;min-width:7.5rem;max-width:42%;overflow-y:auto;padding-right:.25rem;border-right:1px solid var(--surface2,#e2e8f0)}.visit-panel-footer{flex-shrink:0;min-height:8.5rem;padding-top:.75rem;border-top:1px solid var(--surface2,#e2e8f0);margin-top:.5rem}.visit-panel-overlay .visit-panel-footer{border-top-color:#e2e8f0}.visit-panel--mobile .visit-panel-footer{border-top-color:var(--surface2)}.visit-history-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}.visit-history-item{display:block;width:100%;text-align:left;padding:.65rem .75rem;border-radius:8px;border:1px solid transparent;background:var(--surface2,rgba(0,0,0,.05));color:inherit;cursor:pointer;font:inherit}.visit-panel:not(.visit-panel--mobile) .visit-history-item{background:#f1f5f9}.visit-history-item.selected,.visit-history-item:hover{border-color:var(--accent,#3b82f6)}.visit-history-item.selected{box-shadow:inset 0 0 0 1px var(--accent,#3b82f6)}.visit-history-detail{flex:1 1;min-height:0;display:flex;flex-direction:column;margin-top:0;padding:.75rem;border-radius:8px;border:1px solid var(--surface2,#e2e8f0);background:var(--surface,#fff);overflow:hidden}.visit-history-detail-content{flex:1 1;min-height:0;overflow-y:auto}.visit-panel:not(.visit-panel--mobile) .visit-history-detail{background:#f8fafc}.visit-history-detail-title{margin:0 0 .65rem;font-size:.9rem}.check-item-field--horizontal,.visit-field-row{display:flex;flex-direction:row;align-items:center;gap:.75rem;margin-bottom:.85rem}.check-item-field--textarea{align-items:flex-start}.check-item-field-label,.visit-field-label{flex:0 0 7rem;font-weight:600;line-height:1.4}.check-item-field--textarea .check-item-field-label{padding-top:.65rem}.check-item-field-control,.visit-field-control{flex:1 1;min-width:0}.visit-field-control{margin-bottom:0}.visit-photo-row{align-items:flex-start}.visit-photo-row .visit-field-label{padding-top:.65rem}.visit-photo-controls{flex:1 1;min-width:0;display:flex;flex-direction:column;gap:.35rem}.visit-photo-input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.visit-photo-btn-row{display:flex;gap:.5rem;width:100%}.visit-photo-btn-row .visit-photo-btn{flex:1 1}.visit-photo-btn{width:100%;min-height:44px}.visit-photo-name{word-break:break-all}.visit-camera-dialog{position:fixed;top:50%;left:50%;z-index:600;transform:translate(-50%,-50%);width:min(520px,calc(100vw - 2rem));padding:1rem;background:var(--surface,#fff);border-radius:var(--radius);border:1px solid var(--surface2);box-shadow:0 8px 32px rgba(15,23,42,.2)}.visit-camera-video{display:block;width:100%;max-height:min(60vh,420px);border-radius:8px;background:#000;object-fit:cover}.visit-camera-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:.75rem}.check-item-field-control input,.check-item-field-control select,.check-item-field-control textarea{width:100%}.visit-history-detail-meta,.visit-history-detail-values{margin:0;display:flex;flex-direction:column;gap:.5rem}.visit-history-detail-meta>div,.visit-history-detail-values>div{display:flex;flex-direction:row;align-items:flex-start;gap:.75rem}.visit-history-detail-meta dt,.visit-history-detail-values dt{flex:0 0 7rem;margin:0;font-size:.8rem;color:var(--muted,#64748b);font-weight:600}.visit-history-detail-meta dd,.visit-history-detail-values dd{flex:1 1;min-width:0;margin:0;font-size:.85rem}.visit-history-detail-values{margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--surface2,#e2e8f0)}.visit-history-split .visit-history-item-head{display:flex;flex-direction:column;align-items:flex-start;gap:.35rem}.visit-history-date{font-size:.8rem;font-weight:600;line-height:1.3}.visit-status-badge{display:inline-block;padding:.15rem .5rem;border-radius:999px;font-size:.75rem;font-weight:600;white-space:nowrap}.visit-status-badge.status-home_completed{background:rgba(34,197,94,.2);color:#166534}.visit-status-badge.status-absent_completed{background:rgba(245,158,11,.2);color:#92400e}.visit-status-badge.status-excluded{background:rgba(100,116,139,.2);color:#334155}.visit-status-badge.status-rescheduled{background:rgba(59,130,246,.2);color:#1d4ed8}.visit-status-badge.status-not_visited{background:rgba(148,163,184,.2);color:#475569}.visit-history-memo,.visit-history-project,.visit-history-user{margin:.25rem 0 0}.visit-history-link{display:inline-block;flex-shrink:0;margin-top:0}.code-block{font-size:.8rem;overflow:auto}.back-link{display:inline-block;margin-bottom:.5rem;min-height:44px;line-height:44px}@media (max-width:768px){.app-shell{flex-direction:column;padding-top:calc(var(--mobile-header-h) + var(--safe-top));padding-bottom:calc(var(--bottom-nav-h) + var(--safe-bottom))}.mobile-header{display:flex;align-items:center;gap:.5rem;position:fixed;top:0;left:0;right:0;z-index:200;height:calc(var(--mobile-header-h) + var(--safe-top));padding:var(--safe-top) .75rem 0;background:var(--surface);border-bottom:1px solid var(--surface2)}.mobile-header-title{flex:1 1;min-width:0;line-height:1.2}.mobile-header-title strong{display:block;font-size:1rem}.mobile-header-title small{display:block;color:var(--muted);font-size:.7rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.map-shortcut{background:rgba(59,130,246,.2);color:var(--accent)}.sidebar{position:fixed;top:0;left:0;bottom:0;z-index:300;width:min(280px,85vw);transform:translateX(-100%);transition:transform .25s ease;padding-top:calc(1rem + var(--safe-top));padding-bottom:calc(1rem + var(--safe-bottom));box-shadow:none;opacity:1;pointer-events:auto}.app-shell.sidebar-open .sidebar{transform:translateX(0);box-shadow:4px 0 24px rgba(0,0,0,.4)}.app-shell.sidebar-closed .sidebar{width:min(280px,85vw);padding-left:1rem;padding-right:1rem;border-right-color:var(--surface2);opacity:1}.sidebar-backdrop{display:block;position:fixed;inset:0;z-index:250;border:none;background:rgba(0,0,0,.5);cursor:pointer}.sidebar-close{display:inline-flex}.brand{margin-bottom:1rem}.bottom-nav{display:flex;position:fixed;bottom:0;left:0;right:0;z-index:200;height:calc(var(--bottom-nav-h) + var(--safe-bottom));padding-bottom:var(--safe-bottom);background:var(--surface);border-top:1px solid var(--surface2)}.bottom-nav-item{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.15rem;color:var(--muted);font-size:.65rem;padding:.35rem .25rem;touch-action:manipulation}.bottom-nav-item.active{color:var(--accent)}.bottom-nav-icon{font-size:1.25rem;line-height:1}.main-topbar{display:none}.main{padding:1rem;flex:1 1;overflow:auto}.page-header h1{font-size:1.25rem}.page-header.row{flex-direction:column;align-items:stretch}.search-input{max-width:none}.grid.cards{grid-template-columns:1fr}.form-row{flex-direction:column;align-items:stretch}.form-row .btn,.form-row input{width:100%}.form-grid{grid-template-columns:1fr}.card{padding:1rem}table{font-size:.82rem;min-width:480px}.map-page{flex-direction:column;height:calc(100dvh - var(--mobile-header-h) - var(--bottom-nav-h) - var(--safe-top) - var(--safe-bottom));margin:-1rem;gap:0}.map-page .map-sidebar:not(.map-filters-sheet){display:none}.map-canvas,.map-canvas-wrap{min-height:0}.map-canvas{flex:1 1;border-radius:0;border:none}.map-filter-fab{display:block;position:absolute;top:.75rem;right:.75rem;z-index:10;padding:.6rem 1rem;border:none;border-radius:999px;background:var(--surface);color:var(--text);font-size:.85rem;font-weight:600;box-shadow:0 2px 12px rgba(0,0,0,.35);min-height:44px;cursor:pointer}.sheet-backdrop{display:block;position:fixed;inset:0;z-index:400;border:none;background:rgba(0,0,0,.45);cursor:pointer}.visit-modal-backdrop{display:block}.map-filters-sheet{display:block;position:fixed;left:0;right:0;bottom:calc(var(--bottom-nav-h) + var(--safe-bottom));z-index:450;max-height:70dvh;overflow:auto;border-radius:var(--radius) var(--radius) 0 0;margin:0;width:auto}.visit-sheet{display:flex;flex-direction:column;position:fixed;top:calc(1em + var(--safe-top));right:1em;bottom:calc(1em + var(--bottom-nav-h) + var(--safe-bottom));left:1em;z-index:500;width:auto;overflow:hidden;background:var(--surface);border-radius:var(--radius);border:1px solid var(--surface2);padding:.75rem 1rem 1rem;box-sizing:border-box;box-shadow:0 8px 32px rgba(0,0,0,.35)}.visit-sheet .visit-panel--mobile{flex:1 1;min-height:0;height:100%}}@media (min-width:769px){.visit-modal-backdrop{display:block}.visit-panel-overlay{display:flex}.sidebar-nav .nav-icon{display:none}}.edit-panel-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.45);display:grid;place-items:center;padding:1rem;z-index:100}.edit-panel{position:relative;width:min(480px,100%);max-height:min(90vh,720px);overflow:auto;display:flex;flex-direction:column;gap:.65rem}.edit-panel h2{margin:0}.edit-panel-section{margin:.5rem 0 0;font-size:.95rem}.edit-panel label{display:flex;flex-direction:column;gap:.25rem}.edit-panel textarea{resize:vertical;min-height:64px}.edit-panel-actions{display:flex;gap:.75rem;justify-content:flex-end;margin-top:.5rem;position:-webkit-sticky;position:sticky;bottom:0;background:var(--surface);padding-top:.5rem}.required-mark{color:#f87171}.inline-check{flex-direction:row!important;align-items:center;gap:.5rem}.inline-check input[type=checkbox]{width:auto}.check-item-form h2{margin-top:0}.check-items-table tbody tr.dragging{opacity:.45}.check-items-table tbody tr.drag-over{box-shadow:inset 0 2px 0 var(--accent)}.drag-handle{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:8px;background:var(--surface2);color:var(--muted);font-size:1rem;cursor:-webkit-grab;cursor:grab;touch-action:none}.drag-handle:active{cursor:-webkit-grabbing;cursor:grabbing}.drag-handle:disabled{opacity:.5;cursor:not-allowed}.check-items-table td:first-child,.check-items-table th:first-child{width:44px;padding-left:.5rem;padding-right:.25rem}.toggle-switch{position:relative;display:inline-flex;align-items:center;width:44px;height:24px;cursor:pointer}.toggle-switch input{position:absolute;opacity:0;width:0;height:0}.toggle-slider{position:absolute;inset:0;border-radius:999px;background:var(--surface2);border:1px solid rgba(148,163,184,.35);transition:background .2s ease}.toggle-slider:before{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:var(--muted);transition:transform .2s ease,background .2s ease}.toggle-switch input:checked+.toggle-slider{background:rgba(59,130,246,.35);border-color:var(--accent)}.toggle-switch input:checked+.toggle-slider:before{transform:translateX(20px);background:var(--accent)}.toggle-switch input:disabled+.toggle-slider{opacity:.55;cursor:not-allowed}.map-canvas--add-pin{cursor:crosshair}.pin-coords-row{align-items:flex-end}.pin-coords-row label{flex:1 1;min-width:120px}.check-items-table td:nth-child(6),.check-items-table td:nth-child(7),.check-items-table th:nth-child(6),.check-items-table th:nth-child(7){width:72px;text-align:center}