diff --git a/AEditor/src/components/CommandCreator.vue b/AEditor/src/components/CommandCreator.vue
index c10da0c..ef241cf 100644
--- a/AEditor/src/components/CommandCreator.vue
+++ b/AEditor/src/components/CommandCreator.vue
@@ -72,6 +72,292 @@
/>
+
+
+
+
+
+
+
+ Comando Simple: El comando tiene opciones directas (ej: /ban usuario:@user razon:texto)
+
+
+ Subcomandos: El comando tiene mĆŗltiples subcomandos (ej: /config set, /config view)
+
+
+ Grupos de Subcomandos: Subcomandos organizados en grupos (ej: /config roles add, /config channels remove)
+
+
+
+
+
+
+
+
+
+
+ Sin opciones. Los usuarios no podrƔn pasar parƔmetros al comando.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sin subcomandos. Agrega al menos uno (ej: add, remove, list).
+
+
+
+
+ š Subcomando {{ subIndex + 1 }}
+
+
+
+
+
+
+
+
+
+
+ Sin opciones para este subcomando
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sin grupos. Agrega grupos para organizar subcomandos.
+
+
+
+
+
+
+
+
+
+
+
+ Sin subcomandos
+
+
+
+
+
+
+
+
(null);
let editor: monaco.editor.IStandaloneCodeEditor | null = null;
+// Opciones para comandos slash
+interface SlashOption {
+ name: string;
+ description: string;
+ type: 'STRING' | 'INTEGER' | 'BOOLEAN' | 'USER' | 'CHANNEL' | 'ROLE' | 'NUMBER' | 'MENTIONABLE' | 'ATTACHMENT';
+ required: boolean;
+ choices?: { name: string; value: string | number }[];
+}
+
+const slashOptions = ref([]);
+
+// Estructura del comando slash
+const slashStructure = ref<'simple' | 'subcommands' | 'groups'>('simple');
+
+// Subcomandos (para estructura 'subcommands')
+interface Subcommand {
+ name: string;
+ description: string;
+ options: SlashOption[];
+}
+const subcommands = ref([]);
+
+// Grupos (para estructura 'groups')
+interface CommandGroup {
+ name: string;
+ description: string;
+ subcommands: Subcommand[];
+}
+const commandGroups = ref([]);
+
+function addOption() {
+ slashOptions.value.push({
+ name: '',
+ description: '',
+ type: 'STRING',
+ required: false,
+ choices: []
+ });
+}
+
+function removeOption(index: number) {
+ slashOptions.value.splice(index, 1);
+}
+
+function addChoice(optionIndex: number) {
+ if (!slashOptions.value[optionIndex].choices) {
+ slashOptions.value[optionIndex].choices = [];
+ }
+ slashOptions.value[optionIndex].choices!.push({
+ name: '',
+ value: ''
+ });
+}
+
+function removeChoice(optionIndex: number, choiceIndex: number) {
+ slashOptions.value[optionIndex].choices?.splice(choiceIndex, 1);
+}
+
+// Funciones para subcomandos
+function addSubcommand() {
+ subcommands.value.push({
+ name: '',
+ description: '',
+ options: []
+ });
+}
+
+function removeSubcommand(index: number) {
+ subcommands.value.splice(index, 1);
+}
+
+function addSubcommandOption(subIndex: number) {
+ subcommands.value[subIndex].options.push({
+ name: '',
+ description: '',
+ type: 'STRING',
+ required: false
+ });
+}
+
+function removeSubcommandOption(subIndex: number, optIndex: number) {
+ subcommands.value[subIndex].options.splice(optIndex, 1);
+}
+
+// Funciones para grupos
+function addGroup() {
+ commandGroups.value.push({
+ name: '',
+ description: '',
+ subcommands: []
+ });
+}
+
+function removeGroup(index: number) {
+ commandGroups.value.splice(index, 1);
+}
+
+function addGroupSubcommand(groupIndex: number) {
+ commandGroups.value[groupIndex].subcommands.push({
+ name: '',
+ description: '',
+ options: []
+ });
+}
+
+function removeGroupSubcommand(groupIndex: number, subIndex: number) {
+ commandGroups.value[groupIndex].subcommands.splice(subIndex, 1);
+}
+
+function addGroupSubcommandOption(groupIndex: number, subIndex: number) {
+ commandGroups.value[groupIndex].subcommands[subIndex].options.push({
+ name: '',
+ description: '',
+ type: 'STRING',
+ required: false
+ });
+}
+
+function removeGroupSubcommandOption(groupIndex: number, subIndex: number, optIndex: number) {
+ commandGroups.value[groupIndex].subcommands[subIndex].options.splice(optIndex, 1);
+}
+
const isValid = computed(() => {
return commandData.value.name.trim() !== '' &&
commandData.value.description.trim() !== '' &&
@@ -169,16 +577,66 @@ watch(() => aliasesInput.value, () => {
}
});
+// Watch para opciones de slash
+watch(() => slashOptions.value, () => {
+ if (editor && commandData.value.type === 'slash') {
+ const currentPosition = editor.getPosition();
+ const newCode = getDefaultCode();
+ editor.setValue(newCode);
+ if (currentPosition) {
+ editor.setPosition(currentPosition);
+ }
+ }
+}, { deep: true });
+
function getDefaultCode(): string {
if (commandData.value.type === 'slash') {
+ // Generar código de opciones para slash commands
+ let optionsCode = '';
+ if (slashOptions.value.length > 0) {
+ const optionsArray = slashOptions.value.map(opt => {
+ let optCode = ` {\n name: "${opt.name}",\n description: "${opt.description}",\n type: ApplicationCommandOptionType.${opt.type},\n required: ${opt.required}`;
+
+ // Agregar choices si existen
+ if (opt.choices && opt.choices.length > 0) {
+ const choicesStr = opt.choices
+ .filter(c => c.name && c.value)
+ .map(c => ` { name: "${c.name}", value: ${typeof c.value === 'string' ? `"${c.value}"` : c.value} }`)
+ .join(',\n');
+ if (choicesStr) {
+ optCode += `,\n choices: [\n${choicesStr}\n ]`;
+ }
+ }
+
+ optCode += '\n }';
+ return optCode;
+ }).join(',\n');
+
+ optionsCode = ` options: [\n${optionsArray}\n ],\n `;
+ }
+
return `import type { ChatInputCommandInteraction } from "discord.js";
+import { ApplicationCommandOptionType } from "discord.js";
import type Amayo from "../../core/client";
export default {
name: "${commandData.value.name}",
description: "${commandData.value.description}",
type: 'slash' as const,
- ${commandData.value.cooldown > 0 ? `cooldown: ${commandData.value.cooldown},\n ` : ''}async run(interaction: ChatInputCommandInteraction, client: Amayo) {
+ ${optionsCode}${commandData.value.cooldown > 0 ? `cooldown: ${commandData.value.cooldown},\n ` : ''}async run(interaction: ChatInputCommandInteraction, client: Amayo) {
+ // Obtener opciones${slashOptions.value.length > 0 ? '\n ' + slashOptions.value.map(opt => {
+ const varName = opt.name.replace(/-/g, '_');
+ if (opt.type === 'STRING') return `const ${varName} = interaction.options.getString("${opt.name}")${opt.required ? '!' : ''};`;
+ if (opt.type === 'INTEGER' || opt.type === 'NUMBER') return `const ${varName} = interaction.options.getNumber("${opt.name}")${opt.required ? '!' : ''};`;
+ if (opt.type === 'BOOLEAN') return `const ${varName} = interaction.options.getBoolean("${opt.name}")${opt.required ? '!' : ''};`;
+ if (opt.type === 'USER') return `const ${varName} = interaction.options.getUser("${opt.name}")${opt.required ? '!' : ''};`;
+ if (opt.type === 'CHANNEL') return `const ${varName} = interaction.options.getChannel("${opt.name}")${opt.required ? '!' : ''};`;
+ if (opt.type === 'ROLE') return `const ${varName} = interaction.options.getRole("${opt.name}")${opt.required ? '!' : ''};`;
+ if (opt.type === 'MENTIONABLE') return `const ${varName} = interaction.options.getMentionable("${opt.name}")${opt.required ? '!' : ''};`;
+ if (opt.type === 'ATTACHMENT') return `const ${varName} = interaction.options.getAttachment("${opt.name}")${opt.required ? '!' : ''};`;
+ return '';
+ }).join('\n ') : ''}
+
// Tu código aquĆ
await interaction.reply({
content: "”Comando ${commandData.value.name} ejecutado!",
@@ -626,6 +1084,229 @@ onUnmounted(() => {
color: #858585;
}
+.checkbox-label-inline {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ cursor: pointer;
+ padding: 8px 12px;
+ background-color: #2d2d30;
+ border-radius: 4px;
+ border: 1px solid #3e3e42;
+ transition: all 0.2s;
+ margin-top: 8px;
+}
+
+.checkbox-label-inline:hover {
+ border-color: #4ec9b0;
+ background-color: #353538;
+}
+
+.checkbox-label-inline input[type="checkbox"] {
+ width: 18px;
+ height: 18px;
+ cursor: pointer;
+ accent-color: #4ec9b0;
+}
+
+.checkbox-label-inline span {
+ font-size: 13px;
+ color: #ffffff;
+ font-weight: 500;
+}
+
+/* Sección de Opciones para Slash Commands */
+.options-section {
+ margin: 24px 0;
+ padding: 20px;
+ background: linear-gradient(135deg, rgba(78, 201, 176, 0.05) 0%, rgba(14, 99, 156, 0.05) 100%);
+ border: 2px solid rgba(78, 201, 176, 0.2);
+ border-radius: 8px;
+}
+
+.options-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 16px;
+}
+
+.options-header label {
+ font-size: 14px;
+ font-weight: 600;
+ color: #4ec9b0;
+ margin: 0;
+}
+
+.add-option-btn {
+ padding: 8px 16px;
+ background: linear-gradient(135deg, #4ec9b0 0%, #5fd4bf 100%);
+ color: #1e1e1e;
+ border: none;
+ border-radius: 6px;
+ cursor: pointer;
+ font-size: 12px;
+ font-weight: 600;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ box-shadow: 0 2px 4px rgba(78, 201, 176, 0.3);
+}
+
+.add-option-btn:hover {
+ background: linear-gradient(135deg, #5fd4bf 0%, #70dfc9 100%);
+ transform: translateY(-2px);
+ box-shadow: 0 4px 8px rgba(78, 201, 176, 0.4);
+}
+
+.no-options {
+ padding: 20px;
+ text-align: center;
+ color: #858585;
+ font-style: italic;
+ font-size: 13px;
+ background-color: #2d2d30;
+ border-radius: 6px;
+ border: 1px dashed #3e3e42;
+}
+
+.option-item {
+ margin-bottom: 16px;
+ padding: 16px;
+ background: linear-gradient(135deg, #2d2d30 0%, #252526 100%);
+ border: 1px solid #3e3e42;
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.option-item:hover {
+ border-color: #4ec9b0;
+ box-shadow: 0 4px 12px rgba(78, 201, 176, 0.2);
+}
+
+.option-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 12px;
+ padding-bottom: 8px;
+ border-bottom: 1px solid #3e3e42;
+}
+
+.option-number {
+ font-size: 12px;
+ font-weight: 700;
+ color: #4ec9b0;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+.remove-option-btn {
+ background: #ea4335;
+ color: #ffffff;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 14px;
+ width: 24px;
+ height: 24px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.2s;
+}
+
+.remove-option-btn:hover {
+ background: #f55a4e;
+ transform: scale(1.1);
+}
+
+.option-fields {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+
+/* Choices Section */
+.choices-section {
+ margin-top: 12px;
+ padding: 12px;
+ background: rgba(14, 99, 156, 0.1);
+ border: 1px solid rgba(14, 99, 156, 0.3);
+ border-radius: 6px;
+}
+
+.choices-section label {
+ display: block;
+ margin-bottom: 8px;
+ font-size: 12px;
+ font-weight: 600;
+ color: #1177bb;
+}
+
+.add-choice-btn {
+ padding: 6px 12px;
+ background: linear-gradient(135deg, #0e639c 0%, #1177bb 100%);
+ color: #ffffff;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 11px;
+ font-weight: 600;
+ margin-bottom: 8px;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ box-shadow: 0 2px 4px rgba(14, 99, 156, 0.3);
+}
+
+.add-choice-btn:hover {
+ background: linear-gradient(135deg, #1177bb 0%, #1a8dd4 100%);
+ transform: translateY(-1px);
+ box-shadow: 0 3px 6px rgba(14, 99, 156, 0.4);
+}
+
+.choice-item {
+ display: flex;
+ gap: 8px;
+ margin-bottom: 8px;
+ align-items: center;
+}
+
+.choice-input {
+ flex: 1;
+ padding: 6px 10px;
+ background-color: #2d2d30;
+ border: 1px solid #3e3e42;
+ color: #cccccc;
+ border-radius: 4px;
+ font-size: 12px;
+}
+
+.choice-input:focus {
+ outline: none;
+ border-color: #1177bb;
+ background-color: #252526;
+}
+
+.remove-choice-btn {
+ background: #858585;
+ color: #ffffff;
+ border: none;
+ border-radius: 3px;
+ cursor: pointer;
+ font-size: 12px;
+ width: 20px;
+ height: 20px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.2s;
+ flex-shrink: 0;
+}
+
+.remove-choice-btn:hover {
+ background: #ea4335;
+ transform: scale(1.1);
+}
+
.editor-section {
flex: 1;
display: flex;
@@ -710,4 +1391,384 @@ onUnmounted(() => {
background: #424242;
border-radius: 5px;
}
+
+/* === ESTILOS PARA ESTRUCTURA DE COMANDOS SLASH === */
+.structure-selector {
+ display: flex;
+ gap: 8px;
+ flex-wrap: wrap;
+}
+
+.structure-btn {
+ padding: 10px 18px;
+ background: linear-gradient(135deg, #2d2d30 0%, #252526 100%);
+ color: #cccccc;
+ border: 2px solid #3e3e42;
+ border-radius: 8px;
+ cursor: pointer;
+ font-size: 13px;
+ font-weight: 600;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
+ display: flex;
+ align-items: center;
+ gap: 6px;
+}
+
+.structure-btn:hover {
+ border-color: #4ec9b0;
+ background: linear-gradient(135deg, #353538 0%, #2d2d30 100%);
+ transform: translateY(-2px);
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
+}
+
+.structure-btn.active {
+ background: linear-gradient(135deg, #4ec9b0 0%, #5fd4bf 100%);
+ color: #1e1e1e;
+ border-color: #4ec9b0;
+ box-shadow: 0 4px 12px rgba(78, 201, 176, 0.4);
+ transform: translateY(-1px);
+}
+
+.structure-info {
+ margin: 16px 0;
+ padding: 16px 20px;
+ background: linear-gradient(135deg, rgba(14, 99, 156, 0.15) 0%, rgba(78, 201, 176, 0.08) 100%);
+ border-left: 4px solid #4ec9b0;
+ border-radius: 8px;
+ font-size: 13px;
+ color: #e0e0e0;
+ line-height: 1.7;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
+}
+
+.structure-info strong {
+ color: #4ec9b0;
+ font-weight: 700;
+ font-size: 14px;
+}
+
+.structure-info code {
+ background: linear-gradient(135deg, #2d2d30 0%, #252526 100%);
+ padding: 3px 8px;
+ border-radius: 4px;
+ font-family: 'Consolas', monospace;
+ font-size: 12px;
+ color: #1177bb;
+ border: 1px solid #3e3e42;
+ white-space: nowrap;
+}
+
+.section-actions {
+ margin-bottom: 20px;
+ display: flex;
+ justify-content: flex-start;
+}
+
+/* === SUBCOMANDOS === */
+.subcommand-item {
+ margin-bottom: 24px;
+ padding: 24px;
+ background: linear-gradient(135deg, #2d2d30 0%, #252526 100%);
+ border: 2px solid rgba(17, 119, 187, 0.4);
+ border-radius: 12px;
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.subcommand-item:hover {
+ border-color: rgba(17, 119, 187, 0.6);
+ box-shadow: 0 6px 20px rgba(17, 119, 187, 0.3);
+ transform: translateY(-2px);
+}
+
+.subcommand-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 20px;
+ padding-bottom: 16px;
+ border-bottom: 2px solid rgba(17, 119, 187, 0.3);
+}
+
+.subcommand-badge {
+ font-size: 14px;
+ font-weight: 700;
+ color: #1177bb;
+ text-transform: uppercase;
+ letter-spacing: 0.8px;
+ background: linear-gradient(135deg, rgba(17, 119, 187, 0.25) 0%, rgba(14, 99, 156, 0.15) 100%);
+ padding: 8px 16px;
+ border-radius: 8px;
+ box-shadow: 0 2px 6px rgba(17, 119, 187, 0.2);
+}
+
+.subcommand-options {
+ margin-top: 20px;
+ padding: 20px;
+ background: rgba(30, 30, 30, 0.6);
+ border-radius: 10px;
+ border: 1px solid #3e3e42;
+ box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.3);
+}
+
+.options-header-small {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 16px;
+}
+
+.options-header-small label {
+ font-size: 13px;
+ font-weight: 600;
+ color: #4ec9b0;
+ margin: 0;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+.add-sub-option-btn {
+ padding: 8px 16px;
+ background: linear-gradient(135deg, #0e639c 0%, #1177bb 100%);
+ color: #ffffff;
+ border: none;
+ border-radius: 6px;
+ cursor: pointer;
+ font-size: 12px;
+ font-weight: 600;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ box-shadow: 0 2px 6px rgba(17, 119, 187, 0.3);
+}
+
+.add-sub-option-btn:hover {
+ background: linear-gradient(135deg, #1177bb 0%, #1a8dd4 100%);
+ transform: translateY(-2px);
+ box-shadow: 0 4px 10px rgba(17, 119, 187, 0.4);
+}
+
+.no-sub-options {
+ padding: 20px;
+ text-align: center;
+ color: #858585;
+ font-style: italic;
+ font-size: 13px;
+ background: linear-gradient(135deg, #252526 0%, #1e1e1e 100%);
+ border-radius: 8px;
+ border: 2px dashed #3e3e42;
+}
+
+.sub-option-item {
+ margin-bottom: 16px;
+ padding: 16px;
+ background: linear-gradient(135deg, #2d2d30 0%, #252526 100%);
+ border: 1px solid #3e3e42;
+ border-radius: 8px;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.sub-option-item:hover {
+ border-color: #1177bb;
+ box-shadow: 0 4px 10px rgba(17, 119, 187, 0.2);
+}
+
+.sub-option-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 12px;
+ font-size: 12px;
+ font-weight: 600;
+ color: #1177bb;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+.remove-sub-btn {
+ background: linear-gradient(135deg, #858585 0%, #6a6a6a 100%);
+ color: #ffffff;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 14px;
+ width: 24px;
+ height: 24px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
+}
+
+.remove-sub-btn:hover {
+ background: linear-gradient(135deg, #ea4335 0%, #f55a4e 100%);
+ transform: scale(1.15);
+ box-shadow: 0 3px 8px rgba(234, 67, 53, 0.4);
+}
+
+.checkbox-label-inline.small {
+ padding: 8px 12px;
+ margin-top: 0;
+ font-size: 12px;
+}
+
+.checkbox-label-inline.tiny {
+ padding: 6px 8px;
+ margin: 0;
+ min-width: auto;
+}
+
+/* === GRUPOS === */
+.group-item {
+ margin-bottom: 28px;
+ padding: 28px;
+ background: linear-gradient(135deg, #2d2d30 0%, #252526 100%);
+ border: 2px solid rgba(255, 152, 0, 0.4);
+ border-radius: 12px;
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.group-item:hover {
+ border-color: rgba(255, 152, 0, 0.6);
+ box-shadow: 0 6px 20px rgba(255, 152, 0, 0.3);
+ transform: translateY(-2px);
+}
+
+.group-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 20px;
+ padding-bottom: 16px;
+ border-bottom: 2px solid rgba(255, 152, 0, 0.3);
+}
+
+.group-badge {
+ font-size: 14px;
+ font-weight: 700;
+ color: #ff9800;
+ text-transform: uppercase;
+ letter-spacing: 0.8px;
+ background: linear-gradient(135deg, rgba(255, 152, 0, 0.25) 0%, rgba(255, 152, 0, 0.15) 100%);
+ padding: 8px 16px;
+ border-radius: 8px;
+ box-shadow: 0 2px 6px rgba(255, 152, 0, 0.2);
+}
+
+.group-subcommands {
+ margin-top: 20px;
+ padding: 20px;
+ background: rgba(30, 30, 30, 0.6);
+ border-radius: 10px;
+ border: 1px solid rgba(255, 152, 0, 0.2);
+ box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.3);
+}
+
+.group-subcommand-item {
+ margin-bottom: 16px;
+ padding: 16px;
+ background: linear-gradient(135deg, #2d2d30 0%, #252526 100%);
+ border: 1px solid #3e3e42;
+ border-radius: 8px;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.group-subcommand-item:hover {
+ border-color: #ff9800;
+ box-shadow: 0 4px 10px rgba(255, 152, 0, 0.2);
+}
+
+/* === OPCIONES ANIDADAS === */
+.nested-options {
+ margin-top: 16px;
+ padding: 16px;
+ background: rgba(14, 99, 156, 0.08);
+ border-radius: 8px;
+ border: 1px solid rgba(14, 99, 156, 0.3);
+}
+
+.add-nested-btn {
+ padding: 6px 14px;
+ background: linear-gradient(135deg, #0e639c 0%, #1177bb 100%);
+ color: #ffffff;
+ border: none;
+ border-radius: 6px;
+ cursor: pointer;
+ font-size: 11px;
+ font-weight: 600;
+ margin-bottom: 12px;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ box-shadow: 0 2px 4px rgba(14, 99, 156, 0.3);
+}
+
+.add-nested-btn:hover {
+ background: linear-gradient(135deg, #1177bb 0%, #1a8dd4 100%);
+ transform: translateY(-1px);
+ box-shadow: 0 3px 6px rgba(14, 99, 156, 0.4);
+}
+
+.nested-option-item {
+ display: flex;
+ gap: 8px;
+ margin-bottom: 10px;
+ align-items: center;
+ padding: 8px;
+ background: rgba(45, 45, 48, 0.5);
+ border-radius: 6px;
+ border: 1px solid #3e3e42;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.nested-option-item:hover {
+ border-color: #1177bb;
+ background: rgba(45, 45, 48, 0.8);
+}
+
+.small-input {
+ padding: 8px 10px;
+ background: linear-gradient(135deg, #252526 0%, #1e1e1e 100%);
+ border: 1px solid #3e3e42;
+ color: #cccccc;
+ border-radius: 6px;
+ font-size: 12px;
+ min-width: 90px;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.small-input:focus {
+ outline: none;
+ border-color: #1177bb;
+ background: #252526;
+ box-shadow: 0 0 0 2px rgba(17, 119, 187, 0.2);
+}
+
+.small-input.flex-grow {
+ flex: 1;
+}
+
+.remove-nested-btn {
+ background: linear-gradient(135deg, #858585 0%, #6a6a6a 100%);
+ color: #ffffff;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 12px;
+ width: 22px;
+ height: 22px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
+}
+
+.remove-nested-btn:hover {
+ background: linear-gradient(135deg, #ea4335 0%, #f55a4e 100%);
+ transform: scale(1.1);
+ box-shadow: 0 3px 6px rgba(234, 67, 53, 0.4);
+}