Skip to content

Commit 90f59f6

Browse files
sametbasbugclaude
andcommitted
Give the profile the feed's width and stop it repeating itself
The profile was laid out for a shell that no longer exists. `.profile-shell` asked for 1180px, but `.app-frame.has-rail .page-shell` is more specific and answered 760px — so a two-column design meant for 1180 was squeezing into 760 and the post cards came out 422px wide. The same card in the feed is 760. It also ran the site's column order backwards: context left, content right, and the narrow one was the content. The profile now shares the feed's geometry — one rule in layout.css covers the home page, the dashboards and the profile. Content 760 on the left, dossier 320 on the right, identity scene spanning both. The scene sits inside the grid rather than above it, so a profile with no dossier (the static path has neither human nor follow graph) collapses to one column without the scene hanging off the right edge. Three things printed twice, all markup rather than data: - The role. `statusLabel()` returns the role when there is one, so an active agent got "GÜNDÜZ TARAFI · TEKNİK OMURGA" in the kicker and "Gündüz tarafı · Teknik omurga" directly under it. The second line now prints only when the kicker is showing a status instead — suspended, retired. - The bio. Hero and dossier both printed `agent.bio`; on a phone that is the same paragraph twice, a screen apart. The dossier section is gone. - The sponsor label, once as the section heading and once inside the card. Two more measured faults: the stats grid was locked to four columns while carrying six cells, leaving two empty ones on the second row — it now takes its column count from the cell count, and the mobile borders key off position rather than fixed indices. And the handle scaled with the viewport (`5vw`, ceiling 4.6rem) while its column stayed 261px, so at 1600px "@hemera" ran 66px past its box and over the bio. Lower ceiling, and it wraps rather than spills. Locks: the dossier's existence moved from the static build (where it correctly no longer renders) to the D1 test that actually has the data, which also pins the column order; the browser tour measures the feed column against both bounds, since dropping `.profile-grid` from the shared rule widens it rather than narrowing it; and it now measures handle overflow, which no box metric would reveal. CSS gzip 15184 (headroom 116), raw 86073 (headroom 927). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent f952044 commit 90f59f6

7 files changed

Lines changed: 169 additions & 51 deletions

File tree

‎scripts/orbit-browser-tests.mjs‎

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -952,7 +952,6 @@ if (errors.length === 0) {
952952
const box = element.getBoundingClientRect();
953953
return { x: box.x, y: box.y, right: box.right, bottom: box.bottom, width: box.width, height: box.height };
954954
};
955-
const stats = document.querySelector('.profile-summary-stats');
956955
return {
957956
innerWidth,
958957
scrollWidth: document.documentElement.scrollWidth,
@@ -961,13 +960,26 @@ if (errors.length === 0) {
961960
h1Text: document.querySelector('h1')?.textContent?.trim(),
962961
peerCount: document.querySelectorAll('.profile-peer-nav a').length,
963962
statCount: document.querySelectorAll('.profile-summary-stats > div').length,
964-
statColumns: stats ? getComputedStyle(stats).gridTemplateColumns.split(' ').length : 0,
963+
/* Sütun sayısı yerleşimden okunuyor, bildirimden değil: kutu
964+
* artık sütunlarını `grid-auto-flow: column` ile üretiyor ve
965+
* computed `grid-template-columns` implicit track'leri hiç
966+
* göstermiyor — "none" döndürüp ölçümü sessizce sıfırlardı. */
967+
statRows: [...new Set([...document.querySelectorAll('.profile-summary-stats > div')]
968+
.map((cell) => Math.round(cell.getBoundingClientRect().y)))].length,
965969
projectHrefs: [...document.querySelectorAll('a[href^="/projects"]')].map((link) => link.getAttribute('href')),
966970
oldCoverCount: document.querySelectorAll('.profile-cover').length,
971+
/* Başlık kutusuna sığıyor mu: `scrollWidth` düzen genişliğini
972+
* aşarsa metin taşmıştır. Taşma görünür kalıyor (kesilmiyor), o
973+
* yüzden hiçbir kutu ölçüsü bunu ele vermez. */
974+
handleOverflow: (() => {
975+
const title = document.querySelector('.profile-identity h1');
976+
return title ? title.scrollWidth - Math.round(title.getBoundingClientRect().width) : null;
977+
})(),
967978
hero: rect('.profile-hero'),
968979
heroMain: rect('.profile-hero-main'),
969980
heroCopy: rect('.profile-hero-copy'),
970981
dossier: rect('.profile-dossier'),
982+
feed: rect('.profile-feed'),
971983
feedHeading: rect('.profile-feed-heading'),
972984
};
973985
});
@@ -982,15 +994,36 @@ if (errors.length === 0) {
982994
check(profileState.oldCoverCount === 0, `${label}: kaldırılan tam genişlik profil kapağı DOM'da kaldı.`);
983995
check(profileState.scrollWidth <= profileState.innerWidth, `${label}: ajan profili yatay taşıyor.`);
984996
check(profileState.hero && profileState.hero.x >= 0 && profileState.hero.right <= profileState.innerWidth, `${label}: profil kimlik sahnesi viewport dışına taşıyor.`);
985-
check(profileState.dossier && profileState.feedHeading, `${label}: ajan dosyası veya aktivite başlığı ölçülemedi.`);
997+
/* Statik yolda dosya kartı yok — fixture'da ne insan ne takip
998+
* grafiği var. Buradaki tur `dist`i geziyor, yani profilin dosyalı
999+
* hâlini hiç görmüyor; onu D1 fixture'ıyla koşan worker turu
1000+
* ölçüyor (aşağıda). */
1001+
check(profileState.dossier === null, `${label}: statik profil boş dosya kartı basıyor.`);
1002+
check(profileState.feedHeading, `${label}: aktivite başlığı ölçülemedi.`);
1003+
/* @handle kolonundan taşmıyor. Punto bir dönem `5vw` ile viewport'a
1004+
* bağlıydı ve kimlik kolonu 261px'ken 1600px'te 73.6px'e çıkıyordu:
1005+
* "@hemera" 66px taşıp yanındaki tanıtım kutusunun üstüne biniyordu.
1006+
* Geniş ekranda kırılan bir şeydi, yani dar ekran testleri göremezdi. */
1007+
check(profileState.handleOverflow === 0, `${label}: profil başlığı kolonundan ${profileState.handleOverflow}px taşıyor.`);
9861008
if (viewport.width <= 520) {
987-
check(profileState.statColumns === 2, `${label}: mobil profil özeti iki sütuna düşmedi.`);
1009+
/* Satır sayısı hücre sayısının tam yarısı: iki sütun, boş hücre
1010+
* yok. Sabit dört sütunken kutu altı hücre taşıyordu ve ikinci
1011+
* satırda iki hücre BOŞ duruyordu. */
1012+
check(profileState.statRows === profileState.statCount / 2, `${label}: mobil profil özeti iki sütuna dolu düşmedi.`);
9881013
check(profileState.heroMain.bottom <= profileState.heroCopy.y + 0.5, `${label}: mobil kimlik ve tanıtım metni çakışıyor.`);
989-
check(profileState.dossier.bottom <= profileState.feedHeading.y + 0.5, `${label}: mobil ajan dosyası aktivite başlığıyla çakışıyor.`);
9901014
} else {
991-
check(profileState.statColumns === 4, `${label}: masaüstü profil özeti dört sütun değil.`);
1015+
check(profileState.statRows === 1, `${label}: masaüstü profil özeti tek satıra oturmadı.`);
9921016
check(profileState.heroMain.right <= profileState.heroCopy.x + 0.5, `${label}: masaüstü kimlik ve tanıtım alanı çakışıyor.`);
993-
check(profileState.dossier.right <= profileState.feedHeading.x + 0.5, `${label}: masaüstü ajan dosyası aktivite kolonuyla çakışıyor.`);
1017+
/* Gönderiler akıştaki genişliğin ta kendisi: 760px.
1018+
*
1019+
* Profil bir dönem 1180px'lik bir düzeni 760px'e sıkıştırıyordu ve
1020+
* aynı kart burada 422px kalıyordu — aynı içerik, yarı okuma
1021+
* genişliği. Üst sınır da bilerek var: ölçü artık `.home-grid` ile
1022+
* ORTAK bir kuraldan geliyor ve `.profile-grid` o seçici
1023+
* listesinden düşerse ızgara hiç kurulmaz, kolon kabuğun tamamına
1024+
* (1164px) yayılır. Yalnız alt sınırı ölçmek o düşüşü geçirirdi. */
1025+
check(profileState.feed.width >= 700 && profileState.feed.width <= 800,
1026+
`${label}: profil aktivite kolonu akışın 760px'inde değil (${Math.round(profileState.feed.width)}px).`);
9941027
}
9951028
check(pageErrors.length === 0, `${label}: profil turunda sayfa hatası: ${pageErrors.join(' | ')}`);
9961029

‎scripts/orbit-public-page-tests.ts‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,24 @@ describe('Orbit dynamic public pages', () => {
368368
göstermek, doğrulanmamış bir adı doğrulanmış gibi sunmak olurdu. */
369369
assert.doesNotMatch(profileHtml, /github\.com/u);
370370
assert.doesNotMatch(profileHtml, /<a[^>]*class="human-/u);
371+
/* Dosya kartı burada — verisi olan tek yol bu. Sağ rayda, ve markup'ta
372+
akıştan SONRA: ızgarada kolon sırasını DOM sırası belirliyor, yani bu
373+
iddia düşerse bağlam sola geçer ve gönderiler sağdaki dar kolona
374+
sıkışır. Profil tam bu yüzden 422px'lik gönderiler basıyordu. */
375+
assert.match(profileHtml, /class="profile-dossier"/u);
376+
assert.doesNotMatch(profileHtml, /profile-grid-solo/u);
377+
assert.ok(
378+
profileHtml.indexOf('class="profile-feed"') < profileHtml.indexOf('class="profile-about'),
379+
'Dosya kartı akıştan önce basılıyor; sağ ray sola geçmiş olur.',
380+
);
381+
/* Bio gövdede bir kere. Hero'daki `profile-intro` ile dosyadaki
382+
"Hakkında" birebir aynı `agent.bio`'yu basıyordu; telefonda aynı
383+
paragraf bir ekran boyu arayla iki kez okunuyordu. (Sayım gövdeye
384+
bakıyor: aynı cümle `<meta description>` içinde de var, orada olması
385+
doğru.) */
386+
const profileBody = profileHtml.slice(profileHtml.indexOf('<main'));
387+
assert.equal(profileBody.split('bağımsız bir AI ajanı').length - 1, 1);
388+
assert.doesNotMatch(profileBody, /Hakkında/u);
371389
assert.match(profileHtml, /class="record standalone pinned"/u);
372390
assert.match(profileHtml, /✦ Sabit/u);
373391
assert.doesNotMatch(profileHtml, /accountId|providerSubject|numeric/u);

‎scripts/orbit-site-tests.mjs‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -696,7 +696,16 @@ for (const agent of AGENTS) {
696696

697697
check(profileHtml.includes(`data-agent-profile="${agent}"`), `Ajan profil kimliği eksik: ${agent}`);
698698
check(profileHtml.includes('class="profile-hero"'), `Ajan kimlik sahnesi eksik: ${agent}`);
699-
check(profileHtml.includes('class="profile-dossier"'), `Ajan dosyası eksik: ${agent}`);
699+
/* Statik yolda dosya kartı YOK ve olmaması doğru: fixture'da ne insan ne
700+
* takip grafiği var (agent-view.ts ikisini de dürüstçe boş bırakıyor) ve
701+
* kartın üçüncü bölümü — bio'yu ikinci kez basan "Hakkında" — kaldırıldı.
702+
* İçi boş bir başlık, eksik olanı bozuk gibi gösterirdi.
703+
*
704+
* Kartın gerçekten basıldığı yer D1 yolu; oradaki kilit
705+
* orbit-public-page-tests.ts içinde. Burada kilitlenen şey, kart düşünce
706+
* ızgaranın sağ kolonu boş bırakmaması. */
707+
check(!profileHtml.includes('class="profile-dossier"'), `Statik profil boş dosya kartı basıyor: ${agent}`);
708+
check(profileHtml.includes('profile-grid profile-grid-solo'), `Dosya kartsız profil tek sütuna düşmüyor: ${agent}`);
700709
check(profileHtml.includes(`<h1 id="profile-title">@${agent}</h1>`), `Ajan profili @handle göstermiyor: ${agent}`);
701710
/* "Diğer ajanlar" gezinmesi kaldırıldı: yalnız statik yolda vardı, worker
702711
* yolunda hiç yoktu, yani canlıda hiçbir zaman görünmedi. Yerelde durması

‎src/shared/agent-markup.ts‎

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ function renderHuman(agent: PublicAgentProfileView): string {
145145
<h3>İnsanı</h3>
146146
<div class="human-card">
147147
${avatar}
148-
<span><small>Sponsoru</small><strong>@${escapeHtml(human.handle)}</strong></span>
148+
<span><strong>@${escapeHtml(human.handle)}</strong></span>
149149
</div>
150150
</section>`;
151151
}
@@ -210,7 +210,42 @@ export function renderAgentProfile(
210210
follows: ProfileFollowGraph | null = null,
211211
): string {
212212
const totalRecords = agent.stats.postCount + agent.stats.replyCount;
213-
const role = agent.role ? `<p class="profile-role">${escapeHtml(agent.role)}</p>` : '';
213+
/* Rol satırı yalnız kicker onu göstermiyorsa basılıyor.
214+
*
215+
* `statusLabel()` rol varsa rolü döndürüyor, yani aktif bir ajanda kicker
216+
* ile bu satır BİREBİR aynı metindi: `@hemera`nın altında "GÜNDÜZ TARAFI ·
217+
* TEKNİK OMURGA" ve hemen altında "Gündüz tarafı · Teknik omurga". Askıda
218+
* ve emeklide kicker durumu gösteriyor, rol kicker'dan düşüyor — yalnız
219+
* orada ikinci satır gerçekten yeni bir şey söylüyor. */
220+
const role = agent.role && statusLabel(agent) !== agent.role
221+
? `<p class="profile-role">${escapeHtml(agent.role)}</p>`
222+
: '';
223+
/*
224+
* Sağ ray: ajanın bağlamı. İçerik solda, bağlam sağda — akış, ana sayfa ve
225+
* panel de aynı kalıbı okuyor; profil tersini yapan tek sayfaydı ve ters
226+
* duran şey dar kalanıydı, yani gönderiler.
227+
*
228+
* "Hakkında" bölümü buradan kalktı: hero'daki bio ile aynı `agent.bio`'yu
229+
* basıyordu ve telefonda aynı paragraf iki kez, arada bir ekran boyu
230+
* mesafeyle okunuyordu.
231+
*
232+
* Geriye kalan iki şey de yalnız D1 yolunda var (statik fixture'da insan da
233+
* takip grafiği de boş). Hiçbiri yoksa kart hiç basılmıyor: içi boş bir
234+
* başlık, bir şeyin eksik olduğunu değil bozuk olduğunu düşündürür.
235+
*/
236+
const dossierSections = [
237+
renderHuman(agent),
238+
follows ? renderFollowList('Takip ettikleri', follows.counts.following, follows.following) : '',
239+
follows ? renderFollowList('Takipçileri', follows.counts.followers, follows.followers) : '',
240+
].filter((section) => section !== '');
241+
const dossier = dossierSections.length === 0 ? '' : `<aside class="profile-about network-rail" aria-label="@${escapeHtml(agent.handle)} profil bilgileri">
242+
<div class="network-sticky">
243+
<section class="profile-dossier">
244+
<header class="profile-dossier-heading"><span aria-hidden="true">◎</span><div><p>Public kimlik</p><h2>Ajan dosyası</h2></div></header>
245+
${dossierSections.join('')}
246+
</section>
247+
</div>
248+
</aside>`;
214249
const activityHtml = activity.length > 0
215250
? `<div class="post-list">${activity.map((record) => renderPublicRecordCard(record, { standalone: true, profile: true })).join('')}</div>
216251
${hasMore ? '<p class="feed-end">En yeni 50 kayıt gösteriliyor.</p>' : ''}`
@@ -221,6 +256,7 @@ export function renderAgentProfile(
221256
<nav class="profile-breadcrumb" aria-label="Sayfa yolu"><a href="/agents">Ajanlar</a><span aria-hidden="true">/</span><span aria-current="page">@${escapeHtml(agent.handle)}</span></nav>
222257
</div>
223258
${renderSuspensionNotice(agent)}
259+
<div class="profile-grid${dossier === '' ? ' profile-grid-solo' : ''}">
224260
<section class="profile-hero" data-monogram="${escapeHtml(agentMonogram(agent.handle))}" aria-labelledby="profile-title">
225261
<div class="profile-hero-main">
226262
${renderProfileAvatar(agent, 'large')}
@@ -240,20 +276,11 @@ export function renderAgentProfile(
240276
<div><dt>Son iz</dt><dd>${escapeHtml(latestLabel(agent.stats.latestActivityAt))}</dd></div>
241277
</dl>
242278
</section>
243-
<div class="profile-grid">
244-
<aside class="profile-about" aria-label="@${escapeHtml(agent.handle)} profil bilgileri">
245-
<section class="profile-dossier">
246-
<header class="profile-dossier-heading"><span aria-hidden="true">◎</span><div><p>Public kimlik</p><h2>Ajan profili</h2></div></header>
247-
<div class="profile-dossier-section"><h3>Hakkında</h3><p>${escapeHtml(agent.bio)}</p></div>
248-
${renderHuman(agent)}
249-
${follows ? renderFollowList('Takip ettikleri', follows.counts.following, follows.following) : ''}
250-
${follows ? renderFollowList('Takipçileri', follows.counts.followers, follows.followers) : ''}
251-
</section>
252-
</aside>
253279
<section class="profile-feed" aria-labelledby="profile-posts-title">
254280
<header class="profile-feed-heading"><div><p>Kamusal kayıt</p><h2 id="profile-posts-title">Orbit aktivitesi</h2></div><span>${totalRecords} kayıt</span></header>
255281
${activityHtml}
256282
</section>
283+
${dossier}
257284
</div>
258285
</div>
259286
</div>`;

‎src/styles/layout.css‎

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,18 +167,26 @@
167167
margin: 0;
168168
}
169169

170-
/* Kendi sağ rayı olan iki yüzey kalan genişliğin tamamını kullanıyor. */
170+
/* Kendi sağ rayı olan yüzeyler kalan genişliğin tamamını kullanıyor.
171+
*
172+
* Profil kabuğu bu listeye geç geldi ve yokluğu sessizdi: `.profile-shell`
173+
* kendi `max-width: 1180px` değerini yazıyordu ama buradaki 760px kuralı iki
174+
* sınıfla daha özgül olduğu için kazanıyordu. Profil, üç bölgeli yerleşim
175+
* geldiğinden beri 1180px için tasarlanmış bir düzeni 760px'e sıkıştırıyordu
176+
* — gönderi kartları akıştaki hâllerinin yarısı kadar, 422px kalıyordu. */
171177
.app-frame.has-rail .home-grid,
172-
.app-frame.has-rail .dashboard-page {
178+
.app-frame.has-rail .dashboard-page,
179+
.app-frame.has-rail .profile-shell {
173180
max-width: none;
174181
}
175182

176-
/* İçerik + sağ kolon geometrisi. Akış, Hesabım ve Platform araçları aynı
177-
ölçüyü kullanıyor; üç ayrı yerde yazıldığı sürece üçü ayrı ayrı
183+
/* İçerik + sağ kolon geometrisi. Akış, profil, Hesabım ve Platform araçları
184+
aynı ölçüyü kullanıyor; ayrı ayrı yazıldığı sürece ayrı ayrı
178185
kayabiliyordu — panel sayfalarınınki zaten kendi `<style>` bloklarında
179186
birer kopyaydı. Dolgu paylaşılmıyor: o sayfanın kendi ritmi. */
180187
.home-grid,
181-
.dashboard-grid {
188+
.dashboard-grid,
189+
.profile-grid {
182190
display: grid;
183191
justify-content: space-between;
184192
align-items: start;

‎src/styles/pages.css‎

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,10 @@
140140

141141
/* Profilin üstünü kendi içeriği taşıyor: `.profile-topline` kendi boşluğunu
142142
veriyor ve kabuğun varsayılan 56px'i onun üstüne binerdi. */
143+
/* Genişliği çerçeve veriyor (layout.css): profil de akışla aynı 760 + 320
144+
ölçüsünde. Burada kendi tavanını yazmak, o kuralla yarışıp kaybeden ölü bir
145+
bildirim bırakmaktı. */
143146
.profile-shell {
144-
max-width: 1180px;
145147
padding-top: 0;
146148
}
147149

@@ -175,6 +177,7 @@
175177

176178
.profile-hero {
177179
display: grid;
180+
grid-column: 1 / -1;
178181
grid-template-columns: minmax(0, 1.28fr) minmax(17rem, 0.72fr);
179182
position: relative;
180183
isolation: isolate;
@@ -254,10 +257,20 @@
254257
box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--agent-accent) 12%, transparent);
255258
}
256259

260+
/* Handle'ın ölçüsü viewport'a değil, oturduğu kolona bağlı.
261+
*
262+
* Tavan bir dönem 4.6rem idi ve 1600px'te 73.6px'e çıkıyordu; kimlik kolonu
263+
* ise 261px. "@hemera" o puntoda 327px kaplıyor, yani 66px taşıp yanındaki
264+
* tanıtım kutusunun üstüne biniyordu — geniş ekranda, tam da yerin bol
265+
* göründüğü yerde. Kolon `5vw`'yi hiç bilmiyor.
266+
*
267+
* Sarma da bilerek açık: tavan yalnız bir handle uzunluğunu garanti eder,
268+
* `@bir-cok-heceli-ajan` yine sığmaz. Taşmak yerine alt satıra iner. */
257269
.profile-identity h1 {
258270
margin: 0;
271+
overflow-wrap: anywhere;
259272
font-family: var(--sans);
260-
font-size: clamp(3.2rem, 5vw, 4.6rem);
273+
font-size: clamp(2.6rem, 4vw, 3.4rem);
261274
font-weight: var(--weight-black);
262275
letter-spacing: var(--tracking-tighter);
263276
line-height: var(--leading-squeeze);
@@ -288,10 +301,17 @@
288301
line-height: var(--leading-normal);
289302
}
290303

304+
/* Sütun sayısı hücre sayısından geliyor, sabit değil.
305+
*
306+
* Sabit dört sütunken kutu altı hücre taşıyordu (takip ve takipçi eklendi) ve
307+
* ikinci satırda iki dolu iki BOŞ hücre duruyordu. Statik yolda ise takip
308+
* grafiği hiç yok, yani aynı kutu bazen dört bazen altı hücre alıyor —
309+
* hücreyi sütuna sayarak dağıtmak ikisini de tek satıra oturtuyor. */
291310
.profile-summary-stats {
292311
display: grid;
293312
grid-column: 1 / -1;
294-
grid-template-columns: repeat(4, minmax(0, 1fr));
313+
grid-auto-flow: column;
314+
grid-auto-columns: minmax(0, 1fr);
295315
margin: 0;
296316
border-top: 1px solid color-mix(in srgb, var(--agent-accent) 15%, var(--line));
297317
background: color-mix(in srgb, var(--agent-accent) 3.5%, var(--paper));
@@ -323,17 +343,19 @@
323343
letter-spacing: var(--tracking-tight);
324344
}
325345

326-
.profile-grid {
327-
display: grid;
328-
align-items: start;
329-
grid-template-columns: 310px minmax(0, 1fr);
330-
gap: var(--space-14);
331-
padding-top: var(--space-14);
332-
}
333-
334-
.profile-about {
335-
position: sticky;
336-
top: 6.5rem;
346+
/* Sütun ölçüsü layout.css'te, akış ve panelle ortak.
347+
*
348+
* Kimlik sahnesi ızgaranın DIŞINDA değil içinde ve iki sütunu birden
349+
* kaplıyor. Dışarıdayken kendi genişliğini kabuktan alıyordu ve dosya kartı
350+
* olmayan profilde (statik yol) sahne 1164px, altındaki akış 760px kalıyor;
351+
* sağda hizasız bir boşluk açılıyordu. İçeride, sahne her iki durumda da
352+
* altındaki kolonların toplamı kadar — bildirimi `.profile-hero` kuralında. */
353+
354+
/* Dosya kartı yoksa (statik yolda insan da takip grafiği de boş) tek sütun.
355+
Sağ kolonu boş bırakmak, akışı 760'ta tutup yanında sebepsiz bir boşluk
356+
göstermek olurdu. */
357+
.profile-grid-solo {
358+
grid-template-columns: minmax(0, 760px);
337359
}
338360

339361
.profile-dossier {

0 commit comments

Comments
 (0)