*{box-sizing:border-box}.link{font:inherit;color:#1890ff;cursor:pointer;background:0 0;border:none;margin:0;padding:0;text-decoration:none}.link:hover{color:#40a9ff;text-decoration:underline}body{background:#f0f2f5;min-height:100vh;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.app{padding:20px}.loading{color:#666;justify-content:center;align-items:center;min-height:100vh;font-size:16px;display:flex}.header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px;display:flex}.header h1{color:#333;margin:0;font-size:24px}.view-switcher{gap:8px;display:flex}.view-switcher button{cursor:pointer;background:#fff;border:1px solid #d9d9d9;border-radius:6px;padding:8px 16px;font-size:14px;transition:all .2s}.view-switcher button:hover{color:#1890ff;border-color:#1890ff}.view-switcher button.active{color:#fff;background:#1890ff;border-color:#1890ff}.board{gap:16px;padding-bottom:20px;display:flex;overflow-x:auto}.column{background:#e8e8e8;border-radius:8px;flex-direction:column;flex:0 0 280px;max-height:calc(100vh - 160px);display:flex}.column-title{color:#333;border-bottom:1px solid #d9d9d9;margin:0;padding:12px 16px;font-size:16px;font-weight:600}.column-total{color:#666;background:#fafafa;border-bottom:1px solid #f0f0f0;padding:8px 16px;font-size:13px}.column-content{flex:1;min-height:100px;padding:8px;transition:background .2s;overflow-y:auto}.column-content.is-over{background:#bae7ff}.empty-drop-zone{text-align:center;color:#999;border:2px dashed #d9d9d9;border-radius:6px;margin-top:8px;padding:20px}.stage-filter{background:#fff;border-radius:8px;align-items:center;gap:16px;margin-bottom:16px;padding:12px 16px;display:flex}.stage-filter span{color:#666;font-size:14px}.stage-filter label{cursor:pointer;align-items:center;gap:6px;font-size:14px;display:flex}.stage-filter input[type=checkbox]{cursor:pointer}.customer-board .board{gap:16px;padding-bottom:20px;display:flex;overflow-x:auto}.customer-column .column-title{background:#f5f5f5;border-radius:8px 8px 0 0}.btn-add{color:#1890ff;cursor:pointer;background:0 0;border:none;padding:0 8px;font-size:20px;line-height:1;text-decoration:none}.btn-add:hover{color:#40a9ff}.task-card{cursor:default;background:#fff;border-radius:6px;justify-content:space-between;align-items:flex-start;margin-bottom:8px;padding:12px;transition:box-shadow .2s,transform .2s;display:flex;box-shadow:0 1px 3px #0000001a}.task-card:hover{box-shadow:0 3px 8px #00000026}.task-title{cursor:pointer}.task-content{flex:1;min-width:0}.task-title{color:#333;margin-bottom:6px;font-size:14px}.task-due-date{color:#666;margin-top:4px;font-size:11px}.task-due-date.overdue{color:#ff4d4f}.task-stats{color:#1890ff;gap:12px;margin-top:6px;font-size:12px;font-weight:500;display:flex}.task-paid-badge{color:#52c41a;font-size:11px}.task-actions{gap:4px;display:none}.task-card:hover .task-actions{display:flex}.btn-icon{color:#999;cursor:pointer;background:0 0;border:none;padding:4px;font-size:14px;line-height:1}.btn-icon:hover{color:#1890ff}.btn-icon.btn-delete:hover{color:#ff4d4f}.modal-overlay{z-index:3000;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:#fff;border-radius:8px;width:400px;max-width:90vw;padding:24px}.modal h2{color:#333;margin:0;font-size:18px}.modal-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.btn-share{cursor:pointer;color:#666;background:0 0;border:1px solid #d9d9d9;border-radius:4px;padding:4px 10px;font-size:13px}.btn-share:hover{color:#1890ff;border-color:#1890ff}.form-group{margin-bottom:16px}.form-group label{color:#666;margin-bottom:6px;font-size:14px;display:block}.form-group input,.form-group select{border:1px solid #d9d9d9;border-radius:6px;width:100%;padding:8px 12px;font-size:14px}.form-group input:focus,.form-group select:focus{border-color:#1890ff;outline:none;box-shadow:0 0 0 2px #1890ff33}.form-row{gap:16px;display:flex}.form-row .form-group{flex:1}.datetime-picker{align-items:center;gap:8px;display:flex}.datetime-picker input{flex:1}.time-picker{background:#fff;border:1px solid #d9d9d9;border-radius:6px;align-items:center;gap:3px;padding:0 6px;display:flex}.time-hour{text-align:center;cursor:pointer;background:0 0;border:none;outline:none;width:50px;padding:6px 2px;font-family:monospace;font-size:14px}.min-btn{cursor:pointer;background:#fff;border:1px solid #d9d9d9;border-radius:4px;padding:4px 8px;font-family:monospace;font-size:13px}.min-btn:hover{border-color:#1890ff}.min-btn.active{color:#fff;background:#1890ff;border-color:#1890ff}.btn-datetime-ok{color:#fff;cursor:pointer;background:#1890ff;border:none;border-radius:6px;padding:6px 12px}.btn-datetime-ok:hover{background:#40a9ff}.btn-datetime-ok:disabled{cursor:not-allowed;background:#d9d9d9}.modal-actions{justify-content:space-between;align-items:center;margin-top:24px;display:flex}.modal-actions-right{gap:8px;display:flex}.btn-delete-task{color:#fff;cursor:pointer;background:#ff4d4f;border:none;border-radius:6px;padding:8px 16px}.btn-delete-task:hover{background:#ff7875}.btn-cancel,.btn-save{cursor:pointer;border-radius:6px;padding:8px 16px;font-size:14px}.btn-cancel{color:#333;background:#fff;border:1px solid #d9d9d9}.btn-cancel:hover{color:#1890ff;border-color:#1890ff}.btn-save{color:#fff;background:#1890ff;border:1px solid #1890ff}.btn-save:hover{background:#40a9ff;border-color:#40a9ff}.modal-large{width:700px;max-width:95vw;max-height:90vh;overflow-y:auto}.modal-xlarge{width:950px;max-width:95vw;max-height:90vh;overflow-y:auto}.form-group textarea{resize:vertical;border:1px solid #d9d9d9;border-radius:6px;width:100%;min-height:80px;padding:8px 12px;font-family:inherit;font-size:14px}.form-group textarea:focus{border-color:#1890ff;outline:none;box-shadow:0 0 0 2px #1890ff33}.attachments-area{background:#fafafa;border:1px dashed #d9d9d9;border-radius:6px;padding:12px}.btn-attach{cursor:pointer;background:#fff;border:1px solid #d9d9d9;border-radius:6px;padding:6px 12px;font-size:13px}.btn-attach:hover{color:#1890ff;border-color:#1890ff}.btn-attach:disabled{color:#999;cursor:not-allowed}.attachments-loading{color:#666;margin-left:12px;font-size:13px}.attachments-list{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.attachment-item{background:#fff;border:1px solid #e8e8e8;border-radius:6px;position:relative;overflow:hidden}.attachment-image{cursor:pointer;max-width:120px;max-height:100px;display:block}.attachment-file{color:#1890ff;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;align-items:center;max-width:150px;padding:8px 12px;font-size:13px;display:flex;overflow:hidden}.attachment-file:hover{text-decoration:underline}.attachment-delete{color:#fff;cursor:pointer;background:#00000080;border:none;border-radius:50%;justify-content:center;align-items:center;width:20px;height:20px;font-size:14px;line-height:1;display:flex;position:absolute;top:2px;right:2px}.attachment-delete:hover{background:#ff4d4f}.paste-warning{color:#ad6800;background:#fffbe6;border:1px solid #ffe58f;border-radius:6px;margin-top:6px;padding:8px 12px;font-size:13px}.image-preview-overlay{z-index:3100;background:#000000d9;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.image-preview-content{max-width:90vw;max-height:90vh;position:relative}.image-preview-content img{max-width:100%;max-height:90vh;display:block}.image-preview-close{color:#fff;cursor:pointer;background:0 0;border:none;padding:8px;font-size:32px;line-height:1;position:absolute;top:-40px;right:0}.image-preview-close:hover{color:#1890ff}.image-preview-loading,.image-preview-error{color:#fff;text-align:center;padding:40px}.header-actions{align-items:center;gap:16px;display:flex}.btn-add-header{color:#fff;cursor:pointer;background:#1890ff;border:none;border-radius:6px;padding:8px 16px;font-size:14px}.btn-add-header:hover{background:#40a9ff}.user-menu{align-items:center;gap:8px;display:flex}.username{color:#666;font-size:14px}.btn-admin,.btn-logout{cursor:pointer;border-radius:6px;padding:6px 12px;font-size:13px}.btn-admin{color:#333;background:#faad14;border:none}.btn-admin:hover{background:#ffc53d}.btn-logout{color:#666;background:#fff;border:1px solid #d9d9d9}.btn-logout:hover{color:#ff4d4f;border-color:#ff4d4f}@media (width<=768px){.column{flex:0 0 260px}.header{flex-direction:column;align-items:flex-start}.header-actions{flex-direction:column;align-items:stretch}}.calendar{background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 1px 3px #0000001a}.calendar-header{border-bottom:1px solid #f0f0f0;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:16px;display:flex}.calendar-nav{gap:8px;display:flex}.calendar-nav button{cursor:pointer;background:#fff;border:1px solid #d9d9d9;border-radius:4px;padding:6px 12px}.calendar-nav button:hover{color:#1890ff;border-color:#1890ff}.calendar-title{color:#333;text-transform:capitalize;margin:0;font-size:18px}.calendar-views{gap:4px;display:flex}.calendar-views button{cursor:pointer;background:#fff;border:1px solid #d9d9d9;border-radius:4px;padding:6px 12px}.calendar-views button.active{color:#fff;background:#1890ff;border-color:#1890ff}.calendar-grid{padding:16px}.calendar-grid.day .calendar-days{display:block}.calendar-grid.week .calendar-days,.calendar-grid.month .calendar-days{grid-template-columns:repeat(7,1fr);display:grid}.calendar-weekdays{grid-template-columns:repeat(7,1fr);margin-bottom:8px;display:grid}.weekday{text-align:center;color:#666;padding:8px;font-size:13px;font-weight:500}.calendar-day{border:1px solid #f0f0f0;min-height:100px;padding:8px}.calendar-grid.day .calendar-day{min-height:400px}.calendar-grid.month .calendar-day{min-height:80px;font-size:13px}.calendar-day.today{background:#e6f7ff}.calendar-day.other-month{color:#ccc;background:#fafafa}.day-header{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}.day-total-inline{color:#666;font-size:11px}.day-footer-total{color:#666;border-top:1px dashed #d9d9d9;margin-top:8px;padding-top:8px;font-size:12px;font-weight:500}.day-number{border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-weight:500;display:inline-flex}.calendar-day.today .day-number{color:#fff;background:#1890ff}.day-tasks{flex-direction:column;gap:4px;display:flex}.calendar-task{cursor:pointer;background:#fafafa;border-left:3px solid;border-radius:4px;flex-wrap:wrap;align-items:baseline;gap:4px;padding:4px 8px;font-size:12px;display:flex}.calendar-task:hover{background:#f0f0f0}.calendar-grid.month .calendar-task{flex-direction:column;padding:2px 4px}.task-time{color:#666;font-size:11px}.task-title{color:#333;flex:1;font-weight:500}.task-customer{color:#999;font-size:11px}.no-tasks{color:#ccc;text-align:center;padding:20px}.calendar-month-summary{background:#fafafa;border-radius:8px;max-width:300px;margin-top:16px;padding:16px}.summary-row{background:#fff;border:1px solid #f0f0f0;border-radius:4px;justify-content:space-between;align-items:center;margin-bottom:4px;padding:8px 12px;font-size:13px;display:flex}.summary-month-total{background:#e6f7ff;border-color:#1890ff;font-weight:600}.summary-month-total span:first-child{color:#333}.summary-month-total span:last-child{color:#1890ff}.summary-weeks{margin-top:8px}.summary-weeks .summary-row{color:#666;font-size:12px}.summary-weeks .summary-row span:last-child{color:#333;font-weight:500}@media (width<=768px){.calendar-grid.week .calendar-days,.calendar-grid.month .calendar-days{grid-template-columns:repeat(7,1fr)}.calendar-day{min-height:60px;padding:4px}}.finance-board{max-width:1100px;margin:0 auto}.finance-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.finance-header h2{margin:0;font-size:20px}.finance-table{border-collapse:collapse;table-layout:fixed;background:#fff;border-radius:8px;width:100%;overflow:hidden;box-shadow:0 1px 3px #0000001a}.finance-table th{text-align:left;color:#666;white-space:nowrap;background:#f5f5f5;padding:10px 12px;font-size:13px;font-weight:600}.finance-table td{text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #f0f0f0;padding:10px 12px;overflow:hidden}.finance-table tr:hover{background:#fafafa}.paid-row{background:#f6ffed}.paid-row td{color:#52c41a}.modal-dbtool{flex-direction:column;width:1000px;max-width:95vw;max-height:85vh;display:flex;overflow:hidden}.db-tables-list{background:#fafafa;border:1px solid #e8e8e8;border-radius:6px;min-width:160px;max-height:500px;overflow-y:auto}.db-table-item{cursor:pointer;border-bottom:1px solid #f0f0f0;padding:6px 12px;font-family:monospace;font-size:13px}.db-table-item:hover{background:#e6f7ff}.db-table-item.selected{color:#fff;background:#1890ff}.db-data-wrap{max-height:400px;overflow:auto}.db-table{border-collapse:collapse;width:100%;font-size:12px}.db-table th{text-align:left;white-space:nowrap;background:#f5f5f5;padding:6px 8px;font-weight:600;position:sticky;top:0}.db-table td{white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid #f0f0f0;max-width:200px;padding:4px 8px;overflow:hidden}.db-table tr:hover td{background:#fafafa}.db-cell{cursor:pointer;min-width:60px}.db-cell:hover{background:#e6f7ff!important}.db-cell-input{box-sizing:border-box;border:2px solid #1890ff;border-radius:2px;outline:none;width:100%;padding:2px 4px;font-family:monospace;font-size:12px}.login-page{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);justify-content:center;align-items:center;min-height:100vh;display:flex}.login-card{background:#fff;border-radius:12px;width:360px;padding:40px;box-shadow:0 10px 40px #0003}.login-card h1{text-align:center;color:#333;margin:0 0 30px;font-size:24px}.login-card .form-group{margin-bottom:16px}.login-card label{color:#666;margin-bottom:6px;font-size:14px;display:block}.login-card input{box-sizing:border-box;border:1px solid #d9d9d9;border-radius:6px;width:100%;padding:10px 12px;font-size:14px}.login-card input:focus{border-color:#1890ff;outline:none;box-shadow:0 0 0 2px #1890ff33}.login-card button{color:#fff;cursor:pointer;background:#1890ff;border:none;border-radius:6px;width:100%;margin-top:8px;padding:10px;font-size:16px}.login-card button:hover{background:#40a9ff}.login-card button:disabled{cursor:not-allowed;background:#d9d9d9}.login-card .error{color:#ff4d4f;text-align:center;margin-bottom:12px;font-size:14px}.admin-overlay{z-index:2000;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.admin-panel{background:#fff;border-radius:8px;flex-direction:column;width:90vw;max-width:1000px;max-height:90vh;display:flex}.admin-header{border-bottom:1px solid #d9d9d9;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.admin-header h2{margin:0;font-size:18px}.btn-close{cursor:pointer;color:#999;background:0 0;border:none;font-size:24px}.btn-close:hover{color:#333}.admin-tabs{border-bottom:1px solid #d9d9d9;display:flex}.admin-tabs button{cursor:pointer;color:#666;background:0 0;border:none;border-bottom:2px solid #0000;padding:12px 20px;font-size:14px}.admin-tabs button:hover{color:#1890ff}.admin-tabs button.active{color:#1890ff;border-bottom-color:#1890ff}.admin-content{flex:1;padding:20px;overflow-y:auto}.tab-content{flex-direction:column;gap:16px;display:flex}.btn-add{color:#fff;cursor:pointer;background:#1890ff;border:none;border-radius:6px;align-self:flex-start;padding:8px 16px;font-size:14px}.btn-add:hover{background:#40a9ff}.admin-table{border-collapse:collapse;width:100%}.admin-table th,.admin-table td{text-align:left;border-bottom:1px solid #f0f0f0;padding:10px 12px}.admin-table th{color:#666;font-size:13px;font-weight:600}.admin-table tr:hover{background:#fafafa}.task-row{cursor:pointer}.role-badge{border-radius:4px;padding:2px 8px;font-size:12px}.role-badge.admin{color:#d48806;background:#ffd591}.role-badge.user{color:#666;background:#d9d9d9}.stage-badge{border-radius:4px;padding:2px 8px;font-size:12px}.stage-badge.todo{color:#cf1322;background:#fff1f0}.stage-badge.in-progress{color:#d48806;background:#fffbe6}.stage-badge.done{color:#389e0d;background:#f6ffed}.customer-tag{background:#e6f7ff;border-radius:4px;margin:2px;padding:2px 6px;font-size:11px;display:inline-block}.inline-form{background:#f5f5f5;border-radius:8px;flex-wrap:wrap;align-items:flex-start;gap:12px;padding:16px;display:flex}.inline-form input,.inline-form select{border:1px solid #d9d9d9;border-radius:6px;padding:8px 12px;font-size:14px}.inline-form input[type=text]{flex:1;min-width:150px}.inline-form input[type=password]{min-width:200px}.customer-checkboxes{flex-wrap:wrap;flex:100%;gap:12px;margin-top:8px;display:flex}.customer-checkboxes label{cursor:pointer;align-items:center;gap:4px;font-size:14px;display:flex}.form-actions{flex:100%;gap:8px;display:flex}.form-actions button{cursor:pointer;border-radius:6px;padding:8px 16px;font-size:14px}.form-actions button[type=submit]{color:#fff;background:#1890ff;border:none}.form-actions button[type=submit]:hover{background:#40a9ff}.form-actions .btn-cancel{color:#333;background:#fff;border:1px solid #d9d9d9}.form-actions .btn-cancel:hover{color:#1890ff;border-color:#1890ff}.admin-loading{text-align:center;color:#666;padding:40px}.customer-form{background:#fafafa;border:1px solid #e8e8e8;border-radius:8px;margin-bottom:16px;padding:16px}.customer-form .form-group{margin-bottom:12px}.customer-form .form-group label{color:#666;margin-bottom:4px;font-size:13px;display:block}.customer-form .form-group input{border:1px solid #d9d9d9;border-radius:6px;width:100%;padding:8px 12px;font-size:14px}.customer-form .form-group input:focus{border-color:#1890ff;outline:none}.customer-form .form-row{gap:12px;display:flex}.customer-form .form-row .form-group{flex:1}.customer-form .form-actions{gap:8px;margin-top:16px;display:flex}.customer-form .form-actions button{cursor:pointer;border-radius:6px;padding:8px 16px;font-size:14px}.customer-form .form-actions button[type=submit]{color:#fff;background:#1890ff;border:1px solid #1890ff}.customer-form .form-actions .btn-cancel{color:#333;background:#fff;border:1px solid #d9d9d9}
