.shCard { overflow: hidden; border: 1px solid var(--border); border-radius: var(--card-radius); background: var(--surface); color: var(--text-normal); box-shadow: var(--shadow-soft); } .shCardHeader, .shCardContent, .shCardFooter { padding: 14px; } .shCardHeader { display: flex; min-height: 54px; align-items: center; justify-content: space-between; gap: 12px; border-bottom: 1px solid var(--border-subtle); } .shCardTitle { color: var(--text-strong); font-size: var(--font-size-lg); font-weight: var(--font-weight-semibold); line-height: 1.3; } .shCardDescription, .mutedText { color: var(--text-soft); font-size: var(--font-size-sm); } .shFormItem { display: flex; min-width: 0; flex-direction: column; gap: 8px; color: var(--text-normal); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); } .shFormItemLabel { color: var(--text-soft); } .shFormItemDescription { color: var(--text-soft); font-size: var(--font-size-xs); font-weight: var(--font-weight-normal); line-height: 1.45; } .shButton { display: inline-flex; align-items: center; justify-content: center; gap: 8px; border: 1px solid transparent; border-radius: var(--control-radius); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); line-height: 1; white-space: nowrap; transition: background 0.16s ease, color 0.16s ease, box-shadow 0.16s ease; } .shButtonXs { min-height: 28px; padding: 0 9px; font-size: var(--font-size-xs); } .shButtonSm { min-height: 32px; padding: 0 12px; font-size: var(--font-size-sm); } .shButtonMd, .shButtonDefaultSize { min-height: 36px; padding: 0 14px; font-size: var(--font-size-sm); } .shButtonLg { min-height: 40px; padding: 0 16px; font-size: var(--font-size-base); } .shButtonXl { min-height: 44px; padding: 0 18px; font-size: var(--font-size-md); } .shButtonIcon { width: var(--control-height); min-height: var(--control-height); padding: 0; } .shButtonDefault { background: var(--primary); color: var(--primary-foreground); box-shadow: 0 1px 2px rgba(16, 24, 40, 0.06); } .shButtonDefault:hover { background: #27272a; } .shButtonSecondary { background: var(--secondary); color: var(--secondary-foreground); box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04); } .shButtonOutline { border-color: var(--input); background: #fff; color: var(--text-normal); box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04); } .shButtonOutline:hover, .shButtonSecondary:hover { background: var(--accent); color: var(--accent-foreground); } .shButtonGhost { background: transparent; color: var(--text-normal); } .shButtonGhost:hover { background: var(--accent); color: var(--accent-foreground); } .shButtonDestructive { background: var(--destructive); color: var(--destructive-foreground); box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04); } .shSwitch { position: relative; display: inline-flex; width: 36px; height: 20px; flex: 0 0 auto; align-items: center; border: 1px solid transparent; border-radius: 999px; background: #d1d5db; box-shadow: inset 0 1px 2px rgba(16, 24, 40, 0.12); cursor: pointer; transition: background 0.16s ease, border-color 0.16s ease, box-shadow 0.16s ease; } .shSwitch[data-state="checked"] { background: #059669; box-shadow: inset 0 1px 2px rgba(6, 95, 70, 0.2), 0 0 0 3px rgba(16, 185, 129, 0.12); } .shSwitch:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; } .shSwitch:disabled { cursor: not-allowed; opacity: 0.55; } .shSwitchThumb { display: block; width: 16px; height: 16px; margin-left: 2px; border-radius: 999px; background: #fff; box-shadow: 0 1px 3px rgba(16, 24, 40, 0.24); transition: transform 0.16s ease; } .shSwitch[data-state="checked"] .shSwitchThumb { transform: translateX(16px); } .screenMessageViewport { position: fixed; z-index: 100; top: 18px; left: 50%; width: min(520px, calc(100vw - 32px)); transform: translateX(-50%); pointer-events: none; } .screenMessage { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 10px; min-height: 44px; padding: 8px 8px 8px 12px; border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--surface); color: var(--text-normal); box-shadow: var(--shadow-dialog); pointer-events: auto; } .screenMessageIcon { display: inline-flex; color: var(--text-soft); } .screenMessageText { min-width: 0; font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); } .screenMessageClose { width: 28px; min-height: 28px; } .screenMessage-error { border-color: #fecaca; background: #fef2f2; color: #991b1b; } .screenMessage-error .screenMessageIcon { color: #dc2626; } .screenMessage-success { border-color: #bbf7d0; background: #f0fdf4; color: #166534; } .screenMessage-success .screenMessageIcon { color: #16a34a; } .confirmDialogBackdrop { position: fixed; z-index: 110; inset: 0; display: grid; place-items: center; padding: 24px; background: rgba(16, 19, 24, 0.36); } .confirmDialog { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 14px; width: min(420px, 100%); padding: 18px; border: 1px solid var(--border); border-radius: var(--radius-xl); background: var(--surface); color: var(--text-normal); box-shadow: var(--shadow-dialog); } .confirmDialogIcon { display: grid; width: 36px; height: 36px; place-items: center; border-radius: 999px; background: #fef2f2; color: var(--destructive); } .confirmDialogBody { min-width: 0; } .confirmDialogBody strong { display: block; color: var(--text-strong); font-size: var(--font-size-lg); font-weight: var(--font-weight-semibold); line-height: 1.35; } .confirmDialogBody p { margin-top: 6px; color: var(--text-soft); font-size: var(--font-size-sm); line-height: 1.55; } .confirmDialogActions { grid-column: 1 / -1; display: flex; justify-content: flex-end; gap: 10px; padding-top: 2px; } .formDialogBackdrop { position: fixed; z-index: 60; inset: 0; display: grid; place-items: center; padding: 24px; background: rgba(16, 19, 24, 0.36); } .formDialog { display: grid; width: min(720px, 100%); max-height: min(760px, calc(100vh - 48px)); grid-template-rows: auto minmax(0, 1fr); overflow: hidden; border: 1px solid var(--border); border-radius: var(--radius-xl); background: var(--surface); box-shadow: var(--shadow-dialog); } .formDialogHeader { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 16px 18px; border-bottom: 1px solid var(--border); } .formDialogHeader span { display: block; color: var(--text-soft); font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); text-transform: uppercase; } .formDialogHeader strong { display: block; margin-top: 3px; color: var(--text-strong); font-size: var(--font-size-lg); font-weight: var(--font-weight-semibold); } .formDialogForm { display: grid; min-height: 0; grid-template-rows: minmax(0, 1fr) auto; } .formDialogBody { display: grid; min-height: 0; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; overflow: auto; padding: 16px 18px; } .formDialogActions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px; padding: 14px 18px; border-top: 1px solid var(--border); background: var(--surface); box-shadow: 0 -1px 0 rgba(16, 24, 40, 0.02); } .shPopoverContent { z-index: 80; overflow: hidden; border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--popover); color: var(--popover-foreground); box-shadow: var(--shadow-dialog); } .shInput, .shTextarea { width: 100%; border: 1px solid var(--input); border-radius: var(--control-radius); background: transparent; color: var(--text-normal); font-size: var(--font-size-base); font-weight: var(--font-weight-regular); line-height: 1.25; box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04); outline: none; transition: border-color 0.16s ease, box-shadow 0.16s ease, color 0.16s ease; } .shInput { padding: 0 11px; } .shSelect { appearance: none; padding-right: 30px; background-image: linear-gradient(45deg, transparent 50%, var(--text-soft) 50%), linear-gradient(135deg, var(--text-soft) 50%, transparent 50%); background-position: calc(100% - 16px) 50%, calc(100% - 11px) 50%; background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; } .shTextarea { padding: 10px 11px; resize: vertical; } .shControlXs { min-height: 28px; padding: 0 8px; font-size: var(--font-size-xs); } .shControlSm { min-height: 32px; padding: 0 9px; font-size: var(--font-size-sm); } .shControlMd { min-height: 36px; padding: 0 10px; font-size: var(--font-size-base); } .shControlLg { min-height: 40px; padding: 0 11px; font-size: var(--font-size-base); } .shControlXl { min-height: 44px; padding: 0 13px; font-size: var(--font-size-md); } .shSelect.shControlXs { padding-right: 26px; } .shSelect.shControlSm { padding-right: 28px; } .shSelect.shControlMd { padding-right: 30px; } .shSelect.shControlLg { padding-right: 32px; } .shSelect.shControlXl { padding-right: 34px; } .shTextareaXs { min-height: 64px; padding: 8px 9px; font-size: var(--font-size-xs); } .shTextareaSm { min-height: 78px; padding: 9px 10px; font-size: var(--font-size-sm); } .shTextareaMd { min-height: 96px; padding: 10px 11px; font-size: var(--font-size-base); } .shTextareaLg { min-height: 112px; padding: 11px 12px; font-size: var(--font-size-base); } .shTextareaXl { min-height: 128px; padding: 12px 14px; font-size: var(--font-size-md); } .shInput:focus-visible, .shTextarea:focus-visible, .tokenInline input:focus-visible { box-shadow: 0 0 0 1px var(--ring); } .shButton:focus-visible { outline: none; box-shadow: 0 0 0 1px var(--ring); } .shInput::placeholder, .shTextarea::placeholder { color: var(--muted-foreground); font-weight: var(--font-weight-regular); } .shInput:disabled, .shTextarea:disabled { cursor: not-allowed; opacity: 0.5; } .shLabel, .formGrid { display: grid; gap: 8px; } .shLabel { color: var(--text-soft); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); } .formGrid { gap: 12px; } .formGrid.two { grid-template-columns: repeat(2, minmax(0, 1fr)); } .shTabs { display: flex; flex-wrap: wrap; gap: 6px; padding: 4px; border: 1px solid var(--border); border-radius: var(--control-radius); background: var(--surface-muted); } .shTab { display: inline-flex; min-height: 32px; align-items: center; gap: 7px; padding: 0 11px; border: 0; border-radius: calc(var(--control-radius) - 1px); background: transparent; color: var(--text-soft); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); } .shTab[data-active="true"] { background: var(--surface); color: var(--text-strong); box-shadow: var(--shadow-soft); } .shBadge { display: inline-flex; min-height: 24px; align-items: center; width: fit-content; padding: 0 8px; border: 1px solid transparent; border-radius: 999px; font-size: var(--font-size-xs); font-weight: var(--font-weight-medium); } .shBadgeDefault { background: #eef1f5; color: var(--text-normal); } .shBadgeSecondary { background: #f3f5f7; color: var(--text-soft); } .shBadgeOutline { border-color: var(--border); background: #fff; color: var(--text-normal); } .shBadgeSuccess { background: #edf7f1; color: #157a57; } .shBadgeWarning { background: #fbf4e8; color: #8a6116; } .shBadgeDestructive { background: #fff3f3; color: #b42318; } .shCalendar { padding: 10px; background: var(--surface); } .shCalendarRoot, .shCalendarMonths, .shCalendarMonth, .shCalendarWeeks { display: grid; gap: 8px; } .shCalendarCaption { position: relative; display: flex; min-height: 32px; align-items: center; justify-content: center; } .shCalendarCaptionLabel { color: var(--text-strong); font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); } .shCalendarNav { position: absolute; inset: 0; display: flex; align-items: center; justify-content: space-between; pointer-events: none; } .shCalendarNavButton { display: grid; width: 30px; height: 30px; place-items: center; border: 1px solid var(--border); border-radius: var(--control-radius); background: var(--surface); color: var(--text-normal); pointer-events: auto; } .shCalendarNavButton:hover { background: var(--accent); } .shCalendarChevronIcon { display: block; } .shCalendarGrid { border-collapse: collapse; } .shCalendarWeekdays, .shCalendarWeek { display: grid; grid-template-columns: repeat(7, 32px); gap: 4px; } .shCalendarWeekday { display: grid; height: 26px; place-items: center; color: var(--text-soft); font-size: var(--font-size-xs); font-weight: var(--font-weight-medium); } .shCalendarDay { display: grid; width: 32px; height: 32px; place-items: center; } .shCalendarDayButton { width: 32px; height: 32px; border: 0; border-radius: var(--control-radius); background: transparent; color: var(--text-normal); font-size: var(--font-size-sm); } .shCalendarDayButton:hover { background: var(--accent); } .shCalendarDayOutside .shCalendarDayButton { color: var(--text-faint); } .shCalendarDayDisabled .shCalendarDayButton { cursor: not-allowed; color: var(--text-faint); opacity: 0.45; } .shCalendarDayToday .shCalendarDayButton { border: 1px solid var(--ring); } .shCalendarDaySelected .shCalendarDayButton { background: var(--primary); color: var(--primary-foreground); } .shCalendarDayHidden { visibility: hidden; } .dateTimePickerTrigger { width: 100%; justify-content: flex-start; text-align: left; } .dateTimePickerTrigger[data-empty="true"] { color: var(--text-soft); } .dateTimePickerPopover { width: auto; } .dateTimePickerFooter { display: grid; grid-template-columns: minmax(0, 1fr) 34px; gap: 10px; align-items: end; padding: 10px; border-top: 1px solid var(--border); background: var(--surface); } .shDateRangePicker.ant-picker { min-height: 36px; padding: 0 10px; border-color: var(--input); border-radius: var(--control-radius); background: var(--surface); color: var(--text-normal); font-family: inherit; font-size: var(--font-size-base); box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04); transition: border-color 0.16s ease, box-shadow 0.16s ease; } .shDateRangePicker.ant-picker:hover, .shDateRangePicker.ant-picker-focused { border-color: var(--ring); box-shadow: 0 0 0 1px var(--ring); } .shDateRangePicker.ant-picker-disabled { background: var(--surface-muted); opacity: 0.64; } .shDateRangePicker .ant-picker-input > input { color: var(--text-normal); font-family: inherit; font-size: var(--font-size-base); font-weight: var(--font-weight-regular); } .shDateRangePicker .ant-picker-input > input::placeholder { color: var(--muted-foreground); font-weight: var(--font-weight-regular); } .shDateRangePicker .ant-picker-active-bar { background: var(--primary); } .shDateRangePicker .ant-picker-range-separator, .shDateRangePicker .ant-picker-suffix, .shDateRangePicker .ant-picker-clear { color: var(--text-soft); } .shDateRangePicker .ant-picker-clear { background: var(--surface); } .shDateRangePickerPopup { font-family: inherit; } .shDateRangePickerPopup .ant-picker-panel-container { overflow: hidden; border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--popover); color: var(--popover-foreground); box-shadow: var(--shadow-dialog); } .shDateRangePickerPopup .ant-picker-panel, .shDateRangePickerPopup .ant-picker-date-panel, .shDateRangePickerPopup .ant-picker-time-panel, .shDateRangePickerPopup .ant-picker-footer, .shDateRangePickerPopup .ant-picker-content th, .shDateRangePickerPopup .ant-picker-header { border-color: var(--border-subtle); } .shDateRangePickerPopup .ant-picker-header, .shDateRangePickerPopup .ant-picker-content th, .shDateRangePickerPopup .ant-picker-cell, .shDateRangePickerPopup .ant-picker-time-panel-column > li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner { color: var(--text-soft); font-family: inherit; font-size: var(--font-size-sm); } .shDateRangePickerPopup .ant-picker-header-view, .shDateRangePickerPopup .ant-picker-header button, .shDateRangePickerPopup .ant-picker-cell-in-view, .shDateRangePickerPopup .ant-picker-time-panel-column > li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner { color: var(--text-strong); } .shDateRangePickerPopup .ant-picker-cell-inner { border-radius: var(--control-radius); } .shDateRangePickerPopup .ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before { border-color: var(--ring); border-radius: var(--control-radius); } .shDateRangePickerPopup .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner, .shDateRangePickerPopup .ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner, .shDateRangePickerPopup .ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner { background: var(--primary); color: var(--primary-foreground); } .shDateRangePickerPopup .ant-picker-cell-in-view.ant-picker-cell-in-range::before, .shDateRangePickerPopup .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single)::before, .shDateRangePickerPopup .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single)::before { background: var(--surface-muted); } .shDateRangePickerPopup .ant-picker-cell-in-view.ant-picker-cell-range-hover::before, .shDateRangePickerPopup .ant-picker-cell-in-view.ant-picker-cell-range-hover-start::before, .shDateRangePickerPopup .ant-picker-cell-in-view.ant-picker-cell-range-hover-end::before { background: var(--accent); } .shDateRangePickerPopup .ant-picker-cell:hover .ant-picker-cell-inner, .shDateRangePickerPopup .ant-picker-time-panel-column > li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner:hover { background: var(--accent); } .shDateRangePickerPopup .ant-picker-time-panel-column > li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner { background: var(--surface-muted); font-weight: var(--font-weight-semibold); } .shDateRangePickerPopup .ant-picker-ok .ant-btn-primary { border-color: var(--primary); border-radius: var(--control-radius); background: var(--primary); color: var(--primary-foreground); box-shadow: none; } .shDateRangePickerPopup .ant-picker-now-btn { color: var(--text-normal); } .shTable { overflow: auto; } .shTableViewportCard { display: grid; max-height: var(--sh-table-viewport-height, calc(100dvh - 142px)); min-height: 0; } .shTableViewportPanel { display: flex; min-height: 0; max-height: var(--sh-table-viewport-height, calc(100dvh - 142px)); flex-direction: column; gap: var(--sh-table-viewport-gap, 14px); overflow: hidden; } .shTableViewportPanel > .formMessage { margin: 0; } .shTableViewportLayout { display: flex; min-height: 0; max-height: 100%; flex: 0 1 auto; flex-direction: column; gap: var(--sh-table-viewport-gap, 14px); overflow: hidden; } .shTableToolbar { display: grid; flex: 0 0 auto; align-items: end; gap: 12px; } .shTableSummary, .shTableFooter, .shTablePageActions { display: flex; align-items: center; gap: 10px; } .shTableFooter { flex: 0 0 auto; flex-wrap: wrap; } .shTableFooterGroup { display: flex; min-width: 0; align-items: center; gap: 10px; } .shTableSummary, .shTableFooter { justify-content: space-between; color: var(--text-soft); font-size: var(--font-size-sm); } .shTableFooter .shLabel { width: 116px; grid-template-columns: auto minmax(0, 1fr); align-items: center; } .shTablePageJump { display: flex; align-items: center; gap: 6px; } .shTableFooterGroup, .shTablePageJump, .shTablePageActions { flex-wrap: wrap; } .shTablePageJump .shInput { width: 58px; text-align: center; } .shTableViewport { flex: 0 1 auto; min-height: 0; overflow: auto; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); background: var(--surface); overscroll-behavior: contain; } .shTableViewport .shTableHeader { position: sticky; top: 0; z-index: 1; } .shTableRow { display: grid; grid-template-columns: repeat(auto-fit, minmax(118px, 1fr)); min-width: 520px; border-bottom: 1px solid var(--border-subtle); } .shTableHeader { background: var(--surface-subtle); } .shTableHead, .shTableCell { overflow: hidden; min-height: 42px; padding: 11px 12px; text-overflow: ellipsis; white-space: nowrap; } .shTableHead { color: var(--text-soft); font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); } .shTableCell { color: var(--text-normal); font-size: var(--font-size-sm); } .shTableCompact .shTableHead, .shTableCompact .shTableCell { min-height: 30px; padding: 5px 9px; font-size: var(--font-size-xs); line-height: 1.3; } .shTableCompact .shTableHead { font-weight: var(--font-weight-semibold); } .shTableCompact .shTableRow { font-size: var(--font-size-xs); } .shTableCompact .shBadge { min-height: 18px; padding: 0 6px; font-size: 0.6875rem; } .shTableCompact .shButtonSm { min-height: 24px; padding: 0 8px; font-size: var(--font-size-xs); } .shTableCompact .shButtonIcon { width: 24px; min-height: 24px; } .emptyState { display: grid; min-height: 104px; place-items: center; gap: 8px; padding: 18px; color: var(--muted-foreground); text-align: center; } .modelMeta code, .secretBox, .codeBlock, .taskPreview pre { overflow: auto; border: 1px solid var(--border); border-radius: var(--control-radius); background: var(--surface-subtle); color: var(--text-normal); font-family: "SFMono-Regular", Consolas, monospace; font-size: 0.75rem; } .modelMeta code, .secretBox { padding: 8px; } .createdApiKeyBox { display: grid; gap: 8px; } .codeBlock, .taskPreview pre { margin: 0; padding: 12px; line-height: 1.5; } @media (max-width: 860px) { .formDialogBody { grid-template-columns: 1fr; } }