|
@@ -0,0 +1,450 @@
|
|
|
|
|
+<template>
|
|
|
|
|
+ <q-page class="bg-page q-pb-xl">
|
|
|
|
|
+ <div class="payments-header row items-center bg-white">
|
|
|
|
|
+ <q-space />
|
|
|
|
|
+ <span class="text-subtitle1 text-weight-bold gradient-diarista">{{ $t('provider.payments.title') }}</span>
|
|
|
|
|
+ <q-space />
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="q-mx-md q-mt-md">
|
|
|
|
|
+ <q-card class="earnings-card bg-primary" :flat="false" style="cursor: pointer;" @click="earningsExpanded = !earningsExpanded">
|
|
|
|
|
+ <q-card-section class="q-pa-md">
|
|
|
|
|
+ <div class="row items-center no-wrap">
|
|
|
|
|
+ <q-icon name="mdi-currency-usd" size="22px" color="white" class="q-mr-sm" />
|
|
|
|
|
+ <span class="text-body1 text-weight-bold text-white">{{ $t('provider.payments.total_earnings_title') }}</span>
|
|
|
|
|
+ <q-space />
|
|
|
|
|
+ <q-icon
|
|
|
|
|
+ :name="earningsExpanded ? 'mdi-chevron-up' : 'mdi-chevron-down'"
|
|
|
|
|
+ size="22px"
|
|
|
|
|
+ color="white"
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </q-card-section>
|
|
|
|
|
+
|
|
|
|
|
+ <q-slide-transition>
|
|
|
|
|
+ <div v-show="earningsExpanded" @click.stop>
|
|
|
|
|
+ <q-separator color="white" style="opacity: 0.2;" />
|
|
|
|
|
+ <q-card-section class="q-pa-md">
|
|
|
|
|
+ <div class="earnings-value text-white">
|
|
|
|
|
+ {{ formatCurrency(earningsByPeriod[selectedPeriod].value) }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="earnings-count text-white q-mb-md">
|
|
|
|
|
+ {{ $t('provider.payments.total_earnings_count', { count: earningsByPeriod[selectedPeriod].count }) }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="row q-gutter-x-xs q-mb-md">
|
|
|
|
|
+ <q-btn
|
|
|
|
|
+ v-for="period in periods"
|
|
|
|
|
+ :key="period.key"
|
|
|
|
|
+ dense
|
|
|
|
|
+ no-caps
|
|
|
|
|
+ :unelevated="selectedPeriod === period.key"
|
|
|
|
|
+ :flat="selectedPeriod !== period.key"
|
|
|
|
|
+ :rounded="true"
|
|
|
|
|
+ :color="selectedPeriod === period.key ? 'white' : undefined"
|
|
|
|
|
+ :text-color="selectedPeriod === period.key ? 'primary' : 'white'"
|
|
|
|
|
+ :label="$t(period.labelKey)"
|
|
|
|
|
+ class="period-btn"
|
|
|
|
|
+ @click.stop="selectedPeriod = period.key"
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="text-caption text-white" style="opacity: 0.8;">
|
|
|
|
|
+ {{ $t('provider.payments.total_earnings_days', { days: periodDays[selectedPeriod] }) }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </q-card-section>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </q-slide-transition>
|
|
|
|
|
+ </q-card>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="q-mx-md q-mt-sm">
|
|
|
|
|
+ <q-card class="balance-card bg-surface shadow-card" :flat="false">
|
|
|
|
|
+ <q-card-section class="q-pa-md">
|
|
|
|
|
+ <div class="row items-center no-wrap q-mb-xs">
|
|
|
|
|
+ <div class="col">
|
|
|
|
|
+ <div class="text-caption text-grey-6 text-weight-bold">{{ $t('provider.payments.available_balance_label') }}</div>
|
|
|
|
|
+ <div class="balance-value text-secondary">{{ formatCurrency(saldoDisponivel) }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <q-btn
|
|
|
|
|
+ unelevated
|
|
|
|
|
+ no-caps
|
|
|
|
|
+ color="secondary"
|
|
|
|
|
+ class="btn-withdraw"
|
|
|
|
|
+ :label="$t('provider.payments.btn_withdraw')"
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="text-caption text-grey-6">
|
|
|
|
|
+ {{ $t('provider.payments.available_balance_prefix') }}
|
|
|
|
|
+ <strong>{{ $t('provider.payments.available_balance_highlight') }}</strong>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </q-card-section>
|
|
|
|
|
+ </q-card>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="q-mx-md q-mt-sm">
|
|
|
|
|
+ <q-card class="balance-card bg-secondary shadow-card" :flat="false">
|
|
|
|
|
+ <q-card-section class="q-pa-md">
|
|
|
|
|
+ <div class="row items-center no-wrap">
|
|
|
|
|
+ <div class="col">
|
|
|
|
|
+ <div class="text-caption text-white">{{ $t('provider.payments.pending_balance_label') }}</div>
|
|
|
|
|
+ <div class="balance-value text-white">{{ formatCurrency(saldoALiberar) }}</div>
|
|
|
|
|
+ <div class="text-caption text-white q-mt-xs" style="opacity: 0.85;">
|
|
|
|
|
+ {{ $t('provider.payments.pending_balance_desc') }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <q-icon name="mdi-clock-outline" color="white" size="32px" style="opacity: 0.7;" />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </q-card-section>
|
|
|
|
|
+ </q-card>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="q-mx-md q-mt-md">
|
|
|
|
|
+ <div class="row items-center no-wrap q-mb-sm">
|
|
|
|
|
+ <span class="section-title gradient-diarista">{{ $t('provider.payments.services_title') }}</span>
|
|
|
|
|
+ <q-space />
|
|
|
|
|
+ <q-btn
|
|
|
|
|
+ flat
|
|
|
|
|
+ no-caps
|
|
|
|
|
+ color="primary"
|
|
|
|
|
+ size="sm"
|
|
|
|
|
+ :label="$t('provider.payments.btn_view_movements')"
|
|
|
|
|
+ icon-right="mdi-chevron-right"
|
|
|
|
|
+ @click="openMovimentacoes"
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <q-card
|
|
|
|
|
+ v-for="item in mockServices"
|
|
|
|
|
+ :key="item.id"
|
|
|
|
|
+ class="service-card bg-surface shadow-card q-mb-sm"
|
|
|
|
|
+ :flat="false"
|
|
|
|
|
+ >
|
|
|
|
|
+ <q-card-section class="q-pa-sm">
|
|
|
|
|
+ <div class="row no-wrap items-start q-gutter-x-sm">
|
|
|
|
|
+ <q-avatar size="44px">
|
|
|
|
|
+ <img :src="item.client_photo || defaultAvatar">
|
|
|
|
|
+ </q-avatar>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="col column">
|
|
|
|
|
+ <span class="text-name ellipsis">{{ item.client_name }}</span>
|
|
|
|
|
+ <div class="text-date-regular">
|
|
|
|
|
+ <span class="text-date-bold">{{ $t('provider.payments.services_date_service') }}</span>
|
|
|
|
|
+ {{ ' ' + formatShortDate(item.date) }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="text-date-regular">
|
|
|
|
|
+ <span class="text-date-bold">{{ $t('provider.payments.services_date_payment') }}</span>
|
|
|
|
|
+ {{ ' ' + formatShortDate(item.payment_date) }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="col-auto column items-end">
|
|
|
|
|
+ <q-chip
|
|
|
|
|
+ dense
|
|
|
|
|
+ square
|
|
|
|
|
+ :color="payStatusBgColor(item.payment_status)"
|
|
|
|
|
+ :text-color="payStatusTextColor(item.payment_status)"
|
|
|
|
|
+ :label="payStatusLabel(item.payment_status)"
|
|
|
|
|
+ class="status-chip"
|
|
|
|
|
+ />
|
|
|
|
|
+ <span class="text-price">{{ formatCurrency(item.total_amount) }}</span>
|
|
|
|
|
+ <span class="text-period">{{ periodLabel(item.period_type) }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="row items-center no-wrap q-mt-xs">
|
|
|
|
|
+ <span class="type-label" :class="item.schedule_type === 'custom' ? 'type-custom' : 'type-default'">
|
|
|
|
|
+ {{ item.schedule_type === 'custom' ? $t('provider.dashboard.agenda.type_custom') : $t('provider.dashboard.agenda.type_default') }}
|
|
|
|
|
+ </span>
|
|
|
|
|
+ <q-space />
|
|
|
|
|
+ <q-btn
|
|
|
|
|
+ v-if="item.payment_status === 'pending' && item.hours_until_service < 48"
|
|
|
|
|
+ unelevated
|
|
|
|
|
+ rounded
|
|
|
|
|
+ no-caps
|
|
|
|
|
+ color="secondary"
|
|
|
|
|
+ size="xs"
|
|
|
|
|
+ class="btn-anticipate"
|
|
|
|
|
+ :label="$t('provider.payments.btn_anticipate')"
|
|
|
|
|
+ @click="openAntecipacaoDialog(item)"
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </q-card-section>
|
|
|
|
|
+ </q-card>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </q-page>
|
|
|
|
|
+</template>
|
|
|
|
|
+
|
|
|
|
|
+<script setup>
|
|
|
|
|
+import { ref } from 'vue';
|
|
|
|
|
+import { useQuasar } from 'quasar';
|
|
|
|
|
+import { useI18n } from 'vue-i18n';
|
|
|
|
|
+import { formatCurrency } from 'src/helpers/utils';
|
|
|
|
|
+import { labelsPeriodTypes } from 'src/helpers/arraysOptions/labelsPeriodTypes.js';
|
|
|
|
|
+import MovimentacoesDialog from 'src/components/payments/MovimentacoesDialog.vue';
|
|
|
|
|
+import AntecipacaoDialog from 'src/components/payments/AntecipacaoDialog.vue';
|
|
|
|
|
+import AntecipacaoConfirmDialog from 'src/components/payments/AntecipacaoConfirmDialog.vue';
|
|
|
|
|
+
|
|
|
|
|
+const $q = useQuasar();
|
|
|
|
|
+const { t } = useI18n();
|
|
|
|
|
+
|
|
|
|
|
+const defaultAvatar = 'https://cdn.quasar.dev/img/avatar.png';
|
|
|
|
|
+const earningsExpanded = ref(false);
|
|
|
|
|
+const selectedPeriod = ref('week');
|
|
|
|
|
+
|
|
|
|
|
+const periods = [
|
|
|
|
|
+ { key: 'week', labelKey: 'provider.payments.period_week' },
|
|
|
|
|
+ { key: 'month', labelKey: 'provider.payments.period_month' },
|
|
|
|
|
+ { key: 'year', labelKey: 'provider.payments.period_year' },
|
|
|
|
|
+];
|
|
|
|
|
+
|
|
|
|
|
+const periodDays = { week: 7, month: 30, year: 365 };
|
|
|
|
|
+
|
|
|
|
|
+const earningsByPeriod = {
|
|
|
|
|
+ week: { value: 320.00, count: 5 },
|
|
|
|
|
+ month: { value: 1240.00, count: 22 },
|
|
|
|
|
+ year: { value: 8560.00, count: 187 },
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const saldoDisponivel = ref(420.00);
|
|
|
|
|
+const saldoALiberar = ref(180.00);
|
|
|
|
|
+
|
|
|
|
|
+const mockServices = ref([
|
|
|
|
|
+ {
|
|
|
|
|
+ id: 1,
|
|
|
|
|
+ client_name: 'Maria Silva',
|
|
|
|
|
+ client_photo: null,
|
|
|
|
|
+ date: '2026-05-12',
|
|
|
|
|
+ payment_date: '2026-05-17',
|
|
|
|
|
+ total_amount: 120.00,
|
|
|
|
|
+ period_type: 4,
|
|
|
|
|
+ schedule_type: 'default',
|
|
|
|
|
+ payment_status: 'pending',
|
|
|
|
|
+ hours_until_service: 20,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ id: 2,
|
|
|
|
|
+ client_name: 'Ana Souza',
|
|
|
|
|
+ client_photo: null,
|
|
|
|
|
+ date: '2026-05-15',
|
|
|
|
|
+ payment_date: '2026-05-20',
|
|
|
|
|
+ total_amount: 220.00,
|
|
|
|
|
+ period_type: 8,
|
|
|
|
|
+ schedule_type: 'custom',
|
|
|
|
|
+ payment_status: 'pending',
|
|
|
|
|
+ hours_until_service: 72,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ id: 3,
|
|
|
|
|
+ client_name: 'Carlos Lima',
|
|
|
|
|
+ client_photo: null,
|
|
|
|
|
+ date: '2026-05-10',
|
|
|
|
|
+ payment_date: '2026-05-15',
|
|
|
|
|
+ total_amount: 160.00,
|
|
|
|
|
+ period_type: 6,
|
|
|
|
|
+ schedule_type: 'default',
|
|
|
|
|
+ payment_status: 'paid',
|
|
|
|
|
+ hours_until_service: null,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ id: 4,
|
|
|
|
|
+ client_name: 'Julia Ferreira',
|
|
|
|
|
+ client_photo: null,
|
|
|
|
|
+ date: '2026-05-08',
|
|
|
|
|
+ payment_date: '2026-05-13',
|
|
|
|
|
+ total_amount: 100.00,
|
|
|
|
|
+ period_type: 4,
|
|
|
|
|
+ schedule_type: 'custom',
|
|
|
|
|
+ payment_status: 'anticipated',
|
|
|
|
|
+ hours_until_service: null,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ id: 5,
|
|
|
|
|
+ client_name: 'Pedro Alves',
|
|
|
|
|
+ client_photo: null,
|
|
|
|
|
+ date: '2026-05-05',
|
|
|
|
|
+ payment_date: '2026-05-10',
|
|
|
|
|
+ total_amount: 80.00,
|
|
|
|
|
+ period_type: 2,
|
|
|
|
|
+ schedule_type: 'default',
|
|
|
|
|
+ payment_status: 'cancelled',
|
|
|
|
|
+ hours_until_service: null,
|
|
|
|
|
+ },
|
|
|
|
|
+]);
|
|
|
|
|
+
|
|
|
|
|
+const parseLocalDate = (dateStr) => {
|
|
|
|
|
+ if (!dateStr) return null;
|
|
|
|
|
+ const s = String(dateStr);
|
|
|
|
|
+ const iso = s.match(/^(\d{4})-(\d{2})-(\d{2})/);
|
|
|
|
|
+ if (iso) return new Date(+iso[1], +iso[2] - 1, +iso[3]);
|
|
|
|
|
+ const dmy = s.match(/^(\d{2})\/(\d{2})\/(\d{4})/);
|
|
|
|
|
+ if (dmy) return new Date(+dmy[3], +dmy[2] - 1, +dmy[1]);
|
|
|
|
|
+ return null;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const formatShortDate = (dateStr) => {
|
|
|
|
|
+ const d = parseLocalDate(dateStr);
|
|
|
|
|
+ if (!d) return '';
|
|
|
|
|
+ return d.toLocaleDateString('pt-BR', { day: '2-digit', month: '2-digit' });
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const periodLabel = (periodType) => {
|
|
|
|
|
+ const found = labelsPeriodTypes.find(l => l.value == periodType);
|
|
|
|
|
+ return found ? t(found.label) : '';
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const payStatusLabel = (status) => {
|
|
|
|
|
+ const map = {
|
|
|
|
|
+ pending: t('provider.payments.pay_status_pending'),
|
|
|
|
|
+ paid: t('provider.payments.pay_status_paid'),
|
|
|
|
|
+ anticipated: t('provider.payments.pay_status_anticipated'),
|
|
|
|
|
+ cancelled: t('provider.payments.pay_status_cancelled'),
|
|
|
|
|
+ };
|
|
|
|
|
+ return map[status] ?? status;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const payStatusBgColor = (status) => {
|
|
|
|
|
+ const map = {
|
|
|
|
|
+ pending: 'warning-bg',
|
|
|
|
|
+ paid: 'success-bg',
|
|
|
|
|
+ anticipated: 'teal-bg',
|
|
|
|
|
+ cancelled: 'neutral-bg',
|
|
|
|
|
+ };
|
|
|
|
|
+ return map[status] ?? 'neutral-bg';
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const payStatusTextColor = (status) => {
|
|
|
|
|
+ const map = {
|
|
|
|
|
+ pending: 'warning',
|
|
|
|
|
+ paid: 'success',
|
|
|
|
|
+ anticipated: 'teal',
|
|
|
|
|
+ cancelled: 'status-finished',
|
|
|
|
|
+ };
|
|
|
|
|
+ return map[status] ?? 'text';
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const openMovimentacoes = () => {
|
|
|
|
|
+ $q.dialog({ component: MovimentacoesDialog });
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const openAntecipacaoDialog = (item) => {
|
|
|
|
|
+ $q.dialog({
|
|
|
|
|
+ component: AntecipacaoDialog,
|
|
|
|
|
+ componentProps: { service: item },
|
|
|
|
|
+ }).onOk(() => {
|
|
|
|
|
+ $q.dialog({ component: AntecipacaoConfirmDialog }).onOk(() => {
|
|
|
|
|
+ const svc = mockServices.value.find(s => s.id === item.id);
|
|
|
|
|
+ if (svc) svc.payment_status = 'anticipated';
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+};
|
|
|
|
|
+</script>
|
|
|
|
|
+
|
|
|
|
|
+<style scoped lang="scss">
|
|
|
|
|
+.payments-header {
|
|
|
|
|
+ padding-top: calc(env(safe-area-inset-top) + 12px);
|
|
|
|
|
+ padding-bottom: 12px;
|
|
|
|
|
+ box-shadow: 0px 1px 8px rgba(0, 0, 0, 0.08);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.earnings-card,
|
|
|
|
|
+.balance-card,
|
|
|
|
|
+.service-card {
|
|
|
|
|
+ border-radius: 12px;
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.earnings-value {
|
|
|
|
|
+ font-size: 28px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ line-height: 1.2;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.earnings-count {
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ opacity: 0.9;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.balance-value {
|
|
|
|
|
+ font-size: 20px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ line-height: 1.2;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.btn-withdraw {
|
|
|
|
|
+ border-radius: 8px !important;
|
|
|
|
|
+ font-size: 13px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ padding: 6px 18px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.period-btn {
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.type-label {
|
|
|
|
|
+ font-size: 10px;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ line-height: 1.2;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.type-default {
|
|
|
|
|
+ color: var(--q-primary);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.type-custom {
|
|
|
|
|
+ color: var(--q-secondary);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.text-name {
|
|
|
|
|
+ font-size: 13px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ color: #3a3a4a;
|
|
|
|
|
+ max-width: 130px;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ text-overflow: ellipsis;
|
|
|
|
|
+ white-space: nowrap;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.text-date-bold {
|
|
|
|
|
+ font-family: 'Inter', sans-serif;
|
|
|
|
|
+ font-size: 11px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ color: #3a3a4a;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.text-date-regular {
|
|
|
|
|
+ font-family: 'Inter', sans-serif;
|
|
|
|
|
+ font-size: 11px;
|
|
|
|
|
+ font-weight: 400;
|
|
|
|
|
+ color: #666;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.text-price {
|
|
|
|
|
+ font-size: 13px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ color: #3a3a4a;
|
|
|
|
|
+ white-space: nowrap;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.text-period {
|
|
|
|
|
+ font-size: 10px;
|
|
|
|
|
+ color: #888;
|
|
|
|
|
+ text-align: right;
|
|
|
|
|
+ white-space: nowrap;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.status-chip {
|
|
|
|
|
+ font-size: 11px !important;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ height: auto;
|
|
|
|
|
+ padding: 2px 2px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.btn-anticipate {
|
|
|
|
|
+ font-size: 11px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ padding: 3px 10px;
|
|
|
|
|
+}
|
|
|
|
|
+</style>
|