~james/core

core/web/src/lib/components/landing/iso-stack.css -rw-r--r-- 3.0 KiB
452f17b7 — james chore(import): snapshot james.dad.town/core at f70c71c7696a 15 hours ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
@reference "../../../app.css";

@property --lit {
	syntax: "<number>";
	inherits: true;
	initial-value: 1;
}

/* ---------- The hero's notification stack (IsoStack.svelte) ---------- */
.landing {
	.iso {
		position: absolute;
		inset: 0;
		margin: 0;
		padding: 0;
		list-style: none;
	}
	/* A slot (.at, by its centre): an upright box much bigger than its card, so only the card
     takes the pointer and the links on the card under it stay clickable. The slots step
     straight down the screen, the stack's z axis, so every card keeps its size. New ones
     drop in from a step above. */
	.ii {
		--ax: 50%;
		--ay: 50%;
		display: grid;
		place-items: center;
		width: 420px;
		height: 240px;
		transition:
			translate 0.7s var(--ease-glide),
			--lit 0.5s ease;
		pointer-events: none;
		@starting-style {
			translate: calc(var(--x) - var(--ax)) calc(var(--y) - var(--ay) - 44px);
		}
	}
	/* The card: a hairline plate on the vouch chat's iso plane, mirrored to rise to the right. */
	.icard {
		--rim: var(--hl-edge);
		--rim-inset: -1px;
		--av: 36px;
		--fade: linear-gradient(
			color-mix(in srgb, var(--bg) calc((1 - var(--lit)) * 100%), transparent) 0 0
		);
		--glass-bg: var(--fade), var(--glass-fill);
		position: relative;
		grid-area: 1 / 1;
		box-sizing: border-box;
		display: flex;
		align-items: center;
		gap: 8px;
		width: 360px;
		height: 52px;
		padding: 7px 14px 7px 9px;
		border: 1px solid transparent;
		border-radius: 12px;
		transform: var(--iso-hero);
		transition: opacity 0.5s ease;
		pointer-events: auto;
		@starting-style {
			opacity: 0;
		}
	}
	.icard::before,
	.icard::after,
	.icard > * {
		opacity: var(--lit);
	}
	.ii.gone .icard {
		opacity: 0;
	}
	/* The plate's thickness: its silhouette again, --hl-depth straight down the screen. */
	.icard.rim-copy {
		translate: 0 var(--hl-depth);
		background: var(--fade), var(--hl-side);
	}

	/* A party shrinks to fit the card and its name ends in an ellipsis, so a long handle or
     repo never runs out past the card's edge. */
	.ip {
		display: flex;
		align-items: center;
		gap: 4.98px;
		flex: 0 1 auto;
		min-width: 0;
	}
	a.ip {
		text-decoration: none;
		border-radius: 18px;
	}
	a.ip:hover .in {
		text-decoration: underline;
		text-decoration-color: color-mix(in srgb, var(--ink) 40%, transparent);
		text-underline-offset: 2px;
	}
	a.ip:hover .avatar {
		box-shadow: 0 0 0 1px var(--hl-hi);
	}
	a.ip:focus-visible {
		outline-offset: 2px;
	}
	.in,
	.iv {
		font-size: 12.95px;
		font-weight: 450;
		line-height: 1.2;
		letter-spacing: -0.01em;
		white-space: nowrap;
		color: var(--text);
	}
	.in {
		min-width: 0;
		overflow: hidden;
		text-overflow: ellipsis;
	}
	.iv {
		flex: none;
		color: var(--text-3);
	}
	/* How long ago, pushed to the card's right edge. */
	.it {
		flex: none;
		margin-left: auto;
		padding-left: 1.37px;
		font-size: 11px;
		font-weight: 450;
		line-height: 1.2;
		letter-spacing: -0.01em;
		white-space: nowrap;
		color: var(--muted);
	}

	@media (prefers-reduced-motion: reduce) {
		.ii {
			transition: none;
		}
	}
}