@govnepal/css 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/civic-calm.css +386 -1
  2. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Civic Calm — @govnepal/css
3
3
  * The framework-agnostic visual layer. Semantic HTML plus .gov-* classes; no JavaScript.
4
- * Built against design-guidelines 0.2.0-dev (816565b5).
4
+ * Built against design-guidelines 0.2.0-dev (417ba0b6).
5
5
  *
6
6
  * This stylesheet holds ALL of Civic Calm's visual decisions. @govnepal/ui adds only behavior
7
7
  * (ARIA, keyboard, focus management) on top of these classes — so a plain-HTML site or a CMS
@@ -802,6 +802,80 @@ a:visited,
802
802
  color: var(--gov-color-text-placeholder);
803
803
  }
804
804
 
805
+ /* Toggle switch, textarea, character count (components/toggle.md, textarea.md, character-count.md). */
806
+
807
+ /* Toggle — on/off with immediate effect; the ON state is interactive, therefore blue (§5.2), and
808
+ * the state is shown by more than colour (position + label/word), never colour alone (§4.1). */
809
+ .gov-toggle {
810
+ display: inline-flex;
811
+ align-items: center;
812
+ gap: var(--gov-space-3);
813
+ cursor: pointer;
814
+ min-block-size: var(--gov-target-min-size);
815
+ }
816
+
817
+ .gov-toggle__track {
818
+ position: relative;
819
+ inline-size: 44px;
820
+ block-size: 24px;
821
+ flex-shrink: 0;
822
+ border-radius: var(--gov-radius-full);
823
+ background: var(--gov-color-control-track);
824
+ border: var(--gov-border-width-md) solid var(--gov-color-border-input);
825
+ transition: background-color var(--gov-motion-duration-fast) var(--gov-motion-easing-standard);
826
+ }
827
+
828
+ .gov-toggle__handle {
829
+ position: absolute;
830
+ inset-block-start: 1px;
831
+ inset-inline-start: 1px;
832
+ inline-size: 18px;
833
+ block-size: 18px;
834
+ border-radius: var(--gov-radius-full);
835
+ background: var(--gov-color-control-handle);
836
+ transition: transform var(--gov-motion-duration-fast) var(--gov-motion-easing-standard);
837
+ }
838
+
839
+ .gov-toggle[aria-checked="true"] .gov-toggle__track {
840
+ background: var(--gov-color-control-indicator);
841
+ border-color: var(--gov-color-control-indicator);
842
+ }
843
+
844
+ .gov-toggle[aria-checked="true"] .gov-toggle__handle {
845
+ transform: translateX(20px);
846
+ }
847
+
848
+ /* Textarea — multi-line free text; shares the input border/error treatment. */
849
+ .gov-textarea {
850
+ inline-size: 100%;
851
+ min-block-size: calc(var(--gov-type-body-line-height) * 3);
852
+ padding: var(--gov-space-3);
853
+ background: var(--gov-color-background-surface);
854
+ color: var(--gov-color-text-primary);
855
+ border: var(--gov-border-width-md) solid var(--gov-color-border-input);
856
+ border-radius: var(--gov-radius-sm);
857
+ resize: vertical;
858
+ font-family: var(--gov-font-family-ui);
859
+ font-size: var(--gov-type-body-font-size);
860
+ line-height: var(--gov-type-body-line-height);
861
+ }
862
+
863
+ .gov-textarea[aria-invalid="true"] {
864
+ border-color: var(--gov-color-status-error-border);
865
+ }
866
+
867
+ /* Character count — a polite remaining-characters message below a limited field. */
868
+ .gov-character-count {
869
+ color: var(--gov-color-text-secondary);
870
+ font-size: var(--gov-type-small-font-size);
871
+ line-height: var(--gov-type-small-line-height);
872
+ }
873
+
874
+ .gov-character-count--over {
875
+ color: var(--gov-color-status-error-text);
876
+ font-weight: var(--gov-font-weight-medium);
877
+ }
878
+
805
879
  /* Details (components/details.md) and warning text (components/warning-text.md).
806
880
  *
807
881
  * Details is native <details>/<summary> — the platform's own disclosure semantics, so a screen
@@ -1072,6 +1146,201 @@ a:visited,
1072
1146
  color: var(--gov-color-status-error-text);
1073
1147
  }
1074
1148
 
1149
+ /* Card (components/card.md) — group everything about one subject into one bounded, opaque surface.
1150
+ * Low shadow, per Civic Calm's restraint (§2.1); surfaces are always fully opaque (§5.2). */
1151
+ .gov-card {
1152
+ background: var(--gov-color-background-surface);
1153
+ border: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1154
+ border-radius: var(--gov-radius-lg);
1155
+ padding: var(--gov-space-6);
1156
+ box-shadow: var(--gov-elevation-1);
1157
+ }
1158
+
1159
+ .gov-card > * + * {
1160
+ margin-block-start: var(--gov-space-3);
1161
+ }
1162
+
1163
+ /* The interactive variant makes the WHOLE card one link/target — never nest independent links
1164
+ * inside it (a nested-interactive failure). */
1165
+ .gov-card--interactive {
1166
+ display: block;
1167
+ color: inherit;
1168
+ text-decoration: none;
1169
+ cursor: pointer;
1170
+ }
1171
+
1172
+ .gov-card--interactive:hover {
1173
+ border-color: var(--gov-color-border-strong);
1174
+ }
1175
+
1176
+ /* Icon button (components/icon-button.md) — an icon-only action with a required accessible name.
1177
+ * 44x44 minimum hit area even though the icon is smaller; never a primary action (§5.4). */
1178
+ .gov-icon-button {
1179
+ display: inline-flex;
1180
+ align-items: center;
1181
+ justify-content: center;
1182
+ min-inline-size: var(--gov-target-min-size);
1183
+ min-block-size: var(--gov-target-min-size);
1184
+ padding: var(--gov-space-2);
1185
+ border: 0;
1186
+ border-radius: var(--gov-radius-sm);
1187
+ background: transparent;
1188
+ color: var(--gov-color-text-primary);
1189
+ cursor: pointer;
1190
+ }
1191
+
1192
+ .gov-icon-button:hover {
1193
+ background: var(--gov-color-interactive-hover-surface);
1194
+ }
1195
+
1196
+ .gov-icon-button:active {
1197
+ background: var(--gov-color-interactive-pressed-surface);
1198
+ }
1199
+
1200
+ .gov-icon-button[disabled],
1201
+ .gov-icon-button[aria-disabled="true"] {
1202
+ color: var(--gov-color-text-disabled);
1203
+ cursor: not-allowed;
1204
+ }
1205
+
1206
+ .gov-icon-button__icon {
1207
+ inline-size: var(--gov-icon-size-md);
1208
+ block-size: var(--gov-icon-size-md);
1209
+ }
1210
+
1211
+ [data-density="kiosk-counter"] .gov-icon-button {
1212
+ min-inline-size: var(--gov-target-recommended-size);
1213
+ min-block-size: var(--gov-target-recommended-size);
1214
+ }
1215
+
1216
+ /* Modal, confirmation dialog, and toast (components/modal.md, confirmation-dialog.md, toast.md).
1217
+ * Overlays sit above content; surfaces stay fully opaque even over the scrim (§5.2). */
1218
+
1219
+ .gov-modal__scrim {
1220
+ position: fixed;
1221
+ inset: 0;
1222
+ z-index: var(--gov-z-overlay);
1223
+ background: var(--gov-color-overlay-scrim);
1224
+ display: flex;
1225
+ align-items: center;
1226
+ justify-content: center;
1227
+ padding: var(--gov-space-4);
1228
+ }
1229
+
1230
+ .gov-modal {
1231
+ position: relative;
1232
+ z-index: var(--gov-z-modal);
1233
+ inline-size: 100%;
1234
+ max-inline-size: 32rem;
1235
+ max-block-size: calc(100vh - var(--gov-space-8));
1236
+ overflow: auto;
1237
+ background: var(--gov-color-background-surface);
1238
+ border-radius: var(--gov-radius-lg);
1239
+ padding: var(--gov-space-6);
1240
+ box-shadow: var(--gov-elevation-3);
1241
+ }
1242
+
1243
+ .gov-modal__title {
1244
+ font-size: var(--gov-type-h3-font-size);
1245
+ line-height: var(--gov-type-h3-line-height);
1246
+ font-weight: var(--gov-font-weight-semibold);
1247
+ margin-block-end: var(--gov-space-3);
1248
+ }
1249
+
1250
+ .gov-modal__actions {
1251
+ display: flex;
1252
+ flex-wrap: wrap;
1253
+ gap: var(--gov-space-3);
1254
+ margin-block-start: var(--gov-space-6);
1255
+ }
1256
+
1257
+ /* Toast — a small floating confirmation that auto-dismisses. Success/info only, never errors. */
1258
+ .gov-toast-region {
1259
+ position: fixed;
1260
+ inset-block-end: var(--gov-space-6);
1261
+ inset-inline: 0;
1262
+ z-index: var(--gov-z-toast);
1263
+ display: flex;
1264
+ flex-direction: column;
1265
+ align-items: center;
1266
+ gap: var(--gov-space-2);
1267
+ pointer-events: none;
1268
+ }
1269
+
1270
+ .gov-toast {
1271
+ display: inline-flex;
1272
+ align-items: center;
1273
+ gap: var(--gov-space-2);
1274
+ padding: var(--gov-space-3) var(--gov-space-4);
1275
+ border-radius: var(--gov-radius-md);
1276
+ box-shadow: var(--gov-elevation-2);
1277
+ pointer-events: auto;
1278
+ }
1279
+
1280
+ .gov-toast--success {
1281
+ background: var(--gov-color-status-success-background);
1282
+ color: var(--gov-color-status-success-text);
1283
+ border: var(--gov-border-width-sm) solid var(--gov-color-status-success-border);
1284
+ }
1285
+
1286
+ .gov-toast--info {
1287
+ background: var(--gov-color-status-info-background);
1288
+ color: var(--gov-color-status-info-text);
1289
+ border: var(--gov-border-width-sm) solid var(--gov-color-status-info-border);
1290
+ }
1291
+
1292
+ /* Tag and summary list (components/tag.md, summary-list.md). */
1293
+
1294
+ /* Tag — a neutral categorical label, NEVER a status colour (that belongs to badge). */
1295
+ .gov-tag {
1296
+ display: inline-flex;
1297
+ align-items: center;
1298
+ gap: var(--gov-space-1);
1299
+ padding-inline: var(--gov-space-2);
1300
+ padding-block: var(--gov-space-1);
1301
+ border-radius: var(--gov-radius-full);
1302
+ background: var(--gov-color-background-secondary);
1303
+ color: var(--gov-color-text-secondary);
1304
+ border: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1305
+ font-size: var(--gov-type-small-font-size);
1306
+ font-weight: var(--gov-font-weight-medium);
1307
+ white-space: nowrap;
1308
+ }
1309
+
1310
+ /* Summary list — review-your-answers rows (key / value / change). */
1311
+ .gov-summary-list {
1312
+ margin: 0;
1313
+ }
1314
+
1315
+ .gov-summary-list__row {
1316
+ display: grid;
1317
+ gap: var(--gov-space-2) var(--gov-space-4);
1318
+ grid-template-columns: 1fr;
1319
+ padding-block: var(--gov-space-3);
1320
+ border-block-end: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1321
+ break-inside: avoid;
1322
+ }
1323
+
1324
+ @media (min-width: 640px) {
1325
+ .gov-summary-list__row {
1326
+ grid-template-columns: 1fr 2fr auto;
1327
+ align-items: baseline;
1328
+ }
1329
+ }
1330
+
1331
+ .gov-summary-list__key {
1332
+ font-weight: var(--gov-font-weight-medium);
1333
+ margin: 0;
1334
+ }
1335
+
1336
+ .gov-summary-list__value {
1337
+ margin: 0;
1338
+ }
1339
+
1340
+ .gov-summary-list__action {
1341
+ justify-self: start;
1342
+ }
1343
+
1075
1344
  /* Phase banner (components/phase-banner.md), stepper (components/stepper.md), and language
1076
1345
  * switcher (components/language-switcher.md) — the standalone navigation pieces. */
1077
1346
 
@@ -1186,6 +1455,122 @@ a:visited,
1186
1455
  color: var(--gov-color-text-secondary);
1187
1456
  }
1188
1457
 
1458
+ /* Breadcrumb, tabs, pagination, footer (components/breadcrumb.md, tabs.md, pagination.md, footer.md). */
1459
+
1460
+ /* Breadcrumb — hierarchy links, current page as plain text. */
1461
+ .gov-breadcrumb {
1462
+ display: flex;
1463
+ flex-wrap: wrap;
1464
+ align-items: center;
1465
+ gap: var(--gov-space-2);
1466
+ list-style: none;
1467
+ padding: 0;
1468
+ color: var(--gov-color-text-secondary);
1469
+ font-size: var(--gov-type-small-font-size);
1470
+ }
1471
+
1472
+ .gov-breadcrumb__sep {
1473
+ color: var(--gov-color-text-secondary);
1474
+ }
1475
+
1476
+ .gov-breadcrumb [aria-current="page"] {
1477
+ color: var(--gov-color-text-primary);
1478
+ font-weight: var(--gov-font-weight-medium);
1479
+ }
1480
+
1481
+ /* Tabs — the selected tab marked by weight + underline, never colour alone. */
1482
+ .gov-tabs__list {
1483
+ display: flex;
1484
+ flex-wrap: wrap;
1485
+ gap: var(--gov-space-2);
1486
+ border-block-end: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1487
+ }
1488
+
1489
+ .gov-tabs__tab {
1490
+ min-block-size: var(--gov-target-min-size);
1491
+ padding: var(--gov-space-3) var(--gov-space-4);
1492
+ border: 0;
1493
+ background: transparent;
1494
+ color: var(--gov-color-text-secondary);
1495
+ cursor: pointer;
1496
+ border-block-end: var(--gov-border-width-md) solid transparent;
1497
+ margin-block-end: calc(-1 * var(--gov-border-width-sm));
1498
+ }
1499
+
1500
+ .gov-tabs__tab[aria-selected="true"] {
1501
+ color: var(--gov-color-text-primary);
1502
+ font-weight: var(--gov-font-weight-semibold);
1503
+ border-block-end-color: var(--gov-color-interactive-selected-indicator);
1504
+ }
1505
+
1506
+ .gov-tabs__panel {
1507
+ padding-block-start: var(--gov-space-4);
1508
+ }
1509
+
1510
+ /* Pagination — numbered links, current marked by more than colour. */
1511
+ .gov-pagination {
1512
+ display: flex;
1513
+ flex-wrap: wrap;
1514
+ align-items: center;
1515
+ gap: var(--gov-space-2);
1516
+ list-style: none;
1517
+ padding: 0;
1518
+ }
1519
+
1520
+ .gov-pagination__link {
1521
+ display: inline-flex;
1522
+ align-items: center;
1523
+ justify-content: center;
1524
+ min-inline-size: var(--gov-target-min-size);
1525
+ min-block-size: var(--gov-target-min-size);
1526
+ padding-inline: var(--gov-space-2);
1527
+ border-radius: var(--gov-radius-sm);
1528
+ text-decoration: none;
1529
+ color: var(--gov-color-link-default);
1530
+ }
1531
+
1532
+ .gov-pagination__link[aria-current="page"] {
1533
+ background: var(--gov-color-interactive-selected-background);
1534
+ color: var(--gov-color-text-primary);
1535
+ font-weight: var(--gov-font-weight-semibold);
1536
+ }
1537
+
1538
+ .gov-pagination__link[aria-disabled="true"] {
1539
+ color: var(--gov-color-text-disabled);
1540
+ pointer-events: none;
1541
+ }
1542
+
1543
+ /* Footer — a two-column trust band, single column on mobile. */
1544
+ .gov-footer {
1545
+ background: var(--gov-color-background-secondary);
1546
+ border-block-start: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1547
+ padding-block: var(--gov-space-8);
1548
+ }
1549
+
1550
+ .gov-footer__grid {
1551
+ display: grid;
1552
+ gap: var(--gov-space-8);
1553
+ grid-template-columns: 1fr;
1554
+ }
1555
+
1556
+ @media (min-width: 768px) {
1557
+ .gov-footer__grid {
1558
+ grid-template-columns: 2fr 1fr;
1559
+ }
1560
+ }
1561
+
1562
+ .gov-footer__links {
1563
+ list-style: none;
1564
+ padding: 0;
1565
+ display: flex;
1566
+ flex-direction: column;
1567
+ gap: var(--gov-space-2);
1568
+ }
1569
+
1570
+ .gov-footer__office-en {
1571
+ color: var(--gov-color-text-secondary);
1572
+ }
1573
+
1189
1574
  /* National identity marks — the emblem and flag (identity/emblem, identity/flag).
1190
1575
  *
1191
1576
  * Base sizing only. Both are <img> of verified masters; neither is boxed, recoloured, or given a
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@govnepal/css",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Civic Calm — the framework-agnostic stylesheet. Semantic HTML plus .gov-* classes, no JavaScript.",
5
5
  "license": "MIT",
6
6
  "type": "module",