@font-face{font-family:NotoJP;src:url('/assets/fonts/NotoSansCJKjp-Regular.otf') format('opentype');font-display:swap;font-weight:400}
@font-face{font-family:NotoJP;src:url('/assets/fonts/NotoSansCJKjp-Bold.otf') format('opentype');font-display:swap;font-weight:700 900}
:root{--gold:#c69818;--gold-dark:#9a7210;--gold-pale:#fff8e2;--ink:#191b1f;--muted:#69707c;--line:#e1e4e8;--soft:#f6f7f8;--danger:#b42318;--success:#16794a;--blue:#2563b8;--shadow:0 12px 40px rgba(23,26,31,.08);font-family:NotoJP,"Yu Gothic",sans-serif;color:var(--ink);background:#f5f6f7;font-synthesis:none}
*{box-sizing:border-box}body{margin:0;min-width:320px;font-size:16px;line-height:1.55}button,input,select,textarea{font:inherit}button{cursor:pointer}a{color:inherit}.hidden{display:none!important}
.auth-shell{min-height:100vh;display:grid;grid-template-columns:minmax(380px,46%) 1fr;background:white}.auth-brand{padding:clamp(34px,7vw,90px);display:flex;flex-direction:column;justify-content:space-between;background:linear-gradient(145deg,#fff 35%,#fff9e8 100%);position:relative;overflow:hidden}.auth-brand:after{content:"";position:absolute;width:460px;height:100px;background:linear-gradient(90deg,transparent,var(--gold));transform:rotate(-56deg);right:-210px;bottom:160px;opacity:.42}.auth-brand img{width:130px;max-height:105px;object-fit:contain;object-position:left}.auth-brand h1{font-size:clamp(2rem,4.4vw,4rem);line-height:1.15;margin:28px 0 12px;max-width:680px}.auth-brand p{color:var(--muted);max-width:600px}.auth-panel{display:flex;align-items:center;justify-content:center;padding:32px}.auth-card{width:min(430px,100%);padding:38px;border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);background:#fff}.auth-card h2{margin:0 0 8px;font-size:1.65rem}.auth-card>p{color:var(--muted);margin:0 0 28px}
.field{display:grid;gap:7px;margin-bottom:17px}.field label{font-size:.9rem;font-weight:700}.field small{color:var(--muted)}input,select,textarea{width:100%;min-height:44px;border:1px solid #cfd4da;border-radius:9px;padding:9px 12px;background:#fff;color:var(--ink)}textarea{min-height:92px;resize:vertical}input:focus,select:focus,textarea:focus{outline:3px solid rgba(198,152,24,.18);border-color:var(--gold)}
.btn{border:1px solid var(--line);border-radius:9px;background:#fff;min-height:42px;padding:9px 16px;font-weight:700;color:var(--ink);display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none}.btn:hover{background:#fafafa}.btn-primary{background:linear-gradient(135deg,#d1a72c,#ac7c09);border-color:#ac7c09;color:#fff;box-shadow:0 5px 16px rgba(172,124,9,.2)}.btn-dark{background:var(--ink);border-color:var(--ink);color:#fff}.btn-danger{color:var(--danger);border-color:#efc6c1}.btn-small{min-height:34px;padding:6px 10px;font-size:.85rem}.btn-wide{width:100%}.btn:disabled{opacity:.5;cursor:not-allowed}
.app-shell{min-height:100vh}.topbar{height:72px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 24px;position:sticky;top:0;z-index:30}.brand{display:flex;align-items:center;gap:15px;font-weight:800;font-size:1.1rem}.brand img{width:64px;height:54px;object-fit:contain}.top-spacer{flex:1}.user-chip{display:flex;align-items:center;gap:11px;border:0;background:transparent;text-align:left}.avatar{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:var(--ink);color:#fff;font-weight:800}.user-chip small{display:block;color:var(--muted)}.menu-toggle{display:none;border:0;background:transparent;font-size:1.4rem;margin-right:10px}
.pwa-install{display:none;margin-right:12px}.pwa-install-ready .pwa-install{display:inline-flex}
.sidebar{position:fixed;top:72px;bottom:0;left:0;width:230px;background:#fff;border-right:1px solid var(--line);padding:20px 12px;overflow:auto;z-index:20}.nav-group{margin-bottom:20px}.nav-label{font-size:.72rem;color:#9aa0a8;padding:4px 13px 8px;text-transform:uppercase;letter-spacing:.08em}.nav-link{width:100%;border:0;background:transparent;border-radius:9px;padding:10px 13px;text-align:left;font-weight:650;color:#424750;margin:2px 0;display:flex;align-items:center;gap:10px}.nav-link:hover{background:var(--soft)}.nav-link.active{background:var(--gold-pale);color:var(--gold-dark);box-shadow:inset 3px 0 var(--gold)}.nav-mark{width:26px;height:26px;border-radius:7px;background:#eef0f2;display:grid;place-items:center;font-size:.68rem}.nav-link.active .nav-mark{background:#f4df9c}.sidebar-note{border:1px solid #eadfb9;background:#fffdf6;border-radius:12px;padding:13px;font-size:.8rem;color:var(--muted)}
.main{margin-left:230px;padding:28px;max-width:1680px}.page-head{display:flex;align-items:flex-start;gap:20px;margin-bottom:24px}.page-head h1{font-size:clamp(1.5rem,3vw,2rem);margin:0}.page-head p{color:var(--muted);margin:4px 0 0}.page-actions{margin-left:auto;display:flex;gap:9px;flex-wrap:wrap}.hero{background:#fff;border:1px solid var(--line);border-radius:16px;overflow:hidden;display:grid;grid-template-columns:1.3fr .7fr;margin-bottom:20px;min-height:165px}.hero-copy{padding:27px}.hero-copy h1{margin:0 0 6px;font-size:clamp(1.45rem,3vw,2rem)}.hero-copy p{margin:0;color:var(--muted)}.hero-art{background:url('/assets/images/city-gold.png') center bottom/cover no-repeat;min-height:150px}
.grid{display:grid;gap:16px}.grid-5{grid-template-columns:repeat(5,minmax(135px,1fr))}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.card{background:#fff;border:1px solid var(--line);border-radius:13px;padding:20px}.card h2,.card h3{margin:0 0 14px}.stat{padding:18px}.stat-top{display:flex;justify-content:space-between;align-items:center}.stat-name{font-weight:800}.stat-value{font-size:1.8rem;font-weight:850;margin-top:5px}.stat small{color:var(--muted)}.quick-card{border:1px solid var(--line);border-radius:12px;background:#fff;padding:16px;text-align:left}.quick-card strong{display:block;margin-bottom:4px}.quick-card span{font-size:.85rem;color:var(--muted)}
.section{margin-top:20px}.section-head{display:flex;align-items:center;margin-bottom:12px}.section-head h2{margin:0;font-size:1.2rem}.section-head .btn{margin-left:auto}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:12px;background:#fff}.data-table{border-collapse:collapse;width:100%;min-width:760px}.data-table th,.data-table td{padding:11px 13px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}.data-table th{background:#f4f5f6;font-size:.82rem;color:#535963;white-space:nowrap}.data-table tr:last-child td{border-bottom:0}.data-table tbody tr:hover{background:#fffdf6}.amount{text-align:right!important;font-variant-numeric:tabular-nums}.actions{display:flex;gap:6px;justify-content:flex-end}
.badge{display:inline-flex;align-items:center;border-radius:999px;padding:3px 9px;font-size:.76rem;font-weight:750;background:#eef0f2;color:#4f5560;white-space:nowrap}.badge-issued,.badge-paid,.badge-sent{background:#e7f7ef;color:var(--success)}.badge-draft,.badge-partial{background:#eaf2ff;color:var(--blue)}.badge-void{background:#fdecea;color:var(--danger)}.badge-unpaid{background:#fff1e7;color:#a84910}
.filters{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}.filters input{max-width:330px}.filters select{width:auto;min-width:150px}.empty{padding:60px 24px;text-align:center;color:var(--muted)}
.modal-backdrop{position:fixed;inset:0;background:rgba(17,20,24,.55);z-index:90;display:flex;align-items:flex-start;justify-content:center;padding:30px 18px;overflow:auto}.modal{background:#fff;width:min(900px,100%);border-radius:16px;box-shadow:0 24px 90px rgba(0,0,0,.25);overflow:hidden}.modal.wide{width:min(1260px,100%)}.modal-head{padding:18px 22px;border-bottom:1px solid var(--line);display:flex;align-items:center;position:sticky;top:0;background:#fff;z-index:2}.modal-head h2{margin:0;font-size:1.25rem}.modal-close{margin-left:auto;border:0;background:transparent;font-size:1.5rem}.modal-body{padding:22px}.modal-foot{padding:16px 22px;border-top:1px solid var(--line);display:flex;gap:9px;justify-content:flex-end;position:sticky;bottom:0;background:#fff}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 16px}.form-grid .full{grid-column:1/-1}.subhead{font-size:1rem;margin:24px 0 12px;padding-bottom:8px;border-bottom:2px solid var(--gold)}.toggle-row{display:flex;align-items:center;gap:10px;min-height:44px}.toggle-row input{width:20px;min-height:20px}.document-layout{display:grid;grid-template-columns:minmax(0,1fr) 420px;gap:20px}.editor-panel{min-width:0}.preview-panel{position:sticky;top:94px;align-self:start}.preview-sheet{background:#fff;border:1px solid var(--line);box-shadow:var(--shadow);aspect-ratio:210/297;padding:26px 24px;overflow:hidden;font-size:8px;position:relative}.preview-sheet:after{content:"";position:absolute;right:-10px;bottom:0;width:60%;height:25%;background:url('/assets/images/city-gold.png') right bottom/contain no-repeat;opacity:.12}.preview-header{display:flex;align-items:flex-start}.preview-logo{width:62px;height:48px;object-fit:contain}.preview-title{margin-left:auto;font-size:20px;font-weight:900;border-bottom:2px solid var(--gold)}.preview-parties{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:24px}.preview-name{font-size:12px;font-weight:800}.preview-total{margin:20px 0;border:1px solid var(--gold);padding:10px;font-size:17px;text-align:center;font-weight:900}.preview-sheet table{border-collapse:collapse;width:100%}.preview-sheet th,.preview-sheet td{border:1px solid #d8dce2;padding:4px}.preview-sheet th{background:#f0f1f2}.preview-notes{border:1px solid var(--line);padding:7px;margin-top:14px}.items-editor{border:1px solid var(--line);border-radius:11px;overflow:hidden}.item-row{display:grid;grid-template-columns:minmax(180px,2fr) 86px 78px 120px 90px 38px;gap:8px;padding:10px;border-bottom:1px solid var(--line);align-items:end}.item-row:last-child{border-bottom:0}.item-row input,.item-row select{min-height:38px;padding:7px 8px}.item-row .field{margin:0}.item-row label{font-size:.72rem}.item-remove{border:0;background:transparent;color:var(--danger);height:38px}.deduction-row,.repeater-row{display:grid;grid-template-columns:1fr 1fr 38px;gap:8px;align-items:end;margin:8px 0}.repeater-row{grid-template-columns:1fr 1fr 1fr 38px}.deduction-row .field{margin:0}.totals-box{margin:14px 0 0 auto;width:min(360px,100%);border:1px solid var(--line);border-radius:9px;overflow:hidden}.totals-line{display:flex;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--line)}.totals-line:last-child{border:0;background:var(--gold-pale);font-size:1.1rem;font-weight:900}
.preview-sheet{padding:23px 22px}.preview-sheet:after{pointer-events:none}.preview-header>div:last-child{margin-left:auto;min-width:155px}.preview-title{margin-left:0;text-align:right}.preview-number{text-align:right;margin-top:5px}.preview-meta{margin-top:3px}.preview-meta div{display:flex;justify-content:space-between;gap:8px}.preview-meta span{color:var(--muted)}.preview-meta strong{font-weight:600}.preview-parties{margin-top:13px;min-height:88px}.preview-name{font-size:11px;line-height:1.35}.preview-contact{font-weight:650;margin-top:2px}.preview-address{line-height:1.45;margin-top:3px}.preview-subject{border-bottom:1px solid var(--line);padding:5px 0;margin-top:5px}.preview-total{margin:10px 0;padding:9px;font-size:16px}.preview-sheet tbody tr{height:24px}.preview-sheet td small{display:block;color:var(--muted);font-size:6.5px}.preview-bank{border:1px solid var(--line);padding:6px;margin-top:8px;min-height:28px}.preview-notes{margin-top:8px;min-height:42px}
.tabs{display:flex;gap:6px;overflow:auto;border-bottom:1px solid var(--line);margin-bottom:18px}.tab{border:0;background:transparent;padding:11px 14px;font-weight:750;white-space:nowrap;border-bottom:3px solid transparent}.tab.active{color:var(--gold-dark);border-color:var(--gold)}.settings-panel{max-width:980px}.logo-preview{width:130px;height:100px;object-fit:contain;border:1px dashed var(--line);border-radius:10px;padding:8px;background:#fff}.asset-row{display:flex;gap:18px;align-items:center;flex-wrap:wrap}.danger-zone{border-color:#f2c6c1}.toast{position:fixed;right:24px;bottom:24px;z-index:200;background:#1e2125;color:#fff;padding:12px 18px;border-radius:9px;box-shadow:var(--shadow);transform:translateY(120px);opacity:0;transition:.22s}.toast.show{transform:none;opacity:1}.toast.error{background:var(--danger)}.loading{min-height:60vh;display:grid;place-items:center;color:var(--muted)}
@media(max-width:1150px){.grid-5{grid-template-columns:repeat(3,1fr)}.document-layout{grid-template-columns:1fr}.preview-panel{position:static}.preview-sheet{max-width:520px;margin:auto}}
@media(max-width:800px){.topbar{height:62px;padding:0 13px}.brand span{font-size:.92rem}.brand img{width:48px;height:42px}.menu-toggle{display:block}.sidebar{top:62px;transform:translateX(-105%);transition:.2s;box-shadow:var(--shadow)}.sidebar.open{transform:none}.main{margin-left:0;padding:18px 13px}.hero{grid-template-columns:1fr}.hero-art{display:none}.grid-5,.grid-3,.grid-2{grid-template-columns:1fr 1fr}.page-head{display:block}.page-actions{margin-top:12px}.auth-shell{grid-template-columns:1fr}.auth-brand{min-height:240px;padding:28px}.auth-brand h1{font-size:2rem}.auth-panel{padding:18px}.auth-card{padding:26px}.form-grid{grid-template-columns:1fr}.item-row{grid-template-columns:1fr 90px 90px}.item-row .wide-field{grid-column:1/-1}.item-row .price-field{grid-column:1/3}.deduction-row,.repeater-row{grid-template-columns:1fr}.deduction-row .item-remove,.repeater-row .item-remove{justify-self:end}.modal-backdrop{padding:0}.modal{border-radius:0;min-height:100vh}.user-chip div:not(.avatar){display:none}.pwa-install{padding:5px 8px;margin-right:5px;font-size:.72rem}}
@media(max-width:520px){.grid-5,.grid-3,.grid-2{grid-template-columns:1fr}.page-actions .btn{flex:1}.preview-sheet{padding:18px 16px}.brand span{max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pwa-install-ready .brand span{display:none}.filters>*{max-width:none!important;width:100%!important}}
@media print{.topbar,.sidebar,.page-actions,.btn,.filters{display:none!important}.main{margin:0;padding:0}.card{border:0}}
