From d3fe02fb3e8dd7bfc45c246d54d45acccd5959c7 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 10 Apr 2021 12:40:50 +0900
Subject: Default UI redesign (#7429)

* wip

* wip

* wip

* wip

* Update default.sidebar.vue

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update sticky-sidebar.ts

* wip

* wip

* Update messaging-room.form.vue

* Update timeline.vue
---
 src/client/components/notes.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src/client/components/notes.vue')

diff --git a/src/client/components/notes.vue b/src/client/components/notes.vue
index 80a9502d5f..724131d0c2 100644
--- a/src/client/components/notes.vue
+++ b/src/client/components/notes.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="_list_">
+<div>
 	<div class="_fullinfo" v-if="empty">
 		<img src="https://xn--931a.moe/assets/info.jpg" class="_ghost"/>
 		<div>{{ $ts.noNotes }}</div>
@@ -15,7 +15,7 @@
 	</div>
 
 	<XList ref="notes" :items="notes" v-slot="{ item: note }" :direction="reversed ? 'up' : 'down'" :reversed="reversed">
-		<XNote :note="note" @update:note="updated(note, $event)" :key="note._featuredId_ || note._prId_ || note.id"/>
+		<XNote :note="note" class="_block _isolated" @update:note="updated(note, $event)" :key="note._featuredId_ || note._prId_ || note.id"/>
 	</XList>
 
 	<div v-show="more && !reversed" style="margin-top: var(--margin);">
-- 
cgit v1.2.3-freya


From 5087a5af216c104168063df54921dc5e82fa6fe3 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Sat, 10 Apr 2021 18:17:42 +0900
Subject: Tweak UI

---
 src/client/components/notes.vue              |  2 +-
 src/client/components/signin.vue             |  6 ++--
 src/client/components/ui/container.vue       |  2 +-
 src/client/pages/advanced-theme-editor.vue   |  4 +--
 src/client/pages/announcements.vue           |  2 +-
 src/client/pages/channel.vue                 |  6 ++--
 src/client/pages/channels.vue                |  6 ++--
 src/client/pages/clip.vue                    |  4 +--
 src/client/pages/explore.vue                 | 24 ++++++++--------
 src/client/pages/instance/abuses.vue         |  2 +-
 src/client/pages/instance/announcements.vue  |  2 +-
 src/client/pages/instance/files.vue          |  2 +-
 src/client/pages/instance/index.metrics.vue  |  6 ++--
 src/client/pages/instance/index.vue          |  6 ++--
 src/client/pages/instance/settings.vue       | 30 ++++++++++----------
 src/client/pages/instance/users.vue          |  2 +-
 src/client/pages/messaging/index.vue         |  2 +-
 src/client/pages/my-clips/index.vue          |  2 +-
 src/client/pages/my-groups/group.vue         |  2 +-
 src/client/pages/my-lists/list.vue           |  2 +-
 src/client/pages/note.vue                    | 16 +++++------
 src/client/pages/page-editor/page-editor.vue |  8 +++---
 src/client/pages/scratchpad.vue              |  6 ++--
 src/client/pages/test.vue                    | 18 ++++++------
 src/client/pages/timeline.vue                |  9 +++---
 src/client/pages/user/clips.vue              |  2 +-
 src/client/pages/user/follow-list.vue        |  4 +--
 src/client/pages/user/index.timeline.vue     |  2 +-
 src/client/pages/user/index.vue              | 42 +++++++++++++++-------------
 src/client/pages/user/pages.vue              |  2 +-
 src/client/style.scss                        | 18 ++++++++----
 31 files changed, 125 insertions(+), 116 deletions(-)

(limited to 'src/client/components/notes.vue')

diff --git a/src/client/components/notes.vue b/src/client/components/notes.vue
index 724131d0c2..33fb57c8cf 100644
--- a/src/client/components/notes.vue
+++ b/src/client/components/notes.vue
@@ -15,7 +15,7 @@
 	</div>
 
 	<XList ref="notes" :items="notes" v-slot="{ item: note }" :direction="reversed ? 'up' : 'down'" :reversed="reversed">
-		<XNote :note="note" class="_block _isolated" @update:note="updated(note, $event)" :key="note._featuredId_ || note._prId_ || note.id"/>
+		<XNote :note="note" class="_block _gap" @update:note="updated(note, $event)" :key="note._featuredId_ || note._prId_ || note.id"/>
 	</XList>
 
 	<div v-show="more && !reversed" style="margin-top: var(--margin);">
diff --git a/src/client/components/signin.vue b/src/client/components/signin.vue
index 193d5afecf..6e05c8c008 100755
--- a/src/client/components/signin.vue
+++ b/src/client/components/signin.vue
@@ -40,9 +40,9 @@
 	</div>
 	<div class="_hr"></div>
 	<div class="social">
-		<a class="_borderButton _vMargin" v-if="meta && meta.enableTwitterIntegration" :href="`${apiUrl}/signin/twitter`"><Fa :icon="faTwitter" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'Twitter' }) }}</a>
-		<a class="_borderButton _vMargin" v-if="meta && meta.enableGithubIntegration" :href="`${apiUrl}/signin/github`"><Fa :icon="faGithub" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'GitHub' }) }}</a>
-		<a class="_borderButton _vMargin" v-if="meta && meta.enableDiscordIntegration" :href="`${apiUrl}/signin/discord`"><Fa :icon="faDiscord" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'Discord' }) }}</a>
+		<a class="_borderButton _gap" v-if="meta && meta.enableTwitterIntegration" :href="`${apiUrl}/signin/twitter`"><Fa :icon="faTwitter" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'Twitter' }) }}</a>
+		<a class="_borderButton _gap" v-if="meta && meta.enableGithubIntegration" :href="`${apiUrl}/signin/github`"><Fa :icon="faGithub" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'GitHub' }) }}</a>
+		<a class="_borderButton _gap" v-if="meta && meta.enableDiscordIntegration" :href="`${apiUrl}/signin/discord`"><Fa :icon="faDiscord" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'Discord' }) }}</a>
 	</div>
 </form>
 </template>
diff --git a/src/client/components/ui/container.vue b/src/client/components/ui/container.vue
index efcff7a36c..6a571f6e65 100644
--- a/src/client/components/ui/container.vue
+++ b/src/client/components/ui/container.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="ukygtjoj _block _isolated" :class="{ naked, hideHeader: !showHeader, scrollable, closed: !showBody }" v-size="{ max: [380] }">
+<div class="ukygtjoj _block _gap" :class="{ naked, hideHeader: !showHeader, scrollable, closed: !showBody }" v-size="{ max: [380] }">
 	<header v-if="showHeader" ref="header">
 		<div class="title"><slot name="header"></slot></div>
 		<div class="sub">
diff --git a/src/client/pages/advanced-theme-editor.vue b/src/client/pages/advanced-theme-editor.vue
index 3808c8abbe..fff525a32d 100644
--- a/src/client/pages/advanced-theme-editor.vue
+++ b/src/client/pages/advanced-theme-editor.vue
@@ -12,7 +12,7 @@
 		</div>
 	</section>
 	<section class="_section">
-		<div class="_content _card _vMargin">
+		<div class="_content _card _gap">
 			<div class="_content">
 				<MkInput v-model:value="name" required><span>{{ $ts.name }}</span></MkInput>
 				<MkInput v-model:value="author" required><span>{{ $ts.author }}</span></MkInput>
@@ -24,7 +24,7 @@
 				</div>
 			</div>
 		</div>
-		<div class="_content _card _vMargin">
+		<div class="_content _card _gap">
 			<div class="list-view _content">
 				<div class="item" v-for="([ k, v ], i) in theme" :key="k">
 					<div class="_inputs">
diff --git a/src/client/pages/announcements.vue b/src/client/pages/announcements.vue
index 041f513f99..4e5f0e7f9c 100644
--- a/src/client/pages/announcements.vue
+++ b/src/client/pages/announcements.vue
@@ -1,7 +1,7 @@
 <template>
 <div class="_section">
 	<MkPagination :pagination="pagination" #default="{items}" class="ruryvtyk _content">
-		<section class="_card announcement _vMargin" v-for="(announcement, i) in items" :key="announcement.id">
+		<section class="_card announcement _gap" v-for="(announcement, i) in items" :key="announcement.id">
 			<div class="_title"><span v-if="$i && !announcement.isRead">🆕 </span>{{ announcement.title }}</div>
 			<div class="_content">
 				<Mfm :text="announcement.text"/>
diff --git a/src/client/pages/channel.vue b/src/client/pages/channel.vue
index 4302f963e4..0d0184a517 100644
--- a/src/client/pages/channel.vue
+++ b/src/client/pages/channel.vue
@@ -1,6 +1,6 @@
 <template>
 <div v-if="channel" class="_section">
-	<div class="wpgynlbz _content _panel _vMargin" :class="{ hide: !showBanner }">
+	<div class="wpgynlbz _content _panel _gap" :class="{ hide: !showBanner }">
 		<XChannelFollowButton :channel="channel" :full="true" class="subscribe"/>
 		<button class="_button toggle" @click="() => showBanner = !showBanner">
 			<template v-if="showBanner"><Fa :icon="faAngleUp"/></template>
@@ -20,9 +20,9 @@
 		</div>
 	</div>
 
-	<XPostForm :channel="channel" class="post-form _content _panel _vMargin" fixed v-if="$i"/>
+	<XPostForm :channel="channel" class="post-form _content _panel _gap" fixed v-if="$i"/>
 
-	<XTimeline class="_content _vMargin _noGap_" src="channel" :key="channelId" :channel="channelId" @before="before" @after="after"/>
+	<XTimeline class="_content _gap _noGap_" src="channel" :key="channelId" :channel="channelId" @before="before" @after="after"/>
 </div>
 </template>
 
diff --git a/src/client/pages/channels.vue b/src/client/pages/channels.vue
index 530af7a4a7..ebf1e7b871 100644
--- a/src/client/pages/channels.vue
+++ b/src/client/pages/channels.vue
@@ -11,20 +11,20 @@
 	<div class="_section">
 		<div class="_content grwlizim featured" v-if="tab === 'featured'">
 			<MkPagination :pagination="featuredPagination" #default="{items}">
-				<MkChannelPreview v-for="channel in items" class="_vMargin" :channel="channel" :key="channel.id"/>
+				<MkChannelPreview v-for="channel in items" class="_gap" :channel="channel" :key="channel.id"/>
 			</MkPagination>
 		</div>
 
 		<div class="_content grwlizim following" v-if="tab === 'following'">
 			<MkPagination :pagination="followingPagination" #default="{items}">
-				<MkChannelPreview v-for="channel in items" class="_vMargin" :channel="channel" :key="channel.id"/>
+				<MkChannelPreview v-for="channel in items" class="_gap" :channel="channel" :key="channel.id"/>
 			</MkPagination>
 		</div>
 
 		<div class="_content grwlizim owned" v-if="tab === 'owned'">
 			<MkButton class="new" @click="create()"><Fa :icon="faPlus"/></MkButton>
 			<MkPagination :pagination="ownedPagination" #default="{items}">
-				<MkChannelPreview v-for="channel in items" class="_vMargin" :channel="channel" :key="channel.id"/>
+				<MkChannelPreview v-for="channel in items" class="_gap" :channel="channel" :key="channel.id"/>
 			</MkPagination>
 		</div>
 	</div>
diff --git a/src/client/pages/clip.vue b/src/client/pages/clip.vue
index e0f5868a15..493a34e7f0 100644
--- a/src/client/pages/clip.vue
+++ b/src/client/pages/clip.vue
@@ -1,6 +1,6 @@
 <template>
 <div v-if="clip" class="_section">
-	<div class="okzinsic _content _panel _vMargin">
+	<div class="okzinsic _content _panel _gap">
 		<div class="description" v-if="clip.description">
 			<Mfm :text="clip.description" :is-note="false" :i="$i"/>
 		</div>
@@ -9,7 +9,7 @@
 		</div>
 	</div>
 
-	<XNotes class="_content _vMargin" :pagination="pagination" :detail="true"/>
+	<XNotes class="_content _gap" :pagination="pagination" :detail="true"/>
 </div>
 </template>
 
diff --git a/src/client/pages/explore.vue b/src/client/pages/explore.vue
index 07989f8442..50106f4580 100644
--- a/src/client/pages/explore.vue
+++ b/src/client/pages/explore.vue
@@ -3,38 +3,38 @@
 	<div class="_section">
 		<MkInput v-model:value="query" :debounce="true" type="search"><template #icon><Fa :icon="faSearch"/></template><span>{{ $ts.searchUser }}</span></MkInput>
 
-		<XUserList v-if="query" class="_vMargin" :pagination="searchPagination" ref="search"/>
+		<XUserList v-if="query" class="_gap" :pagination="searchPagination" ref="search"/>
 
-		<div class="localfedi7 _panel _vMargin" v-if="meta && stats && tag == null" :style="{ backgroundImage: meta.bannerUrl ? `url(${meta.bannerUrl})` : null }">
+		<div class="localfedi7 _panel _gap" v-if="meta && stats && tag == null" :style="{ backgroundImage: meta.bannerUrl ? `url(${meta.bannerUrl})` : null }">
 			<header><span>{{ $t('explore', { host: meta.name || 'Misskey' }) }}</span></header>
 			<div><span>{{ $t('exploreUsersCount', { count: num(stats.originalUsersCount) }) }}</span></div>
 		</div>
 
 		<template v-if="tag == null">
-			<MkFolder class="_vMargin" persist-key="explore-pinned-users">
+			<MkFolder class="_gap" persist-key="explore-pinned-users">
 				<template #header><Fa :icon="faBookmark" fixed-width style="margin-right: 0.5em;"/>{{ $ts.pinnedUsers }}</template>
 				<XUserList :pagination="pinnedUsers"/>
 			</MkFolder>
-			<MkFolder class="_vMargin" persist-key="explore-popular-users">
+			<MkFolder class="_gap" persist-key="explore-popular-users">
 				<template #header><Fa :icon="faChartLine" fixed-width style="margin-right: 0.5em;"/>{{ $ts.popularUsers }}</template>
 				<XUserList :pagination="popularUsers"/>
 			</MkFolder>
-			<MkFolder class="_vMargin" persist-key="explore-recently-updated-users">
+			<MkFolder class="_gap" persist-key="explore-recently-updated-users">
 				<template #header><Fa :icon="faCommentAlt" fixed-width style="margin-right: 0.5em;"/>{{ $ts.recentlyUpdatedUsers }}</template>
 				<XUserList :pagination="recentlyUpdatedUsers"/>
 			</MkFolder>
-			<MkFolder class="_vMargin" persist-key="explore-recently-registered-users">
+			<MkFolder class="_gap" persist-key="explore-recently-registered-users">
 				<template #header><Fa :icon="faPlus" fixed-width style="margin-right: 0.5em;"/>{{ $ts.recentlyRegisteredUsers }}</template>
 				<XUserList :pagination="recentlyRegisteredUsers"/>
 			</MkFolder>
 		</template>
 	</div>
 	<div class="_section">
-		<div class="localfedi7 _panel _vMargin" v-if="tag == null" :style="{ backgroundImage: `url(/static-assets/client/fedi.jpg)` }">
+		<div class="localfedi7 _panel _gap" v-if="tag == null" :style="{ backgroundImage: `url(/static-assets/client/fedi.jpg)` }">
 			<header><span>{{ $ts.exploreFediverse }}</span></header>
 		</div>
 
-		<MkFolder :body-togglable="true" :expanded="false" ref="tags" class="_vMargin">
+		<MkFolder :body-togglable="true" :expanded="false" ref="tags" class="_gap">
 			<template #header><Fa :icon="faHashtag" fixed-width style="margin-right: 0.5em;"/>{{ $ts.popularTags }}</template>
 
 			<div class="vxjfqztj">
@@ -43,21 +43,21 @@
 			</div>
 		</MkFolder>
 
-		<MkFolder v-if="tag != null" :key="`${tag}`" class="_vMargin">
+		<MkFolder v-if="tag != null" :key="`${tag}`" class="_gap">
 			<template #header><Fa :icon="faHashtag" fixed-width style="margin-right: 0.5em;"/>{{ tag }}</template>
 			<XUserList :pagination="tagUsers"/>
 		</MkFolder>
 
 		<template v-if="tag == null">
-			<MkFolder class="_vMargin">
+			<MkFolder class="_gap">
 				<template #header><Fa :icon="faChartLine" fixed-width style="margin-right: 0.5em;"/>{{ $ts.popularUsers }}</template>
 				<XUserList :pagination="popularUsersF"/>
 			</MkFolder>
-			<MkFolder class="_vMargin">
+			<MkFolder class="_gap">
 				<template #header><Fa :icon="faCommentAlt" fixed-width style="margin-right: 0.5em;"/>{{ $ts.recentlyUpdatedUsers }}</template>
 				<XUserList :pagination="recentlyUpdatedUsersF"/>
 			</MkFolder>
-			<MkFolder class="_vMargin">
+			<MkFolder class="_gap">
 				<template #header><Fa :icon="faRocket" fixed-width style="margin-right: 0.5em;"/>{{ $ts.recentlyDiscoveredUsers }}</template>
 				<XUserList :pagination="recentlyRegisteredUsersF"/>
 			</MkFolder>
diff --git a/src/client/pages/instance/abuses.vue b/src/client/pages/instance/abuses.vue
index 9727c160ba..736f05cc72 100644
--- a/src/client/pages/instance/abuses.vue
+++ b/src/client/pages/instance/abuses.vue
@@ -34,7 +34,7 @@
 			-->
 
 			<MkPagination :pagination="pagination" #default="{items}" ref="reports" style="margin-top: var(--margin);">
-				<div class="bcekxzvu _card _vMargin" v-for="report in items" :key="report.id">
+				<div class="bcekxzvu _card _gap" v-for="report in items" :key="report.id">
 					<div class="_content target">
 						<MkAvatar class="avatar" :user="report.targetUser"/>
 						<div class="info">
diff --git a/src/client/pages/instance/announcements.vue b/src/client/pages/instance/announcements.vue
index 426199c163..f9d58a29c4 100644
--- a/src/client/pages/instance/announcements.vue
+++ b/src/client/pages/instance/announcements.vue
@@ -3,7 +3,7 @@
 	<div class="_section">
 		<div class="_content">
 			<MkButton @click="add()" primary style="margin: 0 auto 16px auto;"><Fa :icon="faPlus"/> {{ $ts.add }}</MkButton>
-			<section class="_card _vMargin announcements" v-for="announcement in announcements">
+			<section class="_card _gap announcements" v-for="announcement in announcements">
 				<div class="_content announcement">
 					<MkInput v-model:value="announcement.title">
 						<span>{{ $ts.title }}</span>
diff --git a/src/client/pages/instance/files.vue b/src/client/pages/instance/files.vue
index a1f134f558..e7de050df8 100644
--- a/src/client/pages/instance/files.vue
+++ b/src/client/pages/instance/files.vue
@@ -35,7 +35,7 @@
 				</MkInput>
 			</div>
 			<MkPagination :pagination="pagination" #default="{items}" class="urempief" ref="files">
-				<button class="file _panel _button _vMargin" v-for="file in items" :key="file.id" @click="show(file, $event)">
+				<button class="file _panel _button _gap" v-for="file in items" :key="file.id" @click="show(file, $event)">
 					<MkDriveFileThumbnail class="thumbnail" :file="file" fit="contain"/>
 					<div class="body">
 						<div>
diff --git a/src/client/pages/instance/index.metrics.vue b/src/client/pages/instance/index.metrics.vue
index b467ce06f5..48844e0681 100644
--- a/src/client/pages/instance/index.metrics.vue
+++ b/src/client/pages/instance/index.metrics.vue
@@ -4,7 +4,7 @@
 		<template #header><Fa :icon="faHeartbeat"/> {{ $ts.metrics }}</template>
 		<div class="_section" style="padding: 0 var(--margin);">
 			<div class="_content">
-				<MkContainer :body-togglable="false" class="_vMargin">
+				<MkContainer :body-togglable="false" class="_gap">
 					<template #header><Fa :icon="faMicrochip"/>{{ $ts.cpuAndMemory }}</template>
 					<!--
 					<template #func>
@@ -27,7 +27,7 @@
 					</div>
 				</MkContainer>
 
-				<MkContainer :body-togglable="false" class="_vMargin">
+				<MkContainer :body-togglable="false" class="_gap">
 					<template #header><Fa :icon="faHdd"/> {{ $ts.disk }}</template>
 					<!--
 					<template #func>
@@ -50,7 +50,7 @@
 					</div>
 				</MkContainer>
 
-				<MkContainer :body-togglable="false" class="_vMargin">
+				<MkContainer :body-togglable="false" class="_gap">
 					<template #header><Fa :icon="faExchangeAlt"/> {{ $ts.network }}</template>
 					<!--
 					<template #func>
diff --git a/src/client/pages/instance/index.vue b/src/client/pages/instance/index.vue
index 7e34976938..54a0584ccc 100644
--- a/src/client/pages/instance/index.vue
+++ b/src/client/pages/instance/index.vue
@@ -4,9 +4,9 @@
 		<template #header><Fa :icon="faTachometerAlt"/> {{ $ts.overview }}</template>
 
 		<div class="sboqnrfi" :style="{ gridTemplateRows: overviewHeight }">
-			<MkInstanceStats :chart-limit="300" :detailed="true" class="_vMargin" ref="stats"/>
+			<MkInstanceStats :chart-limit="300" :detailed="true" class="_gap" ref="stats"/>
 
-			<MkContainer :body-togglable="true" class="_vMargin">
+			<MkContainer :body-togglable="true" class="_gap">
 				<template #header><Fa :icon="faInfoCircle"/>{{ $ts.instanceInfo }}</template>
 
 				<div class="_content">
@@ -19,7 +19,7 @@
 				</div>
 			</MkContainer>
 			
-			<MkContainer :body-togglable="true" :scrollable="true" class="_vMargin" style="height: 300px;">
+			<MkContainer :body-togglable="true" :scrollable="true" class="_gap" style="height: 300px;">
 				<template #header><Fa :icon="faDatabase"/>{{ $ts.database }}</template>
 
 				<div class="_content" v-if="dbInfo">
diff --git a/src/client/pages/instance/settings.vue b/src/client/pages/instance/settings.vue
index 660a3d4fe3..038ecfd5ac 100644
--- a/src/client/pages/instance/settings.vue
+++ b/src/client/pages/instance/settings.vue
@@ -1,6 +1,6 @@
 <template>
 <div v-if="meta" class="_section">
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faInfoCircle"/> {{ $ts.basicInfo }}</div>
 		<div class="_content">
 			<MkInput v-model:value="name">{{ $ts.instanceName }}</MkInput>
@@ -20,7 +20,7 @@
 
 	<MkInput v-model:value="pinnedClipId">{{ $ts.pinnedClipId }}</MkInput>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_content">
 			<MkInput v-model:value="maxNoteTextLength" type="number" :save="() => save()"><template #icon><Fa :icon="faPencilAlt"/></template>{{ $ts.maxNoteTextLength }}</MkInput>
 		</div>
@@ -34,7 +34,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faUser"/> {{ $ts.registration }}</div>
 		<div class="_content">
 			<MkSwitch v-model:value="enableRegistration" @update:value="save()">{{ $ts.enableRegistration }}</MkSwitch>
@@ -42,7 +42,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faShieldAlt"/> {{ $ts.hcaptcha }}</div>
 		<div class="_content">
 			<MkSwitch v-model:value="enableHcaptcha">{{ $ts.enableHcaptcha }}</MkSwitch>
@@ -60,7 +60,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faShieldAlt"/> {{ $ts.recaptcha }}</div>
 		<div class="_content">
 			<MkSwitch v-model:value="enableRecaptcha" ref="enableRecaptcha">{{ $ts.enableRecaptcha }}</MkSwitch>
@@ -78,7 +78,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faEnvelope" /> {{ $ts.emailConfig }}</div>
 		<div class="_content">
 			<MkSwitch v-model:value="enableEmail" @update:value="save()">{{ $ts.enableEmail }}<template #desc>{{ $ts.emailConfigInfo }}</template></MkSwitch>
@@ -101,7 +101,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faBolt"/> {{ $ts.serviceworker }}</div>
 		<div class="_content">
 			<MkSwitch v-model:value="enableServiceWorker">{{ $ts.enableServiceworker }}<template #desc>{{ $ts.serviceworkerInfo }}</template></MkSwitch>
@@ -117,7 +117,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faThumbtack"/> {{ $ts.pinnedUsers }}</div>
 		<div class="_content">
 			<MkTextarea v-model:value="pinnedUsers">
@@ -129,7 +129,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faThumbtack"/> {{ $ts.pinnedPages }}</div>
 		<div class="_content">
 			<MkTextarea v-model:value="pinnedPages">
@@ -141,7 +141,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faCloud"/> {{ $ts.files }}</div>
 		<div class="_content">
 			<MkSwitch v-model:value="cacheRemoteFiles">{{ $ts.cacheRemoteFiles }}<template #desc>{{ $ts.cacheRemoteFilesDescription }}</template></MkSwitch>
@@ -154,7 +154,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faCloud"/> {{ $ts.objectStorage }}</div>
 		<div class="_content">
 			<MkSwitch v-model:value="useObjectStorage">{{ $ts.useObjectStorage }}</MkSwitch>
@@ -183,7 +183,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faGhost"/> {{ $ts.proxyAccount }}</div>
 		<div class="_content">
 			<MkInput :value="proxyAccount ? proxyAccount.username : null" disabled><template #prefix>@</template>{{ $ts.proxyAccount }}<template #desc>{{ $ts.proxyAccountDescription }}</template></MkInput>
@@ -191,7 +191,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faBan"/> {{ $ts.blockedInstances }}</div>
 		<div class="_content">
 			<MkTextarea v-model:value="blockedHosts">
@@ -203,7 +203,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faShareAlt"/> {{ $ts.integration }}</div>
 		<div class="_content">
 			<header><Fa :icon="faTwitter"/> Twitter</header>
@@ -237,7 +237,7 @@
 		</div>
 	</section>
 
-	<section class="_card _vMargin">
+	<section class="_card _gap">
 		<div class="_title"><Fa :icon="faArchway" /> Summaly Proxy</div>
 		<div class="_content">
 			<MkInput v-model:value="summalyProxy">URL</MkInput>
diff --git a/src/client/pages/instance/users.vue b/src/client/pages/instance/users.vue
index 9452a91eae..e998971830 100644
--- a/src/client/pages/instance/users.vue
+++ b/src/client/pages/instance/users.vue
@@ -53,7 +53,7 @@
 			</div>
 
 			<MkPagination :pagination="pagination" #default="{items}" class="users" ref="users">
-				<button class="user _panel _button _vMargin" v-for="user in items" :key="user.id" @click="show(user)">
+				<button class="user _panel _button _gap" v-for="user in items" :key="user.id" @click="show(user)">
 					<MkAvatar class="avatar" :user="user" :disable-link="true"/>
 					<div class="body">
 						<header>
diff --git a/src/client/pages/messaging/index.vue b/src/client/pages/messaging/index.vue
index 9510349d5c..417e3903ce 100644
--- a/src/client/pages/messaging/index.vue
+++ b/src/client/pages/messaging/index.vue
@@ -4,7 +4,7 @@
 
 	<div class="history" v-if="messages.length > 0">
 		<MkA v-for="(message, i) in messages"
-			class="message _block _isolated"
+			class="message _block _gap"
 			:class="{ isMe: isMe(message), isRead: message.groupId ? message.reads.includes($i.id) : message.isRead }"
 			:to="message.groupId ? `/my/messaging/group/${message.groupId}` : `/my/messaging/${getAcct(isMe(message) ? message.recipient : message.user)}`"
 			:data-index="i"
diff --git a/src/client/pages/my-clips/index.vue b/src/client/pages/my-clips/index.vue
index be69e523a0..09cd7f828a 100644
--- a/src/client/pages/my-clips/index.vue
+++ b/src/client/pages/my-clips/index.vue
@@ -4,7 +4,7 @@
 
 	<div class="_content">
 		<MkPagination :pagination="pagination" #default="{items}" ref="list" class="list">
-			<MkA v-for="item in items" :key="item.id" :to="`/clips/${item.id}`" class="item _panel _vMargin">
+			<MkA v-for="item in items" :key="item.id" :to="`/clips/${item.id}`" class="item _panel _gap">
 				<b>{{ item.name }}</b>
 				<div v-if="item.description" class="description">{{ item.description }}</div>
 			</MkA>
diff --git a/src/client/pages/my-groups/group.vue b/src/client/pages/my-groups/group.vue
index 878d14cec4..0631118ca3 100644
--- a/src/client/pages/my-groups/group.vue
+++ b/src/client/pages/my-groups/group.vue
@@ -12,7 +12,7 @@
 	</transition>
 
 	<transition name="zoom" mode="out-in">
-		<div v-if="group" class="_section members _vMargin">
+		<div v-if="group" class="_section members _gap">
 			<div class="_title">{{ $ts.members }}</div>
 			<div class="_content">
 				<div class="users">
diff --git a/src/client/pages/my-lists/list.vue b/src/client/pages/my-lists/list.vue
index 285c48695a..21c8a696b9 100644
--- a/src/client/pages/my-lists/list.vue
+++ b/src/client/pages/my-lists/list.vue
@@ -11,7 +11,7 @@
 	</transition>
 
 	<transition name="zoom" mode="out-in">
-		<div v-if="list" class="_section members _vMargin">
+		<div v-if="list" class="_section members _gap">
 			<div class="_title">{{ $ts.members }}</div>
 			<div class="_content">
 				<div class="users">
diff --git a/src/client/pages/note.vue b/src/client/pages/note.vue
index 90cb98c40e..318e43c7f6 100644
--- a/src/client/pages/note.vue
+++ b/src/client/pages/note.vue
@@ -1,19 +1,19 @@
 <template>
 <div class="fcuexfpr _root">
 	<div v-if="note" class="note" v-anim>
-		<div class="_vMargin" v-if="showNext">
+		<div class="_gap" v-if="showNext">
 			<XNotes class="_content _noGap_" :pagination="next"/>
 		</div>
 
-		<div class="main _vMargin">
+		<div class="main _gap">
 			<MkButton v-if="!showNext && hasNext" class="load next" @click="showNext = true"><Fa :icon="faChevronUp"/></MkButton>
-			<div class="_content _vMargin">
-				<MkRemoteCaution v-if="note.user.host != null" :href="note.url || note.uri" class="_vMargin"/>
-				<XNoteDetailed v-model:note="note" :key="note.id" class="_vMargin"/>
+			<div class="_content _gap">
+				<MkRemoteCaution v-if="note.user.host != null" :href="note.url || note.uri" class="_gap"/>
+				<XNoteDetailed v-model:note="note" :key="note.id" class="_gap"/>
 			</div>
-			<div class="_content clips _vMargin" v-if="clips && clips.length > 0">
+			<div class="_content clips _gap" v-if="clips && clips.length > 0">
 				<div class="title">{{ $ts.clip }}</div>
-				<MkA v-for="item in clips" :key="item.id" :to="`/clips/${item.id}`" class="item _panel _vMargin">
+				<MkA v-for="item in clips" :key="item.id" :to="`/clips/${item.id}`" class="item _panel _gap">
 					<b>{{ item.name }}</b>
 					<div v-if="item.description" class="description">{{ item.description }}</div>
 					<div class="user">
@@ -24,7 +24,7 @@
 			<MkButton v-if="!showPrev && hasPrev" class="load prev" @click="showPrev = true"><Fa :icon="faChevronDown"/></MkButton>
 		</div>
 
-		<div class="_vMargin" v-if="showPrev">
+		<div class="_gap" v-if="showPrev">
 			<XNotes class="_content _noGap_" :pagination="prev"/>
 		</div>
 	</div>
diff --git a/src/client/pages/page-editor/page-editor.vue b/src/client/pages/page-editor/page-editor.vue
index 148f5f8c4d..f8f81541ff 100644
--- a/src/client/pages/page-editor/page-editor.vue
+++ b/src/client/pages/page-editor/page-editor.vue
@@ -8,7 +8,7 @@
 		<MkButton inline @click="del" class="delete" v-if="pageId && !readonly"><Fa :icon="faTrashAlt"/> {{ $ts.delete }}</MkButton>
 	</div>
 
-	<MkContainer :body-togglable="true" :expanded="true" class="_vMargin">
+	<MkContainer :body-togglable="true" :expanded="true" class="_gap">
 		<template #header><Fa :icon="faCog"/> {{ $ts._pages.pageSetting }}</template>
 		<div style="padding: 16px;">
 			<MkInput v-model:value="title">
@@ -44,7 +44,7 @@
 		</div>
 	</MkContainer>
 
-	<MkContainer :body-togglable="true" :expanded="true" class="_vMargin">
+	<MkContainer :body-togglable="true" :expanded="true" class="_gap">
 		<template #header><Fa :icon="faStickyNote"/> {{ $ts._pages.contents }}</template>
 		<div style="padding: 16px;">
 			<XBlocks class="content" v-model:value="content" :hpml="hpml"/>
@@ -53,7 +53,7 @@
 		</div>
 	</MkContainer>
 
-	<MkContainer :body-togglable="true" class="_vMargin">
+	<MkContainer :body-togglable="true" class="_gap">
 		<template #header><Fa :icon="faMagic"/> {{ $ts._pages.variables }}</template>
 		<div class="qmuvgica">
 			<XDraggable tag="div" class="variables" v-show="variables.length > 0" v-model="variables" item-key="name" handle=".drag-handle" :group="{ name: 'variables' }" animation="150" swap-threshold="0.5">
@@ -74,7 +74,7 @@
 		</div>
 	</MkContainer>
 
-	<MkContainer :body-togglable="true" :expanded="true" class="_vMargin">
+	<MkContainer :body-togglable="true" :expanded="true" class="_gap">
 		<template #header><Fa :icon="faCode"/> {{ $ts.script }}</template>
 		<div>
 			<MkTextarea class="_code" v-model:value="script"/>
diff --git a/src/client/pages/scratchpad.vue b/src/client/pages/scratchpad.vue
index a5107bd526..3664765d02 100644
--- a/src/client/pages/scratchpad.vue
+++ b/src/client/pages/scratchpad.vue
@@ -1,18 +1,18 @@
 <template>
 <div class="iltifgqe">
-	<div class="editor _panel _vMargin">
+	<div class="editor _panel _gap">
 		<PrismEditor class="_code code" v-model="code" :highlight="highlighter" :line-numbers="false"/>
 		<MkButton style="position: absolute; top: 8px; right: 8px;" @click="run()" primary><Fa :icon="faPlay"/></MkButton>
 	</div>
 
-	<MkContainer :body-togglable="true" class="_vMargin">
+	<MkContainer :body-togglable="true" class="_gap">
 		<template #header><Fa fixed-width/>{{ $ts.output }}</template>
 		<div class="bepmlvbi">
 			<div v-for="log in logs" class="log" :key="log.id" :class="{ print: log.print }">{{ log.text }}</div>
 		</div>
 	</MkContainer>
 
-	<div class="_vMargin">
+	<div class="_gap">
 		{{ $ts.scratchpadDescription }}
 	</div>
 </div>
diff --git a/src/client/pages/test.vue b/src/client/pages/test.vue
index cbfdd16c80..252fa1c828 100644
--- a/src/client/pages/test.vue
+++ b/src/client/pages/test.vue
@@ -1,7 +1,7 @@
 <template>
 <div class="_section">
 	<div class="_content">
-		<div class="_card _vMargin">
+		<div class="_card _gap">
 			<div class="_title">Dialog</div>
 			<div class="_content">
 				<MkInput v-model:value="dialogTitle">
@@ -30,7 +30,7 @@
 			</div>
 		</div>
 
-		<div class="_card _vMargin">
+		<div class="_card _gap">
 			<div class="_title">Form</div>
 			<div class="_content">
 				<MkInput v-model:value="formTitle">
@@ -46,7 +46,7 @@
 			</div>
 		</div>
 
-		<div class="_card _vMargin">
+		<div class="_card _gap">
 			<div class="_title">MFM</div>
 			<div class="_content">
 				<MkTextarea v-model:value="mfm">
@@ -58,7 +58,7 @@
 			</div>
 		</div>
 
-		<div class="_card _vMargin">
+		<div class="_card _gap">
 			<div class="_title">selectDriveFile</div>
 			<div class="_content">
 				<MkSwitch v-model:value="selectDriveFileMultiple">
@@ -71,7 +71,7 @@
 			</div>
 		</div>
 
-		<div class="_card _vMargin">
+		<div class="_card _gap">
 			<div class="_title">selectDriveFolder</div>
 			<div class="_content">
 				<MkSwitch v-model:value="selectDriveFolderMultiple">
@@ -84,7 +84,7 @@
 			</div>
 		</div>
 
-		<div class="_card _vMargin">
+		<div class="_card _gap">
 			<div class="_title">selectUser</div>
 			<div class="_content">
 				<MkButton @click="selectUser()">selectUser</MkButton>
@@ -94,7 +94,7 @@
 			</div>
 		</div>
 
-		<div class="_card _vMargin">
+		<div class="_card _gap">
 			<div class="_title">Notification</div>
 			<div class="_content">
 				<MkInput v-model:value="notificationIconUrl">
@@ -110,7 +110,7 @@
 			</div>
 		</div>
 
-		<div class="_card _vMargin">
+		<div class="_card _gap">
 			<div class="_title">Waiting dialog</div>
 			<div class="_content">
 				<MkButton inline @click="openWaitingDialog()">icon only</MkButton>
@@ -118,7 +118,7 @@
 			</div>
 		</div>
 
-		<div class="_card _vMargin">
+		<div class="_card _gap">
 			<div class="_title">Messaging window</div>
 			<div class="_content">
 				<MkButton @click="messagingWindowOpen()">open</MkButton>
diff --git a/src/client/pages/timeline.vue b/src/client/pages/timeline.vue
index 947efad2b7..6f527dce6a 100644
--- a/src/client/pages/timeline.vue
+++ b/src/client/pages/timeline.vue
@@ -2,9 +2,10 @@
 <div class="cmuxhskf _root" v-hotkey.global="keymap">
 	<div class="new" v-if="queue > 0" :style="{ width: width + 'px' }"><button class="_buttonPrimary" @click="top()">{{ $ts.newNoteRecived }}</button></div>
 
-	<XTutorial v-if="$store.reactiveState.tutorial.value != -1" class="tutorial _block _isolated"/>
-	<XPostForm v-if="$store.reactiveState.showFixedPostForm.value" class="post-form _block _isolated" fixed/>
-	<div class="tabs _block _vMargin">
+	<div class="_magnet"></div>
+	<XTutorial v-if="$store.reactiveState.tutorial.value != -1" class="tutorial _block _gap"/>
+	<XPostForm v-if="$store.reactiveState.showFixedPostForm.value" class="post-form _block _gap" fixed/>
+	<div class="tabs _block _gap">
 		<div class="left">
 			<button class="_button tab" @click="() => { src = 'home'; saveSrc(); }" :class="{ active: src === 'home' }" v-tooltip="$ts._timelines.home"><Fa :icon="faHome"/></button>
 			<button class="_button tab" @click="() => { src = 'local'; saveSrc(); }" :class="{ active: src === 'local' }" v-tooltip="$ts._timelines.local" v-if="isLocalTimelineAvailable"><Fa :icon="faComments"/></button>
@@ -21,7 +22,7 @@
 		</div>
 	</div>
 	<XTimeline ref="tl"
-		class="_vMargin"
+		class="_gap"
 		:key="src === 'list' ? `list:${list.id}` : src === 'antenna' ? `antenna:${antenna.id}` : src === 'channel' ? `channel:${channel.id}` : src"
 		:src="src"
 		:list="list ? list.id : null"
diff --git a/src/client/pages/user/clips.vue b/src/client/pages/user/clips.vue
index cf713d6daa..9c77bbad47 100644
--- a/src/client/pages/user/clips.vue
+++ b/src/client/pages/user/clips.vue
@@ -1,7 +1,7 @@
 <template>
 <div>
 	<MkPagination :pagination="pagination" #default="{items}" ref="list">
-		<MkA v-for="item in items" :key="item.id" :to="`/clips/${item.id}`" class="item _panel _vMargin">
+		<MkA v-for="item in items" :key="item.id" :to="`/clips/${item.id}`" class="item _panel _gap">
 			<b>{{ item.name }}</b>
 			<div v-if="item.description" class="description">{{ item.description }}</div>
 		</MkA>
diff --git a/src/client/pages/user/follow-list.vue b/src/client/pages/user/follow-list.vue
index eef8409a06..1fce74ec17 100644
--- a/src/client/pages/user/follow-list.vue
+++ b/src/client/pages/user/follow-list.vue
@@ -1,7 +1,7 @@
 <template>
 <div>
-	<MkPagination :pagination="pagination" #default="{items}" class="mk-following-or-followers _content" ref="list">
-		<div class="users">
+	<MkPagination :pagination="pagination" #default="{items}" class="mk-following-or-followers" ref="list">
+		<div class="users _isolated">
 			<MkUserInfo class="user" v-for="user in items.map(x => type === 'following' ? x.followee : x.follower)" :user="user" :key="user.id"/>
 		</div>
 	</MkPagination>
diff --git a/src/client/pages/user/index.timeline.vue b/src/client/pages/user/index.timeline.vue
index 62f7f7d654..1b7a96fff6 100644
--- a/src/client/pages/user/index.timeline.vue
+++ b/src/client/pages/user/index.timeline.vue
@@ -1,6 +1,6 @@
 <template>
 <div>
-	<MkTab v-model:value="with_" class="_isolated _section">
+	<MkTab v-model:value="with_" class="_gap _section">
 		<option :value="null">{{ $ts.notes }}</option>
 		<option value="replies">{{ $ts.notesAndReplies }}</option>
 		<option value="files">{{ $ts.withFiles }}</option>
diff --git a/src/client/pages/user/index.vue b/src/client/pages/user/index.vue
index 6351014956..c0318dcb38 100644
--- a/src/client/pages/user/index.vue
+++ b/src/client/pages/user/index.vue
@@ -1,9 +1,9 @@
 <template>
 <div>
 	<div class="ftskorzw wide _section" v-if="user && narrow === false">
-		<MkRemoteCaution v-if="user.host != null" :href="user.url" class="_vMargin"/>
+		<MkRemoteCaution v-if="user.host != null" :href="user.url" class="_gap"/>
 
-		<div class="banner-container _vMargin" :style="style">
+		<div class="banner-container _gap" :style="style">
 			<div class="banner" ref="banner" :style="style"></div>
 		</div>
 		<div class="contents">
@@ -56,11 +56,11 @@
 						</dd>
 					</dl>
 				</div>
-				<XActivity :user="user" :key="user.id" class="_vMargin"/>
-				<XPhotos :user="user" :key="user.id" class="_vMargin"/>
+				<XActivity :user="user" :key="user.id" class="_gap"/>
+				<XPhotos :user="user" :key="user.id" class="_gap"/>
 			</div>
 			<div class="main">
-				<div class="nav _vMargin">
+				<div class="nav _gap">
 					<MkA :to="userPage(user)" :class="{ active: page === 'index' }" class="link">
 						<Fa :icon="faCommentAlt" class="icon"/>
 						<span>{{ $ts.notes }}</span>
@@ -79,17 +79,17 @@
 					</div>
 				</div>
 				<template v-if="page === 'index'">
-					<div v-if="user.pinnedNotes.length > 0" class="_vMargin">
-						<XNote v-for="note in user.pinnedNotes" class="note _vMargin" :note="note" @update:note="pinnedNoteUpdated(note, $event)" :key="note.id" :pinned="true"/>
+					<div v-if="user.pinnedNotes.length > 0" class="_gap">
+						<XNote v-for="note in user.pinnedNotes" class="note _gap" :note="note" @update:note="pinnedNoteUpdated(note, $event)" :key="note.id" :pinned="true"/>
 					</div>
-					<div class="_vMargin">
+					<div class="_gap">
 						<XUserTimeline :user="user"/>
 					</div>
 				</template>
-				<XFollowList v-else-if="page === 'following'" type="following" :user="user" class="_vMargin"/>
-				<XFollowList v-else-if="page === 'followers'" type="followers" :user="user" class="_vMargin"/>
-				<XClips v-else-if="page === 'clips'" :user="user" class="_vMargin"/>
-				<XPages v-else-if="page === 'pages'" :user="user" class="_vMargin"/>
+				<XFollowList v-else-if="page === 'following'" type="following" :user="user" class="_gap"/>
+				<XFollowList v-else-if="page === 'followers'" type="followers" :user="user" class="_gap"/>
+				<XClips v-else-if="page === 'clips'" :user="user" class="_gap"/>
+				<XPages v-else-if="page === 'pages'" :user="user" class="_gap"/>
 			</div>
 		</div>
 	</div>
@@ -98,10 +98,12 @@
 		<!-- <div class="punished" v-if="user.isSuspended"><Fa :icon="faExclamationTriangle" style="margin-right: 8px;"/> {{ $ts.userSuspended }}</div> -->
 		<!-- <div class="punished" v-if="user.isSilenced"><Fa :icon="faExclamationTriangle" style="margin-right: 8px;"/> {{ $ts.userSilenced }}</div> -->
 
+		<div class="_magnet"></div>
+
 		<div class="profile">
-			<MkRemoteCaution v-if="user.host != null" :href="user.url" class="_vMargin"/>
+			<MkRemoteCaution v-if="user.host != null" :href="user.url" class="_gap"/>
 
-			<div class="_vMargin _block main" :key="user.id">
+			<div class="_gap _block main" :key="user.id">
 				<div class="banner-container" :style="style">
 					<div class="banner" ref="banner" :style="style"></div>
 					<div class="fade"></div>
@@ -178,7 +180,7 @@
 		</div>
 
 		<div class="contents">
-			<div class="nav _isolated">
+			<div class="nav _gap">
 				<MkA :to="userPage(user)" :class="{ active: page === 'index' }" class="link">
 					<Fa :icon="faCommentAlt" class="icon"/>
 					<span>{{ $ts.notes }}</span>
@@ -196,7 +198,7 @@
 			<template v-if="page === 'index'">
 				<div>
 					<div v-if="user.pinnedNotes.length > 0">
-						<XNote v-for="note in user.pinnedNotes" class="note _block _isolated" :note="note" @update:note="pinnedNoteUpdated(note, $event)" :key="note.id" :pinned="true"/>
+						<XNote v-for="note in user.pinnedNotes" class="note _block _gap" :note="note" @update:note="pinnedNoteUpdated(note, $event)" :key="note.id" :pinned="true"/>
 					</div>
 					<XPhotos :user="user" :key="user.id"/>
 					<XActivity :user="user" :key="user.id"/>
@@ -205,10 +207,10 @@
 					<XUserTimeline :user="user"/>
 				</div>
 			</template>
-			<XFollowList v-else-if="page === 'following'" type="following" :user="user" class="_content _vMargin"/>
-			<XFollowList v-else-if="page === 'followers'" type="followers" :user="user" class="_content _vMargin"/>
-			<XClips v-else-if="page === 'clips'" :user="user" class="_vMargin"/>
-			<XPages v-else-if="page === 'pages'" :user="user" class="_vMargin"/>
+			<XFollowList v-else-if="page === 'following'" type="following" :user="user" class="_content _gap"/>
+			<XFollowList v-else-if="page === 'followers'" type="followers" :user="user" class="_content _gap"/>
+			<XClips v-else-if="page === 'clips'" :user="user" class="_gap"/>
+			<XPages v-else-if="page === 'pages'" :user="user" class="_gap"/>
 		</div>
 	</div>
 	<div v-else-if="error">
diff --git a/src/client/pages/user/pages.vue b/src/client/pages/user/pages.vue
index 1d2e96b351..34ac9d1ba6 100644
--- a/src/client/pages/user/pages.vue
+++ b/src/client/pages/user/pages.vue
@@ -1,7 +1,7 @@
 <template>
 <div>
 	<MkPagination :pagination="pagination" #default="{items}" ref="list">
-		<MkPagePreview v-for="page in items" :page="page" :key="page.id" class="_vMargin"/>
+		<MkPagePreview v-for="page in items" :page="page" :key="page.id" class="_gap"/>
 	</MkPagination>
 </div>
 </template>
diff --git a/src/client/style.scss b/src/client/style.scss
index f2a3682e47..8f4dbe76d2 100644
--- a/src/client/style.scss
+++ b/src/client/style.scss
@@ -249,6 +249,14 @@ hr {
 	@extend ._panel;
 }
 
+._gap {
+	margin: var(--margin) 0;
+}
+
+._magnet {
+	margin-bottom: calc(var(--margin) * -1);
+}
+
 ._isolated {
 	margin: var(--margin) 0;
 }
@@ -347,6 +355,10 @@ hr {
 		box-shadow: none;
 	}
 
+	._isolated {
+		margin: var(--margin);
+	}
+
 	@media (max-width: 500px) {
 		._root {
 			--root-margin: 0;
@@ -375,12 +387,6 @@ hr {
 	backdrop-filter: blur(15px);
 }
 
-._vMargin {
-	& + ._vMargin {
-		margin-top: var(--margin);
-	}
-}
-
 ._table {
 	> ._row {
 		display: flex;
-- 
cgit v1.2.3-freya


From 7f2356ba4bf45b1a240c557d942ef10effb092d4 Mon Sep 17 00:00:00 2001
From: syuilo <Syuilotan@yahoo.co.jp>
Date: Tue, 13 Apr 2021 12:43:19 +0900
Subject: Tweak UI

---
 src/client/components/abuse-report-window.vue      |  6 ++--
 src/client/components/notes.vue                    |  2 +-
 .../components/notification-setting-window.vue     | 24 +++++++------
 src/client/components/remote-caution.vue           |  2 +-
 src/client/components/signin.vue                   |  6 ++--
 src/client/components/signup-dialog.vue            |  6 ++--
 src/client/components/ui/container.vue             |  2 +-
 src/client/components/ui/info.vue                  |  4 +++
 src/client/pages/api-console.vue                   | 42 ++++++++++------------
 src/client/pages/messaging/index.vue               |  2 +-
 src/client/pages/timeline.vue                      |  6 ++--
 src/client/pages/user/index.vue                    | 20 ++++++++---
 src/client/style.scss                              | 26 +++++++-------
 src/client/ui/_common_/header.vue                  |  4 +--
 14 files changed, 82 insertions(+), 70 deletions(-)

(limited to 'src/client/components/notes.vue')

diff --git a/src/client/components/abuse-report-window.vue b/src/client/components/abuse-report-window.vue
index e92bd69eff..df5b594c0b 100644
--- a/src/client/components/abuse-report-window.vue
+++ b/src/client/components/abuse-report-window.vue
@@ -8,14 +8,14 @@
 			</template>
 		</I18n>
 	</template>
-	<div class="dpvffvvy">
-		<div class="_root">
+	<div class="dpvffvvy _monolithic_">
+		<div class="_section">
 			<MkTextarea v-model:value="comment">
 				<span>{{ $ts.details }}</span>
 				<template #desc>{{ $ts.fillAbuseReportDescription }}</template>
 			</MkTextarea>
 		</div>
-		<div class="_root">
+		<div class="_section">
 			<MkButton @click="send" primary full :disabled="comment.length === 0">{{ $ts.send }}</MkButton>
 		</div>
 	</div>
diff --git a/src/client/components/notes.vue b/src/client/components/notes.vue
index 33fb57c8cf..aedf11bc40 100644
--- a/src/client/components/notes.vue
+++ b/src/client/components/notes.vue
@@ -15,7 +15,7 @@
 	</div>
 
 	<XList ref="notes" :items="notes" v-slot="{ item: note }" :direction="reversed ? 'up' : 'down'" :reversed="reversed">
-		<XNote :note="note" class="_block _gap" @update:note="updated(note, $event)" :key="note._featuredId_ || note._prId_ || note.id"/>
+		<XNote :note="note" class="_block" @update:note="updated(note, $event)" :key="note._featuredId_ || note._prId_ || note.id"/>
 	</XList>
 
 	<div v-show="more && !reversed" style="margin-top: var(--margin);">
diff --git a/src/client/components/notification-setting-window.vue b/src/client/components/notification-setting-window.vue
index 3d17497971..5f16c042bf 100644
--- a/src/client/components/notification-setting-window.vue
+++ b/src/client/components/notification-setting-window.vue
@@ -9,17 +9,19 @@
 	@closed="$emit('closed')"
 >
 	<template #header>{{ $ts.notificationSetting }}</template>
-	<div v-if="showGlobalToggle" class="_root">
-		<MkSwitch v-model:value="useGlobalSetting">
-			{{ $ts.useGlobalSetting }}
-			<template #desc>{{ $ts.useGlobalSettingDesc }}</template>
-		</MkSwitch>
-	</div>
-	<div v-if="!useGlobalSetting" class="_root">
-		<MkInfo>{{ $ts.notificationSettingDesc }}</MkInfo>
-		<MkButton inline @click="disableAll">{{ $ts.disableAll }}</MkButton>
-		<MkButton inline @click="enableAll">{{ $ts.enableAll }}</MkButton>
-		<MkSwitch v-for="type in notificationTypes" :key="type" v-model:value="typesMap[type]">{{ $t(`_notification._types.${type}`) }}</MkSwitch>
+	<div class="_monolithic_">
+		<div v-if="showGlobalToggle" class="_section">
+			<MkSwitch v-model:value="useGlobalSetting">
+				{{ $ts.useGlobalSetting }}
+				<template #desc>{{ $ts.useGlobalSettingDesc }}</template>
+			</MkSwitch>
+		</div>
+		<div v-if="!useGlobalSetting" class="_section">
+			<MkInfo>{{ $ts.notificationSettingDesc }}</MkInfo>
+			<MkButton inline @click="disableAll">{{ $ts.disableAll }}</MkButton>
+			<MkButton inline @click="enableAll">{{ $ts.enableAll }}</MkButton>
+			<MkSwitch v-for="type in notificationTypes" :key="type" v-model:value="typesMap[type]">{{ $t(`_notification._types.${type}`) }}</MkSwitch>
+		</div>
 	</div>
 </XModalWindow>
 </template>
diff --git a/src/client/components/remote-caution.vue b/src/client/components/remote-caution.vue
index 98c7aaaa6e..c9c5ceea4c 100644
--- a/src/client/components/remote-caution.vue
+++ b/src/client/components/remote-caution.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="jmgmzlwq _panel"><Fa :icon="faExclamationTriangle" style="margin-right: 8px;"/>{{ $ts.remoteUserCaution }}<a :href="href" rel="nofollow noopener" target="_blank">{{ $ts.showOnRemote }}</a></div>
+<div class="jmgmzlwq _block"><Fa :icon="faExclamationTriangle" style="margin-right: 8px;"/>{{ $ts.remoteUserCaution }}<a :href="href" rel="nofollow noopener" target="_blank">{{ $ts.showOnRemote }}</a></div>
 </template>
 
 <script lang="ts">
diff --git a/src/client/components/signin.vue b/src/client/components/signin.vue
index 4497c00a50..1cd79bac1d 100755
--- a/src/client/components/signin.vue
+++ b/src/client/components/signin.vue
@@ -1,6 +1,6 @@
 <template>
-<form class="eppvobhk" :class="{ signing, totpLogin }" @submit.prevent="onSubmit">
-	<div class="auth _root">
+<form class="eppvobhk _monolithic_" :class="{ signing, totpLogin }" @submit.prevent="onSubmit">
+	<div class="auth _section">
 		<div class="avatar" :style="{ backgroundImage: user ? `url('${ user.avatarUrl }')` : null }" v-show="withAvatar"></div>
 		<div class="normal-signin" v-if="!totpLogin">
 			<MkInput v-model:value="username" type="text" pattern="^[a-zA-Z0-9_]+$" spellcheck="false" autofocus required @update:value="onUsernameChange">
@@ -38,7 +38,7 @@
 			</div>
 		</div>
 	</div>
-	<div class="social _root">
+	<div class="social _section">
 		<a class="_borderButton _gap" v-if="meta && meta.enableTwitterIntegration" :href="`${apiUrl}/signin/twitter`"><Fa :icon="faTwitter" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'Twitter' }) }}</a>
 		<a class="_borderButton _gap" v-if="meta && meta.enableGithubIntegration" :href="`${apiUrl}/signin/github`"><Fa :icon="faGithub" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'GitHub' }) }}</a>
 		<a class="_borderButton _gap" v-if="meta && meta.enableDiscordIntegration" :href="`${apiUrl}/signin/discord`"><Fa :icon="faDiscord" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'Discord' }) }}</a>
diff --git a/src/client/components/signup-dialog.vue b/src/client/components/signup-dialog.vue
index 5015b77c75..df1a525055 100644
--- a/src/client/components/signup-dialog.vue
+++ b/src/client/components/signup-dialog.vue
@@ -7,8 +7,10 @@
 >
 	<template #header>{{ $ts.signup }}</template>
 
-	<div class="_root">
-		<XSignup :auto-set="autoSet" @signup="onSignup"/>
+	<div class="_monolithic_">
+		<div class="_section">
+			<XSignup :auto-set="autoSet" @signup="onSignup"/>
+		</div>
 	</div>
 </XModalWindow>
 </template>
diff --git a/src/client/components/ui/container.vue b/src/client/components/ui/container.vue
index 19bb23f595..427421af7d 100644
--- a/src/client/components/ui/container.vue
+++ b/src/client/components/ui/container.vue
@@ -1,5 +1,5 @@
 <template>
-<div class="ukygtjoj _block _gap" :class="{ naked, hideHeader: !showHeader, scrollable, closed: !showBody }" v-size="{ max: [380] }">
+<div class="ukygtjoj _block" :class="{ naked, hideHeader: !showHeader, scrollable, closed: !showBody }" v-size="{ max: [380] }">
 	<header v-if="showHeader" ref="header">
 		<div class="title"><slot name="header"></slot></div>
 		<div class="sub">
diff --git a/src/client/components/ui/info.vue b/src/client/components/ui/info.vue
index 12b3dbcfd1..ad1b9ebb58 100644
--- a/src/client/components/ui/info.vue
+++ b/src/client/components/ui/info.vue
@@ -53,4 +53,8 @@ export default defineComponent({
 		margin-right: 4px;
 	}
 }
+
+._flat_ .fpezltsf {
+	border-radius: 0;
+}
 </style>
diff --git a/src/client/pages/api-console.vue b/src/client/pages/api-console.vue
index 7deb18afa2..669e814778 100644
--- a/src/client/pages/api-console.vue
+++ b/src/client/pages/api-console.vue
@@ -1,28 +1,24 @@
 <template>
-<div>
-	<div class="_root">
-		<div class="_block" style="padding: 24px;">
-			<MkInput v-model:value="endpoint" :datalist="endpoints" @update:value="onEndpointChange()">
-				<span>Endpoint</span>
-			</MkInput>
-			<MkTextarea v-model:value="body" code>
-				<span>Params (JSON or JSON5)</span>
-			</MkTextarea>
-			<MkSwitch v-model:value="withCredential">
-				With credential
-			</MkSwitch>
-			<MkButton primary full @click="send" :disabled="sending">
-				<template v-if="sending"><MkEllipsis/></template>
-				<template v-else><Fa :icon="faPaperPlane"/> Send</template>
-			</MkButton>
-		</div>
+<div class="_root">
+	<div class="_block" style="padding: 24px;">
+		<MkInput v-model:value="endpoint" :datalist="endpoints" @update:value="onEndpointChange()">
+			<span>Endpoint</span>
+		</MkInput>
+		<MkTextarea v-model:value="body" code>
+			<span>Params (JSON or JSON5)</span>
+		</MkTextarea>
+		<MkSwitch v-model:value="withCredential">
+			With credential
+		</MkSwitch>
+		<MkButton primary full @click="send" :disabled="sending">
+			<template v-if="sending"><MkEllipsis/></template>
+			<template v-else><Fa :icon="faPaperPlane"/> Send</template>
+		</MkButton>
 	</div>
-	<div class="_root" v-if="res">
-		<div class="_block" style="padding: 24px;">
-			<MkTextarea v-model:value="res" code readonly tall>
-				<span>Response</span>
-			</MkTextarea>
-		</div>
+	<div v-if="res" class="_block" style="padding: 24px;">
+		<MkTextarea v-model:value="res" code readonly tall>
+			<span>Response</span>
+		</MkTextarea>
 	</div>
 </div>
 </template>
diff --git a/src/client/pages/messaging/index.vue b/src/client/pages/messaging/index.vue
index 417e3903ce..e5ad6b01a5 100644
--- a/src/client/pages/messaging/index.vue
+++ b/src/client/pages/messaging/index.vue
@@ -4,7 +4,7 @@
 
 	<div class="history" v-if="messages.length > 0">
 		<MkA v-for="(message, i) in messages"
-			class="message _block _gap"
+			class="message _block"
 			:class="{ isMe: isMe(message), isRead: message.groupId ? message.reads.includes($i.id) : message.isRead }"
 			:to="message.groupId ? `/my/messaging/group/${message.groupId}` : `/my/messaging/${getAcct(isMe(message) ? message.recipient : message.user)}`"
 			:data-index="i"
diff --git a/src/client/pages/timeline.vue b/src/client/pages/timeline.vue
index 6f527dce6a..751137c942 100644
--- a/src/client/pages/timeline.vue
+++ b/src/client/pages/timeline.vue
@@ -3,9 +3,9 @@
 	<div class="new" v-if="queue > 0" :style="{ width: width + 'px' }"><button class="_buttonPrimary" @click="top()">{{ $ts.newNoteRecived }}</button></div>
 
 	<div class="_magnet"></div>
-	<XTutorial v-if="$store.reactiveState.tutorial.value != -1" class="tutorial _block _gap"/>
-	<XPostForm v-if="$store.reactiveState.showFixedPostForm.value" class="post-form _block _gap" fixed/>
-	<div class="tabs _block _gap">
+	<XTutorial v-if="$store.reactiveState.tutorial.value != -1" class="tutorial _block"/>
+	<XPostForm v-if="$store.reactiveState.showFixedPostForm.value" class="post-form _block" fixed/>
+	<div class="tabs _block">
 		<div class="left">
 			<button class="_button tab" @click="() => { src = 'home'; saveSrc(); }" :class="{ active: src === 'home' }" v-tooltip="$ts._timelines.home"><Fa :icon="faHome"/></button>
 			<button class="_button tab" @click="() => { src = 'local'; saveSrc(); }" :class="{ active: src === 'local' }" v-tooltip="$ts._timelines.local" v-if="isLocalTimelineAvailable"><Fa :icon="faComments"/></button>
diff --git a/src/client/pages/user/index.vue b/src/client/pages/user/index.vue
index 55fb2198ea..58f800d186 100644
--- a/src/client/pages/user/index.vue
+++ b/src/client/pages/user/index.vue
@@ -98,12 +98,10 @@
 		<!-- <div class="punished" v-if="user.isSuspended"><Fa :icon="faExclamationTriangle" style="margin-right: 8px;"/> {{ $ts.userSuspended }}</div> -->
 		<!-- <div class="punished" v-if="user.isSilenced"><Fa :icon="faExclamationTriangle" style="margin-right: 8px;"/> {{ $ts.userSilenced }}</div> -->
 
-		<div class="_magnet"></div>
-
 		<div class="profile">
-			<MkRemoteCaution v-if="user.host != null" :href="user.url" class="_gap"/>
+			<MkRemoteCaution v-if="user.host != null" :href="user.url" class="warn"/>
 
-			<div class="_gap _block main" :key="user.id">
+			<div class="_block main" :key="user.id">
 				<div class="banner-container" :style="style">
 					<div class="banner" ref="banner" :style="style"></div>
 					<div class="fade"></div>
@@ -198,7 +196,7 @@
 			<template v-if="page === 'index'">
 				<div>
 					<div v-if="user.pinnedNotes.length > 0">
-						<XNote v-for="note in user.pinnedNotes" class="note _block _gap" :note="note" @update:note="pinnedNoteUpdated(note, $event)" :key="note.id" :pinned="true"/>
+						<XNote v-for="note in user.pinnedNotes" class="note _block" :note="note" @update:note="pinnedNoteUpdated(note, $event)" :key="note.id" :pinned="true"/>
 					</div>
 					<XPhotos :user="user" :key="user.id"/>
 					<XActivity :user="user" :key="user.id"/>
@@ -845,4 +843,16 @@ export default defineComponent({
 		}
 	}
 }
+
+._flat_ .ftskorzw.narrow {
+	> .profile {
+		> .warn {
+			margin: 0;
+		}
+
+		> .main {
+			margin-top: 0;
+		}
+	}
+}
 </style>
diff --git a/src/client/style.scss b/src/client/style.scss
index a86a2cbffe..b11c3103cd 100644
--- a/src/client/style.scss
+++ b/src/client/style.scss
@@ -246,9 +246,6 @@ hr {
 
 ._block {
 	@extend ._panel;
-}
-
-._gap {
 	margin: var(--margin) 0;
 }
 
@@ -256,7 +253,7 @@ hr {
 	margin-bottom: calc(var(--margin) * -1);
 }
 
-._isolated {
+._gap {
 	margin: var(--margin) 0;
 }
 
@@ -333,20 +330,21 @@ hr {
 	margin: var(--root-margin, 32px) auto;
 	max-width: min(var(--baseContentWidth), calc(100% - (var(--root-margin, 32px) * 2)));
 
-	._hr {
-		margin: var(--margin) calc(var(--root-margin, 32px) * -1);
-		border-top: solid 0.5px var(--divider);
-	}
-
 	@media (max-width: 500px) {
 		--root-margin: 10px;
 	}
+}
 
-	& + ._root:not(:empty) {
-		&:before {
-			content: "";
-			display: block;
-			margin: var(--root-margin) calc(var(--root-margin, 32px) * -1);
+._monolithic_ {
+	._section {
+		box-sizing: border-box;
+		padding: var(--root-margin, 32px);
+	
+		@media (max-width: 500px) {
+			--root-margin: 10px;
+		}
+	
+		& + ._section:not(:empty) {
 			border-top: solid 0.5px var(--divider);
 		}
 	}
diff --git a/src/client/ui/_common_/header.vue b/src/client/ui/_common_/header.vue
index 347c60f021..a60e1df73f 100644
--- a/src/client/ui/_common_/header.vue
+++ b/src/client/ui/_common_/header.vue
@@ -8,8 +8,8 @@
 			<div class="title">
 				<Fa v-if="info.icon" :icon="info.icon" :key="info.icon" class="icon"/>
 				<MkAvatar v-else-if="info.avatar" class="avatar" :user="info.avatar" :disable-preview="true"/>
-				<span v-if="info.title" class="text">{{ info.title }}</span>
-				<MkUserName v-else-if="info.userName" :user="info.userName" :nowrap="false" class="text"/>
+				<MkUserName v-if="info.userName" :user="info.userName" :nowrap="false" class="text"/>
+				<span v-else-if="info.title" class="text">{{ info.title }}</span>
 			</div>
 		</div>
 		<div class="buttons">
-- 
cgit v1.2.3-freya

