@govnepal/css 0.3.0 → 0.5.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 +400 -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 (417ba0b6).
4
+ * Built against design-guidelines 0.2.0-dev (8c2cd94f).
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
@@ -876,6 +876,70 @@ a:visited,
876
876
  font-weight: var(--gov-font-weight-medium);
877
877
  }
878
878
 
879
+ /* OTP, password, search, masked value (components/otp-input.md, password-input.md, search-box.md,
880
+ * masked-value.md). Password and amount reuse .gov-input; these add what's specific. */
881
+
882
+ /* OTP — segmented numeric boxes; a single accessible field underneath in the behavior layer. */
883
+ .gov-otp {
884
+ display: flex;
885
+ gap: var(--gov-space-2);
886
+ }
887
+
888
+ .gov-otp__box {
889
+ inline-size: 3ch;
890
+ min-block-size: var(--gov-target-min-size);
891
+ padding: var(--gov-space-2);
892
+ text-align: center;
893
+ font-family: var(--gov-font-family-mono);
894
+ font-size: var(--gov-type-body-large-font-size);
895
+ background: var(--gov-color-background-surface);
896
+ border: var(--gov-border-width-md) solid var(--gov-color-border-input);
897
+ border-radius: var(--gov-radius-sm);
898
+ }
899
+
900
+ /* Password — a field with a trailing show/hide toggle. */
901
+ .gov-password {
902
+ display: flex;
903
+ align-items: stretch;
904
+ }
905
+
906
+ .gov-password .gov-input {
907
+ border-start-end-radius: 0;
908
+ border-end-end-radius: 0;
909
+ flex: 1;
910
+ }
911
+
912
+ .gov-password__toggle {
913
+ display: inline-flex;
914
+ align-items: center;
915
+ padding-inline: var(--gov-space-3);
916
+ border: var(--gov-border-width-md) solid var(--gov-color-border-input);
917
+ border-inline-start: 0;
918
+ border-start-end-radius: var(--gov-radius-sm);
919
+ border-end-end-radius: var(--gov-radius-sm);
920
+ background: var(--gov-color-background-secondary);
921
+ color: var(--gov-color-action-secondary-text);
922
+ cursor: pointer;
923
+ }
924
+
925
+ /* Search — a field with a leading icon and a submit. */
926
+ .gov-search {
927
+ display: flex;
928
+ gap: var(--gov-space-2);
929
+ }
930
+
931
+ .gov-search .gov-input {
932
+ flex: 1;
933
+ }
934
+
935
+ /* Masked value — a monospace value plus a reveal control. */
936
+ .gov-masked {
937
+ display: inline-flex;
938
+ align-items: center;
939
+ gap: var(--gov-space-2);
940
+ font-family: var(--gov-font-family-mono);
941
+ }
942
+
879
943
  /* Details (components/details.md) and warning text (components/warning-text.md).
880
944
  *
881
945
  * Details is native <details>/<summary> — the platform's own disclosure semantics, so a screen
@@ -1084,6 +1148,44 @@ a:visited,
1084
1148
  color: var(--gov-color-text-on-action);
1085
1149
  }
1086
1150
 
1151
+ /* Cookie banner and offline banner (components/cookie-banner.md, offline-banner.md). */
1152
+
1153
+ /* Cookie banner — non-blocking; Reject exactly as prominent as Accept (§9.1.2). */
1154
+ .gov-cookie-banner {
1155
+ position: fixed;
1156
+ inset-inline: 0;
1157
+ inset-block-end: 0;
1158
+ z-index: var(--gov-z-sticky);
1159
+ background: var(--gov-color-background-surface);
1160
+ border-block-start: var(--gov-border-width-md) solid var(--gov-color-border-strong);
1161
+ box-shadow: var(--gov-elevation-2);
1162
+ padding: var(--gov-space-4) 0;
1163
+ }
1164
+
1165
+ .gov-cookie-banner__inner {
1166
+ display: flex;
1167
+ flex-wrap: wrap;
1168
+ align-items: center;
1169
+ gap: var(--gov-space-4);
1170
+ justify-content: space-between;
1171
+ }
1172
+
1173
+ .gov-cookie-banner__actions {
1174
+ display: flex;
1175
+ gap: var(--gov-space-3);
1176
+ }
1177
+
1178
+ /* Offline banner — warning treatment, below the header, clears on reconnect. */
1179
+ .gov-offline-banner {
1180
+ display: flex;
1181
+ align-items: flex-start;
1182
+ gap: var(--gov-space-2);
1183
+ padding: var(--gov-space-3) var(--gov-space-4);
1184
+ background: var(--gov-color-status-warning-background);
1185
+ color: var(--gov-color-status-warning-text);
1186
+ border-block-end: var(--gov-border-width-lg) solid var(--gov-color-status-warning-border);
1187
+ }
1188
+
1087
1189
  /* Status badge (components/badge.md).
1088
1190
  *
1089
1191
  * Renders the official status taxonomy (data/status-taxonomy.yaml) — Draft, Submitted, Under
@@ -1341,6 +1443,163 @@ a:visited,
1341
1443
  justify-self: start;
1342
1444
  }
1343
1445
 
1446
+ /* Table (components/table.md) — semantic rows/columns for comparison. */
1447
+ .gov-table {
1448
+ inline-size: 100%;
1449
+ border-collapse: collapse;
1450
+ }
1451
+
1452
+ .gov-table caption {
1453
+ text-align: start;
1454
+ font-weight: var(--gov-font-weight-semibold);
1455
+ margin-block-end: var(--gov-space-2);
1456
+ }
1457
+
1458
+ .gov-table th,
1459
+ .gov-table td {
1460
+ text-align: start;
1461
+ padding: var(--gov-space-2) var(--gov-space-3);
1462
+ border-block-end: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1463
+ }
1464
+
1465
+ .gov-table th {
1466
+ background: var(--gov-color-background-secondary);
1467
+ font-weight: var(--gov-font-weight-semibold);
1468
+ }
1469
+
1470
+ .gov-table__num {
1471
+ text-align: end;
1472
+ font-variant-numeric: tabular-nums;
1473
+ }
1474
+
1475
+ .gov-table--sticky thead th {
1476
+ position: sticky;
1477
+ inset-block-start: 0;
1478
+ z-index: var(--gov-z-sticky);
1479
+ }
1480
+
1481
+ /* Empty state and loading state (components/empty-state.md, loading-state.md). */
1482
+ .gov-empty-state {
1483
+ text-align: center;
1484
+ padding-block: var(--gov-space-8);
1485
+ color: var(--gov-color-text-secondary);
1486
+ }
1487
+
1488
+ .gov-empty-state__title {
1489
+ font-size: var(--gov-type-h3-font-size);
1490
+ line-height: var(--gov-type-h3-line-height);
1491
+ font-weight: var(--gov-font-weight-semibold);
1492
+ color: var(--gov-color-text-primary);
1493
+ margin-block-end: var(--gov-space-2);
1494
+ }
1495
+
1496
+ .gov-empty-state__action {
1497
+ margin-block-start: var(--gov-space-4);
1498
+ }
1499
+
1500
+ /* Spinner — the one sanctioned continuous loop (§5.5); stops under reduced-motion. */
1501
+ .gov-spinner {
1502
+ display: inline-block;
1503
+ inline-size: var(--gov-icon-size-lg, 24px);
1504
+ block-size: var(--gov-icon-size-lg, 24px);
1505
+ border: var(--gov-border-width-md) solid var(--gov-color-border-default);
1506
+ border-block-start-color: var(--gov-color-control-indicator);
1507
+ border-radius: var(--gov-radius-full);
1508
+ animation: gov-spin var(--gov-motion-duration-slow) linear infinite;
1509
+ }
1510
+
1511
+ @keyframes gov-spin {
1512
+ to { transform: rotate(360deg); }
1513
+ }
1514
+
1515
+ @media (prefers-reduced-motion: reduce) {
1516
+ .gov-spinner { animation: none; }
1517
+ }
1518
+ [data-reduced-motion="true"] .gov-spinner { animation: none; }
1519
+
1520
+ /* Skeleton — pulses no faster than slow (a fast pulse reads as error, §5.5). */
1521
+ .gov-skeleton {
1522
+ background: var(--gov-color-background-secondary);
1523
+ border-radius: var(--gov-radius-md);
1524
+ animation: gov-pulse var(--gov-motion-duration-slow) ease-in-out infinite alternate;
1525
+ }
1526
+
1527
+ @keyframes gov-pulse {
1528
+ to { opacity: 0.5; }
1529
+ }
1530
+
1531
+ @media (prefers-reduced-motion: reduce) {
1532
+ .gov-skeleton { animation: none; }
1533
+ }
1534
+ [data-reduced-motion="true"] .gov-skeleton { animation: none; }
1535
+
1536
+ /* Accordion (components/accordion.md) — several independent expandable sections. */
1537
+ .gov-accordion {
1538
+ border-block-start: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1539
+ }
1540
+
1541
+ .gov-accordion__section {
1542
+ border-block-end: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1543
+ }
1544
+
1545
+ .gov-accordion__header {
1546
+ inline-size: 100%;
1547
+ display: flex;
1548
+ align-items: center;
1549
+ gap: var(--gov-space-2);
1550
+ justify-content: space-between;
1551
+ min-block-size: var(--gov-target-min-size);
1552
+ padding: var(--gov-space-3) 0;
1553
+ background: transparent;
1554
+ border: 0;
1555
+ text-align: start;
1556
+ font-weight: var(--gov-font-weight-medium);
1557
+ color: var(--gov-color-text-primary);
1558
+ cursor: pointer;
1559
+ }
1560
+
1561
+ .gov-accordion__chevron {
1562
+ inline-size: var(--gov-icon-size-md);
1563
+ block-size: var(--gov-icon-size-md);
1564
+ flex-shrink: 0;
1565
+ transition: transform var(--gov-motion-duration-base) var(--gov-motion-easing-standard);
1566
+ }
1567
+
1568
+ .gov-accordion__header[aria-expanded="true"] .gov-accordion__chevron {
1569
+ transform: rotate(180deg);
1570
+ }
1571
+
1572
+ .gov-accordion__panel {
1573
+ padding-block-end: var(--gov-space-4);
1574
+ color: var(--gov-color-text-secondary);
1575
+ }
1576
+
1577
+ /* Progress bar (components/progress-bar.md) — determinate, forward-only, with a text percentage. */
1578
+ .gov-progress {
1579
+ display: flex;
1580
+ flex-direction: column;
1581
+ gap: var(--gov-space-2);
1582
+ }
1583
+
1584
+ .gov-progress__track {
1585
+ block-size: 8px;
1586
+ background: var(--gov-color-control-track);
1587
+ border-radius: var(--gov-radius-full);
1588
+ overflow: hidden;
1589
+ }
1590
+
1591
+ .gov-progress__fill {
1592
+ block-size: 100%;
1593
+ background: var(--gov-color-control-indicator);
1594
+ border-radius: var(--gov-radius-full);
1595
+ transition: inline-size var(--gov-motion-duration-base) var(--gov-motion-easing-standard);
1596
+ }
1597
+
1598
+ .gov-progress__label {
1599
+ font-size: var(--gov-type-small-font-size);
1600
+ color: var(--gov-color-text-secondary);
1601
+ }
1602
+
1344
1603
  /* Phase banner (components/phase-banner.md), stepper (components/stepper.md), and language
1345
1604
  * switcher (components/language-switcher.md) — the standalone navigation pieces. */
1346
1605
 
@@ -1571,6 +1830,146 @@ a:visited,
1571
1830
  color: var(--gov-color-text-secondary);
1572
1831
  }
1573
1832
 
1833
+ /* Officer + citizen navigation and government display components (batch C). */
1834
+
1835
+ /* Bottom navigation — mobile primary nav, fixed, labels always shown. */
1836
+ .gov-bottom-nav {
1837
+ display: flex;
1838
+ border-block-start: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1839
+ background: var(--gov-color-background-surface);
1840
+ }
1841
+
1842
+ .gov-bottom-nav__item {
1843
+ flex: 1;
1844
+ display: flex;
1845
+ flex-direction: column;
1846
+ align-items: center;
1847
+ gap: var(--gov-space-1);
1848
+ min-block-size: var(--gov-target-recommended-size);
1849
+ padding: var(--gov-space-2);
1850
+ text-decoration: none;
1851
+ color: var(--gov-color-text-secondary);
1852
+ font-size: var(--gov-type-caption-font-size);
1853
+ }
1854
+
1855
+ .gov-bottom-nav__item[aria-current="page"] {
1856
+ color: var(--gov-color-interactive-selected-indicator);
1857
+ font-weight: var(--gov-font-weight-semibold);
1858
+ }
1859
+
1860
+ /* Sidebar — officer left rail. */
1861
+ .gov-sidebar {
1862
+ display: flex;
1863
+ flex-direction: column;
1864
+ gap: var(--gov-space-1);
1865
+ padding: var(--gov-space-3);
1866
+ background: var(--gov-color-background-secondary);
1867
+ border-inline-end: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1868
+ }
1869
+
1870
+ .gov-sidebar__link {
1871
+ display: block;
1872
+ padding: var(--gov-space-2) var(--gov-space-3);
1873
+ border-radius: var(--gov-radius-sm);
1874
+ text-decoration: none;
1875
+ color: var(--gov-color-text-primary);
1876
+ min-block-size: var(--gov-target-min-size);
1877
+ }
1878
+
1879
+ .gov-sidebar__link[aria-current="page"] {
1880
+ background: var(--gov-color-interactive-selected-background);
1881
+ font-weight: var(--gov-font-weight-semibold);
1882
+ }
1883
+
1884
+ /* Status tracker — vertical list of taxonomy statuses. */
1885
+ .gov-status-tracker {
1886
+ list-style: none;
1887
+ padding: 0;
1888
+ display: flex;
1889
+ flex-direction: column;
1890
+ gap: var(--gov-space-4);
1891
+ }
1892
+
1893
+ .gov-status-tracker__step {
1894
+ display: flex;
1895
+ align-items: flex-start;
1896
+ gap: var(--gov-space-3);
1897
+ color: var(--gov-color-text-secondary);
1898
+ }
1899
+
1900
+ .gov-status-tracker__step--complete { color: var(--gov-color-status-success-text); }
1901
+ .gov-status-tracker__step--current {
1902
+ color: var(--gov-color-text-primary);
1903
+ font-weight: var(--gov-font-weight-semibold);
1904
+ }
1905
+
1906
+ .gov-status-tracker__marker {
1907
+ inline-size: 24px;
1908
+ block-size: 24px;
1909
+ flex-shrink: 0;
1910
+ border-radius: var(--gov-radius-full);
1911
+ border: var(--gov-border-width-md) solid currentColor;
1912
+ display: inline-flex;
1913
+ align-items: center;
1914
+ justify-content: center;
1915
+ font-size: var(--gov-type-small-font-size);
1916
+ }
1917
+
1918
+ /* Audit log item — an immutable record row. */
1919
+ .gov-audit-item {
1920
+ padding-block: var(--gov-space-3);
1921
+ border-block-end: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1922
+ }
1923
+
1924
+ .gov-audit-item__meta {
1925
+ color: var(--gov-color-text-secondary);
1926
+ font-size: var(--gov-type-small-font-size);
1927
+ }
1928
+
1929
+ .gov-audit-item__ref { font-family: var(--gov-font-family-mono); }
1930
+
1931
+ /* Feedback widget — "was this page useful?" plus a report link. */
1932
+ .gov-feedback {
1933
+ border-block-start: var(--gov-border-width-sm) solid var(--gov-color-border-default);
1934
+ padding-block: var(--gov-space-4);
1935
+ display: flex;
1936
+ flex-wrap: wrap;
1937
+ align-items: center;
1938
+ gap: var(--gov-space-3);
1939
+ }
1940
+
1941
+ /* Biometric capture status indicators (batch C, NID). Status by icon + text + colour, never
1942
+ * colour alone (§4.1); the raw biometric sample is NEVER rendered (§9.1). */
1943
+ .gov-capture-status {
1944
+ display: flex;
1945
+ align-items: flex-start;
1946
+ gap: var(--gov-space-2);
1947
+ padding: var(--gov-space-3);
1948
+ border: var(--gov-border-width-md) solid var(--gov-color-border-default);
1949
+ border-radius: var(--gov-radius-md);
1950
+ }
1951
+
1952
+ .gov-capture-status__icon {
1953
+ inline-size: var(--gov-icon-size-lg, 24px);
1954
+ block-size: var(--gov-icon-size-lg, 24px);
1955
+ flex-shrink: 0;
1956
+ }
1957
+
1958
+ .gov-capture-status--pass { border-color: var(--gov-color-status-success-border); color: var(--gov-color-status-success-text); }
1959
+ .gov-capture-status--retry { border-color: var(--gov-color-status-warning-border); color: var(--gov-color-status-warning-text); }
1960
+ .gov-capture-status--error { border-color: var(--gov-color-status-error-border); color: var(--gov-color-status-error-text); }
1961
+
1962
+ .gov-capture-frame {
1963
+ aspect-ratio: 4 / 3;
1964
+ display: flex;
1965
+ align-items: center;
1966
+ justify-content: center;
1967
+ background: var(--gov-color-background-inverse);
1968
+ color: var(--gov-color-text-inverse);
1969
+ border-radius: var(--gov-radius-md);
1970
+ border: var(--gov-border-width-lg) dashed var(--gov-color-border-strong);
1971
+ }
1972
+
1574
1973
  /* National identity marks — the emblem and flag (identity/emblem, identity/flag).
1575
1974
  *
1576
1975
  * 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.3.0",
3
+ "version": "0.5.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",