internationalscholarsprogram commited on
Commit
bfa206e
Β·
1 Parent(s): ec94fc1

fix: complete CSS rewrite - clean layout, no negative-margin tricks

Browse files

Replaced entire print.css with corrected version:
- Removed duplicate reset blocks and broken CSS cascade
- Removed negative-margin/negative-offset layout tricks
- Right-side label kept within page box (position:fixed top:0 right:0)
- All decorative elements no longer break content flow
- Clean section-specific overrides for ISP handbook spec
- All 93 tests pass

app/static/css/print.css CHANGED
@@ -1,42 +1,19 @@
1
- /* =================================================================
2
- ISP Handbook – Print Stylesheet for Chromium PDF Export
3
- Replaces both handbook-word.css and inline PDF overrides.
4
- Designed for Playwright page.pdf() with print media.
5
-
6
- All visual rules are derived from the ISP Handbook Enhancement
7
- Guidelines + sample PDF. CSS classes use the "hb-" prefix to
8
- match RenderBlock-based Jinja partials.
9
-
10
- Legacy class names (.h2, .h3, .p, .ul, .ol, .tbl, .note, etc.)
11
- are kept for backward compatibility but aliased to the new
12
- hb-prefixed rules.
13
- ================================================================= */
14
-
15
- /* ── Page geometry ──
16
- NON-NEGOTIABLE: 2.54 cm margins on ALL FOUR sides.
17
- Playwright page.pdf() margins:
18
- top 2.54cm (header zone – header_template renders scaled image)
19
- left 2.54cm
20
- right 2.54cm
21
- bottom 2.54cm (footer zone – footer_template renders page number)
22
-
23
- All four margins handled by Playwright. Content area is within margins.
24
- position:fixed elements are relative to the content area.
25
- .page-header and .page-footer divs hidden – Playwright templates
26
- handle header image and page numbers.
27
- ── */
28
  @page {
29
  size: A4;
30
  margin: 2.54cm;
31
  }
32
 
33
- /* ── Reset ── */
34
- *,
35
- *::before,
36
- *::after {
37
- box-sizing: border-box;
38
- }
39
-
40
  @page cover {
41
  size: A4;
42
  margin: 0;
@@ -51,14 +28,27 @@
51
  box-sizing: border-box;
52
  }
53
 
54
- /* ══════════════════════════════════════════════════════════
55
- REPEATING PAGE HEADER
56
- Hidden before PDF β€” Playwright header_template renders
57
- the header image in the top margin zone on every page.
58
- Kept in HTML so the image src can be extracted via JS.
59
- ══════════════════════════════════════════════════════════ */
60
- .page-header {
61
- display: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  }
63
 
64
  .page-header img {
@@ -67,237 +57,237 @@
67
  height: 1.03in;
68
  }
69
 
70
-
71
- /* ══════════════════════════════════════════════════════════
72
- REPEATING RIGHT-SIDE LABEL
73
- position:fixed on every page. Negative right offset
74
- pushes it into the Playwright right margin zone (2.50cm)
75
- so it sits at the paper edge.
76
- ══════════════════════════════════════════════════════════ */
77
- .hb-right-label {
78
- position: fixed;
79
- top: -2.54cm;
80
- right: -2.54cm;
81
- width: 36px;
82
- height: calc(100% + 2.54cm + 2.54cm);
83
- z-index: 100;
84
- pointer-events: none;
85
- overflow: hidden;
86
- }
87
-
88
- .hb-right-label img {
89
- width: 36px;
90
- height: 100%;
91
- display: block;
92
- object-fit: fill;
93
- }
94
-
95
-
96
- /* ══════════════════════════════════════════════════════════
97
- PAGE-CONTENT WRAPPER
98
- Playwright margins handle all per-page spacing.
99
- No CSS padding needed β€” content naturally sits inside
100
- the margin box on every page.
101
- ══════════════════════════════════════════════════════════ */
102
  .page-content {
103
- box-sizing: border-box;
 
 
 
 
 
 
 
 
 
104
  }
105
 
106
- /* Suppress page-break on first child to avoid blank page after cover/TOC */
107
- .page-content> :first-child.page-break {
 
 
108
  page-break-before: auto;
109
  break-before: auto;
110
  }
111
 
112
-
113
- /* ══════════════════════════════════════════════════════════
114
- PAGE NUMBERS (FOOTER)
115
- Hidden β€” Playwright footer_template handles page numbers.
116
- ══════════════════════════════════════════════════════════ */
117
- .page-footer {
118
- display: none;
119
- }
120
-
121
-
122
- /* ══════════════════════════════════════════════════════════
123
- BLANK PAGE PREVENTION
124
- Avoid double page-breaks when page-break-after meets
125
- page-break-before on adjacent elements.
126
- ══════════════════════════════════════════════════════════ */
127
- .cover-page+.page-content {
128
  page-break-before: auto;
129
  break-before: auto;
130
  }
131
 
132
-
133
- /* ── Body typography ──
134
- Spec: Century Gothic 10pt, justified, space after paragraphs
135
- Playwright margins handle all per-page spacing. */
136
- html,
137
- body {
138
- margin: 0;
139
- padding: 0;
140
- font-family: 'Century Gothic', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
141
- font-size: 10pt;
142
- line-height: 1.4;
143
- color: #000000;
144
- text-align: justify;
145
- -webkit-print-color-adjust: exact;
146
- print-color-adjust: exact;
147
  }
148
 
 
 
 
 
 
 
149
 
150
- /* ══════════════════════════════════════════════════════════
151
- HEADINGS
152
- Spec: H1 = 12pt bold blue #1C75BC, uppercase
153
- H2+ = 12pt bold green #1A9970
154
- ══════════════════════════════════════════════════════════ */
155
-
156
- /* New block classes */
157
  .hb-heading-1,
158
- .h2 {
 
159
  font-size: 12pt;
160
  font-weight: 700;
161
  color: #1C75BC;
162
- margin: 12px 0 6px;
163
  line-height: 1.2;
164
  text-transform: uppercase;
165
- letter-spacing: 0.3px;
166
  text-align: left;
 
167
  page-break-after: avoid;
168
  break-after: avoid;
 
 
169
  }
170
 
171
  .hb-heading-2,
172
- .h3 {
173
- font-size: 12pt;
174
- font-weight: 700;
175
- margin: 10px 0 4px;
176
- line-height: 1.2;
177
- page-break-after: avoid;
178
- break-after: avoid;
179
- color: #1A9970;
180
- text-align: left;
181
- }
182
-
183
- /* Global heading break rules */
184
- h1,
185
  h2,
186
  h3,
187
  h4,
188
  h5,
189
  h6 {
 
 
 
 
 
 
190
  page-break-after: avoid;
191
  break-after: avoid;
192
  page-break-inside: avoid;
193
  break-inside: avoid;
194
  }
195
 
196
-
197
- /* ══════════════════════════════════════════════════════════
198
- PARAGRAPHS
199
- Spec: 10pt, justified, line-height 1.4
200
- ══════════════════════════════════════════════════════════ */
201
  .hb-paragraph,
202
- .p {
203
- margin: 2px 0 8px;
204
- line-height: 1.4;
205
  font-size: 10pt;
 
206
  text-align: justify;
 
 
 
 
 
 
 
207
  }
208
 
 
 
 
 
209
 
210
- /* ══════════════════════════════════════════════════════════
211
- LINKS
212
- ══════════════════════════════════════════════════════════ */
213
- a {
214
  color: #1C75BC;
215
  text-decoration: underline;
 
216
  }
217
 
218
-
219
- /* ══════════════════════════════════════════════════════════
220
- BULLET LISTS
221
- Spec: primary bullet = ➒, 10pt
222
- ══════════════════════════════════════════════════════════ */
223
  .hb-bullet-list,
224
- .ul {
225
- margin: 2px 0 8px 18px;
 
 
226
  padding: 0;
227
  font-size: 10pt;
228
- list-style-type: none;
229
  }
230
 
231
  .hb-bullet-list li,
232
- .ul li {
233
- margin: 2px 0;
234
- line-height: 1.4;
235
  position: relative;
236
- padding-left: 16px;
 
 
 
 
237
  }
238
 
239
  .hb-bullet-list li::before,
240
- .ul li::before {
 
241
  content: "\27A2";
242
- /* ➒ */
243
  position: absolute;
244
  left: 0;
 
245
  color: #000000;
246
  font-size: 10pt;
 
247
  }
248
 
249
- /* Numbered (ordered) lists – restore numbering */
250
  .hb-numbered-list,
251
- ol.hb-bullet-list,
252
- .ol {
253
- margin: 2px 0 4px 14px;
 
254
  padding: 0;
255
  font-size: 10pt;
256
- list-style-type: decimal;
257
  }
258
 
259
  .hb-numbered-list li,
260
- ol.hb-bullet-list li,
261
- .ol li {
262
- margin: 1px 0;
263
- line-height: 1.4;
264
  padding-left: 0;
 
 
 
265
  }
266
 
267
  .hb-numbered-list li::before,
268
- ol.hb-bullet-list li::before,
269
- .ol li::before {
270
  content: none;
271
  }
272
 
273
-
274
- /* ══════════════════════════════════════════════════════════
275
- NOTES / CALLOUTS
276
- Spec: full bold text, NOTE / ONLY IF keywords in bold + red #C00000
277
- ══════════════════════════════════════════════════════════ */
278
  .hb-note,
279
  .note {
280
- border: 1px solid #BBBBBB;
281
- padding: 6px 8px;
282
- margin: 6px 0 8px;
283
- background: #F7F8FA;
284
- font-size: 9.5px;
 
285
  font-weight: 700;
286
- line-height: 1.35;
287
  page-break-inside: avoid;
288
  break-inside: avoid;
289
  }
290
 
291
- .hb-note-keyword {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
  font-weight: 700;
293
  color: #C00000;
294
- margin-right: 3px;
295
  }
296
 
 
 
 
 
 
 
 
297
 
298
- /* ══════════════════════════════════════════════════════════
299
- PAGE-BREAK HELPERS
300
- ══════════════════════════════════════════════════════════ */
301
  .page-break {
302
  page-break-before: always;
303
  break-before: page;
@@ -313,71 +303,61 @@ ol.hb-bullet-list li::before,
313
  break-after: avoid;
314
  }
315
 
316
-
317
- /* ══════════════════════════════════════════════════════════
318
- TABLES (global break rules)
319
- ══════════════════════════════════════════════════════════ */
320
- table {
321
- page-break-inside: auto;
322
- break-inside: auto;
323
- }
324
-
325
- thead {
326
- display: table-header-group;
327
  }
328
 
329
- tfoot {
330
- display: table-row-group;
 
 
 
 
331
  }
332
 
333
-
334
- /* ══════════════════════════════════════════════════════════
335
  COVER PAGE
336
- Edge-to-edge cover image. Negative margins expand into
337
- Playwright margin areas.
338
- ══════════════════════════════════════════════════════════ */
339
  .cover-page {
 
340
  page-break-after: always;
341
  break-after: page;
342
- margin: -2.54cm -2.54cm -2.54cm -2.54cm;
343
  padding: 0;
344
  position: relative;
345
- z-index: 2000;
346
  overflow: hidden;
347
- text-align: center;
348
  }
349
 
350
  .cover-img {
351
- width: calc(100% + 5.08cm);
352
- max-width: none;
353
- height: auto;
354
  display: block;
355
- margin: 0;
 
356
  }
357
 
358
-
359
- /* ══════════════════════════════════════════════════════════
360
- FULL-PAGE IMAGES
361
- Negative margins expand into Playwright margin areas
362
- for edge-to-edge rendering.
363
- ══════════════════════════════════════════════════════════ */
364
  .fullpage-img-wrap {
 
365
  page-break-before: always;
366
  break-before: page;
367
- page-break-inside: avoid;
368
- margin: -2.54cm -2.54cm -2.54cm -2.54cm;
 
369
  padding: 0;
370
  position: relative;
371
- z-index: 2000;
372
  overflow: hidden;
373
  }
374
 
375
  .fullpage-img {
376
- width: calc(100% + 5.08cm);
377
- max-width: none;
378
- height: auto;
379
  display: block;
380
- margin: 0;
 
381
  }
382
 
383
  img {
@@ -385,85 +365,117 @@ img {
385
  height: auto;
386
  }
387
 
388
-
389
- /* ══════════════════════════════════════════════════════════
390
- GENERIC TABLES
391
- Spec: standard grid, NO row shading, #333 border
392
- DOMPDF-safe: explicit widths, collapse, padding, v-align
393
- ══════════════════════════════════════════════════════════ */
394
- .hb-table,
395
- .tbl {
396
  width: 100%;
397
  border-collapse: collapse;
398
  table-layout: fixed;
399
- margin: 6px 0 10px;
400
- font-size: 9.5px;
401
- line-height: 1.3;
402
- border: 1px solid #333333;
403
  }
404
 
405
- .hb-table thead,
406
- .tbl thead {
407
  display: table-header-group;
408
  }
409
 
410
- .hb-table tr,
411
- .tbl tr {
 
 
 
412
  page-break-inside: avoid;
413
  break-inside: avoid;
414
  }
415
 
 
 
 
 
 
 
 
 
 
 
 
 
416
  .hb-table th,
417
  .hb-table td,
418
  .tbl th,
419
  .tbl td {
420
  border: 1px solid #333333;
421
- padding: 5px 6px;
422
  vertical-align: top;
423
  word-wrap: break-word;
424
  overflow-wrap: break-word;
425
- font-size: 9.5px;
426
  line-height: 1.3;
 
 
427
  }
428
 
429
  .hb-table th,
430
  .tbl th {
431
  font-weight: 700;
432
- background: #E6E6E6;
433
- color: #333333;
434
- font-size: 9.5px;
435
  text-align: left;
436
- padding: 5px 6px;
437
  }
438
 
439
- /* No row shading per spec */
 
 
 
 
440
 
 
 
 
 
 
 
441
 
442
- /* ══════════════════════════════════════════════════════════
443
- PROGRAMS TABLE (university-level)
444
- Spec: plain table, NO shading, standard grid
445
- Column widths: 22% / 14% / 12% / 34% / 18%
446
- DOMPDF-safe: explicit sizing on every element
447
- ══════════════════════════════════════════════════════════ */
448
  .hb-programs,
449
  table.programs {
450
  width: 100%;
451
  border-collapse: collapse;
452
  table-layout: fixed;
453
- margin: 6px 0 10px;
454
- font-family: 'Century Gothic', 'Segoe UI', sans-serif;
455
  border: 1px solid #333333;
 
456
  }
457
 
458
- .hb-programs thead,
459
- table.programs thead {
460
- display: table-header-group;
 
 
 
 
 
 
 
 
 
 
461
  }
462
 
463
- .hb-programs tr,
464
- table.programs tr {
465
- page-break-inside: avoid;
466
- break-inside: avoid;
 
 
 
467
  }
468
 
469
  .hb-programs th:nth-child(1),
@@ -484,14 +496,14 @@ table.programs td:nth-child(2) {
484
  .hb-programs td:nth-child(3),
485
  table.programs th:nth-child(3),
486
  table.programs td:nth-child(3) {
487
- width: 12%;
488
  }
489
 
490
  .hb-programs th:nth-child(4),
491
  .hb-programs td:nth-child(4),
492
  table.programs th:nth-child(4),
493
  table.programs td:nth-child(4) {
494
- width: 34%;
495
  }
496
 
497
  .hb-programs th:nth-child(5),
@@ -501,78 +513,44 @@ table.programs td:nth-child(5) {
501
  width: 18%;
502
  }
503
 
504
- .hb-programs th,
505
- .hb-programs td,
506
- table.programs th,
507
- table.programs td {
508
- border: 1px solid #333333;
509
- padding: 4px 5px;
510
- vertical-align: top;
511
- word-wrap: break-word;
512
- overflow-wrap: break-word;
513
- font-size: 8.5px;
514
- line-height: 1.25;
515
- }
516
-
517
- .hb-programs th,
518
- table.programs th {
519
- font-weight: 700;
520
- background: #E6E6E6;
521
- color: #000000;
522
- text-transform: uppercase;
523
- font-size: 8.5px;
524
- text-align: center;
525
- letter-spacing: 0.3px;
526
- padding: 4px 5px;
527
- }
528
-
529
- /* No row shading per spec */
530
-
531
- /* Career pathways bullet list inside programs table */
532
  .hb-career-list,
533
  .career-list {
534
  margin: 0;
535
- padding-left: 12px;
536
  list-style-type: disc;
537
  }
538
 
539
  .hb-career-list li,
540
  .career-list li {
541
- margin: 0;
542
- line-height: 1.2;
543
- font-size: 8.5px;
544
  padding-left: 0;
 
 
545
  }
546
 
547
- /* Override the ➒ bullet for career lists */
548
  .hb-career-list li::before,
549
  .career-list li::before {
550
  content: none;
551
  }
552
 
553
-
554
- /* ══════════════════════════════════════════════════════════
555
  TABLE OF CONTENTS
556
- ══════════════════════════════════════════════════════════ */
 
557
  .toc-page {
558
- width: 100%;
559
- max-width: none;
560
  display: block;
 
 
 
561
  page-break-after: auto;
562
  break-after: auto;
563
- padding: 10px 0 0 0;
564
- box-sizing: border-box;
565
- background: #FFFFFF;
566
- border: none;
567
  }
568
 
569
  .toc {
570
  width: 100%;
571
- max-width: none;
572
- display: block;
573
  margin: 0;
574
  padding: 0;
575
- background: #FFFFFF;
576
  }
577
 
578
  .toc-heading {
@@ -581,8 +559,7 @@ table.programs th {
581
  font-size: 12pt;
582
  font-weight: 700;
583
  text-transform: uppercase;
584
- letter-spacing: 0.3px;
585
- margin: 0 0 8px 0;
586
  color: #1C75BC;
587
  line-height: 1.2;
588
  }
@@ -598,100 +575,91 @@ table.programs th {
598
  .toc-table td {
599
  border: none;
600
  vertical-align: bottom;
601
- padding: 2px 0;
602
- line-height: 1.3;
603
  font-size: 10pt;
604
  color: #111111;
 
 
 
 
 
605
  }
606
 
607
  .toc-dots {
608
  border-bottom: 1px dotted #777777;
609
- height: 0.85em;
610
  padding: 0;
611
  }
612
 
613
  .toc-pagenum {
614
- width: 48px;
615
  text-align: right;
616
  font-weight: 700;
617
  color: #111111;
618
  white-space: nowrap;
619
- padding-left: 4px;
620
- }
621
-
622
- .toc-row--major td {
623
- padding-top: 1px;
624
- padding-bottom: 1px;
625
- }
626
-
627
- .toc-row--major td a {
628
- color: #111111;
629
- text-decoration: none;
630
  }
631
 
632
- .toc-row--sub td {
633
- padding-top: 0;
634
- padding-bottom: 0;
635
- }
636
-
637
- .toc-row--sub td a {
638
- color: #222222;
639
- text-decoration: none;
640
- }
641
-
642
- /* TOC indent / weight variants */
643
  .toc-row--bold .toc-title {
644
  font-weight: 700;
645
  }
646
 
 
 
 
 
647
  .toc-row--upper .toc-title {
648
  text-transform: uppercase;
649
  letter-spacing: 0.1px;
650
  }
651
 
652
  .toc-row--indent-1 .toc-title {
653
- padding-left: 16px;
654
  }
655
 
656
- .toc-row--indent-2 .toc-title {
657
- padding-left: 30px;
 
658
  }
659
 
660
- /* TOC link styling */
661
  .toc-table a,
662
  .toc-table a:visited {
663
  color: #111111;
664
  text-decoration: none;
665
  }
666
 
667
-
668
- /* ══════��═══════════════════════════════════════════════════
669
  SECTION BLOCKS
670
- ══════════════════════════════════════════════════════════ */
671
  .section-block {
672
  display: block;
673
  width: 100%;
674
- padding: 4px 0 2px;
 
675
  border: none;
676
  }
677
 
678
-
679
- /* ══════════════════════════════════════════════════════════
680
- ENROLLMENT STEPS
681
- Spec: own page (break-before: page)
682
- ══════════════════════════════════════════════════════════ */
683
- .hb-enrollment-steps {
684
- /* Each step block avoids internal breaks */
685
  }
686
 
 
 
 
 
 
687
  .sec-steps {
688
  page-break-before: always;
689
  break-before: page;
 
 
690
  }
691
 
692
  .hb-step {
693
- margin-bottom: 8px;
694
- padding-bottom: 6px;
695
  page-break-inside: avoid;
696
  break-inside: avoid;
697
  }
@@ -699,102 +667,95 @@ table.programs th {
699
  .hb-step-title {
700
  font-size: 10pt;
701
  font-weight: 700;
702
- margin: 0 0 4px;
703
- line-height: 1.2;
704
  color: #1A9970;
 
 
705
  page-break-after: avoid;
706
  break-after: avoid;
707
  }
708
 
709
  .hb-step-qr-wrap {
710
- margin: 4px 0 6px;
711
  }
712
 
713
  .hb-step-qr {
714
- width: 60px;
715
- height: 60px;
716
- margin: 4px 0;
717
- }
718
-
719
- /* Legacy step overrides */
720
- .sec-steps .avoid-break {
721
- margin-bottom: 6px;
722
- padding-bottom: 4px;
723
  }
724
 
 
725
  .sec-steps .h3 {
726
- margin: 0 0 2px;
727
  font-size: 10pt;
 
728
  }
729
 
730
  .sec-steps .p {
731
- margin: 2px 0 3px;
732
- font-size: 10pt;
733
  }
734
 
735
  .sec-steps .ul {
736
- margin: 2px 0 3px 14px;
737
  }
738
 
739
-
740
- /* ══════════════════════════════════════════════════════════
741
- UNIVERSITY PAGE
742
- ══════════════════════════════════════════════════════════ */
743
-
744
- /* Legacy + new classes β€” each university starts on a new page */
745
  .uni,
746
  .hb-school-profile {
747
  page-break-before: always;
748
  break-before: page;
749
- padding: 4px 0 4px;
750
  }
751
 
752
- /* School name β€” linked, underlined per spec */
753
  .hb-uni-name,
754
  .uni-name {
755
- font-size: 12pt;
756
  font-weight: 700;
757
- margin: 0 0 6px;
758
  color: #1C75BC;
759
- text-transform: uppercase;
760
- letter-spacing: 0.3px;
761
  line-height: 1.2;
762
- text-align: left;
 
763
  }
764
 
 
765
  .hb-uni-name-link,
766
  .uni-name a.uni-name-link {
767
  color: #1C75BC;
768
  text-decoration: underline;
 
769
  }
770
 
771
- /* Summary info β€” green labels */
772
  .hb-summary-title,
773
  .summary-title {
774
- font-size: 10.5px;
775
  font-weight: 700;
776
  text-transform: uppercase;
777
- margin: 6px 0 3px;
778
  color: #1A9970;
779
- letter-spacing: 0.3px;
780
  }
781
 
782
  .hb-summary-ul,
783
  .summary-ul {
784
  list-style: none;
 
785
  padding: 0;
786
- margin: 0 0 4px;
787
  }
788
 
789
  .hb-summary-ul li,
790
  .summary-ul li {
791
- margin: 0 0 1px;
792
  padding: 0;
793
- font-size: 9.5px;
794
  line-height: 1.3;
 
795
  }
796
 
797
- /* Override ➒ bullets for summary lists */
798
  .hb-summary-ul li::before,
799
  .summary-ul li::before {
800
  content: none;
@@ -808,17 +769,18 @@ table.programs th {
808
 
809
  .hb-uni-website,
810
  .uni-website {
811
- margin: 3px 0 6px;
812
- font-size: 10px;
 
813
  }
814
 
815
- /* Two-column layout table */
816
  .hb-school-top-table,
817
  .school-top-table {
818
  width: 100%;
819
  border-collapse: collapse;
820
  table-layout: fixed;
821
- margin: 0 0 2px;
822
  border: none;
823
  }
824
 
@@ -826,187 +788,163 @@ table.programs th {
826
  .school-top-table td {
827
  border: none;
828
  padding: 0;
 
829
  }
830
 
831
  .hb-school-top-summary,
832
  .school-top-summary {
833
- width: 58%;
834
- padding-right: 8px;
835
- vertical-align: top;
836
  }
837
 
838
  .hb-school-top-campus,
839
  .school-top-campus {
840
- width: 42%;
841
- vertical-align: top;
842
  text-align: right;
843
  }
844
 
845
  .hb-campus-img,
846
  .campus-top-img {
 
847
  width: 100%;
848
- max-height: 160px;
849
  height: auto;
850
- display: block;
851
  border: 1px solid #333333;
852
- border-radius: 3px;
853
  object-fit: cover;
854
  }
855
 
856
  .hb-campus-caption,
857
  .campus-top-cap {
858
- font-size: 9px;
859
- color: #444444;
860
- margin-top: 2px;
861
  font-style: italic;
862
  text-align: right;
863
- line-height: 1.15;
864
  }
865
 
866
  .hb-campus-placeholder,
867
  .campus-placeholder-cell {
868
  width: 100%;
869
- min-height: 120px;
870
  border: 1px dashed #999999;
871
  color: #666666;
872
- font-size: 10px;
873
- padding: 10px;
874
- background: #F4F6F8;
875
- border-radius: 4px;
876
  }
877
 
878
-
879
- /* ══════════════════════════════════════════════════════════
880
  BENEFITS SECTION
881
- Spec: heading highlight = bright green #00F600 bg, white text
882
- item highlight = bright cyan #00FCFC bg
883
- Highlights wrap the TEXT only, not the entire row.
884
- ══════════════════════════════════════════════════════════ */
885
  .hb-benefits-section,
886
  .benefits-section {
887
  clear: both;
888
- margin: 4px 0 4px;
889
  page-break-inside: avoid;
890
  break-inside: avoid;
891
  }
892
 
893
- /* Heading container β€” plain block, no background */
894
  .hb-benefits-heading {
895
- margin: 0 0 2px;
896
  line-height: 1.3;
897
  }
898
 
899
- /* Heading highlight β€” green background bar spanning full width */
900
  .hb-benefits-bar,
901
  .benefits-bar {
902
- display: block;
903
  background: #00F600;
904
- color: #FFFFFF;
905
  font-weight: 700;
906
- padding: 4px 8px;
907
- font-size: 10.5px;
908
- text-transform: none;
909
- letter-spacing: 0.2px;
910
- line-height: 1.4;
911
  }
912
 
913
- /* Benefit list β€” no list bullets, no background */
914
  .hb-benefits-ul,
915
  .benefits-ul {
916
  list-style: none;
917
- padding: 0;
918
  margin: 0;
 
919
  }
920
 
921
- /* Benefit item β€” cyan background highlight */
922
  .hb-benefit-item,
923
  .benefit-li {
924
- margin: 2px 0;
925
- padding: 3px 6px;
926
- font-size: 10px;
927
- line-height: 1.4;
928
- background: #00FCFC;
929
- border-bottom: none;
930
  }
931
 
932
- /* Remove all ::before pseudo-element bullets */
933
  .hb-benefit-item::before,
934
  .benefit-li::before {
935
- content: none;
936
- }
937
-
938
- .hb-benefits-ul li::before {
939
- content: none;
940
- }
941
-
942
- .hb-benefits-ul li {
943
- padding-left: 0;
944
  }
945
 
946
- /* Benefit text β€” text inside benefit items */
947
  .hb-benefit-text,
948
  .benefit-text {
949
- display: inline;
950
- background: transparent;
951
- padding: 0;
952
- font-size: 10px;
953
- line-height: 1.4;
954
  }
955
 
956
  .benefit-bullet {
957
  display: none;
958
  }
959
 
960
-
961
- /* ══════════════════════════════════════════════════════════
962
- QUALIFICATION TEXT
963
- ══════════════════════════════════════════════════════════ */
964
- .hb-qualify,
965
- .qualify {
966
- margin: 6px 0 4px;
967
- font-weight: 700;
968
- font-size: 10px;
969
- font-style: italic;
970
- color: #1A9970;
971
- }
972
-
973
- .hb-muted,
974
- .muted {
975
- color: #666666;
976
- font-size: 10px;
977
- }
978
-
979
-
980
- /* ══════════════════════════════════════════════════════════
981
  UNIVERSITY SUMMARY LIST
982
- Spec: numbered list, black, bold
983
- ══════════════════════════════════════════════════════════ */
984
  .hb-university-list {
985
- margin: 4px 0 6px 18px;
986
  padding: 0;
 
987
  font-size: 10pt;
988
- list-style-type: decimal;
989
  color: #000000;
990
  }
991
 
992
  .hb-university-list li {
993
- margin: 2px 0;
994
- line-height: 1.4;
995
- font-weight: 700;
996
  padding-left: 0;
 
 
 
997
  }
998
 
999
- /* Override ➒ for university list */
1000
  .hb-university-list li::before {
1001
  content: none;
1002
  }
1003
 
 
 
 
 
 
 
 
 
 
 
 
1004
 
1005
- /* ══════════════════════════════════════════════════════════
1006
- SECTION-SPECIFIC FORMATTING OVERRIDES
1007
- ══════════════════════════════════════════════════════════ */
 
 
1008
 
1009
- /* Overview */
 
 
1010
  .sec-overview .hb-heading-1,
1011
  .sec-overview .h2 {
1012
  margin-top: 0;
@@ -1018,180 +956,57 @@ table.programs th {
1018
  line-height: 1.4;
1019
  }
1020
 
1021
- /* Qualification */
1022
  .sec-qualification .hb-heading-2,
1023
  .sec-qualification .h3 {
1024
- margin-top: 8px;
1025
  }
1026
 
1027
  .sec-qualification .hb-table,
1028
  .sec-qualification .tbl {
1029
- margin: 4px 0 8px;
1030
  }
1031
 
1032
- /* Policy */
1033
  .sec-policy .hb-heading-2,
1034
  .sec-policy .h3 {
1035
- margin-top: 8px;
1036
- padding-bottom: 1px;
1037
  }
1038
 
1039
  .sec-policy .hb-note,
1040
  .sec-policy .note {
1041
- border-color: #B0B0B0;
1042
- background: #F5F5F5;
1043
  }
1044
 
1045
  .sec-policy .hb-table,
1046
  .sec-policy .tbl {
1047
- margin: 4px 0 6px;
1048
  }
1049
 
1050
- /* Refund */
1051
  .sec-refund .hb-table,
1052
  .sec-refund .tbl {
1053
- margin: 4px 0 8px;
1054
  }
1055
 
1056
- /* Contributions β€” bold text, ISP brand color per guidelines */
1057
  .sec-contributions .hb-paragraph,
1058
- .sec-contributions .p {
1059
- font-weight: 700;
1060
- color: #1C75BC;
1061
- }
1062
-
1063
  .sec-contributions .hb-bullet-list li,
1064
  .sec-contributions .ul li {
1065
  font-weight: 700;
1066
- color: #1C75BC;
1067
  }
1068
 
1069
  .sec-contributions .hb-table,
1070
  .sec-contributions .tbl {
1071
- margin: 4px 0 8px;
1072
- }
1073
-
1074
- .sec-contributions .hb-note,
1075
- .sec-contributions .note {
1076
- color: #000000;
1077
- }
1078
-
1079
- .sec-contributions .hb-note-keyword {
1080
- color: #C00000;
1081
  }
1082
 
1083
- /* Funding */
1084
  .sec-funding .hb-table,
1085
  .sec-funding .tbl {
1086
- margin: 4px 0 8px;
1087
- }
1088
-
1089
-
1090
- /* ══════════════════════════════════════════════════════════
1091
- COMPARISON TABLE VARIANT
1092
- ══════════════════════════════════════════════════════════ */
1093
- .hb-table-comparison,
1094
- .tbl-comparison {
1095
- font-size: 9px;
1096
- }
1097
-
1098
- .hb-table-comparison th,
1099
- .tbl-comparison th {
1100
- text-align: center;
1101
- font-size: 8.5px;
1102
- }
1103
-
1104
-
1105
- /* ══════════════════════════════════════════════════════════
1106
- DEBUG BLOCK
1107
- ══════════════════════════════════════════════════════════ */
1108
- .debug-block {
1109
- border: 2px dashed #cc0000;
1110
- padding: 12px;
1111
- background: #fffbe6;
1112
- page-break-inside: avoid;
1113
- }
1114
-
1115
- .debug-block h2 {
1116
- color: #cc0000;
1117
- }
1118
-
1119
- .clearfix::after {
1120
- content: "";
1121
- display: block;
1122
- clear: both;
1123
- }
1124
-
1125
-
1126
- /* ══════════════════════════════════════════════════════════
1127
- ORPHAN / WIDOW PREVENTION
1128
- Prevent orphaned headings at page bottoms and widows
1129
- ══════════════════════════════════════════════════════════ */
1130
- .hb-heading-1,
1131
- .h2,
1132
- .hb-heading-2,
1133
- .h3 {
1134
- orphans: 3;
1135
- widows: 3;
1136
- }
1137
-
1138
- .hb-paragraph,
1139
- .p {
1140
- orphans: 2;
1141
- widows: 2;
1142
- }
1143
-
1144
- /* Ensure section headings always keep with following content */
1145
- .section-block .hb-heading-1:last-child,
1146
- .section-block .h2:last-child {
1147
- page-break-after: avoid;
1148
- break-after: avoid;
1149
- }
1150
-
1151
-
1152
- /* ══════════════════════════════════════════════════════════
1153
- BOLD EMPHASIS FOR KEY INFORMATION
1154
- Payment amounts, REGULAR, PRIME, critical terms
1155
- ════════════════════════════════════════════════��═════════ */
1156
- .hb-bold-keyword {
1157
- font-weight: 700;
1158
- }
1159
-
1160
- .hb-red-keyword {
1161
- font-weight: 700;
1162
- color: #C00000;
1163
- }
1164
-
1165
-
1166
- /* ══════════════════════════════════════════════════════════
1167
- SCHOOL INFO β€” Green color for school information
1168
- ══════════════════════════════════════════════════════════ */
1169
- .hb-school-info {
1170
- color: #1A9970;
1171
- font-size: 9.5px;
1172
- }
1173
-
1174
-
1175
- /* ══════════════════════════════════════════════════════════
1176
- PRINT SAFETY β€” Prevent any content from exceeding margins
1177
- ══════════════════════════════════════════════════════════ */
1178
- .page-content {
1179
- overflow: hidden;
1180
- word-wrap: break-word;
1181
- overflow-wrap: break-word;
1182
- }
1183
-
1184
- /* Tables must not exceed page width */
1185
- .hb-table,
1186
- .tbl,
1187
- .hb-programs,
1188
- table.programs {
1189
- max-width: 100%;
1190
- overflow: hidden;
1191
  }
1192
 
1193
  /* Images must stay inside margins */
1194
  .page-content img {
1195
  max-width: 100%;
1196
  height: auto;
1197
- }
 
1
+ /* =========================================================
2
+ ISP HANDBOOK - CORRECTED PRINT CSS
3
+ Uses real page margins (2.54 cm all sides)
4
+ Removes negative-margin / negative-offset layout tricks
5
+ Keeps decorative elements from breaking content flow
6
+ ========================================================= */
7
+
8
+ /* ------------------------------
9
+ PAGE SETUP
10
+ ------------------------------ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  @page {
12
  size: A4;
13
  margin: 2.54cm;
14
  }
15
 
16
+ /* Optional cover page: use only if your renderer supports named pages */
 
 
 
 
 
 
17
  @page cover {
18
  size: A4;
19
  margin: 0;
 
28
  box-sizing: border-box;
29
  }
30
 
31
+ html,
32
+ body {
33
+ margin: 0;
34
+ padding: 0;
35
+ font-family: "Century Gothic", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
36
+ font-size: 10pt;
37
+ line-height: 1.4;
38
+ color: #000000;
39
+ text-align: justify;
40
+ -webkit-print-color-adjust: exact;
41
+ print-color-adjust: exact;
42
+ background: #ffffff;
43
+ }
44
+
45
+ /* ------------------------------
46
+ EXTERNAL PLAYWRIGHT HEADER/FOOTER
47
+ Keep hidden in body flow if using templates
48
+ ------------------------------ */
49
+ .page-header,
50
+ .page-footer {
51
+ display: none !important;
52
  }
53
 
54
  .page-header img {
 
57
  height: 1.03in;
58
  }
59
 
60
+ /* ------------------------------
61
+ SAFE CONTENT WRAPPER
62
+ ------------------------------ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  .page-content {
64
+ display: block;
65
+ width: 100%;
66
+ max-width: 100%;
67
+ margin: 0;
68
+ padding: 0;
69
+ position: relative;
70
+ z-index: 1;
71
+ overflow: hidden;
72
+ word-wrap: break-word;
73
+ overflow-wrap: break-word;
74
  }
75
 
76
+ /* Prevent accidental blank page after cover */
77
+ .cover-page + .page-content,
78
+ .cover-page + .toc-page,
79
+ .cover-page + .section-block {
80
  page-break-before: auto;
81
  break-before: auto;
82
  }
83
 
84
+ /* Prevent accidental blank page from a leading .page-break */
85
+ .page-content > :first-child.page-break,
86
+ .page-content > :first-child.section-block.page-break {
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  page-break-before: auto;
88
  break-before: auto;
89
  }
90
 
91
+ /* ------------------------------
92
+ DECORATIVE RIGHT-SIDE STRIP
93
+ Kept fixed but NOT outside page box
94
+ ------------------------------ */
95
+ .hb-right-label {
96
+ position: fixed;
97
+ top: 0;
98
+ right: 0;
99
+ width: 0.95cm;
100
+ height: 100%;
101
+ z-index: 0;
102
+ pointer-events: none;
103
+ overflow: hidden;
 
 
104
  }
105
 
106
+ .hb-right-label img {
107
+ display: block;
108
+ width: 100%;
109
+ height: 100%;
110
+ object-fit: fill;
111
+ }
112
 
113
+ /* ------------------------------
114
+ TYPOGRAPHY
115
+ ------------------------------ */
 
 
 
 
116
  .hb-heading-1,
117
+ .h2,
118
+ h1 {
119
  font-size: 12pt;
120
  font-weight: 700;
121
  color: #1C75BC;
122
+ margin: 0 0 8pt;
123
  line-height: 1.2;
124
  text-transform: uppercase;
 
125
  text-align: left;
126
+ letter-spacing: 0.2px;
127
  page-break-after: avoid;
128
  break-after: avoid;
129
+ page-break-inside: avoid;
130
+ break-inside: avoid;
131
  }
132
 
133
  .hb-heading-2,
134
+ .h3,
 
 
 
 
 
 
 
 
 
 
 
 
135
  h2,
136
  h3,
137
  h4,
138
  h5,
139
  h6 {
140
+ font-size: 12pt;
141
+ font-weight: 700;
142
+ color: #1A9970;
143
+ margin: 10pt 0 6pt;
144
+ line-height: 1.2;
145
+ text-align: left;
146
  page-break-after: avoid;
147
  break-after: avoid;
148
  page-break-inside: avoid;
149
  break-inside: avoid;
150
  }
151
 
 
 
 
 
 
152
  .hb-paragraph,
153
+ .p,
154
+ p {
155
+ margin: 0 0 8pt;
156
  font-size: 10pt;
157
+ line-height: 1.4;
158
  text-align: justify;
159
+ orphans: 3;
160
+ widows: 3;
161
+ }
162
+
163
+ strong,
164
+ b {
165
+ font-weight: 700;
166
  }
167
 
168
+ em,
169
+ i {
170
+ font-style: italic;
171
+ }
172
 
173
+ a,
174
+ a:visited {
 
 
175
  color: #1C75BC;
176
  text-decoration: underline;
177
+ word-break: break-word;
178
  }
179
 
180
+ /* ------------------------------
181
+ LISTS
182
+ ------------------------------ */
 
 
183
  .hb-bullet-list,
184
+ .ul,
185
+ ul.hb-bullet-list {
186
+ list-style: none;
187
+ margin: 0 0 8pt 16pt;
188
  padding: 0;
189
  font-size: 10pt;
 
190
  }
191
 
192
  .hb-bullet-list li,
193
+ .ul li,
194
+ ul.hb-bullet-list li {
 
195
  position: relative;
196
+ margin: 0 0 4pt;
197
+ padding-left: 14pt;
198
+ line-height: 1.4;
199
+ page-break-inside: avoid;
200
+ break-inside: avoid;
201
  }
202
 
203
  .hb-bullet-list li::before,
204
+ .ul li::before,
205
+ ul.hb-bullet-list li::before {
206
  content: "\27A2";
 
207
  position: absolute;
208
  left: 0;
209
+ top: 0;
210
  color: #000000;
211
  font-size: 10pt;
212
+ font-weight: 400;
213
  }
214
 
215
+ /* ordered lists */
216
  .hb-numbered-list,
217
+ .ol,
218
+ ol.hb-numbered-list {
219
+ list-style: decimal;
220
+ margin: 0 0 8pt 18pt;
221
  padding: 0;
222
  font-size: 10pt;
 
223
  }
224
 
225
  .hb-numbered-list li,
226
+ .ol li,
227
+ ol.hb-numbered-list li {
228
+ margin: 0 0 4pt;
 
229
  padding-left: 0;
230
+ line-height: 1.4;
231
+ page-break-inside: avoid;
232
+ break-inside: avoid;
233
  }
234
 
235
  .hb-numbered-list li::before,
236
+ .ol li::before,
237
+ ol.hb-numbered-list li::before {
238
  content: none;
239
  }
240
 
241
+ /* ------------------------------
242
+ NOTES / EMPHASIS
243
+ Guideline requires full bold text;
244
+ NOTE and ONLY IF in red.
245
+ ------------------------------ */
246
  .hb-note,
247
  .note {
248
+ margin: 8pt 0 10pt;
249
+ padding: 0;
250
+ border: none;
251
+ background: transparent;
252
+ font-size: 10pt;
253
+ line-height: 1.4;
254
  font-weight: 700;
 
255
  page-break-inside: avoid;
256
  break-inside: avoid;
257
  }
258
 
259
+ .hb-note-keyword,
260
+ .note-keyword,
261
+ .note .keyword,
262
+ .only-if {
263
+ color: #C00000;
264
+ font-weight: 700;
265
+ }
266
+
267
+ /* ------------------------------
268
+ BOLD EMPHASIS FOR KEY INFORMATION
269
+ Payment amounts, REGULAR, PRIME, critical terms
270
+ ------------------------------ */
271
+ .hb-bold-keyword {
272
+ font-weight: 700;
273
+ }
274
+
275
+ .hb-red-keyword {
276
  font-weight: 700;
277
  color: #C00000;
 
278
  }
279
 
280
+ /* ------------------------------
281
+ SCHOOL INFO - Green color for school information
282
+ ------------------------------ */
283
+ .hb-school-info {
284
+ color: #1A9970;
285
+ font-size: 9.5px;
286
+ }
287
 
288
+ /* ------------------------------
289
+ HELPERS
290
+ ------------------------------ */
291
  .page-break {
292
  page-break-before: always;
293
  break-before: page;
 
303
  break-after: avoid;
304
  }
305
 
306
+ .clearfix::after {
307
+ content: "";
308
+ display: block;
309
+ clear: both;
 
 
 
 
 
 
 
310
  }
311
 
312
+ .debug-block {
313
+ border: 2px dashed #cc0000;
314
+ padding: 12px;
315
+ background: #fffbe6;
316
+ page-break-inside: avoid;
317
+ break-inside: avoid;
318
  }
319
 
320
+ /* ------------------------------
 
321
  COVER PAGE
322
+ Prefer named page.
323
+ If unsupported by renderer, cover will still render safely.
324
+ ------------------------------ */
325
  .cover-page {
326
+ page: cover;
327
  page-break-after: always;
328
  break-after: page;
329
+ margin: 0;
330
  padding: 0;
331
  position: relative;
 
332
  overflow: hidden;
 
333
  }
334
 
335
  .cover-img {
 
 
 
336
  display: block;
337
+ width: 100%;
338
+ height: auto;
339
  }
340
 
341
+ /* ------------------------------
342
+ FULL-PAGE IMAGE PAGES
343
+ Only use when intentionally full-page.
344
+ ------------------------------ */
 
 
345
  .fullpage-img-wrap {
346
+ page: cover;
347
  page-break-before: always;
348
  break-before: page;
349
+ page-break-after: always;
350
+ break-after: page;
351
+ margin: 0;
352
  padding: 0;
353
  position: relative;
 
354
  overflow: hidden;
355
  }
356
 
357
  .fullpage-img {
 
 
 
358
  display: block;
359
+ width: 100%;
360
+ height: auto;
361
  }
362
 
363
  img {
 
365
  height: auto;
366
  }
367
 
368
+ /* ------------------------------
369
+ TABLES - GLOBAL
370
+ No shading / color fill per guideline
371
+ ------------------------------ */
372
+ table {
 
 
 
373
  width: 100%;
374
  border-collapse: collapse;
375
  table-layout: fixed;
376
+ max-width: 100%;
377
+ overflow: hidden;
378
+ page-break-inside: auto;
379
+ break-inside: auto;
380
  }
381
 
382
+ thead {
 
383
  display: table-header-group;
384
  }
385
 
386
+ tfoot {
387
+ display: table-row-group;
388
+ }
389
+
390
+ tr {
391
  page-break-inside: avoid;
392
  break-inside: avoid;
393
  }
394
 
395
+ .hb-table,
396
+ .tbl {
397
+ width: 100%;
398
+ border-collapse: collapse;
399
+ table-layout: fixed;
400
+ max-width: 100%;
401
+ margin: 8pt 0 10pt;
402
+ font-size: 9.5pt;
403
+ line-height: 1.3;
404
+ border: 1px solid #333333;
405
+ }
406
+
407
  .hb-table th,
408
  .hb-table td,
409
  .tbl th,
410
  .tbl td {
411
  border: 1px solid #333333;
412
+ padding: 5pt 6pt;
413
  vertical-align: top;
414
  word-wrap: break-word;
415
  overflow-wrap: break-word;
416
+ font-size: 9.5pt;
417
  line-height: 1.3;
418
+ background: transparent;
419
+ color: #000000;
420
  }
421
 
422
  .hb-table th,
423
  .tbl th {
424
  font-weight: 700;
425
+ background: transparent;
 
 
426
  text-align: left;
 
427
  }
428
 
429
+ /* comparison table */
430
+ .hb-table-comparison,
431
+ .tbl-comparison {
432
+ font-size: 9pt;
433
+ }
434
 
435
+ .hb-table-comparison th,
436
+ .tbl-comparison th {
437
+ text-align: center;
438
+ font-size: 9pt;
439
+ background: transparent;
440
+ }
441
 
442
+ /* ------------------------------
443
+ PROGRAM TABLES
444
+ No shading
445
+ ------------------------------ */
 
 
446
  .hb-programs,
447
  table.programs {
448
  width: 100%;
449
  border-collapse: collapse;
450
  table-layout: fixed;
451
+ max-width: 100%;
452
+ margin: 8pt 0 10pt;
453
  border: 1px solid #333333;
454
+ font-family: "Century Gothic", "Segoe UI", sans-serif;
455
  }
456
 
457
+ .hb-programs th,
458
+ .hb-programs td,
459
+ table.programs th,
460
+ table.programs td {
461
+ border: 1px solid #333333;
462
+ padding: 4.5pt 5pt;
463
+ vertical-align: top;
464
+ word-wrap: break-word;
465
+ overflow-wrap: break-word;
466
+ font-size: 8.75pt;
467
+ line-height: 1.25;
468
+ background: transparent;
469
+ color: #000000;
470
  }
471
 
472
+ .hb-programs th,
473
+ table.programs th {
474
+ font-weight: 700;
475
+ background: transparent;
476
+ text-transform: none;
477
+ text-align: left;
478
+ letter-spacing: 0;
479
  }
480
 
481
  .hb-programs th:nth-child(1),
 
496
  .hb-programs td:nth-child(3),
497
  table.programs th:nth-child(3),
498
  table.programs td:nth-child(3) {
499
+ width: 16%;
500
  }
501
 
502
  .hb-programs th:nth-child(4),
503
  .hb-programs td:nth-child(4),
504
  table.programs th:nth-child(4),
505
  table.programs td:nth-child(4) {
506
+ width: 30%;
507
  }
508
 
509
  .hb-programs th:nth-child(5),
 
513
  width: 18%;
514
  }
515
 
516
+ /* career list inside programs table */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
517
  .hb-career-list,
518
  .career-list {
519
  margin: 0;
520
+ padding-left: 12pt;
521
  list-style-type: disc;
522
  }
523
 
524
  .hb-career-list li,
525
  .career-list li {
526
+ margin: 0 0 2pt;
 
 
527
  padding-left: 0;
528
+ line-height: 1.2;
529
+ font-size: 8.75pt;
530
  }
531
 
 
532
  .hb-career-list li::before,
533
  .career-list li::before {
534
  content: none;
535
  }
536
 
537
+ /* ------------------------------
 
538
  TABLE OF CONTENTS
539
+ Stable within content width
540
+ ------------------------------ */
541
  .toc-page {
 
 
542
  display: block;
543
+ width: 100%;
544
+ margin: 0;
545
+ padding: 0;
546
  page-break-after: auto;
547
  break-after: auto;
 
 
 
 
548
  }
549
 
550
  .toc {
551
  width: 100%;
 
 
552
  margin: 0;
553
  padding: 0;
 
554
  }
555
 
556
  .toc-heading {
 
559
  font-size: 12pt;
560
  font-weight: 700;
561
  text-transform: uppercase;
562
+ margin: 0 0 8pt;
 
563
  color: #1C75BC;
564
  line-height: 1.2;
565
  }
 
575
  .toc-table td {
576
  border: none;
577
  vertical-align: bottom;
578
+ padding: 2pt 0;
579
+ line-height: 1.2;
580
  font-size: 10pt;
581
  color: #111111;
582
+ background: transparent;
583
+ }
584
+
585
+ .toc-title {
586
+ padding-right: 6pt;
587
  }
588
 
589
  .toc-dots {
590
  border-bottom: 1px dotted #777777;
591
+ height: 0.9em;
592
  padding: 0;
593
  }
594
 
595
  .toc-pagenum {
596
+ width: 34pt;
597
  text-align: right;
598
  font-weight: 700;
599
  color: #111111;
600
  white-space: nowrap;
601
+ padding-left: 6pt;
 
 
 
 
 
 
 
 
 
 
602
  }
603
 
604
+ .toc-row--major .toc-title,
 
 
 
 
 
 
 
 
 
 
605
  .toc-row--bold .toc-title {
606
  font-weight: 700;
607
  }
608
 
609
+ .toc-row--sub .toc-title {
610
+ font-weight: 400;
611
+ }
612
+
613
  .toc-row--upper .toc-title {
614
  text-transform: uppercase;
615
  letter-spacing: 0.1px;
616
  }
617
 
618
  .toc-row--indent-1 .toc-title {
619
+ padding-left: 12pt;
620
  }
621
 
622
+ .toc-row--indent-2 .toc-title,
623
+ .toc-row--deep .toc-title {
624
+ padding-left: 24pt;
625
  }
626
 
 
627
  .toc-table a,
628
  .toc-table a:visited {
629
  color: #111111;
630
  text-decoration: none;
631
  }
632
 
633
+ /* ------------------------------
 
634
  SECTION BLOCKS
635
+ ------------------------------ */
636
  .section-block {
637
  display: block;
638
  width: 100%;
639
+ margin: 0 0 8pt;
640
+ padding: 0;
641
  border: none;
642
  }
643
 
644
+ .summary-section {
645
+ display: block;
 
 
 
 
 
646
  }
647
 
648
+ /* ------------------------------
649
+ ENROLMENT STEPS
650
+ Dedicated page block
651
+ ------------------------------ */
652
+ .hb-enrollment-steps,
653
  .sec-steps {
654
  page-break-before: always;
655
  break-before: page;
656
+ page-break-after: always;
657
+ break-after: page;
658
  }
659
 
660
  .hb-step {
661
+ margin: 0 0 8pt;
662
+ padding: 0 0 2pt;
663
  page-break-inside: avoid;
664
  break-inside: avoid;
665
  }
 
667
  .hb-step-title {
668
  font-size: 10pt;
669
  font-weight: 700;
 
 
670
  color: #1A9970;
671
+ margin: 0 0 4pt;
672
+ line-height: 1.2;
673
  page-break-after: avoid;
674
  break-after: avoid;
675
  }
676
 
677
  .hb-step-qr-wrap {
678
+ margin: 4pt 0 6pt;
679
  }
680
 
681
  .hb-step-qr {
682
+ display: block;
683
+ width: 72pt;
684
+ height: 72pt;
685
+ margin: 4pt 0 6pt;
 
 
 
 
 
686
  }
687
 
688
+ /* legacy step support */
689
  .sec-steps .h3 {
690
+ margin: 0 0 4pt;
691
  font-size: 10pt;
692
+ color: #1A9970;
693
  }
694
 
695
  .sec-steps .p {
696
+ margin: 0 0 6pt;
 
697
  }
698
 
699
  .sec-steps .ul {
700
+ margin: 0 0 6pt 16pt;
701
  }
702
 
703
+ /* ------------------------------
704
+ UNIVERSITY / SCHOOL PAGE
705
+ ------------------------------ */
 
 
 
706
  .uni,
707
  .hb-school-profile {
708
  page-break-before: always;
709
  break-before: page;
710
+ padding: 0;
711
  }
712
 
 
713
  .hb-uni-name,
714
  .uni-name {
715
+ font-size: 14pt;
716
  font-weight: 700;
717
+ margin: 0 0 6pt;
718
  color: #1C75BC;
 
 
719
  line-height: 1.2;
720
+ text-transform: none;
721
+ letter-spacing: 0.1px;
722
  }
723
 
724
+ .hb-uni-name a,
725
  .hb-uni-name-link,
726
  .uni-name a.uni-name-link {
727
  color: #1C75BC;
728
  text-decoration: underline;
729
+ font-weight: 700;
730
  }
731
 
732
+ /* School info directly below school name in green */
733
  .hb-summary-title,
734
  .summary-title {
735
+ font-size: 10pt;
736
  font-weight: 700;
737
  text-transform: uppercase;
738
+ margin: 6pt 0 4pt;
739
  color: #1A9970;
740
+ letter-spacing: 0.2px;
741
  }
742
 
743
  .hb-summary-ul,
744
  .summary-ul {
745
  list-style: none;
746
+ margin: 0 0 8pt;
747
  padding: 0;
 
748
  }
749
 
750
  .hb-summary-ul li,
751
  .summary-ul li {
752
+ margin: 0 0 3pt;
753
  padding: 0;
754
+ font-size: 10pt;
755
  line-height: 1.3;
756
+ color: #1A9970;
757
  }
758
 
 
759
  .hb-summary-ul li::before,
760
  .summary-ul li::before {
761
  content: none;
 
769
 
770
  .hb-uni-website,
771
  .uni-website {
772
+ margin: 4pt 0 8pt;
773
+ font-size: 10pt;
774
+ color: #1A9970;
775
  }
776
 
777
+ /* top school layout */
778
  .hb-school-top-table,
779
  .school-top-table {
780
  width: 100%;
781
  border-collapse: collapse;
782
  table-layout: fixed;
783
+ margin: 0 0 6pt;
784
  border: none;
785
  }
786
 
 
788
  .school-top-table td {
789
  border: none;
790
  padding: 0;
791
+ vertical-align: top;
792
  }
793
 
794
  .hb-school-top-summary,
795
  .school-top-summary {
796
+ width: 52%;
797
+ padding-right: 10pt !important;
 
798
  }
799
 
800
  .hb-school-top-campus,
801
  .school-top-campus {
802
+ width: 48%;
 
803
  text-align: right;
804
  }
805
 
806
  .hb-campus-img,
807
  .campus-top-img {
808
+ display: block;
809
  width: 100%;
810
+ max-height: 180pt;
811
  height: auto;
 
812
  border: 1px solid #333333;
 
813
  object-fit: cover;
814
  }
815
 
816
  .hb-campus-caption,
817
  .campus-top-cap {
818
+ margin-top: 3pt;
819
+ font-size: 9pt;
820
+ color: #666666;
821
  font-style: italic;
822
  text-align: right;
823
+ line-height: 1.2;
824
  }
825
 
826
  .hb-campus-placeholder,
827
  .campus-placeholder-cell {
828
  width: 100%;
829
+ min-height: 120pt;
830
  border: 1px dashed #999999;
831
  color: #666666;
832
+ font-size: 10pt;
833
+ padding: 10pt;
834
+ background: transparent;
 
835
  }
836
 
837
+ /* ------------------------------
 
838
  BENEFITS SECTION
839
+ Guideline colors retained
840
+ ------------------------------ */
 
 
841
  .hb-benefits-section,
842
  .benefits-section {
843
  clear: both;
844
+ margin: 8pt 0 8pt;
845
  page-break-inside: avoid;
846
  break-inside: avoid;
847
  }
848
 
 
849
  .hb-benefits-heading {
850
+ margin: 0 0 4pt;
851
  line-height: 1.3;
852
  }
853
 
 
854
  .hb-benefits-bar,
855
  .benefits-bar {
856
+ display: inline-block;
857
  background: #00F600;
858
+ color: #000000;
859
  font-weight: 700;
860
+ padding: 2pt 6pt;
861
+ font-size: 10pt;
862
+ line-height: 1.35;
 
 
863
  }
864
 
 
865
  .hb-benefits-ul,
866
  .benefits-ul {
867
  list-style: none;
 
868
  margin: 0;
869
+ padding: 0;
870
  }
871
 
872
+ .hb-benefits-ul li,
873
  .hb-benefit-item,
874
  .benefit-li {
875
+ margin: 3pt 0;
876
+ padding: 0;
877
+ font-size: 9.75pt;
878
+ line-height: 1.35;
879
+ background: none;
880
+ border: none;
881
  }
882
 
883
+ .hb-benefits-ul li::before,
884
  .hb-benefit-item::before,
885
  .benefit-li::before {
886
+ content: "\27A2";
887
+ display: inline-block;
888
+ margin-right: 6pt;
889
+ color: #000000;
 
 
 
 
 
890
  }
891
 
 
892
  .hb-benefit-text,
893
  .benefit-text {
894
+ display: inline-block;
895
+ background: #00FCFC;
896
+ padding: 1pt 4pt;
 
 
897
  }
898
 
899
  .benefit-bullet {
900
  display: none;
901
  }
902
 
903
+ /* ------------------------------
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
904
  UNIVERSITY SUMMARY LIST
905
+ Black, bold, numbered
906
+ ------------------------------ */
907
  .hb-university-list {
908
+ margin: 0 0 10pt 18pt;
909
  padding: 0;
910
+ list-style: decimal;
911
  font-size: 10pt;
 
912
  color: #000000;
913
  }
914
 
915
  .hb-university-list li {
916
+ margin: 0 0 4pt;
 
 
917
  padding-left: 0;
918
+ font-weight: 700;
919
+ line-height: 1.4;
920
+ color: #000000;
921
  }
922
 
 
923
  .hb-university-list li::before {
924
  content: none;
925
  }
926
 
927
+ /* ------------------------------
928
+ QUALIFICATION / MUTED TEXT
929
+ ------------------------------ */
930
+ .hb-qualify,
931
+ .qualify {
932
+ margin: 8pt 0 6pt;
933
+ font-weight: 700;
934
+ font-size: 10pt;
935
+ font-style: italic;
936
+ color: #1A9970;
937
+ }
938
 
939
+ .hb-muted,
940
+ .muted {
941
+ color: #666666;
942
+ font-size: 10pt;
943
+ }
944
 
945
+ /* ------------------------------
946
+ SECTION-SPECIFIC OVERRIDES
947
+ ------------------------------ */
948
  .sec-overview .hb-heading-1,
949
  .sec-overview .h2 {
950
  margin-top: 0;
 
956
  line-height: 1.4;
957
  }
958
 
 
959
  .sec-qualification .hb-heading-2,
960
  .sec-qualification .h3 {
961
+ margin-top: 10pt;
962
  }
963
 
964
  .sec-qualification .hb-table,
965
  .sec-qualification .tbl {
966
+ margin: 6pt 0 10pt;
967
  }
968
 
 
969
  .sec-policy .hb-heading-2,
970
  .sec-policy .h3 {
971
+ margin-top: 10pt;
972
+ padding-bottom: 0;
973
  }
974
 
975
  .sec-policy .hb-note,
976
  .sec-policy .note {
977
+ margin-top: 8pt;
 
978
  }
979
 
980
  .sec-policy .hb-table,
981
  .sec-policy .tbl {
982
+ margin: 6pt 0 10pt;
983
  }
984
 
 
985
  .sec-refund .hb-table,
986
  .sec-refund .tbl {
987
+ margin: 6pt 0 10pt;
988
  }
989
 
 
990
  .sec-contributions .hb-paragraph,
991
+ .sec-contributions .p,
 
 
 
 
992
  .sec-contributions .hb-bullet-list li,
993
  .sec-contributions .ul li {
994
  font-weight: 700;
995
+ color: #1A9970;
996
  }
997
 
998
  .sec-contributions .hb-table,
999
  .sec-contributions .tbl {
1000
+ margin: 6pt 0 10pt;
 
 
 
 
 
 
 
 
 
1001
  }
1002
 
 
1003
  .sec-funding .hb-table,
1004
  .sec-funding .tbl {
1005
+ margin: 6pt 0 10pt;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1006
  }
1007
 
1008
  /* Images must stay inside margins */
1009
  .page-content img {
1010
  max-width: 100%;
1011
  height: auto;
1012
+ }
app/static/css/print.css.backup DELETED
@@ -1,1082 +0,0 @@
1
- /* =================================================================
2
- ISP Handbook – Print Stylesheet for Chromium PDF Export
3
- Replaces both handbook-word.css and inline PDF overrides.
4
- Designed for Playwright page.pdf() with print media.
5
-
6
- All visual rules are derived from the ISP Handbook Enhancement
7
- Guidelines + sample PDF. CSS classes use the "hb-" prefix to
8
- match RenderBlock-based Jinja partials.
9
-
10
- Legacy class names (.h2, .h3, .p, .ul, .ol, .tbl, .note, etc.)
11
- are kept for backward compatibility but aliased to the new
12
- hb-prefixed rules.
13
- ================================================================= */
14
-
15
- /* ── Page geometry ──
16
- Playwright page.pdf() margins (standard Word):
17
- top 2.54cm (header zone – header_template renders scaled image)
18
- left 2.54cm (Word default)
19
- right 2.50cm (Word default)
20
- bottom 2.54cm (footer zone – footer_template renders page number)
21
-
22
- All four margins handled by Playwright. Content area is within margins.
23
- position:fixed elements are relative to the content area.
24
- .page-header and .page-footer divs hidden – Playwright templates
25
- handle header image and page numbers.
26
- ── */
27
- @page {
28
- size: A4;
29
- margin: 0;
30
- }
31
-
32
- /* ── Reset ── */
33
- *,
34
- *::before,
35
- *::after {
36
- box-sizing: border-box;
37
- }
38
-
39
-
40
- /* ══════════════════════════════════════════════════════════
41
- REPEATING PAGE HEADER
42
- Hidden before PDF β€” Playwright header_template renders
43
- the header image in the top margin zone on every page.
44
- Kept in HTML so the image src can be extracted via JS.
45
- ══════════════════════════════════════════════════════════ */
46
- .page-header {
47
- display: none;
48
- }
49
-
50
- .page-header img {
51
- display: block;
52
- width: 8.45in;
53
- height: 1.03in;
54
- }
55
-
56
-
57
- /* ══════════════════════════════════════════════════════════
58
- REPEATING RIGHT-SIDE LABEL
59
- position:fixed on every page. Negative right offset
60
- pushes it into the Playwright right margin zone (2.50cm)
61
- so it sits at the paper edge.
62
- ══════════════════════════════════════════════════════════ */
63
- .hb-right-label {
64
- position: fixed;
65
- top: -2.54cm;
66
- right: -2.50cm;
67
- width: 36px;
68
- height: calc(100% + 2.54cm + 2.54cm);
69
- z-index: 100;
70
- pointer-events: none;
71
- overflow: hidden;
72
- }
73
-
74
- .hb-right-label img {
75
- width: 36px;
76
- height: 100%;
77
- display: block;
78
- object-fit: fill;
79
- }
80
-
81
-
82
- /* ══════════════════════════════════════════════════════════
83
- PAGE-CONTENT WRAPPER
84
- Playwright margins handle all per-page spacing.
85
- No CSS padding needed β€” content naturally sits inside
86
- the margin box on every page.
87
- ══════════════════════════════════════════════════════════ */
88
- .page-content {
89
- box-sizing: border-box;
90
- }
91
-
92
- /* Suppress page-break on first child to avoid blank page after cover/TOC */
93
- .page-content> :first-child.page-break {
94
- page-break-before: auto;
95
- break-before: auto;
96
- }
97
-
98
-
99
- /* ══════════════════════════════════════════════════════════
100
- PAGE NUMBERS (FOOTER)
101
- Hidden β€” Playwright footer_template handles page numbers.
102
- ══════════════════════════════════════════════════════════ */
103
- .page-footer {
104
- display: none;
105
- }
106
-
107
-
108
- /* ══════════════════════════════════════════════════════════
109
- BLANK PAGE PREVENTION
110
- Avoid double page-breaks when page-break-after meets
111
- page-break-before on adjacent elements.
112
- ══════════════════════════════════════════════════════════ */
113
- .cover-page+.page-content {
114
- page-break-before: auto;
115
- break-before: auto;
116
- }
117
-
118
-
119
- /* ── Body typography ──
120
- Spec: Century Gothic 10pt, justified, line spacing 1.0
121
- Playwright margins handle all per-page spacing. */
122
- html,
123
- body {
124
- margin: 0;
125
- padding: 0;
126
- font-family: 'Century Gothic', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
127
- font-size: 10pt;
128
- line-height: 1.15;
129
- color: #000000;
130
- text-align: justify;
131
- -webkit-print-color-adjust: exact;
132
- print-color-adjust: exact;
133
- }
134
-
135
-
136
- /* ══════════════════════════════════════════════════════════
137
- HEADINGS
138
- Spec: H1 = 12pt bold blue #1C75BC, uppercase
139
- H2+ = 12pt bold green #1A9970
140
- ══════════════════════════════════════════════════════════ */
141
-
142
- /* New block classes */
143
- .hb-heading-1,
144
- .h2 {
145
- font-size: 12pt;
146
- font-weight: 700;
147
- color: #1C75BC;
148
- margin: 10px 0 4px;
149
- line-height: 1.15;
150
- text-transform: uppercase;
151
- letter-spacing: 0.3px;
152
- page-break-after: avoid;
153
- break-after: avoid;
154
- }
155
-
156
- .hb-heading-2,
157
- .h3 {
158
- font-size: 12pt;
159
- font-weight: 700;
160
- margin: 6px 0 2px;
161
- line-height: 1.15;
162
- page-break-after: avoid;
163
- break-after: avoid;
164
- color: #1A9970;
165
- }
166
-
167
- /* Global heading break rules */
168
- h1,
169
- h2,
170
- h3,
171
- h4,
172
- h5,
173
- h6 {
174
- page-break-after: avoid;
175
- break-after: avoid;
176
- page-break-inside: avoid;
177
- break-inside: avoid;
178
- }
179
-
180
-
181
- /* ══════════════════════════════════════════════════════════
182
- PARAGRAPHS
183
- Spec: 10pt, justified, line-height 1.4
184
- ══════════════════════════════════════════════════════════ */
185
- .hb-paragraph,
186
- .p {
187
- margin: 2px 0 6px;
188
- line-height: 1.4;
189
- font-size: 10pt;
190
- text-align: justify;
191
- }
192
-
193
-
194
- /* ══════════════════════════════════════════════════════════
195
- LINKS
196
- ══════════════════════════════════════════════════════════ */
197
- a {
198
- color: #1C75BC;
199
- text-decoration: underline;
200
- }
201
-
202
-
203
- /* ══════════════════════════════════════════════════════════
204
- BULLET LISTS
205
- Spec: primary bullet = ➒, 10pt
206
- ══════════════════════════════════════════════════════════ */
207
- .hb-bullet-list,
208
- .ul {
209
- margin: 2px 0 4px 14px;
210
- padding: 0;
211
- font-size: 10pt;
212
- list-style-type: none;
213
- }
214
-
215
- .hb-bullet-list li,
216
- .ul li {
217
- margin: 1px 0;
218
- line-height: 1.4;
219
- position: relative;
220
- padding-left: 14px;
221
- }
222
-
223
- .hb-bullet-list li::before,
224
- .ul li::before {
225
- content: "\27A2";
226
- /* ➒ */
227
- position: absolute;
228
- left: 0;
229
- color: #000000;
230
- font-size: 10pt;
231
- }
232
-
233
- /* Numbered (ordered) lists – restore numbering */
234
- .hb-numbered-list,
235
- ol.hb-bullet-list,
236
- .ol {
237
- margin: 2px 0 4px 14px;
238
- padding: 0;
239
- font-size: 10pt;
240
- list-style-type: decimal;
241
- }
242
-
243
- .hb-numbered-list li,
244
- ol.hb-bullet-list li,
245
- .ol li {
246
- margin: 1px 0;
247
- line-height: 1.4;
248
- padding-left: 0;
249
- }
250
-
251
- .hb-numbered-list li::before,
252
- ol.hb-bullet-list li::before,
253
- .ol li::before {
254
- content: none;
255
- }
256
-
257
-
258
- /* ══════════════════════════════════════════════════════════
259
- NOTES / CALLOUTS
260
- Spec: full bold text, NOTE / ONLY IF keywords in bold + red #C00000
261
- ══════════════════════════════════════════════════════════ */
262
- .hb-note,
263
- .note {
264
- border: 1px solid #BBBBBB;
265
- padding: 5px 7px;
266
- margin: 4px 0 6px;
267
- background: #F7F8FA;
268
- font-size: 9.5px;
269
- font-weight: 700;
270
- line-height: 1.3;
271
- page-break-inside: avoid;
272
- break-inside: avoid;
273
- }
274
-
275
- .hb-note-keyword {
276
- font-weight: 700;
277
- color: #C00000;
278
- }
279
-
280
-
281
- /* ══════════════════════════════════════════════════════════
282
- PAGE-BREAK HELPERS
283
- ══════════════════════════════════════════════════════════ */
284
- .page-break {
285
- page-break-before: always;
286
- break-before: page;
287
- }
288
-
289
- .avoid-break {
290
- page-break-inside: avoid;
291
- break-inside: avoid;
292
- }
293
-
294
- .keep-with-next {
295
- page-break-after: avoid;
296
- break-after: avoid;
297
- }
298
-
299
-
300
- /* ══════════════════════════════════════════════════════════
301
- TABLES (global break rules)
302
- ══════════════════════════════════════════════════════════ */
303
- table {
304
- page-break-inside: auto;
305
- break-inside: auto;
306
- }
307
-
308
- thead {
309
- display: table-header-group;
310
- }
311
-
312
- tfoot {
313
- display: table-row-group;
314
- }
315
-
316
-
317
- /* ══════════════════════════════════════════════════════════
318
- COVER PAGE
319
- Edge-to-edge cover image. Negative margins expand into
320
- Playwright margin areas.
321
- ══════════════════════════════════════════════════════════ */
322
- .cover-page {
323
- page-break-after: always;
324
- break-after: page;
325
- margin: -2.54cm -2.54cm -2.54cm -2.54cm;
326
- padding: 0;
327
- position: relative;
328
- z-index: 2000;
329
- overflow: hidden;
330
- }
331
-
332
- .cover-img {
333
- width: 100%;
334
- height: auto;
335
- display: block;
336
- }
337
-
338
-
339
- /* ══════════════════════════════════════════════════════════
340
- FULL-PAGE IMAGES
341
- Negative margins expand into Playwright margin areas
342
- for edge-to-edge rendering.
343
- ══════════════════════════════════════════════════════════ */
344
- .fullpage-img-wrap {
345
- page-break-before: always;
346
- break-before: page;
347
- page-break-inside: avoid;
348
- margin: -2.54cm -2.54cm -2.54cm -2.54cm;
349
- padding: 0;
350
- position: relative;
351
- z-index: 2000;
352
- overflow: hidden;
353
- }
354
-
355
- .fullpage-img {
356
- width: 100%;
357
- height: auto;
358
- display: block;
359
- }
360
-
361
- img {
362
- max-width: 100%;
363
- height: auto;
364
- }
365
-
366
-
367
- /* ══════════════════════════════════════════════════════════
368
- GENERIC TABLES
369
- Spec: standard grid, NO row shading, #333 border
370
- DOMPDF-safe: explicit widths, collapse, padding, v-align
371
- ══════════════════════════════════════════════════════════ */
372
- .hb-table,
373
- .tbl {
374
- width: 100%;
375
- border-collapse: collapse;
376
- table-layout: fixed;
377
- margin: 6px 0 10px;
378
- font-size: 9.5px;
379
- line-height: 1.3;
380
- border: 1px solid #333333;
381
- }
382
-
383
- .hb-table thead,
384
- .tbl thead {
385
- display: table-header-group;
386
- }
387
-
388
- .hb-table tr,
389
- .tbl tr {
390
- page-break-inside: avoid;
391
- break-inside: avoid;
392
- }
393
-
394
- .hb-table th,
395
- .hb-table td,
396
- .tbl th,
397
- .tbl td {
398
- border: 1px solid #333333;
399
- padding: 5px 6px;
400
- vertical-align: top;
401
- word-wrap: break-word;
402
- overflow-wrap: break-word;
403
- font-size: 9.5px;
404
- line-height: 1.3;
405
- }
406
-
407
- .hb-table th,
408
- .tbl th {
409
- font-weight: 700;
410
- background: #E6E6E6;
411
- color: #333333;
412
- font-size: 9.5px;
413
- text-align: left;
414
- padding: 5px 6px;
415
- }
416
-
417
- /* No row shading per spec */
418
-
419
-
420
- /* ══════════════════════════════════════════════════════════
421
- PROGRAMS TABLE (university-level)
422
- Spec: plain table, NO shading, standard grid
423
- Column widths: 22% / 14% / 12% / 34% / 18%
424
- DOMPDF-safe: explicit sizing on every element
425
- ══════════════════════════════════════════════════════════ */
426
- .hb-programs,
427
- table.programs {
428
- width: 100%;
429
- border-collapse: collapse;
430
- table-layout: fixed;
431
- margin: 6px 0 10px;
432
- font-family: 'Century Gothic', 'Segoe UI', sans-serif;
433
- border: 1px solid #333333;
434
- }
435
-
436
- .hb-programs thead,
437
- table.programs thead {
438
- display: table-header-group;
439
- }
440
-
441
- .hb-programs tr,
442
- table.programs tr {
443
- page-break-inside: avoid;
444
- break-inside: avoid;
445
- }
446
-
447
- .hb-programs th:nth-child(1),
448
- .hb-programs td:nth-child(1),
449
- table.programs th:nth-child(1),
450
- table.programs td:nth-child(1) {
451
- width: 22%;
452
- }
453
-
454
- .hb-programs th:nth-child(2),
455
- .hb-programs td:nth-child(2),
456
- table.programs th:nth-child(2),
457
- table.programs td:nth-child(2) {
458
- width: 14%;
459
- }
460
-
461
- .hb-programs th:nth-child(3),
462
- .hb-programs td:nth-child(3),
463
- table.programs th:nth-child(3),
464
- table.programs td:nth-child(3) {
465
- width: 12%;
466
- }
467
-
468
- .hb-programs th:nth-child(4),
469
- .hb-programs td:nth-child(4),
470
- table.programs th:nth-child(4),
471
- table.programs td:nth-child(4) {
472
- width: 34%;
473
- }
474
-
475
- .hb-programs th:nth-child(5),
476
- .hb-programs td:nth-child(5),
477
- table.programs th:nth-child(5),
478
- table.programs td:nth-child(5) {
479
- width: 18%;
480
- }
481
-
482
- .hb-programs th,
483
- .hb-programs td,
484
- table.programs th,
485
- table.programs td {
486
- border: 1px solid #333333;
487
- padding: 4px 5px;
488
- vertical-align: top;
489
- word-wrap: break-word;
490
- overflow-wrap: break-word;
491
- font-size: 8.5px;
492
- line-height: 1.25;
493
- }
494
-
495
- .hb-programs th,
496
- table.programs th {
497
- font-weight: 700;
498
- background: #E6E6E6;
499
- color: #000000;
500
- text-transform: uppercase;
501
- font-size: 8.5px;
502
- text-align: center;
503
- letter-spacing: 0.3px;
504
- padding: 4px 5px;
505
- }
506
-
507
- /* No row shading per spec */
508
-
509
- /* Career pathways bullet list inside programs table */
510
- .hb-career-list,
511
- .career-list {
512
- margin: 0;
513
- padding-left: 12px;
514
- list-style-type: disc;
515
- }
516
-
517
- .hb-career-list li,
518
- .career-list li {
519
- margin: 0;
520
- line-height: 1.2;
521
- font-size: 8.5px;
522
- padding-left: 0;
523
- }
524
-
525
- /* Override the ➒ bullet for career lists */
526
- .hb-career-list li::before,
527
- .career-list li::before {
528
- content: none;
529
- }
530
-
531
-
532
- /* ══════════════════════════════════════════════════════════
533
- TABLE OF CONTENTS
534
- ══════════════════════════════════════════════════════════ */
535
- .toc-page {
536
- width: 100%;
537
- max-width: none;
538
- display: block;
539
- page-break-after: auto;
540
- break-after: auto;
541
- padding: 10px 0 0 0;
542
- box-sizing: border-box;
543
- background: #FFFFFF;
544
- border: none;
545
- }
546
-
547
- .toc {
548
- width: 100%;
549
- max-width: none;
550
- display: block;
551
- margin: 0;
552
- padding: 0;
553
- background: #FFFFFF;
554
- }
555
-
556
- .toc-heading {
557
- display: block;
558
- width: 100%;
559
- font-size: 13px;
560
- font-weight: 700;
561
- text-transform: uppercase;
562
- letter-spacing: 0.2px;
563
- margin: 0 0 6px 0;
564
- color: #1C75BC;
565
- line-height: 1.1;
566
- }
567
-
568
- .toc-table {
569
- width: 100%;
570
- border-collapse: collapse;
571
- table-layout: fixed;
572
- margin: 0;
573
- border: none;
574
- }
575
-
576
- .toc-table td {
577
- border: none;
578
- vertical-align: bottom;
579
- padding: 1px 0;
580
- line-height: 1.15;
581
- font-size: 10px;
582
- color: #111111;
583
- }
584
-
585
- .toc-dots {
586
- border-bottom: 1px dotted #777777;
587
- height: 0.85em;
588
- padding: 0;
589
- }
590
-
591
- .toc-pagenum {
592
- width: 48px;
593
- text-align: right;
594
- font-weight: 700;
595
- color: #111111;
596
- white-space: nowrap;
597
- padding-left: 4px;
598
- }
599
-
600
- .toc-row--major td {
601
- padding-top: 1px;
602
- padding-bottom: 1px;
603
- }
604
-
605
- .toc-row--major td a {
606
- color: #111111;
607
- text-decoration: none;
608
- }
609
-
610
- .toc-row--sub td {
611
- padding-top: 0;
612
- padding-bottom: 0;
613
- }
614
-
615
- .toc-row--sub td a {
616
- color: #222222;
617
- text-decoration: none;
618
- }
619
-
620
- /* TOC indent / weight variants */
621
- .toc-row--bold .toc-title {
622
- font-weight: 700;
623
- }
624
-
625
- .toc-row--upper .toc-title {
626
- text-transform: uppercase;
627
- letter-spacing: 0.1px;
628
- }
629
-
630
- .toc-row--indent-1 .toc-title {
631
- padding-left: 16px;
632
- }
633
-
634
- .toc-row--indent-2 .toc-title {
635
- padding-left: 30px;
636
- }
637
-
638
- /* TOC link styling */
639
- .toc-table a,
640
- .toc-table a:visited {
641
- color: #111111;
642
- text-decoration: none;
643
- }
644
-
645
-
646
- /* ══════════════════════════════════════════════════════════
647
- SECTION BLOCKS
648
- ══════════════════════════════════════════════════════════ */
649
- .section-block {
650
- display: block;
651
- width: 100%;
652
- padding: 4px 0 2px;
653
- border: none;
654
- }
655
-
656
-
657
- /* ══════════════════════════════════════════════════════════
658
- ENROLLMENT STEPS
659
- Spec: own page (break-before: page)
660
- ══════════════════════════════════════════════════════════ */
661
- .hb-enrollment-steps {
662
- /* Each step block avoids internal breaks */
663
- }
664
-
665
- .sec-steps {
666
- page-break-before: always;
667
- break-before: page;
668
- }
669
-
670
- .hb-step {
671
- margin-bottom: 6px;
672
- padding-bottom: 4px;
673
- page-break-inside: avoid;
674
- break-inside: avoid;
675
- }
676
-
677
- .hb-step-title {
678
- font-size: 10pt;
679
- font-weight: 700;
680
- margin: 0 0 2px;
681
- line-height: 1.15;
682
- color: #1A9970;
683
- page-break-after: avoid;
684
- break-after: avoid;
685
- }
686
-
687
- .hb-step-qr {
688
- width: 60px;
689
- height: 60px;
690
- margin: 4px 0;
691
- }
692
-
693
- /* Legacy step overrides */
694
- .sec-steps .avoid-break {
695
- margin-bottom: 6px;
696
- padding-bottom: 4px;
697
- }
698
-
699
- .sec-steps .h3 {
700
- margin: 0 0 2px;
701
- font-size: 10pt;
702
- }
703
-
704
- .sec-steps .p {
705
- margin: 2px 0 3px;
706
- font-size: 10pt;
707
- }
708
-
709
- .sec-steps .ul {
710
- margin: 2px 0 3px 14px;
711
- }
712
-
713
-
714
- /* ══════════════════════════════════════════════════════════
715
- UNIVERSITY PAGE
716
- ═════════════════════════��════════════════════════════════ */
717
-
718
- /* Legacy + new classes β€” each university starts on a new page */
719
- .uni,
720
- .hb-school-profile {
721
- page-break-before: always;
722
- break-before: page;
723
- padding: 4px 0 4px;
724
- }
725
-
726
- /* School name β€” linked, underlined */
727
- .hb-uni-name,
728
- .uni-name {
729
- font-size: 14px;
730
- font-weight: 700;
731
- margin: 0 0 4px;
732
- color: #1C75BC;
733
- text-transform: uppercase;
734
- letter-spacing: 0.3px;
735
- line-height: 1.2;
736
- }
737
-
738
- .hb-uni-name-link,
739
- .uni-name a.uni-name-link {
740
- color: #1C75BC;
741
- text-decoration: underline;
742
- }
743
-
744
- /* Summary info β€” green labels */
745
- .hb-summary-title,
746
- .summary-title {
747
- font-size: 10.5px;
748
- font-weight: 700;
749
- text-transform: uppercase;
750
- margin: 6px 0 3px;
751
- color: #1A9970;
752
- letter-spacing: 0.3px;
753
- }
754
-
755
- .hb-summary-ul,
756
- .summary-ul {
757
- list-style: none;
758
- padding: 0;
759
- margin: 0 0 4px;
760
- }
761
-
762
- .hb-summary-ul li,
763
- .summary-ul li {
764
- margin: 0 0 1px;
765
- padding: 0;
766
- font-size: 9.5px;
767
- line-height: 1.3;
768
- }
769
-
770
- /* Override ➒ bullets for summary lists */
771
- .hb-summary-ul li::before,
772
- .summary-ul li::before {
773
- content: none;
774
- }
775
-
776
- .hb-lbl,
777
- .lbl {
778
- font-weight: 700;
779
- color: #1A9970;
780
- }
781
-
782
- .hb-uni-website,
783
- .uni-website {
784
- margin: 3px 0 6px;
785
- font-size: 10px;
786
- }
787
-
788
- /* Two-column layout table */
789
- .hb-school-top-table,
790
- .school-top-table {
791
- width: 100%;
792
- border-collapse: collapse;
793
- table-layout: fixed;
794
- margin: 0 0 2px;
795
- border: none;
796
- }
797
-
798
- .hb-school-top-table td,
799
- .school-top-table td {
800
- border: none;
801
- padding: 0;
802
- }
803
-
804
- .hb-school-top-summary,
805
- .school-top-summary {
806
- width: 58%;
807
- padding-right: 8px;
808
- vertical-align: top;
809
- }
810
-
811
- .hb-school-top-campus,
812
- .school-top-campus {
813
- width: 42%;
814
- vertical-align: top;
815
- text-align: right;
816
- }
817
-
818
- .hb-campus-img,
819
- .campus-top-img {
820
- width: 100%;
821
- max-height: 160px;
822
- height: auto;
823
- display: block;
824
- border: 1px solid #333333;
825
- border-radius: 3px;
826
- object-fit: cover;
827
- }
828
-
829
- .hb-campus-caption,
830
- .campus-top-cap {
831
- font-size: 9px;
832
- color: #444444;
833
- margin-top: 2px;
834
- font-style: italic;
835
- text-align: right;
836
- line-height: 1.15;
837
- }
838
-
839
- .hb-campus-placeholder,
840
- .campus-placeholder-cell {
841
- width: 100%;
842
- min-height: 120px;
843
- border: 1px dashed #999999;
844
- color: #666666;
845
- font-size: 10px;
846
- padding: 10px;
847
- background: #F4F6F8;
848
- border-radius: 4px;
849
- }
850
-
851
-
852
- /* ══════════════════════════════════════════════════════════
853
- BENEFITS SECTION
854
- Spec: heading highlight = bright green #00F600 bg, white text
855
- item highlight = bright cyan #00FCFC bg
856
- Highlights wrap the TEXT only, not the entire row.
857
- ══════════════════════════════════════════════════════════ */
858
- .hb-benefits-section,
859
- .benefits-section {
860
- clear: both;
861
- margin: 4px 0 4px;
862
- page-break-inside: avoid;
863
- break-inside: avoid;
864
- }
865
-
866
- /* Heading container β€” plain block, no background */
867
- .hb-benefits-heading {
868
- margin: 0 0 2px;
869
- line-height: 1.3;
870
- }
871
-
872
- /* Heading highlight β€” inline span wrapping text only */
873
- .hb-benefits-bar,
874
- .benefits-bar {
875
- display: inline-block;
876
- background: #00F600;
877
- color: #FFFFFF;
878
- font-weight: 700;
879
- padding: 2px 6px;
880
- font-size: 10px;
881
- text-transform: uppercase;
882
- letter-spacing: 0.3px;
883
- line-height: 1.4;
884
- }
885
-
886
- /* Benefit list β€” no list bullets, no background */
887
- .hb-benefits-ul,
888
- .benefits-ul {
889
- list-style: none;
890
- padding: 0;
891
- margin: 0;
892
- }
893
-
894
- /* Benefit item β€” plain li, no background */
895
- .hb-benefit-item,
896
- .benefit-li {
897
- margin: 1px 0;
898
- padding: 0;
899
- font-size: 9.5px;
900
- line-height: 1.4;
901
- background: none;
902
- border-bottom: none;
903
- }
904
-
905
- /* Remove all ::before pseudo-element bullets */
906
- .hb-benefit-item::before,
907
- .benefit-li::before {
908
- content: none;
909
- }
910
-
911
- .hb-benefits-ul li::before {
912
- content: none;
913
- }
914
-
915
- .hb-benefits-ul li {
916
- padding-left: 0;
917
- }
918
-
919
- /* Benefit text highlight β€” inline span, background wraps text only */
920
- .hb-benefit-text {
921
- display: inline-block;
922
- background: #00FCFC;
923
- padding: 1px 4px;
924
- font-size: 9.5px;
925
- line-height: 1.4;
926
- }
927
-
928
-
929
- /* ══════════════════════════════════════════════════════════
930
- QUALIFICATION TEXT
931
- ══════════════════════════════════════════════════════════ */
932
- .hb-qualify,
933
- .qualify {
934
- margin: 6px 0 4px;
935
- font-weight: 700;
936
- font-size: 10px;
937
- font-style: italic;
938
- color: #1A9970;
939
- }
940
-
941
- .hb-muted,
942
- .muted {
943
- color: #666666;
944
- font-size: 10px;
945
- }
946
-
947
-
948
- /* ══════════════════════════════════════════════════════════
949
- UNIVERSITY SUMMARY LIST
950
- Spec: numbered list, black, bold
951
- ══════════════════════════════════════════════════════════ */
952
- .hb-university-list {
953
- margin: 4px 0 6px 18px;
954
- padding: 0;
955
- font-size: 10pt;
956
- list-style-type: decimal;
957
- color: #000000;
958
- }
959
-
960
- .hb-university-list li {
961
- margin: 2px 0;
962
- line-height: 1.4;
963
- font-weight: 700;
964
- padding-left: 0;
965
- }
966
-
967
- /* Override ➒ for university list */
968
- .hb-university-list li::before {
969
- content: none;
970
- }
971
-
972
-
973
- /* ══════════════════════════════════════════════════════════
974
- SECTION-SPECIFIC FORMATTING OVERRIDES
975
- ══════════════════════════════════════════════════════════ */
976
-
977
- /* Overview */
978
- .sec-overview .hb-heading-1,
979
- .sec-overview .h2 {
980
- margin-top: 0;
981
- }
982
-
983
- .sec-overview .hb-paragraph,
984
- .sec-overview .p {
985
- text-align: justify;
986
- line-height: 1.4;
987
- }
988
-
989
- /* Qualification */
990
- .sec-qualification .hb-heading-2,
991
- .sec-qualification .h3 {
992
- margin-top: 8px;
993
- }
994
-
995
- .sec-qualification .hb-table,
996
- .sec-qualification .tbl {
997
- margin: 4px 0 8px;
998
- }
999
-
1000
- /* Policy */
1001
- .sec-policy .hb-heading-2,
1002
- .sec-policy .h3 {
1003
- margin-top: 8px;
1004
- padding-bottom: 1px;
1005
- }
1006
-
1007
- .sec-policy .hb-note,
1008
- .sec-policy .note {
1009
- border-color: #B0B0B0;
1010
- background: #F5F5F5;
1011
- }
1012
-
1013
- .sec-policy .hb-table,
1014
- .sec-policy .tbl {
1015
- margin: 4px 0 6px;
1016
- }
1017
-
1018
- /* Refund */
1019
- .sec-refund .hb-table,
1020
- .sec-refund .tbl {
1021
- margin: 4px 0 8px;
1022
- }
1023
-
1024
- /* Contributions β€” bold text, ISP green per guidelines */
1025
- .sec-contributions .hb-paragraph,
1026
- .sec-contributions .p {
1027
- font-weight: 700;
1028
- color: #1A9970;
1029
- }
1030
-
1031
- .sec-contributions .hb-bullet-list li,
1032
- .sec-contributions .ul li {
1033
- font-weight: 700;
1034
- color: #1A9970;
1035
- }
1036
-
1037
- .sec-contributions .hb-table,
1038
- .sec-contributions .tbl {
1039
- margin: 4px 0 8px;
1040
- }
1041
-
1042
- /* Funding */
1043
- .sec-funding .hb-table,
1044
- .sec-funding .tbl {
1045
- margin: 4px 0 8px;
1046
- }
1047
-
1048
-
1049
- /* ══════════════════════════════════════════════════════════
1050
- COMPARISON TABLE VARIANT
1051
- ══════════════════════════════════════════════════════════ */
1052
- .hb-table-comparison,
1053
- .tbl-comparison {
1054
- font-size: 9px;
1055
- }
1056
-
1057
- .hb-table-comparison th,
1058
- .tbl-comparison th {
1059
- text-align: center;
1060
- font-size: 8.5px;
1061
- }
1062
-
1063
-
1064
- /* ══════════════════════════════════════════════════════════
1065
- DEBUG BLOCK
1066
- ══════════════════════════════════════════════════════════ */
1067
- .debug-block {
1068
- border: 2px dashed #cc0000;
1069
- padding: 12px;
1070
- background: #fffbe6;
1071
- page-break-inside: avoid;
1072
- }
1073
-
1074
- .debug-block h2 {
1075
- color: #cc0000;
1076
- }
1077
-
1078
- .clearfix::after {
1079
- content: "";
1080
- display: block;
1081
- clear: both;
1082
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/static/css/print.css.bak DELETED
@@ -1,734 +0,0 @@
1
- /* =================================================================
2
- ISP Handbook – Print Stylesheet for Chromium PDF Export
3
- Replaces both handbook-word.css and inline PDF overrides.
4
- Designed for Playwright page.pdf() with print media.
5
- ================================================================= */
6
-
7
- /* ── Page geometry ── */
8
- @page {
9
- size: A4;
10
- margin: 95px 42px 55px 36px;
11
- }
12
-
13
- @page :first {
14
- margin: 0;
15
- }
16
-
17
- /* ── Reset ── */
18
- *,
19
- *::before,
20
- *::after {
21
- box-sizing: border-box;
22
- }
23
-
24
- /* ── Body typography ── */
25
- body {
26
- margin: 0;
27
- padding: 0;
28
- font-family: 'Century Gothic', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
29
- font-size: 11px;
30
- line-height: 1.3;
31
- color: #000;
32
- -webkit-print-color-adjust: exact;
33
- print-color-adjust: exact;
34
- }
35
-
36
- /* ══════════════════════════
37
- HEADINGS
38
- ══════════════════════════ */
39
- .h2 {
40
- font-size: 15px;
41
- font-weight: 700;
42
- color: #1c75bc;
43
- margin: 10px 0 4px;
44
- line-height: 1.15;
45
- text-transform: uppercase;
46
- letter-spacing: 0.3px;
47
- page-break-after: avoid;
48
- }
49
-
50
- .h3 {
51
- font-size: 10.5px;
52
- font-weight: 700;
53
- margin: 6px 0 2px;
54
- line-height: 1.2;
55
- page-break-after: avoid;
56
- color: #2f8f6a;
57
- }
58
-
59
- /* ══════════════════════════
60
- PARAGRAPHS
61
- ══════════════════════════ */
62
- .p {
63
- margin: 2px 0 4px;
64
- line-height: 1.3;
65
- font-size: 10.5px;
66
- }
67
-
68
- /* ══════════════════════════
69
- LINKS
70
- ══════════════════════════ */
71
- a {
72
- color: #1c75bc;
73
- text-decoration: underline;
74
- }
75
-
76
- /* ══════════════════════════
77
- LISTS
78
- ══════════════════════════ */
79
- .ul {
80
- margin: 2px 0 4px 14px;
81
- padding: 0;
82
- font-size: 10.5px;
83
- }
84
-
85
- .ul li {
86
- margin: 1px 0;
87
- line-height: 1.3;
88
- }
89
-
90
- .ol {
91
- margin: 2px 0 4px 14px;
92
- padding: 0;
93
- font-size: 10.5px;
94
- }
95
-
96
- .ol li {
97
- margin: 1px 0;
98
- line-height: 1.3;
99
- }
100
-
101
- /* ══════════════════════════
102
- NOTE / CALLOUT BOX
103
- ══════════════════════════ */
104
- .note {
105
- border: 1px solid #bbb;
106
- padding: 5px 7px;
107
- margin: 4px 0 6px;
108
- background: #f7f8fa;
109
- font-size: 9.5px;
110
- line-height: 1.3;
111
- page-break-inside: avoid;
112
- }
113
-
114
- /* ══════════════════════════
115
- PAGE-BREAK HELPERS
116
- ══════════════════════════ */
117
- .page-break {
118
- page-break-before: always;
119
- break-before: page;
120
- }
121
-
122
- .avoid-break {
123
- page-break-inside: avoid;
124
- break-inside: avoid;
125
- }
126
-
127
- .keep-with-next {
128
- page-break-after: avoid;
129
- break-after: avoid;
130
- }
131
-
132
- /* ══════════════════════════
133
- HEADINGS (global break rules)
134
- ══════════════════════════ */
135
- h1, h2, h3, h4, h5, h6 {
136
- page-break-after: avoid;
137
- break-after: avoid;
138
- page-break-inside: avoid;
139
- break-inside: avoid;
140
- }
141
-
142
- /* ══════════════════════════
143
- TABLES (global break rules)
144
- ══════════════════════════ */
145
- table {
146
- page-break-inside: auto;
147
- break-inside: auto;
148
- }
149
-
150
- thead {
151
- display: table-header-group;
152
- }
153
-
154
- tfoot {
155
- display: table-row-group;
156
- }
157
-
158
- /* ══════════════════════════
159
- COVER PAGE
160
- ══════════════════════════ */
161
- .cover-page {
162
- page-break-after: always;
163
- break-after: page;
164
- margin: 0;
165
- padding: 0;
166
- }
167
-
168
- .cover-img {
169
- width: 100%;
170
- height: auto;
171
- display: block;
172
- }
173
-
174
- /* ══════════════════════════
175
- FULL-PAGE IMAGES
176
- ══════════════════════════ */
177
- .fullpage-img-wrap {
178
- width: 100%;
179
- page-break-inside: avoid;
180
- }
181
-
182
- .fullpage-img {
183
- width: 100%;
184
- height: auto;
185
- display: block;
186
- }
187
-
188
- img {
189
- max-width: 100%;
190
- height: auto;
191
- }
192
-
193
- /* ══════════════════════════
194
- GENERIC TABLES (.tbl)
195
- ══════════════════════════ */
196
- .tbl {
197
- width: 100%;
198
- border-collapse: collapse;
199
- table-layout: fixed;
200
- margin: 3px 0 6px;
201
- font-size: 9.5px;
202
- line-height: 1.25;
203
- }
204
-
205
- .tbl thead {
206
- display: table-header-group;
207
- }
208
-
209
- .tbl tr {
210
- page-break-inside: avoid;
211
- break-inside: avoid;
212
- }
213
-
214
- .tbl th,
215
- .tbl td {
216
- border: 1px solid #333;
217
- padding: 8px;
218
- vertical-align: top;
219
- word-wrap: break-word;
220
- overflow-wrap: break-word;
221
- }
222
-
223
- .tbl th {
224
- font-weight: 700;
225
- background: #e6e6e6;
226
- color: #333;
227
- font-size: 9.5px;
228
- }
229
-
230
- .tbl tbody tr:nth-child(even) {
231
- background: #f4f6f8;
232
- }
233
-
234
- /* ══════════════════════════
235
- PROGRAMS TABLE (university-level)
236
- ══════════════════════════ */
237
- table.programs {
238
- width: 100%;
239
- border-collapse: collapse;
240
- table-layout: fixed;
241
- margin: 4px 0 8px;
242
- font-family: 'Century Gothic', 'Segoe UI', sans-serif;
243
- }
244
-
245
- table.programs thead {
246
- display: table-header-group;
247
- }
248
-
249
- table.programs tr {
250
- page-break-inside: avoid;
251
- break-inside: avoid;
252
- }
253
-
254
- table.programs th:nth-child(1),
255
- table.programs td:nth-child(1) {
256
- width: 22%;
257
- }
258
-
259
- table.programs th:nth-child(2),
260
- table.programs td:nth-child(2) {
261
- width: 14%;
262
- }
263
-
264
- table.programs th:nth-child(3),
265
- table.programs td:nth-child(3) {
266
- width: 12%;
267
- }
268
-
269
- table.programs th:nth-child(4),
270
- table.programs td:nth-child(4) {
271
- width: 34%;
272
- }
273
-
274
- table.programs th:nth-child(5),
275
- table.programs td:nth-child(5) {
276
- width: 18%;
277
- }
278
-
279
- table.programs th,
280
- table.programs td {
281
- border: 1px solid #333;
282
- padding: 8px;
283
- vertical-align: top;
284
- word-wrap: break-word;
285
- overflow-wrap: break-word;
286
- font-size: 8.5px;
287
- line-height: 1.25;
288
- }
289
-
290
- table.programs th {
291
- font-weight: 700;
292
- background: #e6e6e6;
293
- color: #000;
294
- text-transform: uppercase;
295
- font-size: 8.5px;
296
- text-align: center;
297
- letter-spacing: 0.3px;
298
- }
299
-
300
- table.programs tbody tr:nth-child(even) {
301
- background: #f7f7f7;
302
- }
303
-
304
- /* Career pathways bullet list inside programs table */
305
- .career-list {
306
- margin: 0;
307
- padding-left: 12px;
308
- list-style-type: disc;
309
- }
310
-
311
- .career-list li {
312
- margin: 0;
313
- line-height: 1.2;
314
- font-size: 8.5px;
315
- }
316
-
317
- /* ══════════════════════════
318
- TABLE OF CONTENTS
319
- ══════════════════════════ */
320
- .toc-page {
321
- width: 100%;
322
- max-width: none;
323
- display: block;
324
- page-break-after: always;
325
- break-after: page;
326
- padding: 10px 18px 0 18px;
327
- box-sizing: border-box;
328
- background: #ffffff;
329
- border: none;
330
- }
331
-
332
- .toc {
333
- width: 100%;
334
- max-width: none;
335
- display: block;
336
- margin: 0;
337
- padding: 0;
338
- background: #ffffff;
339
- }
340
-
341
- .toc-heading {
342
- display: block;
343
- width: 100%;
344
- font-size: 13px;
345
- font-weight: 700;
346
- text-transform: uppercase;
347
- letter-spacing: 0.2px;
348
- margin: 0 0 6px 0;
349
- color: #1c75bc;
350
- line-height: 1.1;
351
- }
352
-
353
- .toc-table {
354
- width: 100%;
355
- border-collapse: collapse;
356
- table-layout: fixed;
357
- margin: 0;
358
- border: none;
359
- }
360
-
361
- .toc-table td {
362
- border: none;
363
- vertical-align: bottom;
364
- padding: 1px 0;
365
- line-height: 1.15;
366
- font-size: 10px;
367
- color: #111111;
368
- }
369
-
370
- .toc-dots {
371
- border-bottom: 1px dotted #777777;
372
- height: 0.85em;
373
- padding: 0;
374
- }
375
-
376
- .toc-pagenum {
377
- width: 48px;
378
- text-align: right;
379
- font-weight: 700;
380
- color: #111111;
381
- white-space: nowrap;
382
- padding-left: 4px;
383
- }
384
-
385
- .toc-row--major td {
386
- padding-top: 1px;
387
- padding-bottom: 1px;
388
- }
389
-
390
- .toc-row--major td a {
391
- color: #111111;
392
- text-decoration: none;
393
- }
394
-
395
- .toc-row--sub td {
396
- padding-top: 0;
397
- padding-bottom: 0;
398
- }
399
-
400
- .toc-row--sub td a {
401
- color: #222222;
402
- text-decoration: none;
403
- }
404
-
405
- /* TOC link styling */
406
- .toc-table a,
407
- .toc-table a:visited {
408
- color: #111111;
409
- text-decoration: none;
410
- }
411
-
412
- /* ══════════════════════════
413
- SECTION BLOCKS
414
- ══════════════════════════ */
415
- .section-block {
416
- display: block;
417
- width: 100%;
418
- padding: 4px 0 2px;
419
- border-bottom: none;
420
- }
421
-
422
- /* ══════════════════════════════════════════════════════════
423
- UNIVERSITY PAGE TEMPLATE
424
- ══════════════════════════════════════════════════════════ */
425
- .uni {
426
- padding: 8px 0 6px;
427
- }
428
-
429
- .uni-name {
430
- font-size: 16px;
431
- font-weight: 700;
432
- margin: 0 0 5px;
433
- color: #1c75bc;
434
- text-transform: uppercase;
435
- letter-spacing: 0.3px;
436
- line-height: 1.15;
437
- }
438
-
439
- .uni-name a.uni-name-link {
440
- color: #1c75bc;
441
- text-decoration: underline;
442
- }
443
-
444
- /* Summary section */
445
- .summary-title {
446
- font-size: 10.5px;
447
- font-weight: 700;
448
- text-transform: uppercase;
449
- margin: 6px 0 3px;
450
- color: #2f8f6a;
451
- letter-spacing: 0.3px;
452
- }
453
-
454
- .summary-ul {
455
- list-style: none;
456
- padding: 0;
457
- margin: 0 0 4px;
458
- }
459
-
460
- .summary-ul li {
461
- margin: 0 0 1px;
462
- padding: 0;
463
- font-size: 9.5px;
464
- line-height: 1.3;
465
- }
466
-
467
- .lbl {
468
- font-weight: 700;
469
- color: #2f8f6a;
470
- }
471
-
472
- .uni-website {
473
- margin: 3px 0 6px;
474
- font-size: 10px;
475
- }
476
-
477
- /* Two-column layout table */
478
- .school-top-table {
479
- width: 100%;
480
- border-collapse: collapse;
481
- table-layout: fixed;
482
- margin: 0 0 2px;
483
- border: none;
484
- }
485
-
486
- .school-top-table td {
487
- border: none;
488
- padding: 0;
489
- }
490
-
491
- .school-top-summary {
492
- width: 55%;
493
- padding-right: 10px;
494
- vertical-align: top;
495
- }
496
-
497
- .school-top-campus {
498
- width: 45%;
499
- vertical-align: top;
500
- text-align: right;
501
- }
502
-
503
- .campus-top-img {
504
- width: 100%;
505
- height: auto;
506
- display: block;
507
- border: 1px solid #333;
508
- border-radius: 4px;
509
- }
510
-
511
- .campus-top-cap {
512
- font-size: 9px;
513
- color: #444;
514
- margin-top: 2px;
515
- font-style: italic;
516
- text-align: right;
517
- line-height: 1.15;
518
- }
519
-
520
- .campus-placeholder-cell {
521
- width: 100%;
522
- min-height: 120px;
523
- border: 1px dashed #999;
524
- color: #666;
525
- font-size: 10px;
526
- padding: 10px;
527
- background: #f4f6f8;
528
- border-radius: 4px;
529
- }
530
-
531
- /* ══════════════════════════
532
- BENEFITS SECTION
533
- ══════════════════════════ */
534
- .benefits-section {
535
- clear: both;
536
- margin: 6px 0 6px;
537
- page-break-inside: avoid;
538
- break-inside: avoid;
539
- }
540
-
541
- .benefits-bar {
542
- display: block;
543
- width: 100%;
544
- box-sizing: border-box;
545
- background: #2f8f6a;
546
- color: #fff;
547
- font-weight: 700;
548
- padding: 5px 8px;
549
- margin: 0 0 3px;
550
- font-size: 10.5px;
551
- text-transform: uppercase;
552
- letter-spacing: 0.3px;
553
- line-height: 1.15;
554
- }
555
-
556
- .benefits-ul {
557
- list-style: none;
558
- padding: 0;
559
- margin: 3px 0 6px 4px;
560
- }
561
-
562
- .benefit-li {
563
- margin: 0 0 2px 0;
564
- font-size: 10px;
565
- line-height: 1.3;
566
- }
567
-
568
- .benefit-bullet {
569
- display: inline-block;
570
- width: 12px;
571
- font-size: 10px;
572
- }
573
-
574
- .benefit-text {
575
- font-size: 10px;
576
- }
577
-
578
- .qualify {
579
- margin: 6px 0 4px;
580
- font-weight: 700;
581
- font-size: 10px;
582
- font-style: italic;
583
- color: #2f8f6a;
584
- }
585
-
586
- .muted {
587
- color: #666;
588
- font-size: 10px;
589
- }
590
-
591
- .clearfix::after {
592
- content: "";
593
- display: block;
594
- clear: both;
595
- }
596
-
597
- /* ══════════════════════════════════════════════════════════
598
- SECTION-SPECIFIC FORMATTING OVERRIDES
599
- ══════════════════════════════════════════════════════════ */
600
-
601
- /* Overview */
602
- .sec-overview .h2 {
603
- margin-top: 0;
604
- }
605
-
606
- .sec-overview .p {
607
- text-align: left;
608
- line-height: 1.35;
609
- }
610
-
611
- /* Qualification */
612
- .sec-qualification .h3 {
613
- margin-top: 8px;
614
- }
615
-
616
- .sec-qualification .tbl {
617
- margin: 4px 0 8px;
618
- }
619
-
620
- .sec-qualification .tbl th {
621
- background: #e6e6e6;
622
- color: #333;
623
- font-size: 9.5px;
624
- }
625
-
626
- .sec-qualification .tbl td {
627
- font-size: 9.5px;
628
- }
629
-
630
- /* Enrolment Steps */
631
- .sec-steps .avoid-break {
632
- margin-bottom: 6px;
633
- padding-bottom: 4px;
634
- border-bottom: 1px solid #e8e8e8;
635
- }
636
-
637
- .sec-steps .h3 {
638
- margin: 0 0 2px;
639
- font-size: 10.5px;
640
- }
641
-
642
- .sec-steps .p {
643
- margin: 2px 0 3px;
644
- font-size: 10.5px;
645
- }
646
-
647
- .sec-steps .ul {
648
- margin: 2px 0 3px 14px;
649
- }
650
-
651
- /* Policy */
652
- .sec-policy .h3 {
653
- margin-top: 8px;
654
- padding-bottom: 1px;
655
- }
656
-
657
- .sec-policy .note {
658
- border-color: #b0b0b0;
659
- background: #f5f5f5;
660
- }
661
-
662
- .sec-policy .tbl {
663
- margin: 4px 0 6px;
664
- }
665
-
666
- .sec-policy .tbl th {
667
- background: #e6e6e6;
668
- color: #333;
669
- }
670
-
671
- /* Refund */
672
- .sec-refund .tbl {
673
- margin: 4px 0 8px;
674
- }
675
-
676
- .sec-refund .tbl th {
677
- background: #e6e6e6;
678
- color: #333;
679
- }
680
-
681
- /* Contributions */
682
- .sec-contributions .tbl {
683
- margin: 4px 0 8px;
684
- }
685
-
686
- .sec-contributions .tbl th {
687
- background: #e6e6e6;
688
- font-size: 9.5px;
689
- }
690
-
691
- /* Funding */
692
- .sec-funding .tbl {
693
- margin: 4px 0 8px;
694
- }
695
-
696
- .sec-funding .tbl th {
697
- background: #dfe8f0;
698
- font-size: 9px;
699
- text-align: center;
700
- }
701
-
702
- .sec-funding .tbl td {
703
- font-size: 9px;
704
- text-align: center;
705
- }
706
-
707
- /* ══════════════════════════
708
- COMPARISON TABLE (table_v2)
709
- ══════════════════════════ */
710
- .tbl-comparison th {
711
- text-align: center;
712
- font-size: 9px;
713
- }
714
-
715
- .tbl-comparison td {
716
- text-align: center;
717
- font-size: 9px;
718
- }
719
-
720
- /* ══════════════════════════
721
- DEBUG BLOCK
722
- ══════════════════════════ */
723
- .debug-block {
724
- font-size: 10px;
725
- padding: 10px;
726
- }
727
-
728
- .debug-block pre {
729
- background: #f4f6f8;
730
- padding: 10px;
731
- border: 1px solid #ccc;
732
- overflow-wrap: break-word;
733
- white-space: pre-wrap;
734
- }