:root{--erp-navy:#17324d;--erp-navy-2:#244764;--erp-blue:#276f9d;--erp-bg:#f3f6f9;--erp-surface:#fff;--erp-line:#e2e8ef;--erp-muted:#718096;--erp-text:#1b2733;--erp-radius:14px;--erp-shadow:0 8px 28px rgba(32,56,85,.08)}*{box-sizing:border-box}body{margin:0;background:var(--erp-bg);color:var(--erp-text);font-family:system-ui,-apple-system,"Segoe UI","Noto Sans TC",sans-serif;-webkit-font-smoothing:antialiased}.topbar{height:66px;background:rgba(255,255,255,.96);border-bottom:1px solid var(--erp-line);backdrop-filter:blur(10px);display:flex;align-items:center;z-index:1030}.brand{text-decoration:none;color:var(--erp-navy);display:inline-flex;align-items:center;gap:.65rem;min-width:0}.brand:hover{color:var(--erp-navy)}.brand-mark{display:inline-grid;place-items:center;width:36px;height:36px;border-radius:10px;background:var(--erp-navy);color:#fff;font-weight:800;box-shadow:0 5px 14px rgba(23,50,77,.18)}.brand b{display:block;line-height:1.05}.brand small{display:block;font-size:.62rem;letter-spacing:.12em;color:var(--erp-muted);margin-top:.2rem}.nav-toggle{font-size:1.25rem;padding:.25rem .4rem}.user-chip{padding:.45rem .75rem;border:1px solid var(--erp-line);border-radius:999px;background:#f8fafc;color:#526170;font-size:.82rem}.app-shell{display:flex;min-height:calc(100vh - 66px)}.sidebar{position:fixed;left:0;top:66px;bottom:0;width:244px;flex-direction:column;background:#10283d;color:#d5e0e9;z-index:1020;box-shadow:8px 0 30px rgba(16,40,61,.07)}.sidebar-inner{padding:1rem .85rem;overflow:auto;flex:1}.nav-section{font-size:.68rem;text-transform:uppercase;letter-spacing:.12em;color:#8fa5b7;margin:1rem .7rem .35rem}.nav-section:first-child{margin-top:.2rem}.side-link{display:flex;align-items:center;gap:.7rem;color:#d7e1e8;text-decoration:none;padding:.62rem .72rem;border-radius:10px;margin:.14rem 0;font-size:.92rem;transition:.16s ease}.side-link span{width:1.1rem;text-align:center;opacity:.8}.side-link:hover{color:#fff;background:rgba(255,255,255,.08)}.side-link.active{color:#fff;background:#2d6d98;box-shadow:inset 3px 0 rgba(255,255,255,.65)}.sidebar-footer{padding:.8rem 1.25rem;border-top:1px solid rgba(255,255,255,.08);font-size:.72rem;color:#8fa5b7}.main-content{margin-left:244px;width:calc(100% - 244px);padding:26px 30px 88px}.app-footer{text-align:center;color:#9aa6b2;font-size:.75rem;margin-top:2rem}.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.2rem}.page-heading h1{font-size:1.7rem;line-height:1.25;margin:0;color:#152b40;font-weight:700}.page-heading p{margin:.35rem 0 0;color:var(--erp-muted);font-size:.92rem;line-height:1.55;max-width:900px}.eyebrow{font-size:.66rem;letter-spacing:.14em;color:var(--erp-blue);font-weight:800;margin-bottom:.3rem}.card{border:1px solid var(--erp-line);border-radius:var(--erp-radius);box-shadow:var(--erp-shadow);overflow:hidden;background:var(--erp-surface)}.card-header{background:#fff;border-bottom:1px solid var(--erp-line);padding:.95rem 1.1rem}.card-body{padding:1.15rem}.card-footer{background:#fbfcfd;border-top:1px solid var(--erp-line);padding:.85rem 1.1rem}.metric-card{height:100%;background:#fff;border:1px solid var(--erp-line);border-radius:var(--erp-radius);padding:1rem 1.05rem;box-shadow:var(--erp-shadow)}.metric-card span{display:block;color:var(--erp-muted);font-size:.78rem}.metric-card strong{display:block;font-size:1.45rem;color:var(--erp-navy);margin-top:.2rem;font-variant-numeric:tabular-nums}.filter-bar{background:#fff;border:1px solid var(--erp-line);border-radius:var(--erp-radius);padding:.9rem;box-shadow:var(--erp-shadow)}.table{--bs-table-bg:transparent}.table thead th{white-space:nowrap;background:#f7f9fb;color:#536372;border-bottom:1px solid var(--erp-line);font-size:.78rem;font-weight:700;text-transform:none;padding:.72rem .85rem}.table tbody td{border-color:#edf1f5;padding:.72rem .85rem}.table-hover tbody tr:hover{background:#f8fbfd}.table-form td{min-width:110px}.table-form .min-w-200{min-width:200px}.table-form .min-w-240{min-width:240px}.money{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.nowrap{white-space:nowrap}.form-label{font-size:.82rem;font-weight:650;color:#4b5d6d;margin-bottom:.35rem}.form-label.required:after{content:" *";color:#c63f3f}.form-control,.form-select{border-color:#d8e0e7;border-radius:9px;min-height:40px}.form-control:focus,.form-select:focus{border-color:#72a4c5;box-shadow:0 0 0 .18rem rgba(39,111,157,.12)}.btn{border-radius:9px;font-weight:600}.btn-primary{background:#276f9d;border-color:#276f9d}.btn-primary:hover{background:#205f87;border-color:#205f87}.badge{font-weight:650}.master-list{display:flex;flex-wrap:wrap;gap:.4rem}.master-pill{border:1px solid var(--erp-line);background:#f8fafc;padding:.33rem .55rem;border-radius:999px;font-size:.76rem;color:#536372}.data-label{display:block;color:var(--erp-muted);font-size:.76rem;margin-bottom:.15rem}.pre-line{white-space:pre-wrap}.empty-inline{text-align:center;color:#8a97a4;padding:1.25rem;font-size:.87rem}.sticky-savebar{position:sticky;bottom:1rem;z-index:1010;display:flex;justify-content:space-between;align-items:center;padding:.7rem;border:1px solid var(--erp-line);border-radius:12px;background:rgba(255,255,255,.94);box-shadow:0 10px 30px rgba(22,45,68,.16);backdrop-filter:blur(8px)}.mobile-bottom{position:fixed;left:0;right:0;bottom:0;height:64px;z-index:1040;background:rgba(255,255,255,.98);border-top:1px solid var(--erp-line);display:flex;justify-content:space-around;padding:4px max(4px,env(safe-area-inset-right)) max(4px,env(safe-area-inset-bottom)) max(4px,env(safe-area-inset-left));box-shadow:0 -6px 24px rgba(25,48,70,.08)}.mobile-bottom a,.mobile-bottom button{appearance:none;border:0;background:transparent;color:#687888;text-decoration:none;min-width:56px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;font-size:1rem}.mobile-bottom small{font-size:.66rem}.mobile-bottom .mobile-primary span{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;background:var(--erp-navy);color:#fff;margin-top:-13px;box-shadow:0 6px 16px rgba(23,50,77,.28)}.offcanvas .list-group-item{padding:.8rem 0;border-left:0;border-right:0}.status-dot{display:inline-block;width:.65rem;height:.65rem;border-radius:50%;margin-right:.35rem}.progress{height:8px}.small-table td,.small-table th{font-size:.88rem}.input-money{text-align:right}@media(max-width:1199.98px){.main-content{padding:22px 22px 88px}}@media(max-width:991.98px){.main-content{margin-left:0;width:100%;padding:18px 16px 90px}.page-heading h1{font-size:1.45rem}.sticky-savebar{bottom:72px}}@media(max-width:767.98px){.topbar{height:60px}.app-shell{min-height:calc(100vh - 60px)}.main-content{padding:14px 12px 92px}.page-heading{flex-direction:column;margin-bottom:1rem}.page-heading p{font-size:.86rem}.card{border-radius:12px}.card-body{padding:1rem}.table-responsive{font-size:.86rem}.metric-card{padding:.8rem}.metric-card strong{font-size:1.2rem}.sticky-savebar{left:0;right:0}.form-card .card-header{padding:.8rem .9rem}.form-card .card-body{padding:.9rem}.offcanvas{max-width:86vw}}

.brand-logo{width:38px;height:38px;object-fit:contain;border-radius:10px;background:#fff;padding:3px;box-shadow:0 1px 5px rgba(15,23,42,.12)}
.dashboard-hero{position:relative;overflow:hidden;border:0;border-radius:20px;padding:1.45rem 1.55rem;margin-bottom:1.25rem;color:#fff;background:linear-gradient(135deg,#17324d 0%,#24516e 68%,#2c6f94 100%);box-shadow:0 18px 42px rgba(23,50,77,.18)}.dashboard-hero:after{content:"";position:absolute;right:-80px;top:-110px;width:280px;height:280px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.16),rgba(255,255,255,0) 68%);pointer-events:none}.dashboard-hero .eyebrow{color:#b9d7ea}.dashboard-hero h1{color:#fff;font-weight:700}.dashboard-hero .hero-sub{color:rgba(255,255,255,.74);max-width:720px}.dashboard-hero .hero-chip{position:relative;z-index:1;display:inline-flex;align-items:center;gap:.4rem;padding:.48rem .78rem;border:1px solid rgba(255,255,255,.22);border-radius:999px;background:rgba(255,255,255,.09);color:#fff;font-size:.78rem;font-weight:650;backdrop-filter:blur(5px)}.dashboard-hero .hero-dot{width:7px;height:7px;border-radius:50%;background:#8fd6b1;box-shadow:0 0 0 4px rgba(143,214,177,.14)}.metric-card{transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease}.metric-card:hover{transform:translateY(-2px);box-shadow:0 12px 30px rgba(32,56,85,.12);border-color:#d4e0e8}.dashboard-section-title{display:flex;align-items:center;justify-content:space-between;gap:1rem}.dashboard-section-title small{font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:#8a9aa8}@media(max-width:767.98px){.dashboard-hero{padding:1.15rem 1.1rem;border-radius:16px}.dashboard-hero h1{font-size:1.55rem}.metric-card:hover{transform:none}}


/* 2026v1.0 RWD enhancement: desktop keeps dense tables; phones switch to labeled cards. */
.table-responsive{border-radius:inherit;-webkit-overflow-scrolling:touch}
.table-responsive>.table{margin-bottom:0}
.table td,.table th{vertical-align:middle}
.field-help{font-size:.76rem;color:var(--erp-muted)}
.owner-finance-grid .metric-card small{display:block;margin-top:.28rem}
@media(min-width:768px) and (max-width:1199.98px){
  .table thead th,.table tbody td{padding:.65rem .65rem}
  .main-content .card-body{padding:1rem}
}
@media(max-width:767.98px){
  .table-responsive{overflow:visible}
  .table-responsive>table.table{display:block;width:100%}
  .table-responsive>table.table>thead{display:none}
  .table-responsive>table.table>tbody{display:block}
  .table-responsive>table.table>tbody>tr{display:block;margin:.7rem;border:1px solid var(--erp-line);border-radius:12px;background:#fff;box-shadow:0 4px 16px rgba(32,56,85,.06);overflow:hidden}
  .table-responsive>table.table>tbody>tr>td{display:grid;grid-template-columns:minmax(92px,34%) minmax(0,1fr);gap:.65rem;align-items:center;width:100%;min-width:0!important;padding:.62rem .75rem;border:0;border-bottom:1px solid #edf1f5;text-align:left!important;white-space:normal!important}
  .table-responsive>table.table>tbody>tr>td:last-child{border-bottom:0}
  .table-responsive>table.table>tbody>tr>td::before{content:attr(data-label);font-size:.72rem;font-weight:700;color:#6a7a89;line-height:1.25}
  .table-responsive>table.table>tbody>tr>td[colspan]{display:block;text-align:center!important;padding:1.2rem}
  .table-responsive>table.table>tbody>tr>td[colspan]::before{display:none}
  .table-responsive>table.table .money,.table-responsive>table.table .text-end{text-align:left!important}
  .table-responsive>table.table td>.d-flex.justify-content-end{justify-content:flex-start!important}
  .table-responsive>table.table td form.d-flex{flex-wrap:wrap}
  .table-responsive>table.table td .form-control,.table-responsive>table.table td .form-select{width:100%!important;max-width:none!important}
  .table-responsive>table.table.table-form>tbody>tr>td{grid-template-columns:1fr;gap:.28rem}
  .table-responsive>table.table.table-form>tbody>tr>td::before{font-size:.7rem}
  .table-responsive>table.table.table-form>tbody>tr>td:last-child{display:flex;justify-content:flex-end}
  .filter-bar .row>[class*="col-"]{width:100%}
  .page-heading .btn,.page-heading>a.btn{width:100%}
  .card-header.d-flex{gap:.65rem;flex-wrap:wrap}
  .card-header.d-flex .btn{margin-left:auto}
  .owner-finance-grid .metric-card strong{font-size:1.1rem}
}
@media(max-width:420px){
  .brand small{display:none}
  .brand b{max-width:165px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .main-content{padding-left:9px;padding-right:9px}
  .table-responsive>table.table>tbody>tr{margin:.55rem}
}


/* 20260912 page action button consistency.
   Page-level create/navigation actions use the same compact geometry as the original "新增工程" button.
   Width remains content-driven so longer labels never wrap into oversized multi-line buttons. */
.erp-page-action{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;width:106px;min-width:106px;height:38px;min-height:38px;padding:0 .375rem;font-size:.875rem;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:0 0 106px}
@media(max-width:767.98px){.page-heading .btn.erp-page-action,.page-heading>a.btn.erp-page-action{width:106px;min-width:106px}.erp-page-action{align-self:flex-start;flex-basis:106px}}

/* 2026v1.0 RWD form hardening: prevent form/card children from forcing horizontal overflow. */
.card,.card-header,.card-body,.card-footer,.row>[class*="col-"]{min-width:0}
.form-control,.form-select,textarea{max-width:100%}
.page-heading p,.form-text,.card-header,.card-body{overflow-wrap:anywhere}
@media(max-width:767.98px){
  .card-footer.d-flex{gap:.5rem;flex-wrap:wrap}
  .worker-edit-form{width:100%;margin-left:0;margin-right:0}
  .worker-edit-form>[class*="col-"]{padding-left:0;padding-right:0}
}
.rwd-compact-input{width:110px;max-width:100%}
@media(max-width:767.98px){
  .backup-action-form{width:100%}
  .backup-action-form .rwd-compact-input{flex:1 1 120px;width:auto!important;min-width:0}
}
