document.addEventListener("DOMContentLoaded", function() { // Select the latest-post container const latestPosts = document.querySelector('.latest-post'); if (latestPosts) { // Find the grid container inside const postsContainer = latestPosts.querySelector('.elementor-posts-container'); if (postsContainer) { // Set role="list" on the container postsContainer.setAttribute('role', 'list'); // Fix each article inside const articles = postsContainer.querySelectorAll('article.elementor-post'); articles.forEach(article => { // Ensure role="listitem" article.setAttribute('role', 'listitem'); // Fix thumbnail links tabindex const thumbLink = article.querySelector('.elementor-post__thumbnail__link'); if (thumbLink) { thumbLink.setAttribute('tabindex', '0'); } }); } } }); (function () { function cleanAltText(raw) { if (!raw) return ''; // Remove all # characters completely let cleaned = raw.replace(/#/g, ''); // collapse excessive whitespace cleaned = cleaned.replace(/\s{2,}/g, ' ').trim(); // remove leading/trailing punctuation or separators cleaned = cleaned.replace(/^[\s\-\:\|]+|[\s\-\:\|]+$/g, ''); // if nothing meaningful remains if (!cleaned || cleaned.length < 3) return ''; // keep under 125 chars return cleaned.slice(0, 125).trim(); } function processImg(img) { if (!img || !(img instanceof Element)) return; const feedRoot = document.getElementById('sb-tiktok-feeds-container-3'); if (!feedRoot || !feedRoot.contains(img)) return; const existingAria = img.getAttribute('aria-label'); if (existingAria && existingAria.trim().length) return; const alt = (img.getAttribute('alt') || '').trim(); const cleaned = cleanAltText(alt); if (cleaned) { img.setAttribute('aria-label', cleaned); } else if (alt && alt.length) { img.setAttribute('aria-label', 'TikTok post thumbnail'); } else { img.setAttribute('aria-label', 'TikTok post thumbnail'); } } function processAll() { const feedRoot = document.getElementById('sb-tiktok-feeds-container-3'); if (!feedRoot) return; feedRoot.querySelectorAll('img.sb-post-item-image').forEach(processImg); } document.addEventListener('DOMContentLoaded', processAll); window.addEventListener('load', processAll); const root = document.getElementById('sb-tiktok-feeds-container-3'); if (root) { const mo = new MutationObserver((mutations) => { for (const m of mutations) { m.addedNodes.forEach(node => { if (node.nodeType !== 1) return; if (node.matches?.('img.sb-post-item-image')) { processImg(node); } else { node.querySelectorAll?.('img.sb-post-item-image').forEach(processImg); } }); } }); mo.observe(root, { childList: true, subtree: true }); } })(); document.addEventListener("DOMContentLoaded", function () { // Find all links with "Learn more" const learnMoreLinks = document.querySelectorAll('a[href*="/practice-areas/"]:not([aria-label])'); learnMoreLinks.forEach(link => { // Find the closest parent container (loop item) const loopItem = link.closest('.e-loop-item'); if (loopItem) { // Find the heading (h3) inside that loop item const heading = loopItem.querySelector('h3.elementor-heading-title'); if (heading) { // Set aria-label based on the heading text link.setAttribute('aria-label', `Learn more about ${heading.textContent.trim()}`); } } }); }); // document.addEventListener('DOMContentLoaded', function() { // const owlDots = document.querySelectorAll('.owl-carousel .owl-dot'); // owlDots.forEach((dot, index) => { // // Add aria-label for accessibility // dot.setAttribute('aria-label', `Go to slide ${index + 1}`); // dot.setAttribute('role', 'button'); // // Set aria-current for active slide // if (dot.classList.contains('active')) { // dot.setAttribute('aria-current', 'true'); // } else { // dot.setAttribute('aria-current', 'false'); // } // // Optional: update aria-current dynamically on click // dot.addEventListener('click', () => { // owlDots.forEach(d => d.setAttribute('aria-current', 'false')); // dot.setAttribute('aria-current', 'true'); // }); // }); // }); // document.addEventListener("DOMContentLoaded", function() { // const owlDotsContainers = document.querySelectorAll('.sb-feed-posts .owl-dots'); // owlDotsContainers.forEach(container => { // const buttons = container.querySelectorAll('button.owl-dot'); // buttons.forEach((btn, index) => { // // Ensure aria-label exists // if (!btn.hasAttribute('aria-label') || btn.getAttribute('aria-label') === '') { // btn.setAttribute('aria-label', `Go to slide ${index + 1}`); // } // // Ensure role="button" // btn.setAttribute('role', 'button'); // // Set aria-current based on active class // btn.setAttribute('aria-current', btn.classList.contains('active') ? 'true' : 'false'); // }); // }); // }); // document.addEventListener("DOMContentLoaded", function() { function updateOwlDots(containerSelector = '.owl-dots') { const owlDotsContainers = document.querySelectorAll(containerSelector); owlDotsContainers.forEach(container => { const buttons = container.querySelectorAll('button.owl-dot'); buttons.forEach((btn, index) => { // Ensure aria-label exists if (!btn.hasAttribute('aria-label') || btn.getAttribute('aria-label') === '') { btn.setAttribute('aria-label', `Go to slide ${index + 1}`); } // Ensure role="button" btn.setAttribute('role', 'button'); // Set aria-current based on active class btn.setAttribute('aria-current', btn.classList.contains('active') ? 'true' : 'false'); }); }); } // Initial run updateOwlDots(); // Optional: observe dynamically added carousels const observer = new MutationObserver(() => updateOwlDots()); observer.observe(document.body, { childList: true, subtree: true }); }); // Add aria-labels to specific links document.addEventListener("DOMContentLoaded", function() { // For the "back to top" link const topLink = document.querySelector('a.elementor-icon[href="#top"]'); if (topLink) { topLink.setAttribute('aria-label', 'Back to top'); } // For the cancel link const cancelLink = document.querySelector('a.sbr_lb-cancel'); if (cancelLink) { cancelLink.setAttribute('aria-label', 'Cancel'); } // For the close link const closeLink = document.querySelector('a.sbr_lb-close'); if (closeLink) { closeLink.setAttribute('aria-label', 'Close'); } }); document.addEventListener("DOMContentLoaded", function() { // Find all dialogs const dialogs = document.querySelectorAll('div[role="dialog"]'); dialogs.forEach((dialog, index) => { // Skip if already has aria-label or aria-labelledby if (!dialog.hasAttribute('aria-label') && !dialog.hasAttribute('aria-labelledby')) { // Create a unique label const labelText = "Dialog window " + (index + 1); // Option 1: Use aria-label dialog.setAttribute('aria-label', labelText); // Optional: Log for debugging console.log(`Added aria-label="${labelText}" to dialog:`, dialog); } }); }); document.addEventListener("DOMContentLoaded", function() { // Select all loop items with our-team-loop class const teamItems = document.querySelectorAll('.our-team-loop'); teamItems.forEach(item => { // Find the heading link inside the item const headingLink = item.querySelector('.elementor-widget-heading h3 a'); if (!headingLink) return; // Skip if no heading link const personName = headingLink.textContent.trim(); if (!personName) return; // Skip if heading has no text // Find the "Read more" button inside this item const readMoreButton = item.querySelector('.elementor-button-link'); if (readMoreButton) { // Set the aria-label readMoreButton.setAttribute('aria-label', `Read more about ${personName}`); } }); }); document.addEventListener("DOMContentLoaded", function () { // Find all immigration loop items const items = document.querySelectorAll(".immigration-loop"); items.forEach(item => { // Get title from .elementor-icon-list-text const titleEl = item.querySelector(".elementor-icon-list-text"); if (!titleEl) return; const title = titleEl.textContent.trim(); if (!title) return; // Get the Read More button const readMore = item.querySelector("a.elementor-button.elementor-button-link"); if (!readMore) return; // Add aria-label readMore.setAttribute("aria-label", `Read more about ${title}`); }); }); (function () { // Run after DOM ready function initSkipLink() { // Find any skip link that looks like "skip to content" const skip = document.querySelector('a.skip-link[href^="#"], a[href^="#content"].skip-link, a.skip-link.screen-reader-text[href^="#"]'); if (!skip) return; // Ensure it's the very first focusable thing for keyboard users: // move it to be the first child of if it's not already first if (document.body.firstElementChild !== skip) { document.body.insertBefore(skip, document.body.firstElementChild); } // Get target id from href (strip leading '#') const targetId = (skip.getAttribute('href') || '').replace(/^#/, ''); if (!targetId) return; // Ensure the target exists; if not, try to find a good main candidate and give it the id let target = document.getElementById(targetId); if (!target) { target = document.querySelector('main, [role="main"], #primary, #content, .site-main'); if (target) { target.id = targetId; } else { // As a last resort create a focus target at top of body so link doesn't break const fallback = document.createElement('div'); fallback.id = targetId; document.body.appendChild(fallback); target = fallback; } } // Make sure target is programmatically focusable if (!target.hasAttribute('tabindex')) { target.setAttribute('tabindex', '-1'); } // Ensure activation moves keyboard focus into the target skip.addEventListener('click', function (e) { // Allow default anchor behavior, but also ensure focus lands on target // Use setTimeout to let the browser perform the fragment jump first setTimeout(function () { const t = document.getElementById(targetId); if (t) { try { t.focus({ preventScroll: false }); } catch (ex) { // fallback for older browsers t.focus(); } } }, 0); }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initSkipLink); } else { initSkipLink(); } })(); (function () { const tabSelector = '.e-n-tabs-heading'; const accordionSelector = '.e-n-accordion'; function fixTabindexes(container) { if (!container) return; container.querySelectorAll('[tabindex="-1"]').forEach(el => { el.setAttribute('tabindex', '0'); }); } function initWatcher(container) { if (!container || container.__fixed) return; // Initial fix fixTabindexes(container); // Fix again on click (Elementor updates attrs on click) container.addEventListener('click', () => fixTabindexes(container)); // Watch DOM changes inside container const observer = new MutationObserver((mutations) => { for (const m of mutations) { if ( m.type === 'childList' || (m.type === 'attributes' && m.attributeName === 'tabindex') ) { fixTabindexes(container); break; } } }); observer.observe(container, { childList: true, subtree: true, attributes: true, attributeFilter: ['tabindex'] }); container.__fixed = true; } function initAll() { document.querySelectorAll(tabSelector).forEach(initWatcher); document.querySelectorAll(accordionSelector).forEach(initWatcher); } // Run immediately initAll(); // Also watch entire page if tabs/accordions load later const rootObserver = new MutationObserver(initAll); rootObserver.observe(document.documentElement, { childList: true, subtree: true }); // Extra: run after page fully loads if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initAll); } })(); // Function to fix ARIA role function fixSwiperRoles() { const slides = document.querySelectorAll('.swiper-slide[role="group"]'); slides.forEach(slide => { slide.setAttribute('role', 'listitem'); }); } // Fix existing slides on page load document.addEventListener('DOMContentLoaded', () => { fixSwiperRoles(); }); // Optional: Observe for new slides added dynamically (like in Swiper) const swiperContainer = document.querySelector('.swiper-wrapper'); if (swiperContainer) { const observer = new MutationObserver(() => { fixSwiperRoles(); }); observer.observe(swiperContainer, { childList: true, subtree: true }); } document.addEventListener("DOMContentLoaded", function() { const iconLinks = document.querySelectorAll('a.elementor-icon'); iconLinks.forEach(link => { // Check if link has no text content and no aria-label if (!link.textContent.trim() && !link.hasAttribute('aria-label')) { // Set a descriptive label, e.g., based on href or context if (link.getAttribute('href') === '#top') { link.setAttribute('aria-label', 'Back to top'); } else { link.setAttribute('aria-label', 'Icon link'); } } }); });

immigration options

U.S. Immigration Law Counsel® offers a full suite of immigration law services. Whether you have concerns for your own immigration status, would like to help friends or family to immigrate, or are interested in hiring a foreign worker, our team of immigration lawyers has the expertise to guide you through the process.

We deal with the Government so you don't have to.

Immigration matters tend to be complex and overwhelming. At U.S. Immigration Law Counsel®, our mission is to maximize your likelihood of obtaining a successful outcome by employing all available legal tools, knowledge, and creativity throughout the process. Our deep understanding of immigration law ensures that your case receives the expert attention it deserves, allowing you to focus on what matters most.

We believe in a personalized approach to helping you achieve your goals.

Success Metrics

White Google Text with 5 Stars | Trusted Immigration Lawyers | U.S. Immigration Law Counsel
White Instagram Text with Logo | Trusted VAWA Immigration Lawyers | U.S. Immigration Law Counsel
307K+ Followers
White Facebook Logo, Text & Five Stars | Skilled Immigration Lawyers | U.S. Immigration Law Counsel
White TikTok Text with Logo | U Visa Crime Victim Legal Support | U.S. Immigration Law Counsel
484.9K+ Followers

Our Dream Team

Successful Cases
0 K+
Years of Combined
Legal Experience
0 +
Social Following
100 K+
Client Reviews
100 +

US-ILC MEDIA APPEARANCES

White Dr. Phil Logo | Green Card Marriage Interview Help | U.S. Immigration Law Counsel
WPLG Local 10 Colored Logo | Experienced H1B Visa Attorneys | U.S. Immigration Law Counsel
Colored 90 Days Fiance Logo | Green Card Marriage Interview Help | U.S. Immigration Law Counsel
Fox News Colored Logo | Skilled Immigration Appeal Lawyers | U.S. Immigration Law Counsel
CBS-News-Logo
Inside-South-Florida-Logo-scaled-1

WPLG Local 10

South Florida immigration attorneys analyze Trump's 'mass deportations' strategy.

Joining co-hosts Glenna Milberg and Michael Putney are Marc Caputo, Chris Smith, and Saman Movassaghi-Gonzalez.​

Just days after lawmakers toured "Alligator Alcatraz" for the first time, Local 10 News is working to uncover who exactly is being detained at the facility.

Immigration Attorney Saman provides further insight on the legality and increase of third country removals.

Dr. Phil Feature

Thousands of asylum seekers from the Mexican border arrived in Washington, D.C. and New York City on buses sent by the governors of Texas and Arizona. The mayors of these cities asked for federal assistance because they believe this is a humanitarian crisis.

CBS News

A 10-year-old Cuban girl was preparing to join her mother in Miami. Then Trump's travel ban took effect.

Flippin' Friday

Immigration Attorney Saman Movassaghi Gonzalez live Interview on Flippin Friday show with Dj Kharma Friday, September 24, 2021

Rosen Injury Law Podcast

In this episode of Law with Eric, Fort Lauderdale Car Accident Lawyer Eric Rosen sits down with immigration attorney Saman Movassaghi Gonzalez, Esq. to discuss how she built a thriving law firm where lawyers choose to leave their own practices to join her team.

Inside South Florida

Attorney Saman Movassaghi Gonzalez, Esq. breaks down immigration with expertise and energy.

Immigration law expert breaks down Florida's shifting policies amid rising concerns.

Understanding Visa Overstays: Immigration Attorney Shares Key Insights on What Happens Next

When Should You Hire an Immigration Attorney? Here's What You Need to Know

What You Need to Know About REAL ID and Domestic Travel for Undocumented Immigrants

Navigating Immigration Benefits: Why Now Might Still Be the Right Time to Apply

Immigration Attorney Saman Movassaghi Gonzalez Explains Non-Marriage Pathways to Residency

Applying for Immigration Benefits With a Criminal History

Preparing for USCIS Interviews with Attorney Saman

Breaking Down USCIS Waivers with Legal Expert Saman Movassaghi Gonzalez

New Florida Law Cracks Down on Immigration Scams

What to Do If a Loved One Is Detained by Immigration Officials

Immigration Minefield: When Good Intentions Go Wrong

Immigration Attorney Saman Breaks Down Why Case Analysis Is the Key to a Successful Application

Court TV

Attorney Saman Movassaghi Gonzalez, Esq. breaks down what can happen when non-citizens are sentenced to life in prison in the United States.

90 Day Fiancé

Saman on 90 Day Fiancé: What Now

90 Day Diaries

Saman on 90 Day Diaries

The American Dream: In the Eyes of Immigrants Podcast

Immigration Law & Social Media: How Attorney Saman Movassaghi Embraces Social Media to Help Clients

we are committed to serving each client with the compassion and respect they deserve.

At U.S. Immigration Law Counsel®, we are committed to serving each client with the compassion and respect they deserve. Our immigration law attorneys listen carefully to your specific needs so we can identify the most strategic and successful path forward. We strive to meet and exceed your expectations at every turn, helping you achieve your goals. Whether you're navigating immigration law or seeking an immigration attorney near Florida, we are committed to going the extra mile to exceed your expectations and help you achieve a successful outcome.

FREQUENTLY ASKED QUESTIONS

Scheduling Strategy Sessions

How can I schedule a strategy session?
Online on our website or by calling the office. Whether you’re seeking advice from a local immigration attorney near Florida, want to use our national remote services, or need more information, we’re here to assist you. 

What information will I need to provide when booking a strategy session?
Your Name, Phone Number, Email, Referral, Reason for Strategy Session, and Payment.

Are there specific hours for scheduling my appointment?
Online: 24/7; By Phone: 7 am-9 pm Monday – Friday; and 9 am-5:30 pm Saturday – Sunday

Are strategy sessions in-person, over the phone, or virtual?
All three options are available to you.

Will I be charged a strategy session fee, and how will it be handled?
$300 for a regular strategy session, and by an agent or online.

Will somebody contact me prior to the strategy session?
Yes, we have a dedicated Pre-consultation Department that will contact you to get all your personal information and request documents before your scheduled strategy session to prepare our one of immigration lawyers beforehand on the details of your situation. Be prepared to provide details about your immigration matter to the pre-consultation associate, including relevant dates and actions taken.

What documents should I send?
Following your pre-consultation session, the associate will email instructions to you for sending us documents. You will be asked to provide documents for your immigration lawyer to review such as identity documents, biographic documents, previous immigration filings, and/or criminal documents. The associate will also request other necessary documents from you on a case-by-case basis, prior to the strategy session.

How should I submit my documents before the appointment?
Send to leads@us-ilc.com

How can I pay my strategy session fees and other service fees?
Online payment, Zelle, Venmo, PayPal, in-person cash.

Are there payment plans available?
Not for a strategy session fee. There is a payment plan once a contract is signed.

What is the refund policy for the strategy session fees?
The $300.00 charged for each strategy session is a Nonrefundable Strategy Session fee. This fee will be credited to your case if you choose to proceed with our legal services within 7 days of your strategy session.

join our social media family

Follow us on your favorite social media platforms. We are active on TikTok, Instagram, Facebook, and YouTube. Our Immigration Lawyers aim is to enlighten and educate followers about trending immigration topics, while bringing them thoughtful and engaging content.

E-2 Visa Investment Funds: How to Prove the Lawful Source and Path of Your Money

Do you want to apply for an E-2 visa so that you can come to the U.S.? If so, here is everything you need to know about the E-2 visa source of funds requirement and what this means for your application.

A bunch of wooden letter blocks that spell petition

What Evidence Helps Strengthen an EB-1A Extraordinary Ability Petition?

Do you want to come to the U.S. with an EB-1A extraordinary ability green card? If so, here is everything you need to know about the EB-1A requirements and the evidence you need to provide.

Two people sitting at a desk with an American Flag on it

How Name Changes Are Handled During the U.S. Citizenship Process

Do you need to go through a name change during the citizenship process? If so, here is everything you need to know about requesting a name change and when this is possible.