oceanhelm 0.0.14 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -41,9 +41,11 @@
41
41
  <button class="btn btn-outline-secondary" @click="openReportForm('manual')">
42
42
  <i class="bi bi-file-earmark-plus"></i> Manual Report
43
43
  </button>
44
+ <!--
44
45
  <button class="btn btn-primary" @click="showNewFolderModal = true">
45
46
  <i class="bi bi-folder-plus"></i> New Folder
46
47
  </button>
48
+ -->
47
49
  </div>
48
50
  </div>
49
51
  </div>
@@ -272,8 +274,9 @@
272
274
  </span>
273
275
  </div>
274
276
  <div class="af-actions">
275
- <button class="rc-btn" style="color:#6f42c1;" @click.stop="selectFolder(folder)"
276
- title="Add Files">
277
+ <!-- FIX: opens manual report modal pre-linked to this folder -->
278
+ <button class="rc-btn" style="color:#6f42c1;"
279
+ @click.stop="openManualReportForFolder(folder)" title="Add Report / Files">
277
280
  <i class="bi bi-file-earmark-plus"></i>
278
281
  </button>
279
282
  <button class="rc-btn rc-btn--danger"
@@ -304,8 +307,10 @@
304
307
 
305
308
  <div class="ffi-empty" v-if="folder.files.length === 0">
306
309
  <i class="bi bi-inbox me-1"></i>Empty folder
307
- <button class="btn btn-sm btn-outline-secondary ms-2" @click="selectFolder(folder)">
308
- <i class="bi bi-file-earmark-plus me-1"></i>Add Files
310
+ <!-- FIX: opens manual report modal instead of raw file picker -->
311
+ <button class="btn btn-sm btn-outline-secondary ms-2"
312
+ @click="openManualReportForFolder(folder)">
313
+ <i class="bi bi-file-earmark-plus me-1"></i>Add Report
309
314
  </button>
310
315
  </div>
311
316
  </div>
@@ -362,8 +367,12 @@
362
367
  <i
363
368
  :class="reportForm.report_type === 'manual' ? 'bi bi-file-earmark-text me-2' : 'bi bi-shield-check me-2'"></i>
364
369
  {{ reportForm.report_type === 'manual' ? 'New Manual Report' : 'Submit QHSE Report' }}
370
+ <!-- Show folder context badge when opened from a folder -->
371
+ <span v-if="reportForm.folderName" class="folder-context-badge">
372
+ <i class="bi bi-folder-fill me-1"></i>{{ reportForm.folderName }}
373
+ </span>
365
374
  </h5>
366
- <div class="modal-type-toggle" v-if="!pendingContext">
375
+ <div class="modal-type-toggle" v-if="!pendingContext && !reportForm.folderId">
367
376
  <button :class="['type-toggle-btn', { active: reportForm.report_type === 'qhse' }]"
368
377
  @click="reportForm.report_type = 'qhse'">
369
378
  <i class="bi bi-shield-check me-1"></i>QHSE
@@ -689,7 +698,7 @@
689
698
  </div>
690
699
  </div>
691
700
 
692
- <!-- Hidden file input for user folders -->
701
+ <!-- Hidden file input for user folders (kept for legacy, no longer primary path) -->
693
702
  <input ref="fileInput" type="file" multiple style="display:none;" @change="handleFileSelection" />
694
703
  </div>
695
704
  </template>
@@ -785,7 +794,6 @@ export default {
785
794
  this.reportForm.entity_subtype = ctx.entity_subtype;
786
795
  this.reportForm.entity_duration = ctx.entity_duration;
787
796
  this.reportForm.entity_participants = ctx.entity_participants;
788
- // Pre-fill findings with the entity objective for incidents
789
797
  if (ctx.entity_type === 'incident' && ctx.entity_objectives) {
790
798
  this.reportForm.findings = ctx.entity_objectives;
791
799
  }
@@ -816,7 +824,7 @@ export default {
816
824
  emptyForm() {
817
825
  return {
818
826
  report_type: 'qhse', manual_category: 'General', manual_ref: '',
819
- title: '', submittedBy: '', vessel: '', folderId: '',
827
+ title: '', submittedBy: '', vessel: '', folderId: '', folderName: '',
820
828
  date: new Date().toISOString().split('T')[0],
821
829
  findings: '', correctiveActions: '', files: [],
822
830
  entity_type: '', entity_id: '', entity_ref: '', entity_label: '',
@@ -824,7 +832,6 @@ export default {
824
832
  entity_duration: '', entity_participants: null,
825
833
  selectedMissing: '',
826
834
  drillChecklist: [true, true, true, true, true],
827
- // incident-specific structured fields
828
835
  inc_consequences: '',
829
836
  inc_factors: '',
830
837
  inc_immediate_action: '',
@@ -899,6 +906,15 @@ export default {
899
906
  this.showReportModal = true;
900
907
  },
901
908
 
909
+ // ─── FIX: Open manual report modal pre-linked to a custom folder ─────────
910
+ openManualReportForFolder(folder) {
911
+ this.reportForm = this.emptyForm();
912
+ this.reportForm.report_type = 'manual';
913
+ this.reportForm.folderId = folder.id;
914
+ this.reportForm.folderName = folder.name;
915
+ this.showReportModal = true;
916
+ },
917
+
902
918
  closeReportForm() { this.showReportModal = false; },
903
919
 
904
920
  clearEntityLink() {
@@ -929,37 +945,49 @@ export default {
929
945
 
930
946
  requestSubmitReport() {
931
947
  if (!this.reportForm.title || !this.reportForm.submittedBy || !this.reportForm.findings) return;
932
- this.$emit('report-submit-requested', {
933
- entity_type: this.reportForm.report_type === 'manual' ? 'manual' : this.reportForm.entity_type,
934
- entity_id: this.reportForm.entity_id || null,
935
- entity_ref: this.reportForm.report_type === 'manual'
936
- ? (this.reportForm.manual_ref || null)
937
- : this.reportForm.entity_ref,
938
- title: this.reportForm.title,
939
- submittedBy: this.reportForm.submittedBy,
940
- vessel: this.reportForm.vessel || null,
941
- date: this.reportForm.date,
942
- findings: this.reportForm.findings,
943
- correctiveActions: this.reportForm.correctiveActions || null,
944
- folderId: null,
945
- folderName: null,
946
- manual_category: this.reportForm.report_type === 'manual' ? this.reportForm.manual_category : null,
947
- files: this.reportForm.files,
948
- // drill / incident enrichment fields
949
- entity_subtype: this.reportForm.entity_subtype || null,
950
- entity_creator: this.reportForm.entity_creator || null,
951
- entity_objectives: this.reportForm.entity_objectives || null,
952
- entity_duration: this.reportForm.entity_duration || null,
948
+
949
+ const isManual = this.reportForm.report_type === 'manual';
950
+
951
+ // ── FIX: never send entity_id for manual reports ──────────────────────
952
+ // The DB column has gen_random_uuid() as default, so omitting it
953
+ // (or sending undefined) lets Postgres generate it automatically.
954
+ // Sending null explicitly triggers the NOT NULL constraint violation.
955
+ const payload = {
956
+ entity_type: isManual ? 'manual' : (this.reportForm.entity_type || null),
957
+ entity_ref: isManual
958
+ ? (this.reportForm.manual_ref || null)
959
+ : (this.reportForm.entity_ref || null),
960
+ title: this.reportForm.title,
961
+ submittedBy: this.reportForm.submittedBy,
962
+ vessel: this.reportForm.vessel || null,
963
+ date: this.reportForm.date,
964
+ findings: this.reportForm.findings,
965
+ correctiveActions: this.reportForm.correctiveActions || null,
966
+ folderId: this.reportForm.folderId || null,
967
+ folderName: this.reportForm.folderName || null,
968
+ manual_category: isManual ? this.reportForm.manual_category : null,
969
+ files: this.reportForm.files,
970
+ entity_subtype: this.reportForm.entity_subtype || null,
971
+ entity_creator: this.reportForm.entity_creator || null,
972
+ entity_objectives: this.reportForm.entity_objectives || null,
973
+ entity_duration: this.reportForm.entity_duration || null,
953
974
  entity_participants: this.reportForm.entity_participants || null,
954
- drill_checklist: [...this.reportForm.drillChecklist],
955
- // incident structured fields
956
- inc_consequences: this.reportForm.inc_consequences || null,
957
- inc_factors: this.reportForm.inc_factors || null,
958
- inc_immediate_action: this.reportForm.inc_immediate_action || null,
959
- inc_direct_cause: this.reportForm.inc_direct_cause || null,
960
- inc_root_cause: this.reportForm.inc_root_cause || null,
961
- inc_remarks: this.reportForm.inc_remarks || null,
962
- });
975
+ drill_checklist: [...this.reportForm.drillChecklist],
976
+ inc_consequences: this.reportForm.inc_consequences || null,
977
+ inc_factors: this.reportForm.inc_factors || null,
978
+ inc_immediate_action:this.reportForm.inc_immediate_action || null,
979
+ inc_direct_cause: this.reportForm.inc_direct_cause || null,
980
+ inc_root_cause: this.reportForm.inc_root_cause || null,
981
+ inc_remarks: this.reportForm.inc_remarks || null,
982
+ };
983
+
984
+ // Only include entity_id when it's a real linked entity (drill/incident)
985
+ // For manual reports we omit the key entirely so the DB default fires
986
+ if (!isManual && this.reportForm.entity_id) {
987
+ payload.entity_id = this.reportForm.entity_id;
988
+ }
989
+
990
+ this.$emit('report-submit-requested', payload);
963
991
  },
964
992
 
965
993
  resetForm() { this.reportForm = this.emptyForm(); },
@@ -983,7 +1011,6 @@ export default {
983
1011
  this.viewingReport = null;
984
1012
  },
985
1013
 
986
- // Closes the modal immediately, then emits so ReportsView can confirm + delete
987
1014
  requestDeleteReport(reportId) {
988
1015
  this.closeViewer();
989
1016
  this.$emit('report-delete-requested', reportId);
@@ -1117,7 +1144,6 @@ export default {
1117
1144
  doc.text('Quality, Health, Safety & Environment Management System', pageW / 2, 17, { align: 'center' });
1118
1145
  y = 30;
1119
1146
 
1120
- // Ref badge
1121
1147
  if (report.entityRef) {
1122
1148
  doc.setFillColor(240, 245, 255);
1123
1149
  doc.roundedRect(pageW - margin - 44, 26, 44, 8, 2, 2, 'F');
@@ -1135,19 +1161,16 @@ export default {
1135
1161
  doc.line(margin + contentW / 2, y, margin + contentW / 2, y + 28);
1136
1162
  doc.line(margin, y + 14, margin + contentW / 2, y + 14);
1137
1163
 
1138
- // Vessel name
1139
1164
  doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);
1140
1165
  doc.text('VESSEL:', margin + 3, y + 6);
1141
1166
  doc.setFont('helvetica', 'bold'); doc.setTextColor(20, 20, 20); doc.setFontSize(10);
1142
1167
  doc.text(String(report.vessel || '—').toUpperCase(), margin + 22, y + 6);
1143
1168
 
1144
- // Date / place
1145
1169
  doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);
1146
1170
  doc.text('DATE / PLACE:', margin + 3, y + 20);
1147
1171
  doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);
1148
1172
  doc.text(`${report.date || '—'} / ${report.vessel || '—'}`, margin + 33, y + 20);
1149
1173
 
1150
- // Kind of drill
1151
1174
  const hx = margin + contentW / 2 + 3;
1152
1175
  doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);
1153
1176
  doc.text('KIND OF DRILL:', hx, y + 6);
@@ -1171,15 +1194,12 @@ export default {
1171
1194
  const participantCount = report.entity_participants || 0;
1172
1195
  sectionHeading(`Crew Participation — ${participantCount} member${participantCount !== 1 ? 's' : ''} participated`);
1173
1196
 
1174
- // Parse crew from findings if prefixed with CREW:
1175
1197
  const crewLines = (() => {
1176
1198
  const raw = (report.findings || '').trim();
1177
1199
  if (/^CREW:/i.test(raw)) {
1178
- // Everything up to first blank line after CREW: is the crew list
1179
1200
  const crewSection = raw.replace(/^CREW:\s*/i, '').split(/\n\n/)[0];
1180
1201
  return crewSection.split(/[\n,]+/).map(s => s.trim()).filter(Boolean);
1181
1202
  }
1182
- // Fallback: show drill master + submitter
1183
1203
  const list = [];
1184
1204
  if (report.entity_creator) list.push(`${report.entity_creator} (Drill Master)`);
1185
1205
  if (report.submittedBy && report.submittedBy !== report.entity_creator)
@@ -1187,7 +1207,6 @@ export default {
1187
1207
  return list;
1188
1208
  })();
1189
1209
 
1190
- // Table header
1191
1210
  checkPage(14);
1192
1211
  const colNr = margin, wNr = 12;
1193
1212
  const colName = margin + wNr, wName = contentW - wNr;
@@ -1222,7 +1241,7 @@ export default {
1222
1241
  }
1223
1242
  y += 4;
1224
1243
 
1225
- // ── Comments checklist — driven by report.drill_checklist ─────────────
1244
+ // ── Comments checklist ────────────────────────────────────────────────
1226
1245
  sectionHeading('Comments');
1227
1246
  const checkQuestions = [
1228
1247
  'Is the reaction of crew members satisfactory?',
@@ -1231,7 +1250,6 @@ export default {
1231
1250
  'Was debriefing conducted on completion of drill?',
1232
1251
  'Is time log of various activities marked on checklist?',
1233
1252
  ];
1234
- // Parse stored answers (array of booleans). Fall back to all-true if absent.
1235
1253
  const checkAnswers = (() => {
1236
1254
  const raw = report.drill_checklist || report.drillChecklist;
1237
1255
  if (Array.isArray(raw)) return raw;
@@ -1239,7 +1257,7 @@ export default {
1239
1257
  })();
1240
1258
  checkQuestions.forEach((q, idx) => {
1241
1259
  checkPage(9);
1242
- const yes = checkAnswers[idx] !== false; // undefined → true
1260
+ const yes = checkAnswers[idx] !== false;
1243
1261
  doc.setFontSize(8.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);
1244
1262
  doc.text(`${idx + 1}. ${q}`, margin + 3, y + 5);
1245
1263
  if (yes) {
@@ -1258,11 +1276,9 @@ export default {
1258
1276
  y += 3;
1259
1277
 
1260
1278
  // ── Drill scenario / findings ─────────────────────────────────────────
1261
- // Strip the CREW: block from findings before printing
1262
1279
  const scenarioText = (() => {
1263
1280
  const raw = (report.findings || '').trim();
1264
1281
  if (/^CREW:/i.test(raw)) {
1265
- // Remove everything up to the first blank line
1266
1282
  const parts = raw.split(/\n\n+/);
1267
1283
  return parts.slice(1).join('\n\n').trim();
1268
1284
  }
@@ -1282,7 +1298,7 @@ export default {
1282
1298
  y += 4;
1283
1299
  }
1284
1300
 
1285
- // ── Suggestions / corrective actions ─────────────────────────────────
1301
+ // ── Corrective actions ────────────────────────────────────────────────
1286
1302
  if (report.correctiveActions) {
1287
1303
  sectionHeading('Suggestions for Improvement & Corrective Actions');
1288
1304
  checkPage(10);
@@ -1323,9 +1339,6 @@ export default {
1323
1339
  } catch (e) { console.warn('Could not embed image', imgFile.name, e); }
1324
1340
  }
1325
1341
 
1326
- // ── Signature block ───────────────────────────────────────────────────
1327
-
1328
-
1329
1342
  // ── Footer ────────────────────────────────────────────────────────────
1330
1343
  const totalPages = doc.getNumberOfPages();
1331
1344
  for (let p = 1; p <= totalPages; p++) {
@@ -1352,12 +1365,6 @@ export default {
1352
1365
  if (y + needed > 275) { doc.addPage(); y = 20; }
1353
1366
  };
1354
1367
 
1355
- /**
1356
- * Bordered labelled box — mirrors the Near Miss Report form style.
1357
- * label — small-caps field label shown inside the top of the box
1358
- * text — content (may be null/empty — leaves a blank writable area)
1359
- * minHeight — minimum box height in mm
1360
- */
1361
1368
  const labelledBox = (label, text, minHeight = 18) => {
1362
1369
  const bodyText = text ? doc.splitTextToSize(String(text), contentW - 6) : [];
1363
1370
  const textH = bodyText.length * 5.5;
@@ -1368,13 +1375,11 @@ export default {
1368
1375
  doc.setLineWidth(0.35);
1369
1376
  doc.rect(margin, y, contentW, boxH, 'S');
1370
1377
 
1371
- // Label
1372
1378
  doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(70, 80, 100);
1373
1379
  const labelLines = doc.splitTextToSize(label.toUpperCase(), contentW - 6);
1374
1380
  labelLines.forEach((ll, i) => doc.text(ll, margin + 3, y + 5 + i * 4));
1375
1381
  const labelH = labelLines.length * 4 + 2;
1376
1382
 
1377
- // Thin rule under label
1378
1383
  doc.setDrawColor(200, 208, 220); doc.setLineWidth(0.2);
1379
1384
  doc.line(margin + 1, y + labelH + 2, margin + contentW - 1, y + labelH + 2);
1380
1385
 
@@ -1399,7 +1404,6 @@ export default {
1399
1404
  doc.text(`Date: ${report.date || '—'}`, pageW - margin, 13, { align: 'right' });
1400
1405
  y = 20;
1401
1406
 
1402
- // Form number + submitted by row
1403
1407
  doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);
1404
1408
  doc.text('FORM NUMBER:', margin, y + 4);
1405
1409
  doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);
@@ -1410,7 +1414,6 @@ export default {
1410
1414
  doc.text(report.submittedBy || '—', pageW / 2 + 28, y + 4);
1411
1415
  y += 10;
1412
1416
 
1413
- // ── 2-col meta: vessel | severity/type ───────────────────────────────
1414
1417
  const halfW = (contentW - 2) / 2;
1415
1418
  doc.setDrawColor(140, 150, 165); doc.setLineWidth(0.35);
1416
1419
  doc.rect(margin, y, halfW, 14, 'S');
@@ -1427,7 +1430,6 @@ export default {
1427
1430
  );
1428
1431
  y += 18;
1429
1432
 
1430
- // Management office + date
1431
1433
  doc.setDrawColor(140, 150, 165); doc.setLineWidth(0.35);
1432
1434
  doc.rect(margin, y, halfW, 10, 'S');
1433
1435
  doc.rect(margin + halfW + 2, y, halfW, 10, 'S');
@@ -1439,38 +1441,25 @@ export default {
1439
1441
  doc.text(report.date || '—', margin + halfW + 5, y + 9);
1440
1442
  y += 14;
1441
1443
 
1442
- // ── Labelled content boxes ────────────────────────────────────────────
1443
-
1444
1444
  labelledBox('Description of Event', report.findings, 24);
1445
-
1446
1445
  labelledBox(
1447
1446
  'Possible Consequences\n(e.g. Personal injury, damage, collision, grounding, fire, pollution etc.)',
1448
- report.inc_consequences || null,
1449
- 18
1447
+ report.inc_consequences || null, 18
1450
1448
  );
1451
-
1452
1449
  labelledBox(
1453
1450
  'Relevant Factors / Conditions Surrounding the Event\n(e.g. weather, lighting etc.)',
1454
- report.inc_factors || null,
1455
- 18
1451
+ report.inc_factors || null, 18
1456
1452
  );
1457
-
1458
1453
  labelledBox('Immediate Action Taken', report.inc_immediate_action || null, 16);
1459
-
1460
1454
  labelledBox(
1461
1455
  'Direct Cause\n(e.g. failure to follow procedures, inadequate or defective equipment etc.)',
1462
- report.inc_direct_cause || null,
1463
- 18
1456
+ report.inc_direct_cause || null, 18
1464
1457
  );
1465
-
1466
1458
  labelledBox(
1467
1459
  'Root Cause\n(e.g. lack of training, personal factors, job factors, control management factors, instructions not clear etc.)',
1468
- report.inc_root_cause || null,
1469
- 18
1460
+ report.inc_root_cause || null, 18
1470
1461
  );
1471
-
1472
1462
  labelledBox('Action Taken on Board to Avoid Re-occurrence', report.correctiveActions || null, 18);
1473
-
1474
1463
  labelledBox('Any Other Remarks', report.inc_remarks || null, 16);
1475
1464
 
1476
1465
  // ── Embedded images ───────────────────────────────────────────────────
@@ -1495,14 +1484,12 @@ export default {
1495
1484
  } catch (e) { console.warn('Could not embed image', imgFile.name, e); }
1496
1485
  }
1497
1486
 
1498
- // ── Closed-out note ───────────────────────────────────────────────────
1499
1487
  checkPage(14);
1500
1488
  y += 4;
1501
1489
  doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(100, 110, 130);
1502
1490
  doc.text('Closed out on board / Office support required (delete as applicable)', margin, y);
1503
1491
  y += 8;
1504
1492
 
1505
- // ── Footer ────────────────────────────────────────────────────────────
1506
1493
  const totalPages = doc.getNumberOfPages();
1507
1494
  for (let p = 1; p <= totalPages; p++) {
1508
1495
  doc.setPage(p);
@@ -1682,6 +1669,7 @@ export default {
1682
1669
  this.activeTab = 'folders';
1683
1670
  },
1684
1671
 
1672
+ // Legacy raw file picker — kept in case parent still uses files-add-requested directly
1685
1673
  selectFolder(folder) { this.selectedFolder = folder; this.$refs.fileInput.click(); },
1686
1674
 
1687
1675
  handleFileSelection(event) {
@@ -1921,15 +1909,8 @@ export default {
1921
1909
  }
1922
1910
 
1923
1911
  @keyframes flash-highlight {
1924
-
1925
- 0%,
1926
- 100% {
1927
- background: #fffbf0
1928
- }
1929
-
1930
- 50% {
1931
- background: #fff3cd
1932
- }
1912
+ 0%, 100% { background: #fffbf0 }
1913
+ 50% { background: #fff3cd }
1933
1914
  }
1934
1915
 
1935
1916
  .rc-type-bar {
@@ -1940,17 +1921,9 @@ export default {
1940
1921
  width: 4px;
1941
1922
  }
1942
1923
 
1943
- .rc-type-bar.drill {
1944
- background: #17a2b8;
1945
- }
1946
-
1947
- .rc-type-bar.incident {
1948
- background: #dc3545;
1949
- }
1950
-
1951
- .rc-type-bar.manual {
1952
- background: #6f42c1;
1953
- }
1924
+ .rc-type-bar.drill { background: #17a2b8; }
1925
+ .rc-type-bar.incident { background: #dc3545; }
1926
+ .rc-type-bar.manual { background: #6f42c1; }
1954
1927
 
1955
1928
  .rc-badge {
1956
1929
  font-size: 9px;
@@ -1962,20 +1935,9 @@ export default {
1962
1935
  flex-shrink: 0;
1963
1936
  }
1964
1937
 
1965
- .rc-badge.drill {
1966
- background: #d1ecf1;
1967
- color: #0c5460;
1968
- }
1969
-
1970
- .rc-badge.incident {
1971
- background: #f8d7da;
1972
- color: #721c24;
1973
- }
1974
-
1975
- .rc-badge.manual {
1976
- background: #ede9f6;
1977
- color: #383d72;
1978
- }
1938
+ .rc-badge.drill { background: #d1ecf1; color: #0c5460; }
1939
+ .rc-badge.incident { background: #f8d7da; color: #721c24; }
1940
+ .rc-badge.manual { background: #ede9f6; color: #383d72; }
1979
1941
 
1980
1942
  .rc-body {
1981
1943
  display: flex;
@@ -2032,27 +1994,10 @@ export default {
2032
1994
  text-overflow: ellipsis;
2033
1995
  }
2034
1996
 
2035
- .rc-folder-pill.drill {
2036
- background: #e8f7fa;
2037
- border-color: #17a2b8;
2038
- color: #0c5460;
2039
- }
2040
-
2041
- .rc-folder-pill.incident {
2042
- background: #fce8ea;
2043
- border-color: #dc3545;
2044
- color: #721c24;
2045
- }
2046
-
2047
- .rc-folder-pill.manual {
2048
- background: #f0ebfa;
2049
- border-color: #6f42c1;
2050
- color: #383d72;
2051
- }
2052
-
2053
- .rc-folder-pill:hover {
2054
- filter: brightness(.92);
2055
- }
1997
+ .rc-folder-pill.drill { background: #e8f7fa; border-color: #17a2b8; color: #0c5460; }
1998
+ .rc-folder-pill.incident { background: #fce8ea; border-color: #dc3545; color: #721c24; }
1999
+ .rc-folder-pill.manual { background: #f0ebfa; border-color: #6f42c1; color: #383d72; }
2000
+ .rc-folder-pill:hover { filter: brightness(.92); }
2056
2001
 
2057
2002
  .rc-actions {
2058
2003
  display: flex;
@@ -2076,35 +2021,25 @@ export default {
2076
2021
  color: #495057;
2077
2022
  }
2078
2023
 
2079
- .rc-btn:disabled {
2080
- opacity: .5;
2081
- cursor: not-allowed;
2082
- }
2083
-
2084
- .rc-btn--view:hover:not(:disabled) {
2085
- background: #2a5298;
2086
- color: #fff;
2087
- border-color: #2a5298;
2088
- }
2089
-
2090
- .rc-btn--download {
2091
- color: #28a745;
2092
- }
2093
-
2094
- .rc-btn--download:hover:not(:disabled) {
2095
- background: #28a745;
2096
- color: #fff;
2097
- border-color: #28a745;
2098
- }
2024
+ .rc-btn:disabled { opacity: .5; cursor: not-allowed; }
2025
+ .rc-btn--view:hover:not(:disabled) { background: #2a5298; color: #fff; border-color: #2a5298; }
2026
+ .rc-btn--download { color: #28a745; }
2027
+ .rc-btn--download:hover:not(:disabled) { background: #28a745; color: #fff; border-color: #28a745; }
2028
+ .rc-btn--danger { color: #dc3545; }
2029
+ .rc-btn--danger:hover:not(:disabled) { background: #dc3545; color: #fff; border-color: #dc3545; }
2099
2030
 
2100
- .rc-btn--danger {
2101
- color: #dc3545;
2102
- }
2103
-
2104
- .rc-btn--danger:hover:not(:disabled) {
2105
- background: #dc3545;
2106
- color: #fff;
2107
- border-color: #dc3545;
2031
+ /* ─── Folder context badge in modal header ─── */
2032
+ .folder-context-badge {
2033
+ display: inline-flex;
2034
+ align-items: center;
2035
+ font-size: 11px;
2036
+ font-weight: 600;
2037
+ background: rgba(255, 255, 255, .2);
2038
+ border: 1px solid rgba(255, 255, 255, .35);
2039
+ border-radius: 12px;
2040
+ padding: 2px 10px;
2041
+ margin-left: 10px;
2042
+ color: rgba(255, 255, 255, .9);
2108
2043
  }
2109
2044
 
2110
2045
  /* ─── Crew hint ─── */
@@ -2171,22 +2106,12 @@ export default {
2171
2106
  transition: border-color .18s;
2172
2107
  }
2173
2108
 
2174
- .auto-folder-card.drill {
2175
- border-left: 4px solid #17a2b8;
2176
- }
2177
-
2178
- .auto-folder-card.incident {
2179
- border-left: 4px solid #dc3545;
2180
- }
2181
-
2182
- .auto-folder-card.manual {
2183
- border-left: 4px solid #6f42c1;
2184
- }
2109
+ .auto-folder-card.drill { border-left: 4px solid #17a2b8; }
2110
+ .auto-folder-card.incident { border-left: 4px solid #dc3545; }
2111
+ .auto-folder-card.manual { border-left: 4px solid #6f42c1; }
2185
2112
 
2186
2113
  .auto-folder-card:hover,
2187
- .auto-folder-card.is-open {
2188
- border-color: #adb5bd;
2189
- }
2114
+ .auto-folder-card.is-open { border-color: #adb5bd; }
2190
2115
 
2191
2116
  .user-folder-card {
2192
2117
  border: 1.5px solid #e9ecef;
@@ -2198,9 +2123,7 @@ export default {
2198
2123
  }
2199
2124
 
2200
2125
  .user-folder-card:hover,
2201
- .user-folder-card.is-open {
2202
- border-color: #adb5bd;
2203
- }
2126
+ .user-folder-card.is-open { border-color: #adb5bd; }
2204
2127
 
2205
2128
  .af-header {
2206
2129
  display: flex;
@@ -2212,34 +2135,19 @@ export default {
2212
2135
  transition: background .15s;
2213
2136
  }
2214
2137
 
2215
- .af-header:hover {
2216
- background: #f8f9fa;
2217
- }
2138
+ .af-header:hover { background: #f8f9fa; }
2218
2139
 
2219
2140
  .af-icon-wrap {
2220
2141
  position: relative;
2221
2142
  flex-shrink: 0;
2222
2143
  }
2223
2144
 
2224
- .af-folder-icon {
2225
- font-size: 2.1rem;
2226
- }
2227
-
2228
- .color--drill {
2229
- color: #17a2b8;
2230
- }
2231
-
2232
- .color--incident {
2233
- color: #dc3545;
2234
- }
2145
+ .af-folder-icon { font-size: 2.1rem; }
2235
2146
 
2236
- .color--manual {
2237
- color: #6f42c1;
2238
- }
2239
-
2240
- .color--user {
2241
- color: #f0ad4e;
2242
- }
2147
+ .color--drill { color: #17a2b8; }
2148
+ .color--incident { color: #dc3545; }
2149
+ .color--manual { color: #6f42c1; }
2150
+ .color--user { color: #f0ad4e; }
2243
2151
 
2244
2152
  .af-count-badge {
2245
2153
  position: absolute;
@@ -2333,9 +2241,7 @@ export default {
2333
2241
  transition: border-color .15s;
2334
2242
  }
2335
2243
 
2336
- .ffi:hover {
2337
- border-color: #adb5bd;
2338
- }
2244
+ .ffi:hover { border-color: #adb5bd; }
2339
2245
 
2340
2246
  .ffi--report {
2341
2247
  border-color: #c5d0ee;
@@ -2343,9 +2249,7 @@ export default {
2343
2249
  cursor: pointer;
2344
2250
  }
2345
2251
 
2346
- .ffi--report:hover {
2347
- border-color: #2a5298;
2348
- }
2252
+ .ffi--report:hover { border-color: #2a5298; }
2349
2253
 
2350
2254
  .ffi-icon {
2351
2255
  width: 34px;
@@ -2358,20 +2262,9 @@ export default {
2358
2262
  flex-shrink: 0;
2359
2263
  }
2360
2264
 
2361
- .ffi-icon--pdf {
2362
- background: #ffeaea;
2363
- color: #dc3545;
2364
- }
2365
-
2366
- .ffi-icon--img {
2367
- background: #e8f5e9;
2368
- color: #28a745;
2369
- }
2370
-
2371
- .ffi-icon--generic {
2372
- background: #e9ecef;
2373
- color: #6c757d;
2374
- }
2265
+ .ffi-icon--pdf { background: #ffeaea; color: #dc3545; }
2266
+ .ffi-icon--img { background: #e8f5e9; color: #28a745; }
2267
+ .ffi-icon--generic { background: #e9ecef; color: #6c757d; }
2375
2268
 
2376
2269
  .ffi-meta {
2377
2270
  flex: 1;
@@ -2390,10 +2283,7 @@ export default {
2390
2283
  text-overflow: ellipsis;
2391
2284
  }
2392
2285
 
2393
- .ffi-sub {
2394
- font-size: 11px;
2395
- color: #6c757d;
2396
- }
2286
+ .ffi-sub { font-size: 11px; color: #6c757d; }
2397
2287
 
2398
2288
  .ffi-acts {
2399
2289
  display: flex;
@@ -2433,20 +2323,9 @@ export default {
2433
2323
  flex-shrink: 0;
2434
2324
  }
2435
2325
 
2436
- .mini-badge.drill {
2437
- background: #d1ecf1;
2438
- color: #0c5460;
2439
- }
2440
-
2441
- .mini-badge.incident {
2442
- background: #f8d7da;
2443
- color: #721c24;
2444
- }
2445
-
2446
- .mini-badge.manual {
2447
- background: #ede9f6;
2448
- color: #383d72;
2449
- }
2326
+ .mini-badge.drill { background: #d1ecf1; color: #0c5460; }
2327
+ .mini-badge.incident { background: #f8d7da; color: #721c24; }
2328
+ .mini-badge.manual { background: #ede9f6; color: #383d72; }
2450
2329
 
2451
2330
  /* ─── Modals ─── */
2452
2331
  .modal {
@@ -2459,9 +2338,7 @@ export default {
2459
2338
  justify-content: center;
2460
2339
  }
2461
2340
 
2462
- .modal.show {
2463
- display: flex;
2464
- }
2341
+ .modal.show { display: flex; }
2465
2342
 
2466
2343
  .modal-dialog {
2467
2344
  max-width: 500px;
@@ -2469,9 +2346,7 @@ export default {
2469
2346
  margin: 1.5rem auto;
2470
2347
  }
2471
2348
 
2472
- .modal-dialog.modal-lg {
2473
- max-width: 780px;
2474
- }
2349
+ .modal-dialog.modal-lg { max-width: 780px; }
2475
2350
 
2476
2351
  .modal-content {
2477
2352
  background: #fff;
@@ -2531,15 +2406,8 @@ export default {
2531
2406
  transition: all .2s;
2532
2407
  }
2533
2408
 
2534
- .type-toggle-btn.active {
2535
- background: #fff;
2536
- color: #2a5298;
2537
- }
2538
-
2539
- .type-toggle-btn:hover:not(.active) {
2540
- color: #fff;
2541
- background: rgba(255, 255, 255, .2);
2542
- }
2409
+ .type-toggle-btn.active { background: #fff; color: #2a5298; }
2410
+ .type-toggle-btn:hover:not(.active) { color: #fff; background: rgba(255, 255, 255, .2); }
2543
2411
 
2544
2412
  .btn-close {
2545
2413
  background: transparent;
@@ -2550,9 +2418,7 @@ export default {
2550
2418
  color: inherit;
2551
2419
  }
2552
2420
 
2553
- .btn-close:hover {
2554
- opacity: 1;
2555
- }
2421
+ .btn-close:hover { opacity: 1; }
2556
2422
 
2557
2423
  /* ─── Report Form ─── */
2558
2424
  .rpt-entity-box {
@@ -2579,20 +2445,9 @@ export default {
2579
2445
  flex-shrink: 0;
2580
2446
  }
2581
2447
 
2582
- .entity-chip.drill {
2583
- background: #d1ecf1;
2584
- color: #0c5460;
2585
- }
2586
-
2587
- .entity-chip.incident {
2588
- background: #f8d7da;
2589
- color: #721c24;
2590
- }
2591
-
2592
- .entity-chip.manual {
2593
- background: #ede9f6;
2594
- color: #383d72;
2595
- }
2448
+ .entity-chip.drill { background: #d1ecf1; color: #0c5460; }
2449
+ .entity-chip.incident { background: #f8d7da; color: #721c24; }
2450
+ .entity-chip.manual { background: #ede9f6; color: #383d72; }
2596
2451
 
2597
2452
  .input-row {
2598
2453
  display: grid;
@@ -2636,14 +2491,8 @@ export default {
2636
2491
  box-shadow: 0 0 0 3px rgba(42, 82, 152, .1);
2637
2492
  }
2638
2493
 
2639
- textarea.form-control {
2640
- resize: vertical;
2641
- min-height: 80px;
2642
- }
2643
-
2644
- select.form-control {
2645
- cursor: pointer;
2646
- }
2494
+ textarea.form-control { resize: vertical; min-height: 80px; }
2495
+ select.form-control { cursor: pointer; }
2647
2496
 
2648
2497
  .file-drop-zone {
2649
2498
  border: 2px dashed #ced4da;
@@ -2655,9 +2504,7 @@ select.form-control {
2655
2504
  min-height: 80px;
2656
2505
  }
2657
2506
 
2658
- .file-drop-zone:hover {
2659
- border-color: #2a5298;
2660
- }
2507
+ .file-drop-zone:hover { border-color: #2a5298; }
2661
2508
 
2662
2509
  .attached-files {
2663
2510
  display: flex;
@@ -2685,9 +2532,7 @@ select.form-control {
2685
2532
  transition: background .15s;
2686
2533
  }
2687
2534
 
2688
- .attached-chip--link:hover {
2689
- background: #dce4f8;
2690
- }
2535
+ .attached-chip--link:hover { background: #dce4f8; }
2691
2536
 
2692
2537
  .attached-chip button {
2693
2538
  background: none;
@@ -2718,11 +2563,7 @@ select.form-control {
2718
2563
  margin-bottom: 20px;
2719
2564
  }
2720
2565
 
2721
- .view-item {
2722
- display: flex;
2723
- flex-direction: column;
2724
- gap: 3px;
2725
- }
2566
+ .view-item { display: flex; flex-direction: column; gap: 3px; }
2726
2567
 
2727
2568
  .view-item label {
2728
2569
  font-size: 11px;
@@ -2732,10 +2573,7 @@ select.form-control {
2732
2573
  color: #6c757d;
2733
2574
  }
2734
2575
 
2735
- .view-item span {
2736
- font-size: 14px;
2737
- color: #212529;
2738
- }
2576
+ .view-item span { font-size: 14px; color: #212529; }
2739
2577
 
2740
2578
  .ref-mono {
2741
2579
  font-family: monospace;
@@ -2744,9 +2582,7 @@ select.form-control {
2744
2582
  font-weight: 700;
2745
2583
  }
2746
2584
 
2747
- .view-section {
2748
- margin-bottom: 18px;
2749
- }
2585
+ .view-section { margin-bottom: 18px; }
2750
2586
 
2751
2587
  .view-section label {
2752
2588
  font-size: 12px;
@@ -2782,99 +2618,26 @@ select.form-control {
2782
2618
  gap: 6px;
2783
2619
  }
2784
2620
 
2785
- .btn:disabled {
2786
- opacity: .6;
2787
- cursor: not-allowed;
2788
- }
2789
-
2790
- .btn-primary {
2791
- background: #2a5298;
2792
- color: #fff;
2793
- }
2794
-
2795
- .btn-primary:hover:not(:disabled) {
2796
- background: #1e3c72;
2797
- }
2798
-
2799
- .btn-success {
2800
- background: #28a745;
2801
- color: #fff;
2802
- }
2803
-
2804
- .btn-success:hover:not(:disabled) {
2805
- background: #218838;
2806
- }
2807
-
2808
- .btn-secondary {
2809
- background: #6c757d;
2810
- color: #fff;
2811
- }
2812
-
2813
- .btn-secondary:hover:not(:disabled) {
2814
- background: #5a6268;
2815
- }
2816
-
2817
- .btn-danger {
2818
- background: #dc3545;
2819
- color: #fff;
2820
- }
2821
-
2822
- .btn-danger:hover:not(:disabled) {
2823
- background: #c82333;
2824
- }
2825
-
2826
- .btn-warning {
2827
- background: #f0ad4e;
2828
- color: #664d03;
2829
- }
2830
-
2831
- .btn-warning:hover {
2832
- background: #e0972e;
2833
- }
2834
-
2835
- .btn-outline-primary {
2836
- background: transparent;
2837
- border: 1.5px solid #2a5298;
2838
- color: #2a5298;
2839
- }
2840
-
2841
- .btn-outline-primary:hover:not(:disabled) {
2842
- background: #2a5298;
2843
- color: #fff;
2844
- }
2845
-
2846
- .btn-outline-secondary {
2847
- background: transparent;
2848
- border: 1.5px solid #6c757d;
2849
- color: #6c757d;
2850
- }
2851
-
2852
- .btn-outline-secondary:hover:not(:disabled) {
2853
- background: #6c757d;
2854
- color: #fff;
2855
- }
2856
-
2857
- .btn-link {
2858
- background: none;
2859
- border: none;
2860
- padding: 0;
2861
- font-size: 13px;
2862
- text-decoration: none;
2863
- cursor: pointer;
2864
- }
2865
-
2866
- .btn-sm {
2867
- padding: 5px 12px;
2868
- font-size: 12px;
2869
- }
2621
+ .btn:disabled { opacity: .6; cursor: not-allowed; }
2622
+ .btn-primary { background: #2a5298; color: #fff; }
2623
+ .btn-primary:hover:not(:disabled) { background: #1e3c72; }
2624
+ .btn-success { background: #28a745; color: #fff; }
2625
+ .btn-success:hover:not(:disabled) { background: #218838; }
2626
+ .btn-secondary { background: #6c757d; color: #fff; }
2627
+ .btn-secondary:hover:not(:disabled) { background: #5a6268; }
2628
+ .btn-danger { background: #dc3545; color: #fff; }
2629
+ .btn-danger:hover:not(:disabled) { background: #c82333; }
2630
+ .btn-warning { background: #f0ad4e; color: #664d03; }
2631
+ .btn-warning:hover { background: #e0972e; }
2632
+ .btn-outline-primary { background: transparent; border: 1.5px solid #2a5298; color: #2a5298; }
2633
+ .btn-outline-primary:hover:not(:disabled) { background: #2a5298; color: #fff; }
2634
+ .btn-outline-secondary { background: transparent; border: 1.5px solid #6c757d; color: #6c757d; }
2635
+ .btn-outline-secondary:hover:not(:disabled) { background: #6c757d; color: #fff; }
2636
+ .btn-link { background: none; border: none; padding: 0; font-size: 13px; text-decoration: none; cursor: pointer; }
2637
+ .btn-sm { padding: 5px 12px; font-size: 12px; }
2870
2638
 
2871
2639
  /* ─── Loading / Spinners ─── */
2872
- .loading-container {
2873
- display: flex;
2874
- flex-direction: column;
2875
- align-items: center;
2876
- padding: 40px 20px;
2877
- }
2640
+ .loading-container { display: flex; flex-direction: column; align-items: center; padding: 40px 20px; }
2878
2641
 
2879
2642
  .spinner {
2880
2643
  border: 4px solid #f3f3f3;
@@ -2906,96 +2669,30 @@ select.form-control {
2906
2669
  animation: spin .7s linear infinite;
2907
2670
  }
2908
2671
 
2909
- @keyframes spin {
2910
- to {
2911
- transform: rotate(360deg);
2912
- }
2913
- }
2672
+ @keyframes spin { to { transform: rotate(360deg); } }
2914
2673
 
2915
2674
  /* ─── Utilities ─── */
2916
- .fw-bold {
2917
- font-weight: 700;
2918
- }
2919
-
2920
- .fw-semibold {
2921
- font-weight: 600;
2922
- }
2923
-
2924
- .me-1 {
2925
- margin-right: 4px;
2926
- }
2927
-
2928
- .me-2 {
2929
- margin-right: 8px;
2930
- }
2931
-
2932
- .me-auto {
2933
- margin-right: auto;
2934
- }
2935
-
2936
- .ms-1 {
2937
- margin-left: 4px;
2938
- }
2939
-
2940
- .ms-2 {
2941
- margin-left: 8px;
2942
- }
2943
-
2944
- .mt-2 {
2945
- margin-top: 8px;
2946
- }
2947
-
2948
- .mt-3 {
2949
- margin-top: 16px;
2950
- }
2951
-
2952
- .mt-4 {
2953
- margin-top: 24px;
2954
- }
2955
-
2956
- .mb-0 {
2957
- margin-bottom: 0;
2958
- }
2959
-
2960
- .text-muted {
2961
- color: #6c757d !important;
2962
- }
2963
-
2964
- .text-danger {
2965
- color: #dc3545 !important;
2966
- }
2967
-
2968
- .text-success {
2969
- color: #28a745 !important;
2970
- }
2971
-
2972
- .text-primary {
2973
- color: #2a5298 !important;
2974
- }
2975
-
2976
- .text-warning {
2977
- color: #f0ad4e !important;
2978
- }
2979
-
2980
- .d-flex {
2981
- display: flex;
2982
- }
2983
-
2984
- .gap-2 {
2985
- gap: 8px;
2986
- }
2987
-
2988
- .justify-content-between {
2989
- justify-content: space-between;
2990
- }
2991
-
2992
- .text-center {
2993
- text-align: center;
2994
- }
2995
-
2996
- .empty-state {
2997
- padding: 60px 20px;
2998
- }
2675
+ .fw-bold { font-weight: 700; }
2676
+ .fw-semibold { font-weight: 600; }
2677
+ .me-1 { margin-right: 4px; }
2678
+ .me-2 { margin-right: 8px; }
2679
+ .me-auto { margin-right: auto; }
2680
+ .ms-1 { margin-left: 4px; }
2681
+ .ms-2 { margin-left: 8px; }
2682
+ .mt-2 { margin-top: 8px; }
2683
+ .mt-3 { margin-top: 16px; }
2684
+ .mt-4 { margin-top: 24px; }
2685
+ .mb-0 { margin-bottom: 0; }
2686
+ .text-muted { color: #6c757d !important; }
2687
+ .text-danger { color: #dc3545 !important; }
2688
+ .text-success { color: #28a745 !important; }
2689
+ .text-primary { color: #2a5298 !important; }
2690
+ .text-warning { color: #f0ad4e !important; }
2691
+ .d-flex { display: flex; }
2692
+ .gap-2 { gap: 8px; }
2693
+ .justify-content-between { justify-content: space-between; }
2694
+ .text-center { text-align: center; }
2695
+ .empty-state { padding: 60px 20px; }
2999
2696
 
3000
2697
  /* ─── Incident Fields Box ─── */
3001
2698
  .incident-fields-box {
@@ -3019,12 +2716,7 @@ select.form-control {
3019
2716
  gap: 6px;
3020
2717
  }
3021
2718
 
3022
- .field-hint {
3023
- font-size: 11px;
3024
- color: #adb5bd;
3025
- margin-bottom: 4px;
3026
- margin-top: -2px;
3027
- }
2719
+ .field-hint { font-size: 11px; color: #adb5bd; margin-bottom: 4px; margin-top: -2px; }
3028
2720
 
3029
2721
  /* ─── Drill Checklist ─── */
3030
2722
  .drill-checklist-box {
@@ -3045,18 +2737,9 @@ select.form-control {
3045
2737
  gap: 6px;
3046
2738
  }
3047
2739
 
3048
- .checklist-hint {
3049
- font-size: 11px;
3050
- font-weight: 400;
3051
- color: #adb5bd;
3052
- margin-left: 4px;
3053
- }
2740
+ .checklist-hint { font-size: 11px; font-weight: 400; color: #adb5bd; margin-left: 4px; }
3054
2741
 
3055
- .checklist-grid {
3056
- display: flex;
3057
- flex-direction: column;
3058
- gap: 6px;
3059
- }
2742
+ .checklist-grid { display: flex; flex-direction: column; gap: 6px; }
3060
2743
 
3061
2744
  .checklist-item {
3062
2745
  display: flex;
@@ -3071,19 +2754,10 @@ select.form-control {
3071
2754
  user-select: none;
3072
2755
  }
3073
2756
 
3074
- .checklist-item:hover {
3075
- border-color: #2a5298;
3076
- background: #f5f8ff;
3077
- }
2757
+ .checklist-item:hover { border-color: #2a5298; background: #f5f8ff; }
2758
+ .checklist-item.checked { border-color: #28a745; background: #f0fff4; }
3078
2759
 
3079
- .checklist-item.checked {
3080
- border-color: #28a745;
3081
- background: #f0fff4;
3082
- }
3083
-
3084
- .checklist-checkbox input[type="checkbox"] {
3085
- display: none;
3086
- }
2760
+ .checklist-checkbox input[type="checkbox"] { display: none; }
3087
2761
 
3088
2762
  .custom-check {
3089
2763
  width: 22px;
@@ -3098,23 +2772,10 @@ select.form-control {
3098
2772
  transition: all .18s;
3099
2773
  }
3100
2774
 
3101
- .checklist-item.checked .custom-check {
3102
- background: #28a745;
3103
- border-color: #28a745;
3104
- color: #fff;
3105
- }
2775
+ .checklist-item.checked .custom-check { background: #28a745; border-color: #28a745; color: #fff; }
2776
+ .checklist-item:not(.checked) .custom-check { background: #fff8f8; border-color: #dc3545; color: #dc3545; }
3106
2777
 
3107
- .checklist-item:not(.checked) .custom-check {
3108
- background: #fff8f8;
3109
- border-color: #dc3545;
3110
- color: #dc3545;
3111
- }
3112
-
3113
- .checklist-q {
3114
- flex: 1;
3115
- font-size: 13px;
3116
- color: #212529;
3117
- }
2778
+ .checklist-q { flex: 1; font-size: 13px; color: #212529; }
3118
2779
 
3119
2780
  .checklist-answer {
3120
2781
  font-size: 10px;
@@ -3124,46 +2785,16 @@ select.form-control {
3124
2785
  flex-shrink: 0;
3125
2786
  }
3126
2787
 
3127
- .answer-yes {
3128
- background: #d4edda;
3129
- color: #155724;
3130
- }
3131
-
3132
- .answer-no {
3133
- background: #f8d7da;
3134
- color: #721c24;
3135
- }
2788
+ .answer-yes { background: #d4edda; color: #155724; }
2789
+ .answer-no { background: #f8d7da; color: #721c24; }
3136
2790
 
3137
2791
  @media (max-width: 640px) {
3138
- .input-row {
3139
- grid-template-columns: 1fr;
3140
- }
3141
-
3142
- .btn-group-split {
3143
- gap: 5px;
3144
- }
3145
-
3146
- .btn {
3147
- padding: 8px 12px;
3148
- font-size: 12px;
3149
- }
3150
-
3151
- .tab-btn {
3152
- padding: 8px 10px;
3153
- font-size: 12px;
3154
- }
3155
-
3156
- .modal-type-toggle {
3157
- display: none;
3158
- }
3159
-
3160
- .rc-folder-pill {
3161
- display: none;
3162
- }
3163
-
3164
- .af-header {
3165
- padding: 12px 14px;
3166
- gap: 10px;
3167
- }
2792
+ .input-row { grid-template-columns: 1fr; }
2793
+ .btn-group-split { gap: 5px; }
2794
+ .btn { padding: 8px 12px; font-size: 12px; }
2795
+ .tab-btn { padding: 8px 10px; font-size: 12px; }
2796
+ .modal-type-toggle { display: none; }
2797
+ .rc-folder-pill { display: none; }
2798
+ .af-header { padding: 12px 14px; gap: 10px; }
3168
2799
  }
3169
2800
  </style>