rin
Public Open-source lightweight git hosting.

fix(ui): use solid surfaces and inset page backgrounds

53ad704 Browse files
R rin · 2026-10-17 07:01 UTC
12 files changed +278 -69
assets/input.css
+227 -31
... ... @@ -38,11 +38,12 @@ html[data-theme="light"] {
38 38 --secondary: 0 0% 95%;
39 39 --secondary-foreground: 0 0% 6.7%;
40 40 --muted: 0 0% 95%;
41 - --muted-foreground: 0 0% 45%;
41 + --muted-foreground: 0 0% 38%;
42 42 --accent: 0 0% 93%;
43 43 --accent-foreground: 0 0% 6.7%;
44 44 --destructive: 0 72% 46%;
45 45 --destructive-foreground: 0 0% 100%;
46 + --destructive-surface: 0 72% 96%;
46 47 --border: 0 0% 90%;
47 48 --input: 0 0% 89%;
48 49 --ring: 0 0% 6.7%;
... ... @@ -66,21 +67,22 @@ html[data-theme="light"] {
66 67 html[data-theme="dark"] {
67 68 --background: 0 0% 6.7%;
68 69 --foreground: 0 0% 100%;
69 - --card: 0 0% 9%;
70 + --card: 0 0% 10%;
70 71 --card-foreground: 0 0% 100%;
71 - --popover: 0 0% 9.5%;
72 + --popover: 0 0% 11%;
72 73 --popover-foreground: 0 0% 100%;
73 74 --primary: 0 0% 100%;
74 75 --primary-foreground: 0 0% 6.7%;
75 - --secondary: 0 0% 13%;
76 + --secondary: 0 0% 15%;
76 77 --secondary-foreground: 0 0% 100%;
77 - --muted: 0 0% 12%;
78 - --muted-foreground: 0 0% 65%;
79 - --accent: 0 0% 15%;
78 + --muted: 0 0% 14%;
79 + --muted-foreground: 0 0% 74%;
80 + --accent: 0 0% 17%;
80 81 --accent-foreground: 0 0% 100%;
81 82 --destructive: 0 72% 58%;
82 83 --destructive-foreground: 0 0% 98%;
83 - --border: 0 0% 16%;
84 + --destructive-surface: 0 45% 15%;
85 + --border: 0 0% 20%;
84 86 --input: 0 0% 17%;
85 87 --ring: 0 0% 85%;
86 88
... ... @@ -103,21 +105,22 @@ html[data-theme="dark"] {
103 105 html[data-theme="system"] {
104 106 --background: 0 0% 6.7%;
105 107 --foreground: 0 0% 100%;
106 - --card: 0 0% 9%;
108 + --card: 0 0% 10%;
107 109 --card-foreground: 0 0% 100%;
108 - --popover: 0 0% 9.5%;
110 + --popover: 0 0% 11%;
109 111 --popover-foreground: 0 0% 100%;
110 112 --primary: 0 0% 100%;
111 113 --primary-foreground: 0 0% 6.7%;
112 - --secondary: 0 0% 13%;
114 + --secondary: 0 0% 15%;
113 115 --secondary-foreground: 0 0% 100%;
114 - --muted: 0 0% 12%;
115 - --muted-foreground: 0 0% 65%;
116 - --accent: 0 0% 15%;
116 + --muted: 0 0% 14%;
117 + --muted-foreground: 0 0% 74%;
118 + --accent: 0 0% 17%;
117 119 --accent-foreground: 0 0% 100%;
118 120 --destructive: 0 72% 58%;
119 121 --destructive-foreground: 0 0% 98%;
120 - --border: 0 0% 16%;
122 + --destructive-surface: 0 45% 15%;
123 + --border: 0 0% 20%;
121 124 --input: 0 0% 17%;
122 125 --ring: 0 0% 85%;
123 126 --diff-add-bg: 142 50% 12%;
... ... @@ -293,6 +296,48 @@ html[data-sidebar="collapsed"] .sidebar-inner {
293 296 display: flex;
294 297 flex-direction: column;
295 298 min-height: 100vh;
299 + position: relative;
300 + isolation: isolate;
301 +}
302 +
303 +.page-bg {
304 + position: absolute;
305 + inset: 0;
306 + z-index: 0;
307 + left: 0;
308 + overflow: hidden;
309 + pointer-events: none;
310 + background: hsl(var(--background));
311 + transition: left 200ms cubic-bezier(0.16, 1, 0.3, 1);
312 +}
313 +.page-bg img {
314 + position: absolute;
315 + inset: 0 0 auto;
316 + width: 100%;
317 + height: clamp(28rem, 92vh, 54rem);
318 + object-fit: cover;
319 + object-position: center 28%;
320 + opacity: 0.9;
321 + filter: saturate(0.9) contrast(0.97);
322 + -webkit-mask-image: linear-gradient(to bottom, #000 0%, rgba(0, 0, 0, 0.96) 38%, rgba(0, 0, 0, 0.62) 72%, transparent 100%);
323 + mask-image: linear-gradient(to bottom, #000 0%, rgba(0, 0, 0, 0.96) 38%, rgba(0, 0, 0, 0.62) 72%, transparent 100%);
324 +}
325 +.page-bg::after {
326 + content: "";
327 + position: absolute;
328 + inset: 0;
329 + background:
330 + radial-gradient(118% 86% at 50% 0%, transparent 16%, hsl(var(--background) / 0.36) 52%, hsl(var(--background) / 0.9) 86%, hsl(var(--background)) 100%),
331 + linear-gradient(to bottom,
332 + hsl(var(--background) / 0.5) 0%,
333 + hsl(var(--background) / 0.6) 32%,
334 + hsl(var(--background) / 0.88) 68%,
335 + hsl(var(--background)) 100%);
336 +}
337 +.app-col > .mobile-topbar,
338 +.app-col > .app-main {
339 + position: relative;
340 + z-index: 1;
296 341 }
297 342
298 343 .app-main {
... ... @@ -321,6 +366,12 @@ html[data-sidebar="collapsed"] .sidebar-inner {
321 366 .app-sidebar {
322 367 display: flex;
323 368 }
369 + .page-bg {
370 + left: 0.75rem;
371 + }
372 + html[data-sidebar="collapsed"] .page-bg {
373 + left: 0;
374 + }
324 375 .sidebar-expand-btn {
325 376 display: inline-flex;
326 377 }
... ... @@ -492,7 +543,8 @@ html[data-sidebar="collapsed"] .sidebar-inner {
492 543 color: hsl(var(--primary-foreground));
493 544 }
494 545 .btn-default:hover, .btn-primary:hover {
495 - opacity: 0.9;
546 + filter: brightness(0.92);
547 + opacity: 1;
496 548 }
497 549 .btn-secondary {
498 550 background-color: hsl(var(--secondary));
... ... @@ -503,7 +555,7 @@ html[data-sidebar="collapsed"] .sidebar-inner {
503 555 background-color: hsl(var(--accent));
504 556 }
505 557 .btn-outline {
506 - background-color: transparent;
558 + background-color: hsl(var(--card));
507 559 color: hsl(var(--foreground));
508 560 border-color: hsl(var(--border));
509 561 }
... ... @@ -512,7 +564,7 @@ html[data-sidebar="collapsed"] .sidebar-inner {
512 564 color: hsl(var(--accent-foreground));
513 565 }
514 566 .btn-ghost {
515 - background-color: transparent;
567 + background-color: hsl(var(--background));
516 568 color: hsl(var(--muted-foreground));
517 569 }
518 570 .btn-ghost:hover {
... ... @@ -700,7 +752,7 @@ input[type="radio"]:focus-visible {
700 752 .card-footer {
701 753 padding: 0.65rem 0.9rem;
702 754 border-top: 1px solid hsl(var(--border));
703 - background-color: hsl(var(--muted) / 0.3);
755 + background-color: hsl(var(--muted));
704 756 }
705 757
706 758 /* Badges */
... ... @@ -718,7 +770,7 @@ input[type="radio"]:focus-visible {
718 770 background-color: hsl(var(--secondary));
719 771 }
720 772 .badge-outline {
721 - background-color: transparent;
773 + background-color: hsl(var(--background));
722 774 color: hsl(var(--muted-foreground));
723 775 }
724 776 .badge-primary {
... ... @@ -727,7 +779,7 @@ input[type="radio"]:focus-visible {
727 779 border-color: transparent;
728 780 }
729 781 .badge-destructive {
730 - background-color: hsl(var(--destructive) / 0.12);
782 + background-color: hsl(var(--destructive-surface));
731 783 color: hsl(var(--destructive));
732 784 border-color: hsl(var(--destructive) / 0.3);
733 785 }
... ... @@ -793,9 +845,9 @@ kbd, .kbd {
793 845 align-items: center;
794 846 gap: 0.35rem;
795 847 padding: 0.28rem 0.65rem;
796 - border: 1px solid hsl(var(--border));
848 + border: 1px solid hsl(var(--border) / 0.9);
797 849 border-radius: 9999px;
798 - background: hsl(var(--muted) / 0.25);
850 + background: hsl(var(--card));
799 851 font-size: 0.75rem;
800 852 color: hsl(var(--muted-foreground));
801 853 text-decoration: none;
... ... @@ -839,7 +891,7 @@ kbd, .kbd {
839 891 padding: 0.2rem;
840 892 border: 1px solid hsl(var(--border));
841 893 border-radius: 999px;
842 - background: hsl(var(--muted) / 0.25);
894 + background: hsl(var(--muted));
843 895 margin-bottom: 1rem;
844 896 overflow-x: auto;
845 897 }
... ... @@ -883,7 +935,7 @@ kbd, .kbd {
883 935 border-bottom: none;
884 936 }
885 937 .dense-row:hover {
886 - background-color: hsl(var(--accent) / 0.5);
938 + background-color: hsl(var(--accent));
887 939 }
888 940
889 941 .table-wrap {
... ... @@ -904,7 +956,7 @@ kbd, .kbd {
904 956 color: hsl(var(--muted-foreground));
905 957 padding: 0.5rem 0.75rem;
906 958 border-bottom: 1px solid hsl(var(--border));
907 - background-color: hsl(var(--muted) / 0.35);
959 + background-color: hsl(var(--muted));
908 960 font-size: 0.75rem;
909 961 }
910 962 .table td {
... ... @@ -1137,6 +1189,7 @@ kbd, .kbd {
1137 1189 padding: 2rem 1rem;
1138 1190 border: 1px dashed hsl(var(--border));
1139 1191 border-radius: var(--radius);
1192 + background-color: hsl(var(--card));
1140 1193 color: hsl(var(--muted-foreground));
1141 1194 }
1142 1195
... ... @@ -1232,7 +1285,7 @@ kbd, .kbd {
1232 1285 font-size: 0.84em;
1233 1286 }
1234 1287 .markdown-body pre {
1235 - background-color: hsl(var(--muted) / 0.6);
1288 + background-color: hsl(var(--muted));
1236 1289 border: 1px solid hsl(var(--border));
1237 1290 border-radius: var(--radius);
1238 1291 padding: 0.75rem 0.9rem;
... ... @@ -1437,7 +1490,7 @@ kbd, .kbd {
1437 1490 gap: 0.35rem;
1438 1491 border: 1px solid hsl(var(--border));
1439 1492 border-radius: var(--radius);
1440 - background: hsl(var(--muted) / 0.25);
1493 + background: hsl(var(--muted));
1441 1494 padding: 0.15rem 0.25rem 0.15rem 0.6rem;
1442 1495 min-width: 0;
1443 1496 }
... ... @@ -1458,7 +1511,7 @@ kbd, .kbd {
1458 1511 padding: 1.6rem 1rem;
1459 1512 border: 1.5px dashed hsl(var(--border));
1460 1513 border-radius: calc(var(--radius) * 1.3);
1461 - background: hsl(var(--muted) / 0.2);
1514 + background: hsl(var(--muted));
1462 1515 color: hsl(var(--muted-foreground));
1463 1516 cursor: pointer;
1464 1517 transition: border-color 0.15s ease, background 0.15s ease, color 0.15s ease;
... ... @@ -1469,7 +1522,7 @@ kbd, .kbd {
1469 1522 }
1470 1523 .upload-drop.drag {
1471 1524 border-color: hsl(var(--foreground) / 0.6);
1472 - background: hsl(var(--muted) / 0.5);
1525 + background: hsl(var(--accent));
1473 1526 color: hsl(var(--foreground));
1474 1527 }
1475 1528 /* Utility completion (classes used in templates but absent from the build) */
... ... @@ -1477,4 +1530,147 @@ kbd, .kbd {
1477 1530 .gap-1\.5 { gap: 0.375rem; }
1478 1531 .gap-5 { gap: 1.25rem; }
1479 1532 .mb-1\.5 { margin-bottom: 0.375rem; }
1480 -.pt-1 { padding-top: 0.25rem; }
1533 +.pt-1 { padding-top: 0.25rem; }
1534 +
1535 +/* Profile header sits directly on the page backdrop. */
1536 +.profile-hero {
1537 + position: relative;
1538 + padding: 0.6rem 0 0;
1539 + border: 0;
1540 + border-radius: 0;
1541 + background: transparent;
1542 +}
1543 +.profile-hero-content {
1544 + position: relative;
1545 +}
1546 +.has-page-bg .profile-hero h1,
1547 +.has-page-bg .profile-hero p,
1548 +.has-page-bg .profile-hero .text-muted {
1549 + text-shadow: 0 1px 16px hsl(var(--background) / 0.95);
1550 +}
1551 +
1552 +/* Media settings */
1553 +.background-preview {
1554 + position: relative;
1555 + width: 100%;
1556 + aspect-ratio: 16 / 6;
1557 + min-height: 7rem;
1558 + overflow: hidden;
1559 + border: 1px solid hsl(var(--border));
1560 + border-radius: calc(var(--radius) * 1.3);
1561 + background:
1562 + radial-gradient(100% 130% at 50% 30%, hsl(var(--muted)) 0%, hsl(var(--card)) 72%);
1563 +}
1564 +.background-preview img {
1565 + width: 100%;
1566 + height: 100%;
1567 + object-fit: cover;
1568 + object-position: center;
1569 + display: block;
1570 + -webkit-mask-image: radial-gradient(120% 145% at 50% 25%, #000 38%, rgba(0,0,0,0.86) 58%, transparent 100%);
1571 + mask-image: radial-gradient(120% 145% at 50% 25%, #000 38%, rgba(0,0,0,0.86) 58%, transparent 100%);
1572 +}
1573 +.background-preview::after {
1574 + content: "";
1575 + position: absolute;
1576 + inset: 0;
1577 + background: linear-gradient(to top, hsl(var(--background) / 0.75), hsl(var(--background) / 0.05));
1578 + pointer-events: none;
1579 +}
1580 +.background-preview.is-empty {
1581 + display: flex;
1582 + align-items: center;
1583 + justify-content: center;
1584 +}
1585 +.background-preview-placeholder {
1586 + color: hsl(var(--muted-foreground) / 0.7);
1587 +}
1588 +
1589 +/* Registration policy selector */
1590 +.registration-options {
1591 + display: grid;
1592 + grid-template-columns: repeat(3, minmax(0, 1fr));
1593 + gap: 0.55rem;
1594 +}
1595 +.registration-option {
1596 + display: flex;
1597 + align-items: flex-start;
1598 + gap: 0.6rem;
1599 + padding: 0.75rem;
1600 + border: 1px solid hsl(var(--border));
1601 + border-radius: calc(var(--radius) * 1.2);
1602 + background: hsl(var(--card));
1603 + cursor: pointer;
1604 + transition: border-color 0.15s ease, background-color 0.15s ease;
1605 +}
1606 +.registration-option:hover {
1607 + border-color: hsl(var(--foreground) / 0.28);
1608 + background: hsl(var(--accent));
1609 +}
1610 +.registration-option:has(input:checked) {
1611 + border-color: hsl(var(--foreground) / 0.72);
1612 + background: hsl(var(--secondary));
1613 +}
1614 +.registration-option input {
1615 + margin-top: 0.14rem;
1616 + flex-shrink: 0;
1617 +}
1618 +.registration-option strong,
1619 +.registration-option small {
1620 + display: block;
1621 +}
1622 +.registration-option strong {
1623 + font-size: 0.8rem;
1624 + line-height: 1.3;
1625 +}
1626 +.registration-option small {
1627 + margin-top: 0.18rem;
1628 + color: hsl(var(--muted-foreground));
1629 + font-size: 0.7rem;
1630 + line-height: 1.4;
1631 +}
1632 +
1633 +/* Admin actions */
1634 +.admin-row-actions {
1635 + display: flex;
1636 + align-items: center;
1637 + justify-content: flex-end;
1638 + gap: 0.25rem;
1639 + flex-wrap: wrap;
1640 +}
1641 +.admin-row-actions form {
1642 + margin: 0;
1643 + display: inline-flex;
1644 +}
1645 +.admin-repo-row {
1646 + gap: 0.75rem;
1647 +}
1648 +.admin-repo-link {
1649 + display: flex;
1650 + align-items: center;
1651 + gap: 0.6rem;
1652 + min-width: 0;
1653 + flex: 1;
1654 + color: inherit;
1655 + text-decoration: none;
1656 +}
1657 +.admin-repo-link:hover strong {
1658 + text-decoration: underline;
1659 + text-underline-offset: 2px;
1660 +}
1661 +
1662 +.segmented-btn {
1663 + text-decoration: none;
1664 +}
1665 +
1666 +@media (max-width: 760px) {
1667 + .registration-options {
1668 + grid-template-columns: 1fr;
1669 + }
1670 + .profile-hero {
1671 + padding: 0.35rem 0 0;
1672 + }
1673 + .background-preview {
1674 + aspect-ratio: 16 / 7;
1675 + }
1676 +}
internal/web/static/css/app.css
+29 -16
... ... @@ -43,6 +43,7 @@ html[data-theme="light"] {
43 43 --accent-foreground: 0 0% 6.7%;
44 44 --destructive: 0 72% 46%;
45 45 --destructive-foreground: 0 0% 100%;
46 + --destructive-surface: 0 72% 96%;
46 47 --border: 0 0% 90%;
47 48 --input: 0 0% 89%;
48 49 --ring: 0 0% 6.7%;
... ... @@ -66,21 +67,22 @@ html[data-theme="light"] {
66 67 html[data-theme="dark"] {
67 68 --background: 0 0% 6.7%;
68 69 --foreground: 0 0% 100%;
69 - --card: 0 0% 9%;
70 + --card: 0 0% 10%;
70 71 --card-foreground: 0 0% 100%;
71 - --popover: 0 0% 9.5%;
72 + --popover: 0 0% 11%;
72 73 --popover-foreground: 0 0% 100%;
73 74 --primary: 0 0% 100%;
74 75 --primary-foreground: 0 0% 6.7%;
75 - --secondary: 0 0% 13%;
76 + --secondary: 0 0% 15%;
76 77 --secondary-foreground: 0 0% 100%;
77 - --muted: 0 0% 12%;
78 - --muted-foreground: 0 0% 70%;
79 - --accent: 0 0% 15%;
78 + --muted: 0 0% 14%;
79 + --muted-foreground: 0 0% 74%;
80 + --accent: 0 0% 17%;
80 81 --accent-foreground: 0 0% 100%;
81 82 --destructive: 0 72% 58%;
82 83 --destructive-foreground: 0 0% 98%;
83 - --border: 0 0% 16%;
84 + --destructive-surface: 0 45% 15%;
85 + --border: 0 0% 20%;
84 86 --input: 0 0% 17%;
85 87 --ring: 0 0% 85%;
86 88
... ... @@ -103,21 +105,22 @@ html[data-theme="dark"] {
103 105 html[data-theme="system"] {
104 106 --background: 0 0% 6.7%;
105 107 --foreground: 0 0% 100%;
106 - --card: 0 0% 9%;
108 + --card: 0 0% 10%;
107 109 --card-foreground: 0 0% 100%;
108 - --popover: 0 0% 9.5%;
110 + --popover: 0 0% 11%;
109 111 --popover-foreground: 0 0% 100%;
110 112 --primary: 0 0% 100%;
111 113 --primary-foreground: 0 0% 6.7%;
112 - --secondary: 0 0% 13%;
114 + --secondary: 0 0% 15%;
113 115 --secondary-foreground: 0 0% 100%;
114 - --muted: 0 0% 12%;
115 - --muted-foreground: 0 0% 70%;
116 - --accent: 0 0% 15%;
116 + --muted: 0 0% 14%;
117 + --muted-foreground: 0 0% 74%;
118 + --accent: 0 0% 17%;
117 119 --accent-foreground: 0 0% 100%;
118 120 --destructive: 0 72% 58%;
119 121 --destructive-foreground: 0 0% 98%;
120 - --border: 0 0% 16%;
122 + --destructive-surface: 0 45% 15%;
123 + --border: 0 0% 20%;
121 124 --input: 0 0% 17%;
122 125 --ring: 0 0% 85%;
123 126 --diff-add-bg: 142 50% 12%;
... ... @@ -301,9 +304,11 @@ html[data-sidebar="collapsed"] .sidebar-inner {
301 304 position: absolute;
302 305 inset: 0;
303 306 z-index: 0;
307 + left: 0;
304 308 overflow: hidden;
305 309 pointer-events: none;
306 310 background: hsl(var(--background));
311 + transition: left 200ms cubic-bezier(0.16, 1, 0.3, 1);
307 312 }
308 313 .page-bg img {
309 314 position: absolute;
... ... @@ -361,6 +366,12 @@ html[data-sidebar="collapsed"] .sidebar-inner {
361 366 .app-sidebar {
362 367 display: flex;
363 368 }
369 + .page-bg {
370 + left: 0.75rem;
371 + }
372 + html[data-sidebar="collapsed"] .page-bg {
373 + left: 0;
374 + }
364 375 .sidebar-expand-btn {
365 376 display: inline-flex;
366 377 }
... ... @@ -532,7 +543,8 @@ html[data-sidebar="collapsed"] .sidebar-inner {
532 543 color: hsl(var(--primary-foreground));
533 544 }
534 545 .btn-default:hover, .btn-primary:hover {
535 - opacity: 0.9;
546 + filter: brightness(0.92);
547 + opacity: 1;
536 548 }
537 549 .btn-secondary {
538 550 background-color: hsl(var(--secondary));
... ... @@ -767,7 +779,7 @@ input[type="radio"]:focus-visible {
767 779 border-color: transparent;
768 780 }
769 781 .badge-destructive {
770 - background-color: hsl(var(--destructive) / 0.12);
782 + background-color: hsl(var(--destructive-surface));
771 783 color: hsl(var(--destructive));
772 784 border-color: hsl(var(--destructive) / 0.3);
773 785 }
... ... @@ -1177,6 +1189,7 @@ kbd, .kbd {
1177 1189 padding: 2rem 1rem;
1178 1190 border: 1px dashed hsl(var(--border));
1179 1191 border-radius: var(--radius);
1192 + background-color: hsl(var(--card));
1180 1193 color: hsl(var(--muted-foreground));
1181 1194 }
1182 1195
internal/web/views/pages/branches.html
+2 -2
... ... @@ -12,7 +12,7 @@
12 12 </div>
13 13
14 14 {{if and .CanWrite (not .IsEmpty)}}
15 - <form method="post" action="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/branches" class="card-body flex items-center flex-wrap gap-2" style="border-bottom:1px solid hsl(var(--border));background:hsl(var(--muted)/0.25);">
15 + <form method="post" action="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/branches" class="card-body flex items-center flex-wrap gap-2" style="border-bottom:1px solid hsl(var(--border));background:hsl(var(--muted));">
16 16 <input type="hidden" name="_csrf" value="{{.CSRFToken}}">
17 17 <input name="branch_name" type="text" class="input font-mono" style="flex:1 1 12rem;height:1.9rem;" placeholder="{{t .Lang "repo.branch.name_ph"}}" required maxlength="100">
18 18 <select name="from_ref" class="select font-mono" style="flex:0 1 11rem;height:1.9rem;">
... ... @@ -75,7 +75,7 @@
75 75 </div>
76 76
77 77 {{if and .CanWrite (not .IsEmpty)}}
78 - <form method="post" action="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/tags" class="card-body flex items-center flex-wrap gap-2" style="border-bottom:1px solid hsl(var(--border));background:hsl(var(--muted)/0.25);">
78 + <form method="post" action="/{{.Repo.OwnerUsername}}/{{.Repo.Name}}/tags" class="card-body flex items-center flex-wrap gap-2" style="border-bottom:1px solid hsl(var(--border));background:hsl(var(--muted));">
79 79 <input type="hidden" name="_csrf" value="{{.CSRFToken}}">
80 80 <input name="tag_name" type="text" class="input font-mono" style="flex:0 1 9rem;height:1.9rem;" placeholder="{{t .Lang "repo.tag.name_ph"}}" required maxlength="80">
81 81 <select name="from_ref" class="select font-mono" style="flex:0 1 10rem;height:1.9rem;">
internal/web/views/pages/commit.html
+1 -1
... ... @@ -18,7 +18,7 @@
18 18 </div>
19 19
20 20 {{if .Detail.Commit.Body}}
21 - <div class="card-body" style="border-bottom:1px solid hsl(var(--border));background:hsl(var(--muted)/0.25);">
21 + <div class="card-body" style="border-bottom:1px solid hsl(var(--border));background:hsl(var(--muted));">
22 22 <pre class="font-mono text-xs" style="margin:0;white-space:pre-wrap;">{{.Detail.Commit.Body}}</pre>
23 23 </div>
24 24 {{end}}
internal/web/views/pages/issue_detail.html
+2 -2
... ... @@ -43,7 +43,7 @@
43 43
44 44 <!-- Issue Description Card -->
45 45 <div class="card mb-4">
46 - <div class="card-header text-xs" style="padding:0.5rem 0.85rem;background:hsl(var(--muted)/0.3);">
46 + <div class="card-header text-xs" style="padding:0.5rem 0.85rem;background:hsl(var(--muted));">
47 47 <div class="flex items-center gap-2">
48 48 {{avatar .Issue.AuthorUsername .Issue.AuthorAvatar}}
49 49 <a href="/{{.Issue.AuthorUsername}}" class="font-semibold">@{{.Issue.AuthorUsername}}</a>
... ... @@ -64,7 +64,7 @@
64 64 <div class="flex flex-col gap-3 mb-4">
65 65 {{range .Comments}}
66 66 <div class="card">
67 - <div class="card-header text-xs" style="padding:0.5rem 0.85rem;background:hsl(var(--muted)/0.2);">
67 + <div class="card-header text-xs" style="padding:0.5rem 0.85rem;background:hsl(var(--muted));">
68 68 <div class="flex items-center gap-2">
69 69 {{avatar .AuthorUsername .AuthorAvatar}}
70 70 <a href="/{{.AuthorUsername}}" class="font-semibold">@{{.AuthorUsername}}</a>
internal/web/views/pages/pull_detail.html
+8 -8
... ... @@ -34,7 +34,7 @@
34 34
35 35 <div class="flex items-center gap-2 mt-2 text-xs text-muted flex-wrap">
36 36 {{if eq .PR.Status "merged"}}
37 - <span class="badge font-medium flex items-center gap-1.5" style="background:hsl(var(--diff-add-bg));color:hsl(var(--diff-add-fg));border-color:hsl(var(--diff-add-fg)/0.35);">
37 + <span class="badge font-medium flex items-center gap-1.5" style="background:hsl(var(--diff-add-bg));color:hsl(var(--diff-add-fg));border-color:hsl(var(--diff-add-fg));">
38 38 {{icon "git-merge" "size-3.5"}} {{t .Lang "pulls.status.merged"}}
39 39 </span>
40 40 {{else if eq .PR.Status "closed"}}
... ... @@ -172,7 +172,7 @@
172 172
173 173 <!-- Initial PR Description Card -->
174 174 <div class="card mb-4">
175 - <div class="card-header text-xs" style="padding:0.5rem 0.85rem;background:hsl(var(--muted)/0.3);">
175 + <div class="card-header text-xs" style="padding:0.5rem 0.85rem;background:hsl(var(--muted));">
176 176 <div class="flex items-center gap-2">
177 177 {{avatar .PR.AuthorUsername .PR.AuthorAvatar}}
178 178 <a href="/{{.PR.AuthorUsername}}" class="font-semibold">@{{.PR.AuthorUsername}}</a>
... ... @@ -193,7 +193,7 @@
193 193 <div class="flex flex-col gap-3 mb-4">
194 194 {{range .Comments}}
195 195 <div class="card">
196 - <div class="card-header text-xs" style="padding:0.5rem 0.85rem;background:hsl(var(--muted)/0.2);">
196 + <div class="card-header text-xs" style="padding:0.5rem 0.85rem;background:hsl(var(--muted));">
197 197 <div class="flex items-center gap-2">
198 198 {{avatar .AuthorUsername .AuthorAvatar}}
199 199 <a href="/{{.AuthorUsername}}" class="font-semibold">@{{.AuthorUsername}}</a>
... ... @@ -211,7 +211,7 @@
211 211 <!-- Merge Box / State Banner -->
212 212 <div class="card mb-4">
213 213 {{if eq .PR.Status "merged"}}
214 - <div class="card-body flex items-center gap-3" style="background:hsl(var(--muted)/0.2);">
214 + <div class="card-body flex items-center gap-3" style="background:hsl(var(--muted));">
215 215 <span style="color:hsl(var(--diff-add-fg));">{{icon "git-merge" "size-6"}}</span>
216 216 <div class="flex flex-col gap-0.5">
217 217 <div class="font-semibold text-sm">{{t .Lang "pulls.merged_message"}}</div>
... ... @@ -228,7 +228,7 @@
228 228 </div>
229 229
230 230 {{else if eq .PR.Status "closed"}}
231 - <div class="card-body flex items-center gap-3" style="background:hsl(var(--muted)/0.2);">
231 + <div class="card-body flex items-center gap-3" style="background:hsl(var(--muted));">
232 232 <span class="text-muted">{{icon "close" "size-6"}}</span>
233 233 <div class="flex flex-col gap-0.5">
234 234 <div class="font-semibold text-sm">{{t .Lang "pulls.closed_message"}}</div>
... ... @@ -239,7 +239,7 @@
239 239 {{else}}
240 240 <!-- PR is open -->
241 241 {{if .CanMergeAction}}
242 - <div class="card-body flex flex-col gap-3" style="background:hsl(var(--muted)/0.15);">
242 + <div class="card-body flex flex-col gap-3" style="background:hsl(var(--muted));">
243 243 <div class="flex items-center gap-2 text-sm font-semibold" style="color:hsl(var(--diff-add-fg));">
244 244 {{icon "check" "size-5"}}
245 245 <span>{{t .Lang "pulls.able_to_merge"}}</span>
... ... @@ -254,7 +254,7 @@
254 254 </form>
255 255 </div>
256 256 {{else if not .CanMerge}}
257 - <div class="card-body flex items-center gap-3" style="background:hsl(var(--muted)/0.15);">
257 + <div class="card-body flex items-center gap-3" style="background:hsl(var(--muted));">
258 258 <span style="color:hsl(var(--diff-del-fg));">{{icon "alert-circle" "size-5"}}</span>
259 259 <div class="flex flex-col gap-0.5">
260 260 <div class="font-semibold text-sm" style="color:hsl(var(--diff-del-fg));">{{t .Lang "pulls.conflicts_title"}}</div>
... ... @@ -262,7 +262,7 @@
262 262 </div>
263 263 </div>
264 264 {{else}}
265 - <div class="card-body flex items-center gap-2 text-xs text-muted" style="background:hsl(var(--muted)/0.15);">
265 + <div class="card-body flex items-center gap-2 text-xs text-muted" style="background:hsl(var(--muted));">
266 266 {{icon "check" "size-4"}}
267 267 <span>{{t .Lang "pulls.only_write_merge"}}</span>
268 268 </div>
internal/web/views/pages/pull_new.html
+2 -2
... ... @@ -36,11 +36,11 @@
36 36 </div>
37 37
38 38 {{if and (eq .BaseBranch .HeadBranch) (eq .HeadRepo.ID .Repo.ID)}}
39 - <div class="card-body text-xs text-muted" style="background:hsl(var(--muted)/0.2);">
39 + <div class="card-body text-xs text-muted" style="background:hsl(var(--muted));">
40 40 {{icon "alert-circle" "size-4"}} {{t .Lang "pulls.branches_identical"}}
41 41 </div>
42 42 {{else}}
43 - <div class="card-body text-xs flex items-center gap-2" style="background:hsl(var(--muted)/0.2);">
43 + <div class="card-body text-xs flex items-center gap-2" style="background:hsl(var(--muted));">
44 44 {{if .CanMerge}}
45 45 <span style="color:hsl(var(--diff-add-fg));" class="flex items-center gap-1.5 font-medium">
46 46 {{icon "check" "size-4"}} {{t .Lang "pulls.able_to_merge"}}
internal/web/views/pages/register.html
+1 -1
... ... @@ -15,7 +15,7 @@
15 15 <form method="post" action="/register" class="card-body flex flex-col gap-3">
16 16 <input type="hidden" name="_csrf" value="{{.CSRFToken}}">
17 17 {{if eq .RegistrationMode "confirm"}}
18 - <div class="card p-2.5 text-xs text-muted" style="background:hsl(var(--muted) / 0.35);">
18 + <div class="card p-2.5 text-xs text-muted" style="background:hsl(var(--muted));">
19 19 {{t .Lang "auth.register.pending_notice"}}
20 20 </div>
21 21 {{end}}
internal/web/views/pages/releases.html
+1 -1
... ... @@ -68,7 +68,7 @@
68 68 </div>
69 69
70 70 <!-- Release Assets: uploaded files + generated source archives -->
71 - <div class="card-body" style="border-top:1px solid hsl(var(--border));padding:0.6rem 0.9rem;background:hsl(var(--muted)/0.15);">
71 + <div class="card-body" style="border-top:1px solid hsl(var(--border));padding:0.6rem 0.9rem;background:hsl(var(--muted));">
72 72 <div class="text-xs font-semibold text-muted uppercase mb-2" style="letter-spacing:0.04em;">{{t $.Lang "releases.assets"}}</div>
73 73 <div class="flex flex-col gap-1.5">
74 74 {{range .Assets}}
internal/web/views/pages/repo.html
+3 -3
... ... @@ -20,7 +20,7 @@
20 20 <span>{{t .Lang "common.copy"}}</span>
21 21 </button>
22 22 </div>
23 - <pre class="card p-3 font-mono text-xs" style="margin:0;background:hsl(var(--muted)/0.4);overflow-x:auto;"><code>{{.QuickStartNew}}</code></pre>
23 + <pre class="card p-3 font-mono text-xs" style="margin:0;background:hsl(var(--muted));overflow-x:auto;"><code>{{.QuickStartNew}}</code></pre>
24 24 </div>
25 25
26 26 <div>
... ... @@ -31,7 +31,7 @@
31 31 <span>{{t .Lang "common.copy"}}</span>
32 32 </button>
33 33 </div>
34 - <pre class="card p-3 font-mono text-xs" style="margin:0;background:hsl(var(--muted)/0.4);overflow-x:auto;"><code>{{.QuickStartExisting}}</code></pre>
34 + <pre class="card p-3 font-mono text-xs" style="margin:0;background:hsl(var(--muted));overflow-x:auto;"><code>{{.QuickStartExisting}}</code></pre>
35 35 </div>
36 36 </div>
37 37 </div>
... ... @@ -134,7 +134,7 @@
134 134 <!-- Unified Repository Card: Latest Commit Header + File List -->
135 135 <div class="card mb-4">
136 136 {{if .LatestCommit}}
137 - <div class="card-header text-xs" style="padding:0.5rem 0.8rem;background:hsl(var(--muted)/0.3);">
137 + <div class="card-header text-xs" style="padding:0.5rem 0.8rem;background:hsl(var(--muted));">
138 138 <div class="flex items-center gap-2 min-w-0">
139 139 <span class="avatar" style="width:1.25rem;height:1.25rem;font-size:0.62rem;">{{avatarInitial .LatestCommit.AuthorName}}</span>
140 140 <span class="font-medium">{{.LatestCommit.AuthorName}}</span>
internal/web/views/pages/repo_settings.html
+1 -1
... ... @@ -96,7 +96,7 @@
96 96 </div>
97 97
98 98 <!-- Feature Toggles for Repository -->
99 - <div class="card p-3 mt-1" style="background:hsl(var(--muted) / 0.25);">
99 + <div class="card p-3 mt-1" style="background:hsl(var(--muted));">
100 100 <div class="font-semibold text-xs text-muted mb-2 uppercase" style="letter-spacing:0.04em;">{{t .Lang "repo.features"}}</div>
101 101 <div class="flex flex-col gap-2.5">
102 102 <label class="flex items-center justify-between cursor-pointer">
internal/web/views/pages/settings.html
+1 -1
... ... @@ -128,7 +128,7 @@
128 128 <p class="text-xs text-muted" style="margin:0;">{{t .Lang "settings.tokens.desc"}}</p>
129 129
130 130 {{if .NewRawToken}}
131 - <div class="card p-3" style="border-color:hsl(var(--primary));background:hsl(var(--muted)/0.5);">
131 + <div class="card p-3" style="border-color:hsl(var(--primary));background:hsl(var(--muted));">
132 132 <div class="text-xs font-medium mb-2">{{t .Lang "settings.token.created_once"}}</div>
133 133 <div class="flex items-center justify-between gap-2">
134 134 <code class="font-mono text-sm select-all" id="created-token-val">{{.NewRawToken}}</code>