* {
	box-sizing:border-box
}
html {
	scroll-behavior:smooth
}
body {
	margin:0;
	background:var(--cy-std-ui-bg);
	color:var(--cy-std-ui-text);
	font:16px/1.75 'Noto Sans SC','PingFang SC','Microsoft YaHei',sans-serif;
	-webkit-font-smoothing:antialiased
}
button,input,select,textarea {
	font:inherit;
	color:inherit
}
button,a,input,select,textarea {
	-webkit-tap-highlight-color:transparent
}
button {
	cursor:pointer
}
button,input,select,textarea {
	min-height:44px
}
button {
	border:1px solid var(--cy-std-ui-border);
	border-radius:6px;
	background:var(--cy-std-ui-panel);
	padding:8px 16px;
	line-height:1.25;
	font-weight:600;
	display:inline-flex;
	gap:8px;
	align-items:center;
	justify-content:center;
	text-decoration:none
}
button:hover {
	background:var(--cy-std-ui-hover)
}
button:active {
	transform:translateY(1px)
}
button:disabled {
	background:var(--cy-std-ui-disabled-bg);
	color:var(--cy-std-ui-disabled-text);
	cursor:not-allowed;
	transform:none
}
button.primary {
	background:var(--cy-std-ui-action);
	border-color:var(--cy-std-ui-action);
	color:var(--cy-std-ui-on-action)
}
button.primary:hover {
	background:var(--cy-std-ui-action-hover)
}
button.danger {
	color:var(--cy-std-ui-error)
}
button.ghost {
	border-color:transparent;
	background:transparent
}
button.ghost:hover {
	background:var(--cy-std-ui-hover)
}
a {
	color:var(--cy-std-ui-link);
	text-underline-offset:4px
}
button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,[tabindex]:focus-visible {
	outline:3px solid var(--cy-std-ui-focus);
	outline-offset:3px
}
.icon {
	width:22px;
	height:22px;
	fill:none;
	stroke:currentColor;
	stroke-width:1.7;
	stroke-linecap:round;
	stroke-linejoin:round;
	flex:none;
	vertical-align:middle
}
.icon-button {
	width:44px;
	padding:10px;
	flex:none
}
.global-theme {
	position:fixed;
	right:32px;
	top:20px;
	z-index:50;
	background:var(--cy-std-ui-panel)
}
.theme-icon-moon {
	display:none
}
[data-theme=light] .theme-icon-sun {
	display:none
}
[data-theme=light] .theme-icon-moon {
	display:block
}
.skip {
	position:fixed;
	z-index:1000;
	left:16px;
	top:-100px;
	padding:8px;
	background:var(--cy-std-ui-panel)
}
.skip:focus {
	top:8px
}
.muted {
	color:var(--cy-std-ui-text-secondary)
}
.caption {
	font-size:12px;
	color:var(--cy-std-ui-text-secondary)
}
.support {
	color:var(--cy-std-ui-support-brand)
}
.initial {
	padding:15vh 24px;
	text-align:center
}
.initial h1 {
	font-size:40px
}
.auth-wrap {
	min-height:100svh;
	display:grid;
	place-items:center;
	padding:90px 20px 40px
}
.auth {
	width:min(100%,480px);
	padding:40px;
	background:var(--cy-std-ui-panel);
	border:1px solid var(--cy-std-ui-divider);
	border-radius:12px
}
.auth h1 {
	font-size:36px;
	line-height:1.3;
	margin:24px 0 8px
}
.auth p {
	margin:8px 0 24px
}
.auth form {
	display:grid;
	gap:20px
}
.auth .primary {
	width:100%
}
.auth small {
	font-size:12px
}
.field {
	display:grid;
	gap:7px;
	min-width:0
}
.field label {
	font-size:14px;
	font-weight:500
}
input,textarea,select {
	width:100%;
	background:var(--cy-std-ui-input);
	border:1px solid var(--cy-std-ui-border);
	border-radius:6px;
	padding:10px 12px;
	min-width:0
}
input::placeholder,textarea::placeholder {
	color:var(--cy-std-ui-placeholder)
}
textarea {
	resize:vertical;
	min-height:90px
}
input[type=checkbox] {
	width:20px;
	min-height:20px;
	height:20px;
	margin:0;
	accent-color:var(--cy-std-ui-action);
	flex:none
}
.check-label {
	display:flex;
	gap:10px;
	align-items:center;
	min-height:44px;
	font-size:14px
}
.error {
	padding:12px 16px;
	color:var(--cy-std-ui-error);
	background:var(--cy-std-ui-error-bg);
	border-radius:6px
}
.notice {
	padding:16px 20px;
	border-radius:8px;
	background:var(--cy-std-ui-info-bg);
	color:var(--cy-std-ui-info);
	font-size:14px
}
.notice.warning {
	background:var(--cy-std-ui-warning-bg);
	color:var(--cy-std-ui-warning)
}
.side {
	position:fixed;
	inset:0 auto 0 0;
	width:232px;
	display:flex;
	flex-direction:column;
	background:var(--cy-std-ui-panel);
	border-right:1px solid var(--cy-std-ui-divider);
	padding:24px 12px;
	z-index:40
}
.brand {
	display:flex;
	gap:12px;
	align-items:center;
	padding:0 12px 30px
}
.brand img {
	width:32px;
	height:32px
}
.brand strong {
	font-size:18px;
	line-height:1.4;
	display:block
}
.brand small {
	display:block;
	font-size:12px;
	color:var(--cy-std-ui-text-secondary)
}
.nav-label {
	font-size:12px;
	color:var(--cy-std-ui-text-secondary);
	margin:12px
}
.nav-item {
	display:flex;
	align-items:center;
	gap:12px;
	width:100%;
	text-align:left;
	justify-content:flex-start;
	border:0;
	background:transparent;
	min-height:48px;
	margin-bottom:8px;
	padding:10px 16px;
	font-weight:400
}
.nav-item.on {
	background:var(--cy-std-ui-selected);
	color:var(--cy-std-ui-on-selected);
	font-weight:600;
	box-shadow:inset 3px 0 0 var(--cy-std-ui-brand)
}
.side-foot {
	margin-top:auto;
	border-top:1px solid var(--cy-std-ui-divider);
	padding-top:12px
}
.identity {
	padding:12px 16px;
	display:grid;
	gap:0;
	text-align:left;
	width:100%;
	background:transparent;
	border:0
}
.identity small {
	color:var(--cy-std-ui-text-secondary);
	font-size:12px
}
.workspace {
	margin-left:232px;
	min-height:100svh
}
.topbar {
	height:84px;
	background:var(--cy-std-ui-panel);
	border-bottom:1px solid var(--cy-std-ui-divider);
	display:flex;
	align-items:center;
	gap:24px;
	padding:16px 92px 16px 32px;
	position:sticky;
	top:0;
	z-index:30
}
.topbar .crumb {
	white-space:nowrap;
	color:var(--cy-std-ui-text-secondary);
	font-size:14px
}
.search {
	position:relative;
	max-width:400px;
	margin-left:auto;
	flex:1
}
.search input {
	padding-left:42px;
	background:var(--cy-std-ui-bg);
	font-size:14px
}
.search .icon {
	position:absolute;
	left:12px;
	top:11px;
	color:var(--cy-std-ui-text-secondary)
}
.notify-dot {
	position:relative
}
.notify-dot[data-count]:not([data-count="0"])::after {
	content:'';
	width:7px;
	height:7px;
	background:var(--cy-std-ui-brand);
	position:absolute;
	top:7px;
	right:7px;
	border-radius:50%
}
.main-inner {
	padding:40px 32px 24px;
	max-width:1264px;
	margin:auto
}
h1 {
	font-size:48px;
	line-height:1.25;
	margin:0 0 16px;
	font-weight:600
}
h2 {
	font-size:24px;
	line-height:1.4;
	margin:0;
	font-weight:600
}
h3 {
	font-size:20px;
	line-height:1.5;
	margin:0;
	font-weight:600
}
p {
	margin:8px 0 16px
}
.page-heading {
	display:flex;
	justify-content:space-between;
	gap:24px;
	align-items:center;
	margin-bottom:32px
}
.page-heading p {
	margin:0;
	color:var(--cy-std-ui-text-secondary)
}
.actions {
	display:flex;
	align-items:center;
	gap:12px;
	flex-wrap:wrap
}
.stats {
	display:grid;
	grid-template-columns:repeat(3,minmax(0,1fr));
	gap:24px;
	margin-bottom:24px
}
.stat {
	padding:20px
}
.stat span {
	display:block;
	color:var(--cy-std-ui-text-secondary);
	font-size:14px
}
.stat strong {
	font-size:32px;
	font-weight:600;
	margin-right:14px;
	font-variant-numeric:tabular-nums
}
.stat small {
	color:var(--cy-std-ui-text-secondary);
	font-size:12px
}
.panel {
	background:var(--cy-std-ui-panel);
	border:1px solid var(--cy-std-ui-divider);
	border-radius:12px
}
.panel-head {
	display:flex;
	justify-content:space-between;
	align-items:center;
	gap:12px;
	padding:24px 24px 8px
}
.panel-body {
	padding:16px 24px 24px
}
.two-col {
	display:grid;
	grid-template-columns:minmax(0,2fr) minmax(0,1fr);
	gap:24px;
	margin-bottom:24px
}
.equal-col {
	display:grid;
	grid-template-columns:1fr 1fr;
	gap:24px
}
.row {
	display:flex;
	align-items:center;
	gap:16px;
	padding:18px 0;
	border-bottom:1px solid var(--cy-std-ui-divider);
	min-width:0
}
.row:last-child {
	border-bottom:0
}
.row-main {
	min-width:0;
	flex:1
}
.row-main strong {
	font-weight:500;
	display:block;
	overflow-wrap:anywhere
}
.row-main small {
	display:block;
	font-size:12px;
	color:var(--cy-std-ui-text-secondary);
	margin-top:4px
}
.row .icon-button {
	border-color:transparent
}
.badge {
	display:inline-flex;
	align-items:center;
	padding:3px 10px;
	border-radius:6px;
	font-size:12px;
	line-height:1.6;
	white-space:nowrap;
	font-weight:500
}
.badge.support {
	color:var(--cy-std-ui-support-brand);
	background:var(--support-bg)
}
.badge.info {
	color:var(--cy-std-ui-info);
	background:var(--cy-std-ui-info-bg)
}
.badge.warning {
	color:var(--cy-std-ui-warning);
	background:var(--cy-std-ui-warning-bg)
}
.badge.success {
	color:var(--cy-std-ui-success);
	background:var(--cy-std-ui-success-bg)
}
.badge.error {
	color:var(--cy-std-ui-error);
	background:var(--cy-std-ui-error-bg)
}
.filters {
	display:flex;
	flex-wrap:wrap;
	gap:10px;
	margin-bottom:24px;
	align-items:center
}
.filters button {
	font-size:14px;
	font-weight:500
}
.filters .on {
	background:var(--cy-std-ui-selected);
	color:var(--cy-std-ui-brand);
	border-color:transparent
}
.filters .push {
	margin-left:auto
}
.filters select {
	width:auto;
	max-width:220px
}
.app-grid {
	display:grid;
	grid-template-columns:repeat(3,minmax(0,1fr));
	gap:24px
}
.app-card {
	padding:20px;
	display:flex;
	flex-direction:column;
	gap:16px;
	min-width:0
}
.app-card-top {
	display:flex;
	gap:14px;
	align-items:center
}
.app-identity {
	min-width:0;
	flex:1
}
.app-card h2 {
	font-size:20px;
	overflow-wrap:anywhere;
	line-height:1.45;
	margin-bottom:5px
}
.app-icon {
	height:44px;
	width:44px;
	display:grid;
	place-items:center;
	background:var(--cy-std-ui-selected);
	color:var(--cy-std-ui-brand);
	border-radius:8px;
	flex:none
}
.app-card p {
	font-size:14px;
	color:var(--cy-std-ui-text-secondary);
	margin:0;
	flex:1
}
.app-card-footer {
	display:flex;
	align-items:center;
	justify-content:space-between;
	border-top:1px solid var(--cy-std-ui-divider);
	padding-top:12px;
	gap:8px
}
.app-card .star {
	padding:8px;
	width:36px;
	min-height:36px;
	background:transparent;
	border-color:transparent;
	color:var(--cy-std-ui-text-secondary)
}
.app-card .star.on {
	color:var(--cy-std-ui-brand)
}
.app-card-footer button {
	padding:8px;
	border:0;
	background:transparent;
	color:var(--cy-std-ui-brand)
}
.empty {
	padding:42px 24px;
	text-align:center;
	color:var(--cy-std-ui-text-secondary)
}
.empty h2 {
	font-size:20px;
	color:var(--cy-std-ui-text);
	margin-bottom:12px
}
.empty .icon {
	width:32px;
	height:32px;
	margin-bottom:8px
}
.empty button {
	margin-top:12px
}
.table-wrap {
	overflow:auto
}
.table {
	border-collapse:collapse;
	width:100%;
	font-size:14px
}
.table th,.table td {
	padding:18px 20px;
	text-align:left;
	border-bottom:1px solid var(--cy-std-ui-divider);
	white-space:nowrap
}
.table th {
	font-weight:500;
	color:var(--cy-std-ui-text-secondary)
}
.table td:first-child {
	white-space:normal;
	min-width:150px
}
.table tr:last-child td {
	border-bottom:0
}
.table td small {
	display:block;
	color:var(--cy-std-ui-text-secondary);
	font-size:12px
}
.subnav {
	margin-bottom:24px;
	display:flex;
	flex-wrap:wrap;
	gap:8px
}
.subnav button {
	font-size:14px
}
.order-list {
	padding:8px 24px
}
.order-row {
	display:flex;
	align-items:center;
	gap:16px;
	padding:12px 0;
	border-bottom:1px solid var(--cy-std-ui-divider)
}
.order-row:last-child {
	border-bottom:0
}
.order-row[draggable=true] {
	cursor:grab
}
.order-row.dragging {
	opacity:.5
}
.order-row .rank {
	font-size:14px;
	color:var(--cy-std-ui-text-secondary);
	width:26px;
	font-variant-numeric:tabular-nums
}
.order-row .name {
	flex:1;
	min-width:0;
	overflow-wrap:anywhere
}
.order-row .actions {
	flex-wrap:nowrap;
	gap:8px
}
.sticky-actions {
	display:flex;
	justify-content:flex-end;
	gap:12px;
	position:sticky;
	bottom:0;
	padding:20px 0;
	background:var(--cy-std-ui-bg);
	z-index:15
}
.session-card {
	padding:20px;
	margin:16px 0
}
.session-card p {
	font-size:14px;
	margin:8px 0;
	color:var(--cy-std-ui-text-secondary)
}
.mobile-nav,.mobile-menu {
	display:none
}
.footer {
	display:flex;
	justify-content:space-between;
	gap:16px;
	color:var(--cy-std-ui-text-secondary);
	font-size:12px;
	margin-top:48px
}
.help {
	max-width:800px
}
.help section {
	padding:24px;
	margin:16px 0
}
.help h2 {
	margin-bottom:12px
}
.help p:last-child {
	margin-bottom:0
}
.skeleton {
	padding:48px;
	color:var(--cy-std-ui-text-secondary)
}
dialog {
	border:1px solid var(--cy-std-ui-border);
	border-radius:12px;
	background:var(--cy-std-ui-raised);
	color:var(--cy-std-ui-text);
	width:min(580px,calc(100% - 32px));
	padding:0;
	max-height:calc(100svh - 40px);
	box-shadow:0 24px 80px #0005
}
dialog::backdrop {
	background:#0008
}
dialog header {
	padding:24px;
	display:flex;
	align-items:center;
	justify-content:space-between;
	gap:16px;
	border-bottom:1px solid var(--cy-std-ui-divider)
}
dialog form {
	padding:24px;
	display:grid;
	gap:18px
}
dialog .form-actions {
	display:flex;
	justify-content:flex-end;
	gap:12px;
	padding-top:8px
}
.permission-grid {
	display:grid;
	grid-template-columns:1fr 1fr;
	gap:4px 16px
}
.diff {
	font-size:14px;
	padding:12px;
	background:var(--cy-std-ui-info-bg);
	color:var(--cy-std-ui-info);
	border-radius:6px
}
.token-output {
	word-break:break-all;
	display:block;
	padding:14px;
	background:var(--cy-std-ui-bg);
	font-family:monospace;
	font-size:14px
}
.toast-error {
	background:var(--cy-std-ui-error-bg)!important;
	color:var(--cy-std-ui-error)!important
}
#toast {
	position:fixed;
	z-index:100;
	right:24px;
	bottom:24px;
	padding:16px 24px;
	max-width:min(540px,calc(100vw - 32px));
	border:1px solid var(--cy-std-ui-border);
	border-radius:8px;
	box-shadow:0 8px 30px #0003;
	background:var(--cy-std-ui-panel);
	color:var(--cy-std-ui-text)
}
[hidden] {
	display:none!important
}
.dirty-marker {
	font-size:14px;
	color:var(--cy-std-ui-warning)
}
.row.completed .row-main strong {
	text-decoration:line-through;
	color:var(--cy-std-ui-text-secondary)
}
.toolbar-search {
	max-width:340px
}
.full-width {
	width:100%
}
@media(min-width:768px) and (max-width:1199px) {
	.side {
		width:200px
	}
	.workspace {
		margin-left:200px
	}
	.brand {
		padding-inline:8px;
		gap:8px
	}
	.brand strong {
		font-size:16px
	}
	.topbar {
		gap:16px;
		padding-left:24px
	}
	.main-inner {
		padding:32px 24px
	}
	.two-col {
		grid-template-columns:1fr
	}
	.app-grid {
		grid-template-columns:repeat(2,minmax(0,1fr))
	}
	.stats {
		gap:16px
	}
	.app-card {
		padding:16px
	}
	.page-heading {
		align-items:flex-start
	}
	.page-heading .actions {
		max-width:250px
	}
}
@media(max-width:767px) {
	h1 {
		font-size:32px;
		margin-bottom:12px
	}
	h2 {
		font-size:22px
	}
	.global-theme {
		right:16px;
		top:10px
	}
	.side {
		display:none;
		width:260px;
		bottom:80px
	}
	.side.open {
		display:flex;
		box-shadow:0 0 0 100vmax #0007
	}
	.workspace {
		margin-left:0
	}
	.topbar {
		height:64px;
		padding:10px 76px 10px 20px;
		gap:12px
	}
	.topbar .search {
		display:none
	}
	.topbar .crumb {
		flex:1
	}
	.topbar .icon-button {
		border:0;
		background:transparent
	}
	.mobile-menu {
		display:inline-flex
	}
	.main-inner {
		padding:28px 20px 100px
	}
	.page-heading {
		display:block;
		margin-bottom:24px
	}
	.page-heading .actions {
		margin-top:20px
	}
	.page-heading .actions button {
		flex:1
	}
	.page-heading p {
		font-size:14px
	}
	.stats {
		grid-template-columns:1fr 1fr;
		gap:12px
	}
	.stat {
		padding:16px
	}
	.stat:last-child {
		display:none
	}
	.stat small {
		display:block
	}
	.two-col,.equal-col {
		grid-template-columns:1fr;
		gap:20px
	}
	.panel-head {
		padding:20px 20px 8px
	}
	.panel-body {
		padding:12px 20px 20px
	}
	.app-grid {
		grid-template-columns:repeat(2,minmax(0,1fr));
		gap:12px
	}
	.app-card {
		padding:16px;
		gap:12px
	}
	.app-card-top {
		display:block;
		position:relative
	}
	.app-icon {
		width:36px;
		height:36px;
		margin-bottom:12px
	}
	.app-card h2 {
		font-size:16px
	}
	.app-card .star {
		position:absolute;
		right:-5px;
		top:-5px
	}
	.app-card .badge {
		font-size:12px;
		max-width:100%;
		white-space:normal
	}
	.app-card p {
		display:none
	}
	.app-card-footer {
		flex-wrap:wrap
	}
	.app-card-footer .badge {
		font-size:11px
	}
	.app-card-footer button {
		padding:4px;
		min-height:32px;
		font-size:14px
	}
	.filters {
		gap:8px
	}
	.filters button {
		padding:8px 12px
	}
	.filters select {
		font-size:14px;
		max-width:140px
	}
	.filters .push {
		margin-left:0
	}
	.mobile-nav {
		position:fixed;
		bottom:0;
		left:0;
		right:0;
		z-index:45;
		display:grid;
		grid-template-columns:repeat(4,1fr);
		background:var(--cy-std-ui-panel);
		border-top:1px solid var(--cy-std-ui-divider);
		padding:6px 12px max(8px,env(safe-area-inset-bottom));
		height:calc(72px + env(safe-area-inset-bottom))
	}
	.mobile-nav button {
		border:0;
		background:transparent;
		display:flex;
		flex-direction:column;
		gap:3px;
		font-size:12px;
		padding:6px;
		min-height:52px;
		color:var(--cy-std-ui-text-secondary);
		font-weight:500
	}
	.mobile-nav .on {
		color:var(--cy-std-ui-brand)
	}
	.footer {
		display:block;
		font-size:12px;
		margin-top:32px
	}
	.footer span {
		display:block
	}
	.auth {
		padding:28px 24px
	}
	.auth h1 {
		font-size:32px
	}
	.row {
		gap:12px
	}
	.row .actions {
		gap:4px
	}
	.row .badge {
		max-width:80px;
		white-space:normal
	}
	.table-wrap {
		overflow:visible
	}
	.table thead {
		display:none
	}
	.table,.table tbody,.table tr,.table td {
		display:block
	}
	.table tr {
		padding:16px 20px;
		border-bottom:1px solid var(--cy-std-ui-divider)
	}
	.table td {
		padding:5px 0;
		border:0;
		white-space:normal
	}
	.table td:first-child {
		font-weight:500
	}
	.table .actions {
		padding-top:8px
	}
	.table td small {
		font-weight:400
	}
	.order-list {
		padding:8px 16px
	}
	.order-row {
		gap:8px
	}
	.order-row .icon {
		display:none
	}
	.order-row .actions button {
		width:44px;
		padding:8px
	}
	.order-row .actions button span {
		display:none
	}
	.sticky-actions {
		bottom:72px;
		gap:8px
	}
	.sticky-actions button {
		flex:1
	}
	.permission-grid {
		grid-template-columns:1fr
	}
	dialog {
		max-height:calc(100svh - 24px)
	}
	dialog form,dialog header {
		padding:20px
	}
	.session-card {
		padding:16px
	}
	#toast {
		bottom:90px;
		right:16px
	}
	.subnav {
		gap:4px
	}
	.subnav button {
		padding:8px 10px
	}
	.notice {
		padding:14px 16px
	}
	.order-row .rank {
		width:20px
	}
	.stat strong {
		font-size:30px
	}
	.topbar .crumb {
		font-size:14px
	}
	.toolbar-search {
		max-width:100%;
		width:100%
	}
}
@media(prefers-reduced-motion:reduce) {
	* {
		scroll-behavior:auto!important;
		transition:none!important;
		animation:none!important
	}
}
.table td {
	overflow-wrap:anywhere
}
fieldset {
	min-width:0;
	border:1px solid var(--cy-std-ui-border);
	border-radius:6px;
	padding:12px 16px
}
legend {
	font-size:14px;
	padding:0 8px
}

.mfa-qr {
	display:block;
	width:200px;
	max-width:100%;
	height:auto;
	margin:16px auto;
	background:#fff;
	border-radius:12px
}
.token-output {
	overflow-wrap:anywhere;
	max-width:100%;
	white-space:pre-wrap
}
textarea.token-output {
	width:100%;
	padding:12px;
	box-sizing:border-box
}
